Mike Kolesnik has uploaded a new change for review.

Change subject: engine: Added ValidationResult matchers
......................................................................

engine: Added ValidationResult matchers

The matchers can be used for testing that validation result complies
with a given expectation, using JUnit's assertThat syntax.

For example:
To check that validationMethod() returned a valid result:
  assertThat(validationMethod(),isValid());

To check that validationMethod() fails with an error
message VdcBllMessages.EXPECTED_ERROR_MESSAGE:
  assertThat(validationMethod(),
      failsWith(VdcBllMessages.EXPECTED_ERROR_MESSAGE));

Change-Id: I4ed3d5e1e698f5ac00d6a6fe20b855619c35a2ec
Signed-off-by: Mike Kolesnik <mkole...@redhat.com>
---
A 
backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/validator/ValidationResultMatchers.java
1 file changed, 141 insertions(+), 0 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/61/13061/1

diff --git 
a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/validator/ValidationResultMatchers.java
 
b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/validator/ValidationResultMatchers.java
new file mode 100644
index 0000000..1191107
--- /dev/null
+++ 
b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/validator/ValidationResultMatchers.java
@@ -0,0 +1,141 @@
+package org.ovirt.engine.core.bll.validator;
+
+import org.hamcrest.CoreMatchers;
+import org.hamcrest.Description;
+import org.hamcrest.Matcher;
+import org.junit.internal.matchers.TypeSafeMatcher;
+import org.junit.matchers.JUnitMatchers;
+import org.ovirt.engine.core.bll.ValidationResult;
+import org.ovirt.engine.core.dal.VdcBllMessages;
+
+/**
+ * Useful matchers to use when testing {@link ValidationResult}s, using the
+ * {@link org.junit.Assert#assertThat(Object, Matcher)} (or equivalent) 
method.<br>
+ * These matchers are best used when imported statically.<br>
+ * <br>
+ * A couple of examples:<br>
+ * * To check that <i>validationMethod()</i> returned a <b>valid</b> result:
+ *
+ * <pre>
+ * assertThat(<i>validationMethod()</i>,<b>isValid()</b>);
+ * </pre>
+ *
+ *
+ * * To check that <i>validationMethod()</i> <b>fails</b> with an error message
+ * <i>VdcBllMessages.EXPECTED_ERROR_MESSAGE</i> (no check for replacements 
will be done):
+ *
+ * <pre>
+ * assertThat(<i>validationMethod()</i>, 
<b>failsWith</b>(<i>VdcBllMessages.EXPECTED_ERROR_MESSAGE</i>));
+ * </pre>
+ *
+ * * To check that <i>validationMethod()</i> <b>fails</b> with an error message
+ * <i>VdcBllMessages.EXPECTED_ERROR_MESSAGE</i> and the <b>replacements</b> 
contain a string
+ * <i>REPLACEMENT_CONSTANT</i>:
+ *
+ * <pre>
+ * assertThat(<i>validationMethod()</i>,
+ *         
both(<b>replacements</b>(hasItem(containsString(<i>REPLACEMENT_CONSTANT</i>))))
+ *                 
.and(<b>failsWith</b>(<i>VdcBllMessages.EXPECTED_ERROR_MESSAGE</i>)));
+ * </pre>
+ *
+ * @see org.junit.Assert#assertThat(Object, Matcher)
+ * @see JUnitMatchers
+ * @see CoreMatchers
+ */
+public class ValidationResultMatchers {
+
+    /**
+     * @return A matcher matching any {@link ValidationResult} that returns 
true for {@link ValidationResult#isValid()}.
+     */
+    public static Matcher<ValidationResult> isValid() {
+        return new IsValid();
+    }
+
+    /**
+     * @param expectedError
+     *            The error message expected in {@link 
ValidationResult#getMessage()}
+     * @return A matcher matching any {@link ValidationResult} that is not 
valid and fails with the given error.
+     */
+    public static Matcher<ValidationResult> failsWith(VdcBllMessages 
expectedError) {
+        return new Fails(expectedError);
+    }
+
+    /**
+     * @param matcher
+     *            The matcher to match against {@link 
ValidationResult#getVariableReplacements()}
+     * @return A matcher matching any {@link ValidationResult} that it's 
variable replacements match the given matcher.
+     */
+    public static Matcher<ValidationResult> 
replacements(Matcher<Iterable<String>> matcher) {
+        return new Replacements(matcher);
+    }
+
+    private static class IsValid extends TypeSafeMatcher<ValidationResult> {
+
+        @Override
+        public void describeTo(Description description) {
+            description.appendText("valid result");
+        }
+
+        @Override
+        public boolean matchesSafely(ValidationResult item) {
+            return item.isValid();
+        }
+    }
+
+    private static class WithMessage extends TypeSafeMatcher<ValidationResult> 
{
+
+        private VdcBllMessages expected;
+
+        public WithMessage(VdcBllMessages expected) {
+            this.expected = expected;
+        }
+
+        @Override
+        public void describeTo(Description description) {
+            description.appendText("with message " + expected.name());
+        }
+
+        @Override
+        public boolean matchesSafely(ValidationResult item) {
+            return expected == item.getMessage();
+        }
+    }
+
+    private static class Replacements extends 
TypeSafeMatcher<ValidationResult> {
+
+        private Matcher<Iterable<String>> matcher;
+
+        public Replacements(Matcher<Iterable<String>> matcher) {
+            this.matcher = matcher;
+        }
+
+        @Override
+        public void describeTo(Description description) {
+            description.appendText("the variable replacements is 
").appendDescriptionOf(matcher);
+        }
+
+        @Override
+        public boolean matchesSafely(ValidationResult item) {
+            return matcher.matches(item.getVariableReplacements());
+        }
+    }
+
+    private static class Fails extends TypeSafeMatcher<ValidationResult> {
+
+        private Matcher<ValidationResult> matcher;
+
+        public Fails(VdcBllMessages expected) {
+            matcher = JUnitMatchers.both(CoreMatchers.not(isValid())).and(new 
WithMessage(expected));
+        }
+
+        @Override
+        public void describeTo(Description description) {
+            description.appendText("a failure ").appendDescriptionOf(matcher);
+        }
+
+        @Override
+        public boolean matchesSafely(ValidationResult actual) {
+            return matcher.matches(actual);
+        }
+    }
+}


--
To view, visit http://gerrit.ovirt.org/13061
To unsubscribe, visit http://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I4ed3d5e1e698f5ac00d6a6fe20b855619c35a2ec
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Mike Kolesnik <mkole...@redhat.com>
_______________________________________________
Engine-patches mailing list
Engine-patches@ovirt.org
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to