-
added a new xmlunit-assertj3 module that requires AssertJ 3.18.1 or later.
This module no longer uses AssertJ internal classes that are not exported to OSGi environments and thus fixes issue #203.
The module (like AssertJ 3.x itself) requires Java 8 at runtime and is similar to xmlunit-assertj but is no drop-in replacement. It uses a different Java package from xmlunit-assertj and
CompareAssert
will no longer throw a JUnit 4.xComparisonException
but an opentest4jAssertionFailedError
instead.The existing xmlunit-assertj module will still be supported in future releases but expect AssertJ 3.x specific changes to only get applied to xmlunit-assertj3.
Many thanks to @Zegveld, @scordio and @joel-costigliola.
-
changed optional JAXB dependency to use Jakarta XML Binding API PR #186 by @endrejeges
-
bumped the bytebuddy dependency to 1.10.10 for the AssertJ module in the hope it would help with #188
- and change its scope from provided to compile time, which should finally fix the issue.
-
added a new
extractingText
method toMultipleNodeAssert
to make it possible to write AssertJ assertions against the textual content of nodes more easily. Issue #192 and PR #193 by @keesvandieren -
changed the minimum Java version required from Java 6 to Java 7 for all modules (it has already been Java 7 for the AssertJ module before).
-
DefaultNodeMatcher
with multipleElementSelector
s could fail to find the best matches as the order ofElementSelector
s should select them. #197 -
Input
builder now supportsjava.nio.file.Path
#196 -
It is now possible to specify a custom
TransformerFactory
forDefaultComparisonFormatter
. #195
This version contains a backwards incompatible change to the
PlaceholderHandler
interface that is part of the experimental
placeholders module: The evaluate
method now receives a variable
number of string arguments in addition to the textual content of the
element/attribute. This allows placeholders like
${xmlunit.matchesRegex(some\s*regex)}
.
-
the AssertJ tests now pass on non-English locales as well Issue #180
-
added a workaround for a binary incompatible change in AssertJ that caused xmlunit-assertj to be incompatible with AssertJ 3.15.0 Issue #181
-
added a new
${xmlunit.matchesRegex(regex)}
placeholder PR #178 by @Jazzyekim. -
add a new
${xmlunit.isDateTime}
placeholder inspired by #xmlunit.net/31 and #xmlunit.net/32 by MilkyWare Issue #174 -
avoid unnecessary creation of
DocumentBuilderFactory
inDOMDifferenceEngine
when a custom factory has been provided toDiffBuilder
. Issue #182
-
the dependencies on JAXB implementation and its transitive dependencies has been promoted from test scope to optional for Java 9 and later Issue #162
-
added
containsAnyNodeHavingXPath
,containsAllNodesHavingXPath
andhasXPath
assertions to xmlunit-assertj. -
added
extractingAttribute
method to xmlunit-assertj. -
removed some redundant
instanceof
checks. PR #171 by @PascalSchumacher. -
xmlunit-assertj should now work with AssertJ-Core 3.13.x Issue #166
-
the XPath values for comparisons resulting in
CHILD_LOOKUP
differences could be wrong whenNodeFilter
s were present. XMLUnit.NET Issue xmlunit.net/#29 -
xmlunit-legacy will now use
NewDifferenceEngine
even when anElementQualifier
different from the built-in ones is used.
-
add a new
${xmlunit.isNumber}
placeholder Issue #153 via PR #154 by @NathanAtClarity. -
the XPath values of a comparison should not be affected by any
NodeFilter
being in effect. Issue #156
-
xmlunit-assertj can now be used with AssertJ 3.9.1+ as well as 2.9.x. Issue #135.
-
added a new
TypeMatcher
to the xmlunit-matchers module that can be used to conveniently translate XPath result strings into numbers or booleans and verify they match type safe assertions. Issue #133 via PR #137. -
fixed the
Automatic-Module-Name
of all modules to be valid Java identifiers. Issue #136.
-
add a new module with AssertJ support. This module requires Java7 at runtime. Issue #117 via PRs #120, #126, #128, and #129 by @krystiankaluzny.
-
The
XPathFactory
used by the XPath related Hamcrest matchers is now configurable. Issue #131 via PRs #132
-
add a new experimental project xmlunit-placeholders which aims to use
${xmlunit.FOO}
expressions inside of the control document to allow for a DSL-like approach of defining more complex tests. This initial seed only supports${xmlunit.ignore}
which can be used to make XMLUnit ignore the element containing this text. PR #105 by @zheng-wang. -
added
withDocumentBuilderFactory
methods toHasXPathMatcher
andEvaluateXPathMatcher
to allow explicit configuration of theDocumentBuilderFactory
used. Issue #108. -
the
DocmentBuilderFactory
andTransformerFactory
instances used by XMLUnit are now configured to not load any external DTDs or parse external entities. They are now configured according to the OWASP recommendations for XML eXternal Entity injection preventions. TheTransformerFactory
used by theorg.xmlunit.transform.Transformation
class is still configured to load external stylesheets, though.For the
legacy
package XXE prevention has to be enabled viaXMLUnit.enableXXEProtection
explicitly.This is a breaking change and you may need to provide
DocmentBuilderFactory
orTransformerFactory
instances of your own if you need to load external entities.The
SAXParserFactory
andSchemaFactory
instances used inside of thevalidation
package have not been changed as their use is likely to require loading of external DTDs or schemas.Issue #91.
-
the configured
NodeFilter
is now applied before comparingDocumentType
nodes.This change breaks backwards compatibility as the old behavior was to ignore
DocumentType
when counting the children of theDocument
node but not when actually comparing theDocumentType
. Prior to this change if one document had a document type declaration but the other didn't, aHAS_DOCTYPE_DECLARATION
difference was detected, this will no longer be the case now. If you want to detect this difference, you need to use a more lenientNodeFilter
thanNodeFilters.Default
(i.e.NodeFilters.AcceptAll
) but then you will see an additionalCHILD_NODELIST_LENGTH
difference.The legacy package has been adapted and will behave as before even when using
NewDifferenceEngine
.Issue #116.
-
added a new
Source
implementationElementContentWhitespaceStrippedSource
which is similar toWhitespaceStrippedSource
but only affects text nodes that solely consist of whitespace and doesn't affect any other text nodes. Also added convenienceignoreElementContentWhitespace
methods toDiffBuilder
andCompareMatcher
. Issue #119.
-
Made Travis build work with OpenJDK6 again. PR #101 by @PascalSchumacher.
-
CompareMatcher
'sdescribeTo
method threw an exception if the comparison yielded no differences. Issue #107.
CommentLessSource
,DiffBuilder#ignoreComments
andCompareMatcher#ignoreComments
now all use XSLT version 2.0 stylesheets in order to strip comments. New constructors and methods have been added if you need a different version of XSLT (in particular if you need 1.0 which used to be the default up to XMLUnit 2.4.0). Issue #99.
- made
DefaultComparisonFormatter
more subclass friendly. Issue #93.
-
JAXPValidator
andValidationMatcher
now accept usingSchema
instances for the schema when validating instance documents. Issue #89. -
updated test dependency to Mockito 2.1.0 PR #87 by @PascalSchumacher.
- The
DocumentBuilderFactory
set onDiffBuilder
wasn't used properly whenignoreWhitespace
ornormalizeWhitespace
has been set. Issue #86.
-
Input.fromByteArray
andInput.fromString
now returnSource
s that can be used multiple times. Issue #84. -
The
DocumentBuilderFactory
used byDOMDifferenceEngine
is now configurable. Issue #83.
-
various code style fixes PR #74, PR #75, PR #78, PR #79, PR #80 by @georgekankava.
-
CompareMatcher
andValidationMatcher
threwNullPointerException
s when combined with another failingMatcher
. Issue #81.
-
fixed swapped constant assignments in
DifferenceEvaluators
PR #53 by @cboehme. -
added
CompareMatcher#withNamespaceContext
PR #54 by @cboehme. -
DiffBuilder#withNamespaceContext
falsely claimed the map would pass prefixes to URIs rather than the other way around. PR #62 and issue #52 by @mariusneo. -
various code style fixes PR #64, PR #65, PR #67, PR #68, PR #69, PR #70 and PR #71 by @georgekankava.
-
new
hasXPath
matchers that check for the existence of an XPath inside of a piece of XML or verify additional assertions on the XPath's stringified result. PR #63 and PR #66 by @mariusneo. -
added new implementations inside
DifferenceEvaluators
for common tasks like changing the outcome for specific differences or ignoring changes inside the XML prolog. -
DiffBuilder.withComparisonFormatter
now also fully applies to theDifference
s contained within theDiff
. Issue #55
- implemented
DiffBuilder.withComparisonFormatter
mentioned in user guide. Issue #51 - eliminated dead-stores. PR #52 by @georgekankava.
- the
schemaURI
inValidator
has been pushed down toParsingValidator
since it is only used inside this class. - the mapping of
DifferenceEngine#setNamespaceContext
has been inverted from prefix -> URI to URI -> prefix in order to be consistent with the same concept inXPathEngine
. CommentLessSource
uses an XSLT stylesheet internally which lacked the requiredversion
attribute. PR #47 by @phbenisc.Comparison
now also contains the XPath of the parent of the compared nodes or attributes which is most useful in cases of missing nodes/attributes because the XPath on one side isnull
in these cases. Issue #48 implemented via PR #50 by @eguib.
- the xmlunit-parent POM no longer uses the deprecated
org.sonatype.oss:oss-parent
as its parent. - added new overloads to
XPathEngine
- fixed the XPath context used by the
byXPath
element selector so that "." now refers to the current element. Issue #39 ElementSelectors#conditionalBuilder
now stops at the first predicate returningtrue
, even if the associatedElementSelector
returns false. Issue #40
This is the initial alpha release of XMLUnit.NET. We expect the API to change for the next release based on user feedback.