This is an automated email from the ASF dual-hosted git repository.
kwin pushed a commit to branch master
in repository
https://gitbox.apache.org/repos/asf/sling-org-apache-sling-testing-hamcrest.git
The following commit(s) were added to refs/heads/master by this push:
new 2d645c9 SLING-12833 Improved output for mismatch
2d645c9 is described below
commit 2d645c914ded3cea54e7e8dc9bac82cbce579624
Author: Konrad Windszus <[email protected]>
AuthorDate: Wed Jun 18 16:52:03 2025 +0200
SLING-12833 Improved output for mismatch
Highlight the first property name, value and type where a mismatch
occurred.
---
.../matchers/ResourcePropertiesMatcher.java | 29 ++++++++++++++++++++--
1 file changed, 27 insertions(+), 2 deletions(-)
diff --git
a/src/main/java/org/apache/sling/hamcrest/matchers/ResourcePropertiesMatcher.java
b/src/main/java/org/apache/sling/hamcrest/matchers/ResourcePropertiesMatcher.java
index 4bbba9e..461e449 100644
---
a/src/main/java/org/apache/sling/hamcrest/matchers/ResourcePropertiesMatcher.java
+++
b/src/main/java/org/apache/sling/hamcrest/matchers/ResourcePropertiesMatcher.java
@@ -29,12 +29,13 @@ import org.hamcrest.TypeSafeMatcher;
public class ResourcePropertiesMatcher extends TypeSafeMatcher<Resource> {
private final Map<String, Object> expectedProps;
+ private String firstMismatchPropertyName;
public ResourcePropertiesMatcher(Map<String, Object> properties) {
if (properties == null || properties.isEmpty()) {
throw new IllegalArgumentException("properties is null or empty");
}
-
+ firstMismatchPropertyName = null;
this.expectedProps = properties;
}
@@ -53,11 +54,13 @@ public class ResourcePropertiesMatcher extends
TypeSafeMatcher<Resource> {
if (givenValue != null && expectedValue != null
&& givenValue.getClass().isArray() &&
expectedValue.getClass().isArray()) {
if (!arrayEquals(expectedValue, givenValue)) {
+ firstMismatchPropertyName = prop.getKey();
return false;
}
}
else {
if (!objectEquals(expectedValue, givenValue)) {
+ firstMismatchPropertyName = prop.getKey();
return false;
}
}
@@ -99,8 +102,30 @@ public class ResourcePropertiesMatcher extends
TypeSafeMatcher<Resource> {
.appendText(" (resource: ")
.appendValue(item)
.appendText(")");
+ if (firstMismatchPropertyName != null) {
+ Object expectedValue =
expectedProps.get(firstMismatchPropertyName);
+ Object actualValue =
actualProperties.get(firstMismatchPropertyName);
+ mismatchDescription.appendText(System.lineSeparator());
+ mismatchDescription.appendText(" First mismatch in property ")
+ .appendValue(firstMismatchPropertyName)
+ .appendText(": expected ");
+ appendValueAndType(mismatchDescription, expectedValue);
+ mismatchDescription.appendText(" but was ");
+ appendValueAndType(mismatchDescription, actualValue);
+ }
}
-
+
+ private static void appendValueAndType(Description mismatchDescription,
Object value) {
+ if (value == null) {
+ mismatchDescription.appendText("null");
+ } else {
+ mismatchDescription.appendText("value ")
+ .appendValue(value)
+ .appendText(" of type ")
+ .appendValue(value.getClass().getName());
+ }
+ }
+
/**
* Convert arrays to string representation to get better message if
comparison fails.
* @param props Properties