Add greaterThan and lessThan test framework assertions Relies on the two objects being compared being instances of Comparable<T>.
Project: http://git-wip-us.apache.org/repos/asf/brooklyn-server/repo Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-server/commit/c51c69a2 Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-server/tree/c51c69a2 Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-server/diff/c51c69a2 Branch: refs/heads/master Commit: c51c69a2612adf3d10ae16f01b4e20d1f37e6297 Parents: 1578088 Author: Sam Corbett <[email protected]> Authored: Thu Apr 6 10:16:54 2017 +0100 Committer: Sam Corbett <[email protected]> Committed: Thu Apr 6 10:20:15 2017 +0100 ---------------------------------------------------------------------- .../test/framework/TestFrameworkAssertions.java | 27 +++++++++++++++++++- .../framework/TestFrameworkAssertionsTest.java | 24 +++++++++++++++-- 2 files changed, 48 insertions(+), 3 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/c51c69a2/test-framework/src/main/java/org/apache/brooklyn/test/framework/TestFrameworkAssertions.java ---------------------------------------------------------------------- diff --git a/test-framework/src/main/java/org/apache/brooklyn/test/framework/TestFrameworkAssertions.java b/test-framework/src/main/java/org/apache/brooklyn/test/framework/TestFrameworkAssertions.java index c344557..68d51d8 100644 --- a/test-framework/src/main/java/org/apache/brooklyn/test/framework/TestFrameworkAssertions.java +++ b/test-framework/src/main/java/org/apache/brooklyn/test/framework/TestFrameworkAssertions.java @@ -66,6 +66,8 @@ public class TestFrameworkAssertions { public static final String IS_EMPTY = "isEmpty"; public static final String NOT_EMPTY = "notEmpty"; public static final String HAS_TRUTH_VALUE = "hasTruthValue"; + public static final String GREATER_THAN = "greaterThan"; + public static final String LESS_THAN = "lessThan"; public static final String UNKNOWN_CONDITION = "unknown condition"; public static class AssertionOptions { @@ -334,6 +336,10 @@ public class TestFrameworkAssertions { return null != actual && actual.toString().matches(expected.toString()); case HAS_TRUTH_VALUE: return isTrue(expected) == isTrue(actual); + case GREATER_THAN: + return canCompare(actual, expected) && compare(actual, expected) > 0; + case LESS_THAN: + return canCompare(actual, expected) && compare(actual, expected) < 0; default: return false; } @@ -343,10 +349,29 @@ public class TestFrameworkAssertions { // Everything but UNKNOWN_CONDITION. The conditions should really be an enum! Set<String> allConditions = ImmutableSet.of( IS_NULL, NOT_NULL, IS_EQUAL_TO, EQUAL_TO, EQUALS, NOT_EQUAL, - MATCHES, CONTAINS, IS_EMPTY, NOT_EMPTY, HAS_TRUTH_VALUE); + MATCHES, CONTAINS, IS_EMPTY, NOT_EMPTY, HAS_TRUTH_VALUE, + GREATER_THAN, LESS_THAN); return allConditions.contains(condition); } + /** @return True if actual and expected are both non-null instances of {@code Comparable<T>}. */ + private static boolean canCompare(@Nullable Object actual, @Nullable Object expected) { + return actual != null + && expected != null + && actual instanceof Comparable + && actual.getClass().equals(expected.getClass()); + } + + @SuppressWarnings("unchecked") + private static int compare(@Nullable Object actual, @Nullable Object expected) { + if (!canCompare(actual, expected)) { + throw new IllegalArgumentException("Arguments are not comparable: " + actual + ", " + expected); + } + Comparable a = (Comparable) actual; + Comparable e = (Comparable) expected; + return a.compareTo(e); + } + static void failAssertion(String target, String assertion, Object expected, Object actual) { throw new AssertionError(Joiner.on(' ').join( Objects.toString(target), http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/c51c69a2/test-framework/src/test/java/org/apache/brooklyn/test/framework/TestFrameworkAssertionsTest.java ---------------------------------------------------------------------- diff --git a/test-framework/src/test/java/org/apache/brooklyn/test/framework/TestFrameworkAssertionsTest.java b/test-framework/src/test/java/org/apache/brooklyn/test/framework/TestFrameworkAssertionsTest.java index 3999952..360f072 100644 --- a/test-framework/src/test/java/org/apache/brooklyn/test/framework/TestFrameworkAssertionsTest.java +++ b/test-framework/src/test/java/org/apache/brooklyn/test/framework/TestFrameworkAssertionsTest.java @@ -21,6 +21,7 @@ package org.apache.brooklyn.test.framework; import static org.testng.Assert.assertTrue; import java.util.Arrays; +import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -28,6 +29,7 @@ import java.util.Objects; import org.apache.brooklyn.test.Asserts; import org.apache.brooklyn.test.framework.TestFrameworkAssertions.AssertionOptions; +import org.apache.brooklyn.util.collections.MutableMap; import org.apache.brooklyn.util.text.Identifiers; import org.apache.brooklyn.util.time.Duration; import org.slf4j.Logger; @@ -71,6 +73,12 @@ public class TestFrameworkAssertionsTest { {"some-non-null-value", Arrays.asList(ImmutableMap.of("notEmpty", Boolean.TRUE))}, {"true", Arrays.asList(ImmutableMap.of("hasTruthValue", Boolean.TRUE))}, {"false", Arrays.asList(ImmutableMap.of("hasTruthValue", Boolean.FALSE))}, + + {25, Collections.singletonList(ImmutableMap.of("greaterThan", 24))}, + {"b", Collections.singletonList(ImmutableMap.of("greaterThan", "a"))}, + {24, Collections.singletonList(ImmutableMap.of("lessThan", 25))}, + {"a", Collections.singletonList(ImmutableMap.of("lessThan", "b"))}, + {"some-non-null-value", Arrays.asList(ImmutableMap.of("hasTruthValue", Boolean.FALSE))}, }; } @@ -137,6 +145,18 @@ public class TestFrameworkAssertionsTest { {"<html><body><h1>Im a H1 tag!</h1></body></html>", "contains", "quack", Arrays.asList(ImmutableMap.of("contains", "quack"))}, {"{\"a\":\"b\",\"c\":\"d\",\"e\":123,\"g\":false}", "contains", "moo", Arrays.asList(ImmutableMap.of("contains", "moo"))}, + {25, "lessThan", 24, Collections.singletonList(ImmutableMap.of("lessThan", 24))}, + {"b", "lessThan", "a", Collections.singletonList(ImmutableMap.of("lessThan", "a"))}, + {null, "lessThan", "a", Collections.singletonList(ImmutableMap.of("lessThan", "a"))}, + {"a", "lessThan", null, Collections.singletonList(MutableMap.of("lessThan", null))}, + {5, "lessThan", 5, Collections.singletonList(ImmutableMap.of("lessThan", 5))}, + + {24, "greaterThan", 25, Collections.singletonList(ImmutableMap.of("greaterThan", 25))}, + {"a", "greaterThan", "b", Collections.singletonList(ImmutableMap.of("greaterThan", "b"))}, + {null, "greaterThan", "a", Collections.singletonList(ImmutableMap.of("greaterThan", "a"))}, + {"a", "greaterThan", null, Collections.singletonList(MutableMap.of("greaterThan", null))}, + {5, "greaterThan", 5, Collections.singletonList(ImmutableMap.of("greaterThan", 5))}, + {"true", "hasTruthValue", Boolean.FALSE, Arrays.asList(ImmutableMap.of("hasTruthValue", Boolean.FALSE))}, {"false", "hasTruthValue", Boolean.TRUE, Arrays.asList(ImmutableMap.of("hasTruthValue", Boolean.TRUE))}, {"some-not-null-value", "hasTruthValue", Boolean.TRUE, Arrays.asList(ImmutableMap.of("hasTruthValue", Boolean.TRUE))} @@ -161,7 +181,7 @@ public class TestFrameworkAssertionsTest { .timeout(timeout).assertions(assertions)); Asserts.shouldHaveFailedPreviously(); } catch (AssertionError e) { - Asserts.expectedFailureContains(e, Objects.toString(data), condition, expected.toString()); + Asserts.expectedFailureContains(e, Objects.toString(data), condition, expected != null ? expected.toString() : "null"); } } @@ -187,7 +207,7 @@ public class TestFrameworkAssertionsTest { .assertions(assertions)); Asserts.shouldHaveFailedPreviously(); } catch (AssertionError e) { - Asserts.expectedFailureContains(e, Objects.toString(data), condition, expected.toString()); + Asserts.expectedFailureContains(e, Objects.toString(data), condition, expected != null ? expected.toString() : "null"); } }
