You can subscribe to this list here.
2007 |
Jan
|
Feb
(3) |
Mar
(18) |
Apr
(39) |
May
(15) |
Jun
(12) |
Jul
(3) |
Aug
(23) |
Sep
|
Oct
(1) |
Nov
(1) |
Dec
(3) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2008 |
Jan
(21) |
Feb
(23) |
Mar
(33) |
Apr
(8) |
May
(1) |
Jun
(22) |
Jul
|
Aug
(1) |
Sep
(1) |
Oct
(6) |
Nov
|
Dec
(11) |
2009 |
Jan
(5) |
Feb
|
Mar
(2) |
Apr
(24) |
May
(36) |
Jun
(18) |
Jul
(2) |
Aug
(3) |
Sep
(9) |
Oct
(3) |
Nov
(1) |
Dec
|
2010 |
Jan
(5) |
Feb
(3) |
Mar
|
Apr
(15) |
May
(24) |
Jun
(11) |
Jul
(8) |
Aug
(34) |
Sep
(42) |
Oct
|
Nov
|
Dec
|
2011 |
Jan
(13) |
Feb
(32) |
Mar
(35) |
Apr
(31) |
May
(33) |
Jun
(30) |
Jul
(32) |
Aug
(31) |
Sep
(30) |
Oct
(31) |
Nov
(32) |
Dec
(31) |
2012 |
Jan
(35) |
Feb
(31) |
Mar
(31) |
Apr
(30) |
May
(31) |
Jun
(34) |
Jul
(23) |
Aug
(30) |
Sep
(30) |
Oct
(29) |
Nov
(30) |
Dec
(32) |
2013 |
Jan
(25) |
Feb
(39) |
Mar
(1) |
Apr
(18) |
May
(1) |
Jun
|
Jul
(1) |
Aug
(20) |
Sep
(41) |
Oct
(32) |
Nov
(9) |
Dec
(31) |
2014 |
Jan
(31) |
Feb
(30) |
Mar
(34) |
Apr
(60) |
May
(31) |
Jun
(28) |
Jul
(32) |
Aug
(28) |
Sep
(26) |
Oct
(32) |
Nov
(43) |
Dec
(115) |
2015 |
Jan
(106) |
Feb
(101) |
Mar
(51) |
Apr
(32) |
May
(63) |
Jun
(18) |
Jul
|
Aug
(18) |
Sep
|
Oct
(1) |
Nov
(84) |
Dec
(63) |
2016 |
Jan
(26) |
Feb
(17) |
Mar
(104) |
Apr
(30) |
May
(6) |
Jun
(30) |
Jul
|
Aug
|
Sep
|
Oct
(3) |
Nov
(48) |
Dec
(22) |
2017 |
Jan
(15) |
Feb
(29) |
Mar
(43) |
Apr
(29) |
May
(25) |
Jun
(28) |
Jul
(62) |
Aug
(35) |
Sep
(35) |
Oct
(72) |
Nov
(10) |
Dec
(4) |
2018 |
Jan
(7) |
Feb
(4) |
Mar
|
Apr
(46) |
May
(20) |
Jun
(12) |
Jul
(9) |
Aug
(42) |
Sep
(4) |
Oct
(17) |
Nov
(32) |
Dec
(31) |
2019 |
Jan
(21) |
Feb
(14) |
Mar
|
Apr
(74) |
May
(25) |
Jun
(43) |
Jul
(2) |
Aug
(1) |
Sep
|
Oct
(2) |
Nov
|
Dec
(10) |
2020 |
Jan
(1) |
Feb
|
Mar
(26) |
Apr
(8) |
May
(62) |
Jun
(4) |
Jul
(25) |
Aug
|
Sep
(21) |
Oct
(24) |
Nov
(26) |
Dec
(9) |
2021 |
Jan
|
Feb
(4) |
Mar
|
Apr
|
May
|
Jun
|
Jul
(1) |
Aug
(1) |
Sep
(1) |
Oct
(11) |
Nov
(1) |
Dec
(12) |
2022 |
Jan
(47) |
Feb
|
Mar
(2) |
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
(14) |
2023 |
Jan
(3) |
Feb
|
Mar
(60) |
Apr
(9) |
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2024 |
Jan
(5) |
Feb
|
Mar
|
Apr
(10) |
May
(1) |
Jun
|
Jul
|
Aug
(17) |
Sep
(2) |
Oct
|
Nov
|
Dec
(1) |
2025 |
Jan
|
Feb
|
Mar
(88) |
Apr
(64) |
May
(47) |
Jun
(20) |
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
From: <bo...@us...> - 2010-08-10 16:00:46
|
Revision: 420 http://xmlunit.svn.sourceforge.net/xmlunit/?rev=420&view=rev Author: bodewig Date: 2010-08-10 16:00:40 +0000 (Tue, 10 Aug 2010) Log Message: ----------- OK, this *resolver* isn't consulted on Mono either, maybe the pne of Schemas Modified Paths: -------------- trunk/xmlunit/src/main/net-core/validation/Validator.cs Modified: trunk/xmlunit/src/main/net-core/validation/Validator.cs =================================================================== --- trunk/xmlunit/src/main/net-core/validation/Validator.cs 2010-08-10 15:51:36 UTC (rev 419) +++ trunk/xmlunit/src/main/net-core/validation/Validator.cs 2010-08-10 16:00:40 UTC (rev 420) @@ -101,6 +101,7 @@ try { XmlSchema s = XmlSchema.Read(loc.Reader, ThrowOnError); settings.Schemas.Add(s); + settings.Schemas.XmlResolver = new ThrowingResolver(); } catch (IOException ex) { throw new XMLUnitException("Schema is not readable", ex); @@ -109,7 +110,6 @@ } List<ValidationProblem> problems = new List<ValidationProblem>(); settings.ValidationEventHandler += CollectProblems(problems); - settings.XmlResolver = new ThrowingResolver(); using (XmlReader r = XmlReader.Create(instance.Reader, settings)) { while (r.Read()) ; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bo...@us...> - 2010-08-10 15:51:42
|
Revision: 419 http://xmlunit.svn.sourceforge.net/xmlunit/?rev=419&view=rev Author: bodewig Date: 2010-08-10 15:51:36 +0000 (Tue, 10 Aug 2010) Log Message: ----------- On Windows the resolver is not used Modified Paths: -------------- trunk/xmlunit/src/main/net-core/validation/Validator.cs Modified: trunk/xmlunit/src/main/net-core/validation/Validator.cs =================================================================== --- trunk/xmlunit/src/main/net-core/validation/Validator.cs 2010-08-02 10:59:23 UTC (rev 418) +++ trunk/xmlunit/src/main/net-core/validation/Validator.cs 2010-08-10 15:51:36 UTC (rev 419) @@ -109,6 +109,7 @@ } List<ValidationProblem> problems = new List<ValidationProblem>(); settings.ValidationEventHandler += CollectProblems(problems); + settings.XmlResolver = new ThrowingResolver(); using (XmlReader r = XmlReader.Create(instance.Reader, settings)) { while (r.Read()) ; @@ -116,6 +117,17 @@ return new ValidationResult(problems.Count == 0, problems); } + private class ThrowingResolver : XmlResolver { + public override object GetEntity(Uri uri, string role, Type type) { + throw new Exception(string.Format("GetEntity invoked with ({0}, {1}, {2}", + uri, role, type)); + } + + public override System.Net.ICredentials Credentials { + set {} + } + } + private static readonly IDictionary<string, ValidationType> types; static Validator() { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bo...@us...> - 2010-08-02 10:59:29
|
Revision: 418 http://xmlunit.svn.sourceforge.net/xmlunit/?rev=418&view=rev Author: bodewig Date: 2010-08-02 10:59:23 +0000 (Mon, 02 Aug 2010) Log Message: ----------- NUnit 2.5.7 Modified Paths: -------------- trunk/xmlunit/lib/nunit.framework.dll Modified: trunk/xmlunit/lib/nunit.framework.dll =================================================================== (Binary files differ) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bo...@us...> - 2010-07-20 17:33:44
|
Revision: 417 http://xmlunit.svn.sourceforge.net/xmlunit/?rev=417&view=rev Author: bodewig Date: 2010-07-20 17:33:37 +0000 (Tue, 20 Jul 2010) Log Message: ----------- make directory references more regular for tests - location itself is not the problem on Mono, it seems xsi:schemaLocation is Modified Paths: -------------- trunk/xmlunit/src/main/net-core/input/AbstractSource.cs trunk/xmlunit/src/tests/net-core/TestResources.cs trunk/xmlunit/src/tests/net-core/builder/InputTest.cs trunk/xmlunit/src/tests/net-core/validation/ValidatorTest.cs Modified: trunk/xmlunit/src/main/net-core/input/AbstractSource.cs =================================================================== --- trunk/xmlunit/src/main/net-core/input/AbstractSource.cs 2010-07-15 06:41:10 UTC (rev 416) +++ trunk/xmlunit/src/main/net-core/input/AbstractSource.cs 2010-07-20 17:33:37 UTC (rev 417) @@ -38,5 +38,9 @@ systemId = value; } } + public override string ToString() { + return string.Format("{0} with systemId {1}", GetType().Name, + SystemId); + } } } Modified: trunk/xmlunit/src/tests/net-core/TestResources.cs =================================================================== --- trunk/xmlunit/src/tests/net-core/TestResources.cs 2010-07-15 06:41:10 UTC (rev 416) +++ trunk/xmlunit/src/tests/net-core/TestResources.cs 2010-07-20 17:33:37 UTC (rev 417) @@ -11,18 +11,27 @@ See the License for the specific language governing permissions and limitations under the License. */ + +using System; + namespace net.sf.xmlunit { public sealed class TestResources { - public const string ANIMAL_FILE = "../../../src/tests/resources/test1.xml"; - public const string BLAME_FILE = "../../../src/tests/resources/test.blame.html"; + private static readonly string PREFIX = "../../../"; - public const string ANIMAL_XSL = "../../../src/tests/resources/animal.xsl"; - public const string DOG_FILE = "../../../src/tests/resources/testAnimal.xml"; + public static readonly string TESTS_DIR = + PREFIX + "src/tests/resources/"; - public const string BOOK_DTD = "../../../src/tests/resources/Book.dtd"; - public const string TEST_DTD = "../../../src/tests/resources/test.dtd"; + public static readonly string ANIMAL_FILE = TESTS_DIR + "test1.xml"; + public static readonly string BLAME_FILE = + TESTS_DIR + "test.blame.html"; + public static readonly string ANIMAL_XSL = TESTS_DIR + "animal.xsl"; + public static readonly string DOG_FILE = TESTS_DIR + "testAnimal.xml"; + + public static readonly string BOOK_DTD = TESTS_DIR + "Book.dtd"; + public static readonly string TEST_DTD = TESTS_DIR + "test.dtd"; + private TestResources() { } } } Modified: trunk/xmlunit/src/tests/net-core/builder/InputTest.cs =================================================================== --- trunk/xmlunit/src/tests/net-core/builder/InputTest.cs 2010-07-15 06:41:10 UTC (rev 416) +++ trunk/xmlunit/src/tests/net-core/builder/InputTest.cs 2010-07-20 17:33:37 UTC (rev 417) @@ -88,7 +88,7 @@ [Test] public void ShouldParseATransformationFromSource() { ISource input = Input.FromMemory("<animal>furry</animal>").Build(); ISource s = Input.ByTransforming(input) - .WithStylesheet(Input.FromFile("../../../src/tests/resources/animal.xsl") + .WithStylesheet(Input.FromFile(TestResources.TESTS_DIR + "animal.xsl") .Build()) .Build(); Assert.That(s, Is.Not.Null); @@ -100,7 +100,7 @@ [Test] public void ShouldParseATransformationFromBuilder() { Input.IBuilder input = Input.FromMemory("<animal>furry</animal>"); ISource s = Input.ByTransforming(input) - .WithStylesheet(Input.FromFile("../../../src/tests/resources/animal.xsl")) + .WithStylesheet(Input.FromFile(TestResources.TESTS_DIR + "animal.xsl")) .Build(); Assert.That(s, Is.Not.Null); XmlDocument d = Parse(s); Modified: trunk/xmlunit/src/tests/net-core/validation/ValidatorTest.cs =================================================================== --- trunk/xmlunit/src/tests/net-core/validation/ValidatorTest.cs 2010-07-15 06:41:10 UTC (rev 416) +++ trunk/xmlunit/src/tests/net-core/validation/ValidatorTest.cs 2010-07-20 17:33:37 UTC (rev 417) @@ -23,7 +23,7 @@ [Test] public void ShouldSuccessfullyValidateSchema() { Validator v = Validator.ForLanguage(Languages.W3C_XML_SCHEMA_NS_URI); - v.SchemaSource = new StreamSource("../../../src/tests/resources/Book.xsd"); + v.SchemaSource = new StreamSource(TestResources.TESTS_DIR + "Book.xsd"); ValidationResult r = v.ValidateSchema(); Assert.IsTrue(r.Valid); Assert.IsFalse(r.Problems.GetEnumerator().MoveNext()); @@ -32,8 +32,8 @@ [Test] public void ShouldSuccessfullyValidateInstance() { Validator v = Validator.ForLanguage(Languages.W3C_XML_SCHEMA_NS_URI); - v.SchemaSource = new StreamSource("../../../src/tests/resources/Book.xsd"); - ValidationResult r = v.ValidateInstance(new StreamSource("../../../src/tests/resources/BookXsdGenerated.xml")); + v.SchemaSource = new StreamSource(TestResources.TESTS_DIR + "Book.xsd"); + ValidationResult r = v.ValidateInstance(new StreamSource(TestResources.TESTS_DIR + "BookXsdGenerated.xml")); IEnumerator<ValidationProblem> problems = r.Problems.GetEnumerator(); bool haveErrors = problems.MoveNext(); @@ -47,7 +47,7 @@ [Test] public void ShouldFailOnBrokenSchema() { Validator v = Validator.ForLanguage(Languages.W3C_XML_SCHEMA_NS_URI); - v.SchemaSource = new StreamSource("../../../src/tests/resources/broken.xsd"); + v.SchemaSource = new StreamSource(TestResources.TESTS_DIR + "broken.xsd"); ValidationResult r = v.ValidateSchema(); Assert.IsFalse(r.Valid); Assert.IsTrue(r.Problems.GetEnumerator().MoveNext()); @@ -56,8 +56,8 @@ [Test] public void ShouldFailOnBrokenInstance() { Validator v = Validator.ForLanguage(Languages.W3C_XML_SCHEMA_NS_URI); - v.SchemaSource = new StreamSource("../../../src/tests/resources/Book.xsd"); - ValidationResult r = v.ValidateInstance(new StreamSource("../../../src/tests/resources/invalidBook.xml")); + v.SchemaSource = new StreamSource(TestResources.TESTS_DIR + "Book.xsd"); + ValidationResult r = v.ValidateInstance(new StreamSource(TestResources.TESTS_DIR + "invalidBook.xml")); Assert.IsFalse(r.Valid); Assert.IsTrue(r.Problems.GetEnumerator().MoveNext()); } @@ -65,9 +65,9 @@ [Test] public void ShouldThrowWhenValidatingInstanceAndSchemaIsInvalid() { Validator v = Validator.ForLanguage(Languages.W3C_XML_SCHEMA_NS_URI); - v.SchemaSource = new StreamSource("../../../src/tests/resources/broken.xsd"); + v.SchemaSource = new StreamSource(TestResources.TESTS_DIR + "broken.xsd"); Assert.Throws(typeof(XMLUnitException), delegate() { - v.ValidateInstance(new StreamSource("../../../src/tests/resources/BookXsdGenerated.xml")); + v.ValidateInstance(new StreamSource(TestResources.TESTS_DIR + "BookXsdGenerated.xml")); }); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bo...@us...> - 2010-07-15 06:41:16
|
Revision: 416 http://xmlunit.svn.sourceforge.net/xmlunit/?rev=416&view=rev Author: bodewig Date: 2010-07-15 06:41:10 +0000 (Thu, 15 Jul 2010) Log Message: ----------- extra diagnostics cause an error when the test passes Modified Paths: -------------- trunk/xmlunit/src/tests/net-core/validation/ValidatorTest.cs Modified: trunk/xmlunit/src/tests/net-core/validation/ValidatorTest.cs =================================================================== --- trunk/xmlunit/src/tests/net-core/validation/ValidatorTest.cs 2010-07-15 06:32:45 UTC (rev 415) +++ trunk/xmlunit/src/tests/net-core/validation/ValidatorTest.cs 2010-07-15 06:41:10 UTC (rev 416) @@ -39,7 +39,8 @@ Assert.IsTrue(r.Valid, "Expected validation to pass, first validation error" - + " is " + problems.Current.Message); + + " is " + + (haveErrors ? problems.Current.Message : "unknown")); Assert.IsFalse(haveErrors); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bo...@us...> - 2010-07-15 06:32:51
|
Revision: 415 http://xmlunit.svn.sourceforge.net/xmlunit/?rev=415&view=rev Author: bodewig Date: 2010-07-15 06:32:45 +0000 (Thu, 15 Jul 2010) Log Message: ----------- extract more information from test failure on Mono - Mono seems to resolve the file differently, will need to develop on Windows and Mono in parallel to resolve this - oh my Modified Paths: -------------- trunk/xmlunit/src/tests/net-core/validation/ValidatorTest.cs Modified: trunk/xmlunit/src/tests/net-core/validation/ValidatorTest.cs =================================================================== --- trunk/xmlunit/src/tests/net-core/validation/ValidatorTest.cs 2010-07-15 06:22:44 UTC (rev 414) +++ trunk/xmlunit/src/tests/net-core/validation/ValidatorTest.cs 2010-07-15 06:32:45 UTC (rev 415) @@ -12,6 +12,7 @@ limitations under the License. */ using System; +using System.Collections.Generic; using NUnit.Framework; using net.sf.xmlunit.exceptions; using net.sf.xmlunit.input; @@ -33,8 +34,13 @@ Validator v = Validator.ForLanguage(Languages.W3C_XML_SCHEMA_NS_URI); v.SchemaSource = new StreamSource("../../../src/tests/resources/Book.xsd"); ValidationResult r = v.ValidateInstance(new StreamSource("../../../src/tests/resources/BookXsdGenerated.xml")); - Assert.IsTrue(r.Valid); - Assert.IsFalse(r.Problems.GetEnumerator().MoveNext()); + IEnumerator<ValidationProblem> problems = r.Problems.GetEnumerator(); + bool haveErrors = problems.MoveNext(); + + Assert.IsTrue(r.Valid, + "Expected validation to pass, first validation error" + + " is " + problems.Current.Message); + Assert.IsFalse(haveErrors); } [Test] This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bo...@us...> - 2010-07-15 06:22:50
|
Revision: 414 http://xmlunit.svn.sourceforge.net/xmlunit/?rev=414&view=rev Author: bodewig Date: 2010-07-15 06:22:44 +0000 (Thu, 15 Jul 2010) Log Message: ----------- Mono 2.4 inserts extra newlines, adapt tests Modified Paths: -------------- trunk/xmlunit/src/tests/net-core/builder/TransformTest.cs trunk/xmlunit/src/tests/net-core/transform/TransformationTest.cs Modified: trunk/xmlunit/src/tests/net-core/builder/TransformTest.cs =================================================================== --- trunk/xmlunit/src/tests/net-core/builder/TransformTest.cs 2010-07-12 15:18:14 UTC (rev 413) +++ trunk/xmlunit/src/tests/net-core/builder/TransformTest.cs 2010-07-15 06:22:44 UTC (rev 414) @@ -26,7 +26,8 @@ .WithStylesheet(Input.FromFile(TestResources.ANIMAL_XSL) .Build()) .Build() - .ToString()); + .ToString() + .Replace("\n", string.Empty)); } [Test] public void TransformAnimalToDocument() { Modified: trunk/xmlunit/src/tests/net-core/transform/TransformationTest.cs =================================================================== --- trunk/xmlunit/src/tests/net-core/transform/TransformationTest.cs 2010-07-12 15:18:14 UTC (rev 413) +++ trunk/xmlunit/src/tests/net-core/transform/TransformationTest.cs 2010-07-15 06:22:44 UTC (rev 414) @@ -29,7 +29,7 @@ [Test] public void TransformAnimalToString() { Assert.AreEqual("<?xml version=\"1.0\" encoding=\"utf-16\"?><dog />", - t.TransformToString()); + t.TransformToString().Replace("\n", string.Empty)); } [Test] public void TransformAnimalToDocument() { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bo...@us...> - 2010-07-12 15:18:21
|
Revision: 413 http://xmlunit.svn.sourceforge.net/xmlunit/?rev=413&view=rev Author: bodewig Date: 2010-07-12 15:18:14 +0000 (Mon, 12 Jul 2010) Log Message: ----------- implement element and attribute level comparisions, move tests to the compareNodes level, make .NET tests even closer to the Java ones Modified Paths: -------------- trunk/xmlunit/src/main/java-core/net/sf/xmlunit/diff/DOMDifferenceEngine.java.xml trunk/xmlunit/src/main/java-core/net/sf/xmlunit/diff/DifferenceEvaluators.java trunk/xmlunit/src/main/net-core/diff/DOMDifferenceEngine.xml trunk/xmlunit/src/main/net-core/diff/DifferenceEvaluators.cs trunk/xmlunit/src/tests/java-core/net/sf/xmlunit/diff/DOMDifferenceEngineTest.java trunk/xmlunit/src/tests/net-core/diff/DOMDifferenceEngineTest.cs Modified: trunk/xmlunit/src/main/java-core/net/sf/xmlunit/diff/DOMDifferenceEngine.java.xml =================================================================== --- trunk/xmlunit/src/main/java-core/net/sf/xmlunit/diff/DOMDifferenceEngine.java.xml 2010-07-06 15:01:27 UTC (rev 412) +++ trunk/xmlunit/src/main/java-core/net/sf/xmlunit/diff/DOMDifferenceEngine.java.xml 2010-07-12 15:18:14 UTC (rev 413) @@ -19,10 +19,12 @@ <import reference="javax.xml.transform.Source"/> <import reference="net.sf.xmlunit.util.Convert"/> + <import reference="org.w3c.dom.Attr"/> <import reference="org.w3c.dom.CharacterData"/> <import reference="org.w3c.dom.Document"/> <import reference="org.w3c.dom.DocumentType"/> <import reference="org.w3c.dom.Element"/> + <import reference="org.w3c.dom.NamedNodeMap"/> <import reference="org.w3c.dom.Node"/> <import reference="org.w3c.dom.NodeList"/> <import reference="org.w3c.dom.ProcessingInstruction"/> @@ -74,7 +76,8 @@ * * <p>package private to support tests.</p> */ - ComparisonResult nodeTypeSpecificComparison(Node control, Node test) { + private ComparisonResult nodeTypeSpecificComparison(Node control, + Node test) { switch (control.getNodeType()) { case Node.CDATA_SECTION_NODE: case Node.COMMENT_NODE: @@ -109,6 +112,12 @@ (DocumentType) test); } break; + case Node.ATTRIBUTE_NODE: + if (test instanceof Attr) { + return compareAttributes((Attr) control, + (Attr) test); + } + break; } return ComparisonResult.EQUAL; } @@ -135,7 +144,7 @@ <literal><![CDATA[ if (controlDt != null && testDt != null) { ]]></literal> - <compareMethodExpr method="nodeTypeSpecificComparison" + <compareMethodExpr method="compareNodes" controlExpr="controlDt" testExpr="testDt"/> <literal><![CDATA[ @@ -161,12 +170,61 @@ test, null, test.getSystemId())); } - ComparisonResult compareElements(Element control, - Element test) { - return ComparisonResult.EQUAL; + private ComparisonResult compareElements(Element control, + Element test) { +]]></literal> + <lastResultDef/> + <compare type="ELEMENT_TAG_NAME" property="getTagName()"/> + <literal><![CDATA[ + NamedNodeMap controlAttributes = control.getAttributes(); + NamedNodeMap testAttributes = test.getAttributes(); + final int controlAttrLen = controlAttributes.getLength(); + final int testAttrLen = testAttributes.getLength(); +]]></literal> + <compareExpr type="ELEMENT_NUM_ATTRIBUTES" + controlExpr="controlAttrLen" + testExpr="testAttrLen"/> + <literal><![CDATA[ + for (int i = 0; i < controlAttrLen; i++) { + final Attr controlAttr = (Attr) controlAttributes.item(i); + final Attr testAttr = findMatchingAttr(testAttributes, controlAttr); +]]></literal> + <compareExpr type="ATTR_NAME_LOOKUP" + controlExpr="Boolean.TRUE" + testExpr="Boolean.valueOf(testAttr != null)"/> + <literal><![CDATA[ + } +]]></literal> + <literal><![CDATA[ + for (int i = 0; i < testAttrLen; i++) { + final Attr testAttr = (Attr) testAttributes.item(i); + final Attr controlAttr = findMatchingAttr(controlAttributes, + testAttr); +]]></literal> + <compareExpr type="ATTR_NAME_LOOKUP" + controlExpr="Boolean.valueOf(controlAttr != null)" + testExpr="Boolean.TRUE"/> + <literal><![CDATA[ + } +]]></literal> + <literal><![CDATA[ + for (int i = 0; i < controlAttrLen; i++) { + final Attr controlAttr = (Attr) controlAttributes.item(i); + final Attr testAttr = findMatchingAttr(testAttributes, controlAttr); + if (testAttr != null) { +]]></literal> + <compareMethodExpr method="compareNodes" + controlExpr="controlAttr" + testExpr="testAttr"/> + <literal><![CDATA[ + } + } +]]></literal> + <literal><![CDATA[ + return lastResult; } - ComparisonResult + private ComparisonResult compareProcessingInstructions(ProcessingInstruction control, ProcessingInstruction test) { ]]></literal> @@ -178,8 +236,28 @@ test, null, test.getData())); } - ComparisonResult compareNodeLists(NodeList control, NodeList test) { + private ComparisonResult compareNodeLists(NodeList control, NodeList test) { return ComparisonResult.EQUAL; } + + private ComparisonResult compareAttributes(Attr control, Attr test) { ]]></literal> + <lastResultDef/> + <compare type="ATTR_VALUE_EXPLICITLY_SPECIFIED" property="getSpecified()"/> + <literal><![CDATA[ + return compare(new Comparison(ComparisonType.ATTR_VALUE, + control, null, control.getValue(), + test, null, test.getValue())); + } + + private static Attr findMatchingAttr(NamedNodeMap map, Attr attrToMatch) { + if (attrToMatch.getNamespaceURI() == null) { + return (Attr) map.getNamedItem(attrToMatch.getName()); + } else { + return (Attr) map.getNamedItemNS(attrToMatch.getNamespaceURI(), + attrToMatch.getLocalName()); + } + } + +]]></literal> </class> \ No newline at end of file Modified: trunk/xmlunit/src/main/java-core/net/sf/xmlunit/diff/DifferenceEvaluators.java =================================================================== --- trunk/xmlunit/src/main/java-core/net/sf/xmlunit/diff/DifferenceEvaluators.java 2010-07-06 15:01:27 UTC (rev 412) +++ trunk/xmlunit/src/main/java-core/net/sf/xmlunit/diff/DifferenceEvaluators.java 2010-07-12 15:18:14 UTC (rev 413) @@ -25,6 +25,17 @@ private static final Short TEXT = Node.CDATA_SECTION_NODE; /** + * Difference evaluator that just echos the result passed in. + */ + public static final DifferenceEvaluator Accept = + new DifferenceEvaluator() { + public ComparisonResult evaluate(Comparison comparison, + ComparisonResult outcome) { + return outcome; + } + }; + + /** * The "standard" difference evaluator which decides which * differences make two XML documents really different and which * still leave them similar. Modified: trunk/xmlunit/src/main/net-core/diff/DOMDifferenceEngine.xml =================================================================== --- trunk/xmlunit/src/main/net-core/diff/DOMDifferenceEngine.xml 2010-07-06 15:01:27 UTC (rev 412) +++ trunk/xmlunit/src/main/net-core/diff/DOMDifferenceEngine.xml 2010-07-12 15:18:14 UTC (rev 413) @@ -66,8 +66,8 @@ /// Dispatches to the node type specific comparison if one is /// defined for the given combination of nodes. /// </summary> - internal ComparisonResult NodeTypeSpecificComparison(XmlNode control, - XmlNode test) { + private ComparisonResult NodeTypeSpecificComparison(XmlNode control, + XmlNode test) { switch (control.NodeType) { case XmlNodeType.CDATA: case XmlNodeType.Comment: @@ -84,12 +84,10 @@ } break; case XmlNodeType.Element: -#if false - if (test instanceof Element) { - return compareElements((Element) control, - (Element) test); + if (test is XmlElement) { + return CompareElements((XmlElement) control, + (XmlElement) test); } -#endif break; case XmlNodeType.ProcessingInstruction: if (test is XmlProcessingInstruction) { @@ -104,6 +102,12 @@ (XmlDocumentType) test); } break; + case XmlNodeType.Attribute: + if (test is XmlAttribute) { + return CompareAttributes((XmlAttribute) control, + (XmlAttribute) test); + } + break; } return ComparisonResult.EQUAL; } @@ -130,7 +134,7 @@ <literal><![CDATA[ if (controlDt != null && testDt != null) { ]]></literal> - <compareMethodExpr method="NodeTypeSpecificComparison" + <compareMethodExpr method="CompareNodes" controlExpr="controlDt" testExpr="testDt"/> <literal><![CDATA[ @@ -160,6 +164,62 @@ test, null, test.SystemId)); } + private ComparisonResult CompareElements(XmlElement control, + XmlElement test) { +]]></literal> + <lastResultDef/> + <compare type="ELEMENT_TAG_NAME" property="Name"/> + <literal><![CDATA[ + XmlAttributeCollection controlAttributes = control.Attributes; + XmlAttributeCollection testAttributes = test.Attributes; + int controlAttrLen = controlAttributes.Count; + int testAttrLen = testAttributes.Count; +]]></literal> + <compareExpr type="ELEMENT_NUM_ATTRIBUTES" + controlExpr="controlAttrLen" + testExpr="testAttrLen"/> + <literal><![CDATA[ + for (int i = 0; i < controlAttrLen; i++) { + XmlAttribute controlAttr = controlAttributes[i]; + XmlAttribute testAttr = FindMatchingAttr(testAttributes, + controlAttr); +]]></literal> + <compareExpr type="ATTR_NAME_LOOKUP" + controlExpr="true" + testExpr="testAttr != null"/> + <literal><![CDATA[ + } +]]></literal> + <literal><![CDATA[ + for (int i = 0; i < testAttrLen; i++) { + XmlAttribute testAttr = testAttributes[i]; + XmlAttribute controlAttr = FindMatchingAttr(controlAttributes, + testAttr); +]]></literal> + <compareExpr type="ATTR_NAME_LOOKUP" + controlExpr="controlAttr != null" + testExpr="true"/> + <literal><![CDATA[ + } +]]></literal> + <literal><![CDATA[ + for (int i = 0; i < controlAttrLen; i++) { + XmlAttribute controlAttr = controlAttributes[i]; + XmlAttribute testAttr = FindMatchingAttr(testAttributes, + controlAttr); + if (testAttr != null) { +]]></literal> + <compareMethodExpr method="CompareNodes" + controlExpr="controlAttr" + testExpr="testAttr"/> + <literal><![CDATA[ + } + } +]]></literal> + <literal><![CDATA[ + return lastResult; + } + private ComparisonResult CompareProcessingInstructions(XmlProcessingInstruction control, XmlProcessingInstruction test) { @@ -172,10 +232,31 @@ test, null, test.Data)); } - ComparisonResult CompareNodeLists(XmlNodeList control, - XmlNodeList test) { + private ComparisonResult CompareNodeLists(XmlNodeList control, + XmlNodeList test) { return ComparisonResult.EQUAL; } + private ComparisonResult CompareAttributes(XmlAttribute control, + XmlAttribute test) { ]]></literal> + <lastResultDef/> + <compare type="ATTR_VALUE_EXPLICITLY_SPECIFIED" property="Specified"/> + <literal><![CDATA[ + return Compare(new Comparison(ComparisonType.ATTR_VALUE, + control, null, control.Value, + test, null, test.Value)); + } + + private static XmlAttribute FindMatchingAttr(XmlAttributeCollection map, + XmlAttribute attrToMatch) { + if (attrToMatch.NamespaceURI == null) { + return map.GetNamedItem(attrToMatch.Name) as XmlAttribute; + } else { + return map.GetNamedItem(attrToMatch.LocalName, + attrToMatch.NamespaceURI) + as XmlAttribute; + } + } +]]></literal> </class> \ No newline at end of file Modified: trunk/xmlunit/src/main/net-core/diff/DifferenceEvaluators.cs =================================================================== --- trunk/xmlunit/src/main/net-core/diff/DifferenceEvaluators.cs 2010-07-06 15:01:27 UTC (rev 412) +++ trunk/xmlunit/src/main/net-core/diff/DifferenceEvaluators.cs 2010-07-12 15:18:14 UTC (rev 413) @@ -23,6 +23,14 @@ private DifferenceEvaluators() { } /// <summary> + /// Difference evaluator that just echos the result passed in. + /// </summary> + public static ComparisonResult Accept(Comparison comparison, + ComparisonResult outcome) { + return outcome; + } + + /// <summary> /// The "standard" difference evaluator which decides which /// differences make two XML documents really different and which /// still leave them similar. Modified: trunk/xmlunit/src/tests/java-core/net/sf/xmlunit/diff/DOMDifferenceEngineTest.java =================================================================== --- trunk/xmlunit/src/tests/java-core/net/sf/xmlunit/diff/DOMDifferenceEngineTest.java 2010-07-06 15:01:27 UTC (rev 412) +++ trunk/xmlunit/src/tests/java-core/net/sf/xmlunit/diff/DOMDifferenceEngineTest.java 2010-07-12 15:18:14 UTC (rev 413) @@ -21,7 +21,9 @@ import net.sf.xmlunit.util.Convert; import org.junit.Before; import org.junit.Test; +import org.w3c.dom.Attr; import org.w3c.dom.CDATASection; +import org.w3c.dom.CharacterData; import org.w3c.dom.Comment; import org.w3c.dom.Document; import org.w3c.dom.DocumentType; @@ -51,7 +53,8 @@ } public void comparisonPerformed(Comparison comparison, ComparisonResult outcome) { - assertTrue(invoked < expectedInvocations); + assertTrue(invoked + " should be less than " + expectedInvocations, + invoked < expectedInvocations); invoked++; assertEquals(type, comparison.getType()); assertEquals(ComparisonResult.CRITICAL, outcome); @@ -143,7 +146,25 @@ DOMDifferenceEngine d = new DOMDifferenceEngine(); DiffExpecter ex = new DiffExpecter(ComparisonType.TEXT_VALUE, 9); d.addDifferenceListener(ex); - d.setDifferenceEvaluator(DifferenceEvaluators.DefaultStopWhenDifferent); + d.setDifferenceEvaluator(new DifferenceEvaluator() { + public ComparisonResult evaluate(Comparison comparison, + ComparisonResult outcome) { + if (comparison.getType() == ComparisonType.NODE_TYPE) { + if (outcome == ComparisonResult.EQUAL + || ( + comparison.getControlNodeDetails() + .getNode() instanceof CharacterData + && + comparison.getTestNodeDetails() + .getNode() instanceof CharacterData + )) { + return ComparisonResult.EQUAL; + } + } + return DifferenceEvaluators.DefaultStopWhenDifferent + .evaluate(comparison, outcome); + } + }); Comment fooComment = doc.createComment("foo"); Comment barComment = doc.createComment("bar"); @@ -153,45 +174,42 @@ CDATASection barCDATASection = doc.createCDATASection("bar"); assertEquals(ComparisonResult.EQUAL, - d.nodeTypeSpecificComparison(fooComment, fooComment)); + d.compareNodes(fooComment, fooComment)); assertEquals(ComparisonResult.CRITICAL, - d.nodeTypeSpecificComparison(fooComment, barComment)); + d.compareNodes(fooComment, barComment)); assertEquals(ComparisonResult.EQUAL, - d.nodeTypeSpecificComparison(fooText, fooText)); + d.compareNodes(fooText, fooText)); assertEquals(ComparisonResult.CRITICAL, - d.nodeTypeSpecificComparison(fooText, barText)); + d.compareNodes(fooText, barText)); assertEquals(ComparisonResult.EQUAL, - d.nodeTypeSpecificComparison(fooCDATASection, fooCDATASection)); + d.compareNodes(fooCDATASection, fooCDATASection)); assertEquals(ComparisonResult.CRITICAL, - d.nodeTypeSpecificComparison(fooCDATASection, barCDATASection)); + d.compareNodes(fooCDATASection, barCDATASection)); assertEquals(ComparisonResult.EQUAL, - d.nodeTypeSpecificComparison(fooComment, fooText)); + d.compareNodes(fooComment, fooText)); assertEquals(ComparisonResult.CRITICAL, - d.nodeTypeSpecificComparison(fooComment, barText)); + d.compareNodes(fooComment, barText)); assertEquals(ComparisonResult.EQUAL, - d.nodeTypeSpecificComparison(fooComment, fooCDATASection)); + d.compareNodes(fooComment, fooCDATASection)); assertEquals(ComparisonResult.CRITICAL, - d.nodeTypeSpecificComparison(fooComment, barCDATASection)); + d.compareNodes(fooComment, barCDATASection)); assertEquals(ComparisonResult.EQUAL, - d.nodeTypeSpecificComparison(fooText, fooComment)); + d.compareNodes(fooText, fooComment)); assertEquals(ComparisonResult.CRITICAL, - d.nodeTypeSpecificComparison(fooText, barComment)); + d.compareNodes(fooText, barComment)); assertEquals(ComparisonResult.EQUAL, - d.nodeTypeSpecificComparison(fooText, fooCDATASection)); + d.compareNodes(fooText, fooCDATASection)); assertEquals(ComparisonResult.CRITICAL, - d.nodeTypeSpecificComparison(fooText, barCDATASection)); + d.compareNodes(fooText, barCDATASection)); assertEquals(ComparisonResult.EQUAL, - d.nodeTypeSpecificComparison(fooCDATASection, fooText)); + d.compareNodes(fooCDATASection, fooText)); assertEquals(ComparisonResult.CRITICAL, - d.nodeTypeSpecificComparison(fooCDATASection, barText)); + d.compareNodes(fooCDATASection, barText)); assertEquals(ComparisonResult.EQUAL, - d.nodeTypeSpecificComparison(fooCDATASection, fooComment)); + d.compareNodes(fooCDATASection, fooComment)); assertEquals(ComparisonResult.CRITICAL, - d.nodeTypeSpecificComparison(fooCDATASection, barComment)); - assertEquals(ComparisonResult.EQUAL, - d.nodeTypeSpecificComparison(fooText, - doc.createElement("bar"))); + d.compareNodes(fooCDATASection, barComment)); assertEquals(9, ex.invoked); } @@ -203,13 +221,8 @@ ProcessingInstruction foo1 = doc.createProcessingInstruction("foo", "1"); ProcessingInstruction bar1 = doc.createProcessingInstruction("bar", "1"); - assertEquals(ComparisonResult.EQUAL, - d.nodeTypeSpecificComparison(foo1, foo1)); - assertEquals(ComparisonResult.CRITICAL, - d.nodeTypeSpecificComparison(foo1, bar1)); - assertEquals(ComparisonResult.EQUAL, - d.nodeTypeSpecificComparison(foo1, - doc.createElement("bar"))); + assertEquals(ComparisonResult.EQUAL, d.compareNodes(foo1, foo1)); + assertEquals(ComparisonResult.CRITICAL, d.compareNodes(foo1, bar1)); assertEquals(1, ex.invoked); d = new DOMDifferenceEngine(); @@ -217,10 +230,8 @@ d.addDifferenceListener(ex); d.setDifferenceEvaluator(DifferenceEvaluators.DefaultStopWhenDifferent); ProcessingInstruction foo2 = doc.createProcessingInstruction("foo", "2"); - assertEquals(ComparisonResult.EQUAL, - d.nodeTypeSpecificComparison(foo1, foo1)); - assertEquals(ComparisonResult.CRITICAL, - d.nodeTypeSpecificComparison(foo1, foo2)); + assertEquals(ComparisonResult.EQUAL, d.compareNodes(foo1, foo1)); + assertEquals(ComparisonResult.CRITICAL, d.compareNodes(foo1, foo2)); assertEquals(1, ex.invoked); } @@ -232,11 +243,18 @@ public ComparisonResult evaluate(Comparison comparison, ComparisonResult outcome) { if (comparison.getType() + == ComparisonType.CHILD_NODELIST_LENGTH) { + assertEquals(ComparisonResult.DIFFERENT, outcome); + return ComparisonResult.EQUAL; + } + if (comparison.getType() == ComparisonType.HAS_DOCTYPE_DECLARATION) { assertEquals(ComparisonResult.DIFFERENT, outcome); return ComparisonResult.CRITICAL; } - assertEquals(ComparisonResult.EQUAL, outcome); + assertEquals("Expected EQUAL for " + comparison.getType() + + " comparison.", + ComparisonResult.EQUAL, outcome); return ComparisonResult.EQUAL; } }); @@ -248,8 +266,7 @@ + "\">" + "<Book/>") .build()); - assertEquals(ComparisonResult.CRITICAL, - d.nodeTypeSpecificComparison(d1, d2)); + assertEquals(ComparisonResult.CRITICAL, d.compareNodes(d1, d2)); assertEquals(1, ex.invoked); d = new DOMDifferenceEngine(); @@ -264,7 +281,7 @@ + " encoding=\"UTF-8\"?>" + "<Book/>").build()); assertEquals(ComparisonResult.CRITICAL, - d.nodeTypeSpecificComparison(d1, d2)); + d.compareNodes(d1, d2)); assertEquals(1, ex.invoked); d = new DOMDifferenceEngine(); @@ -279,7 +296,7 @@ + " standalone=\"no\"?>" + "<Book/>").build()); assertEquals(ComparisonResult.CRITICAL, - d.nodeTypeSpecificComparison(d1, d2)); + d.compareNodes(d1, d2)); assertEquals(1, ex.invoked); d = new DOMDifferenceEngine(); @@ -305,7 +322,7 @@ + " encoding=\"UTF-16\"?>" + "<Book/>").build()); assertEquals(ComparisonResult.CRITICAL, - d.nodeTypeSpecificComparison(d1, d2)); + d.compareNodes(d1, d2)); assertEquals(1, ex.invoked); } @@ -346,8 +363,7 @@ d.setDifferenceEvaluator(DifferenceEvaluators.DefaultStopWhenDifferent); DocumentType dt1 = new DocType("name", "pub", "system"); DocumentType dt2 = new DocType("name2", "pub", "system"); - assertEquals(ComparisonResult.CRITICAL, - d.nodeTypeSpecificComparison(dt1, dt2)); + assertEquals(ComparisonResult.CRITICAL, d.compareNodes(dt1, dt2)); assertEquals(1, ex.invoked); d = new DOMDifferenceEngine(); @@ -355,8 +371,7 @@ d.addDifferenceListener(ex); d.setDifferenceEvaluator(DifferenceEvaluators.DefaultStopWhenDifferent); dt2 = new DocType("name", "pub2", "system"); - assertEquals(ComparisonResult.CRITICAL, - d.nodeTypeSpecificComparison(dt1, dt2)); + assertEquals(ComparisonResult.CRITICAL, d.compareNodes(dt1, dt2)); assertEquals(1, ex.invoked); d = new DOMDifferenceEngine(); @@ -375,8 +390,81 @@ } }); dt2 = new DocType("name", "pub", "system2"); - assertEquals(ComparisonResult.CRITICAL, - d.nodeTypeSpecificComparison(dt1, dt2)); + assertEquals(ComparisonResult.CRITICAL, d.compareNodes(dt1, dt2)); assertEquals(1, ex.invoked); } + + @Test public void compareElements() { + DOMDifferenceEngine d = new DOMDifferenceEngine(); + DiffExpecter ex = new DiffExpecter(ComparisonType.ELEMENT_TAG_NAME); + d.addDifferenceListener(ex); + d.setDifferenceEvaluator(DifferenceEvaluators.DefaultStopWhenDifferent); + Element e1 = doc.createElement("foo"); + Element e2 = doc.createElement("foo"); + Element e3 = doc.createElement("bar"); + assertEquals(ComparisonResult.EQUAL, d.compareNodes(e1, e2)); + assertEquals(ComparisonResult.CRITICAL, d.compareNodes(e1, e3)); + assertEquals(1, ex.invoked); + + d = new DOMDifferenceEngine(); + ex = new DiffExpecter(ComparisonType.ELEMENT_NUM_ATTRIBUTES); + e1.setAttribute("attr1", "value1"); + d.addDifferenceListener(ex); + d.setDifferenceEvaluator(DifferenceEvaluators.DefaultStopWhenDifferent); + assertEquals(ComparisonResult.CRITICAL, d.compareNodes(e1, e2)); + assertEquals(1, ex.invoked); + + d = new DOMDifferenceEngine(); + ex = new DiffExpecter(ComparisonType.ATTR_NAME_LOOKUP); + e2.setAttributeNS("urn:xmlunit:test", "attr1", "value1"); + d.addDifferenceListener(ex); + d.setDifferenceEvaluator(DifferenceEvaluators.DefaultStopWhenDifferent); + assertEquals(ComparisonResult.CRITICAL, d.compareNodes(e1, e2)); + assertEquals(1, ex.invoked); + + + d = new DOMDifferenceEngine(); + d.addDifferenceListener(new ComparisonListener() { + public void comparisonPerformed(Comparison comparison, + ComparisonResult outcome) { + fail("unexpected Comparison of type " + comparison.getType() + + " with outcome " + outcome + " and values '" + + comparison.getControlNodeDetails().getValue() + + "' and '" + + comparison.getTestNodeDetails().getValue() + "'"); + } + }); + e1.setAttributeNS("urn:xmlunit:test", "attr1", "value1"); + e2.setAttributeNS(null, "attr1", "value1"); + d.addDifferenceListener(ex); + d.setDifferenceEvaluator(DifferenceEvaluators.DefaultStopWhenDifferent); + assertEquals(ComparisonResult.EQUAL, d.compareNodes(e1, e2)); + } + + @Test public void compareAttributes() { + Attr a1 = doc.createAttribute("foo"); + Attr a2 = doc.createAttribute("foo"); + + DOMDifferenceEngine d = new DOMDifferenceEngine(); + DiffExpecter ex = new DiffExpecter(ComparisonType.ATTR_VALUE_EXPLICITLY_SPECIFIED); + /* Can't reset "explicitly set" state for Documents created via API + d.addDifferenceListener(ex); + d.setDifferenceEvaluator(DifferenceEvaluators.Accept); + a2.setValue(""); + assertEquals(ComparisonResult.CRITICAL, d.compareNodes(a1, a2)); + assertEquals(1, ex.invoked); + + d = new DOMDifferenceEngine(); + */ + ex = new DiffExpecter(ComparisonType.ATTR_VALUE); + d.addDifferenceListener(ex); + d.setDifferenceEvaluator(DifferenceEvaluators.DefaultStopWhenDifferent); + Attr a3 = doc.createAttribute("foo"); + a1.setValue("foo"); + a2.setValue("foo"); + a3.setValue("bar"); + assertEquals(ComparisonResult.EQUAL, d.compareNodes(a1, a2)); + assertEquals(ComparisonResult.CRITICAL, d.compareNodes(a1, a3)); + assertEquals(1, ex.invoked); + } } Modified: trunk/xmlunit/src/tests/net-core/diff/DOMDifferenceEngineTest.cs =================================================================== --- trunk/xmlunit/src/tests/net-core/diff/DOMDifferenceEngineTest.cs 2010-07-06 15:01:27 UTC (rev 412) +++ trunk/xmlunit/src/tests/net-core/diff/DOMDifferenceEngineTest.cs 2010-07-12 15:18:14 UTC (rev 413) @@ -27,6 +27,24 @@ } } + private class DiffExpecter { + internal int invoked = 0; + private readonly int expectedInvocations; + private readonly ComparisonType type; + internal DiffExpecter(ComparisonType type) : this(type, 1) { } + internal DiffExpecter(ComparisonType type, int expected) { + this.type = type; + this.expectedInvocations = expected; + } + public void ComparisonPerformed(Comparison comparison, + ComparisonResult outcome) { + Assert.Greater(expectedInvocations, invoked); + invoked++; + Assert.AreEqual(type, comparison.Type); + Assert.AreEqual(ComparisonResult.CRITICAL, outcome); + } + } + private XmlDocument doc; [SetUp] @@ -37,20 +55,14 @@ [Test] public void CompareNodesOfDifferentType() { DOMDifferenceEngine d = new DOMDifferenceEngine(); - int invocations = 0; - d.DifferenceListener += delegate(Comparison comp, - ComparisonResult r) { - Assert.AreEqual(0, invocations); - invocations++; - Assert.AreEqual(ComparisonType.NODE_TYPE, comp.Type); - Assert.AreEqual(ComparisonResult.CRITICAL, r); - }; + DiffExpecter ex = new DiffExpecter(ComparisonType.NODE_TYPE); + d.DifferenceListener += ex.ComparisonPerformed; d.DifferenceEvaluator = DifferenceEvaluators.DefaultStopWhenDifferent; Assert.AreEqual(ComparisonResult.CRITICAL, d.CompareNodes(doc.CreateElement("x"), doc.CreateComment("x"))); - Assert.AreEqual(1, invocations); + Assert.AreEqual(1, ex.invoked); } [Test] @@ -70,33 +82,21 @@ [Test] public void CompareNodesDifferentNS() { DOMDifferenceEngine d = new DOMDifferenceEngine(); - int invocations = 0; - d.DifferenceListener += delegate(Comparison comp, - ComparisonResult r) { - Assert.AreEqual(0, invocations); - invocations++; - Assert.AreEqual(ComparisonType.NAMESPACE_URI, comp.Type); - Assert.AreEqual(ComparisonResult.CRITICAL, r); - }; + DiffExpecter ex = new DiffExpecter(ComparisonType.NAMESPACE_URI); + d.DifferenceListener += ex.ComparisonPerformed; d.DifferenceEvaluator = DifferenceEvaluators.DefaultStopWhenDifferent; Assert.AreEqual(ComparisonResult.CRITICAL, d.CompareNodes(doc.CreateElement("y", "x"), doc.CreateElement("y", "z"))); - Assert.AreEqual(1, invocations); + Assert.AreEqual(1, ex.invoked); } [Test] public void CompareNodesDifferentPrefix() { DOMDifferenceEngine d = new DOMDifferenceEngine(); - int invocations = 0; - d.DifferenceListener += delegate(Comparison comp, - ComparisonResult r) { - Assert.AreEqual(0, invocations); - invocations++; - Assert.AreEqual(ComparisonType.NAMESPACE_PREFIX, comp.Type); - Assert.AreEqual(ComparisonResult.CRITICAL, r); - }; + DiffExpecter ex = new DiffExpecter(ComparisonType.NAMESPACE_PREFIX); + d.DifferenceListener += ex.ComparisonPerformed; d.DifferenceEvaluator = delegate(Comparison comparison, ComparisonResult outcome) { if (comparison.Type == ComparisonType.NAMESPACE_PREFIX) { @@ -109,21 +109,15 @@ Assert.AreEqual(ComparisonResult.CRITICAL, d.CompareNodes(doc.CreateElement("x:y", "x"), doc.CreateElement("z:y", "x"))); - Assert.AreEqual(1, invocations); + Assert.AreEqual(1, ex.invoked); } [Test] public void CompareNodesDifferentNumberOfChildren() { DOMDifferenceEngine d = new DOMDifferenceEngine(); - int invocations = 0; - d.DifferenceListener += delegate(Comparison comp, - ComparisonResult r) { - Assert.Greater(2, invocations); - invocations++; - Assert.AreEqual(ComparisonType.CHILD_NODELIST_LENGTH, - comp.Type); - Assert.AreEqual(ComparisonResult.CRITICAL, r); - }; + DiffExpecter ex = + new DiffExpecter(ComparisonType.CHILD_NODELIST_LENGTH, 2); + d.DifferenceListener += ex.ComparisonPerformed; d.DifferenceEvaluator = DifferenceEvaluators.DefaultStopWhenDifferent; XmlElement e1 = doc.CreateElement("x"); @@ -131,28 +125,35 @@ Assert.AreEqual(ComparisonResult.EQUAL, d.CompareNodes(e1, e2)); e1.AppendChild(doc.CreateElement("x")); Assert.AreEqual(ComparisonResult.CRITICAL, d.CompareNodes(e1, e2)); - Assert.AreEqual(1, invocations); + Assert.AreEqual(1, ex.invoked); e2.AppendChild(doc.CreateElement("x")); Assert.AreEqual(ComparisonResult.EQUAL, d.CompareNodes(e1, e2)); e2.AppendChild(doc.CreateElement("x")); Assert.AreEqual(ComparisonResult.CRITICAL, d.CompareNodes(e1, e2)); - Assert.AreEqual(2, invocations); + Assert.AreEqual(2, ex.invoked); } [Test] public void CompareCharacterData() { DOMDifferenceEngine d = new DOMDifferenceEngine(); - int invocations = 0; - d.DifferenceListener += delegate(Comparison comp, - ComparisonResult r) { - Assert.Greater(9, invocations); - invocations++; - Assert.AreEqual(ComparisonType.TEXT_VALUE, - comp.Type); - Assert.AreEqual(ComparisonResult.CRITICAL, r); + DiffExpecter ex = new DiffExpecter(ComparisonType.TEXT_VALUE, 9); + d.DifferenceListener += ex.ComparisonPerformed; + d.DifferenceEvaluator = delegate(Comparison comparison, + ComparisonResult outcome) { + if (comparison.Type == ComparisonType.NODE_TYPE) { + if (outcome == ComparisonResult.EQUAL + || ( + comparison.ControlNodeDetails.Node + is XmlCharacterData + && + comparison.TestNodeDetails.Node is XmlCharacterData + )) { + return ComparisonResult.EQUAL; + } + } + return DifferenceEvaluators.DefaultStopWhenDifferent(comparison, + outcome); }; - d.DifferenceEvaluator = - DifferenceEvaluators.DefaultStopWhenDifferent; XmlComment fooComment = doc.CreateComment("foo"); XmlComment barComment = doc.CreateComment("bar"); @@ -162,73 +163,51 @@ XmlCDataSection barCDataSection = doc.CreateCDataSection("bar"); Assert.AreEqual(ComparisonResult.EQUAL, - d.NodeTypeSpecificComparison(fooComment, - fooComment)); + d.CompareNodes(fooComment, fooComment)); Assert.AreEqual(ComparisonResult.CRITICAL, - d.NodeTypeSpecificComparison(fooComment, - barComment)); + d.CompareNodes(fooComment, barComment)); Assert.AreEqual(ComparisonResult.EQUAL, - d.NodeTypeSpecificComparison(fooText, fooText)); + d.CompareNodes(fooText, fooText)); Assert.AreEqual(ComparisonResult.CRITICAL, - d.NodeTypeSpecificComparison(fooText, barText)); + d.CompareNodes(fooText, barText)); Assert.AreEqual(ComparisonResult.EQUAL, - d.NodeTypeSpecificComparison(fooCDataSection, - fooCDataSection)); + d.CompareNodes(fooCDataSection, fooCDataSection)); Assert.AreEqual(ComparisonResult.CRITICAL, - d.NodeTypeSpecificComparison(fooCDataSection, - barCDataSection)); + d.CompareNodes(fooCDataSection, barCDataSection)); Assert.AreEqual(ComparisonResult.EQUAL, - d.NodeTypeSpecificComparison(fooComment, fooText)); + d.CompareNodes(fooComment, fooText)); Assert.AreEqual(ComparisonResult.CRITICAL, - d.NodeTypeSpecificComparison(fooComment, barText)); + d.CompareNodes(fooComment, barText)); Assert.AreEqual(ComparisonResult.EQUAL, - d.NodeTypeSpecificComparison(fooComment, - fooCDataSection)); + d.CompareNodes(fooComment, fooCDataSection)); Assert.AreEqual(ComparisonResult.CRITICAL, - d.NodeTypeSpecificComparison(fooComment, - barCDataSection)); + d.CompareNodes(fooComment, barCDataSection)); Assert.AreEqual(ComparisonResult.EQUAL, - d.NodeTypeSpecificComparison(fooText, - fooComment)); + d.CompareNodes(fooText, fooComment)); Assert.AreEqual(ComparisonResult.CRITICAL, - d.NodeTypeSpecificComparison(fooText, barComment)); + d.CompareNodes(fooText, barComment)); Assert.AreEqual(ComparisonResult.EQUAL, - d.NodeTypeSpecificComparison(fooText, - fooCDataSection)); + d.CompareNodes(fooText, fooCDataSection)); Assert.AreEqual(ComparisonResult.CRITICAL, - d.NodeTypeSpecificComparison(fooText, - barCDataSection)); + d.CompareNodes(fooText, barCDataSection)); Assert.AreEqual(ComparisonResult.EQUAL, - d.NodeTypeSpecificComparison(fooCDataSection, - fooText)); + d.CompareNodes(fooCDataSection, fooText)); Assert.AreEqual(ComparisonResult.CRITICAL, - d.NodeTypeSpecificComparison(fooCDataSection, - barText)); + d.CompareNodes(fooCDataSection, barText)); Assert.AreEqual(ComparisonResult.EQUAL, - d.NodeTypeSpecificComparison(fooCDataSection, - fooComment)); + d.CompareNodes(fooCDataSection, fooComment)); Assert.AreEqual(ComparisonResult.CRITICAL, - d.NodeTypeSpecificComparison(fooCDataSection, - barComment)); - Assert.AreEqual(ComparisonResult.EQUAL, - d.NodeTypeSpecificComparison(fooText, - doc.CreateElement("bar"))); - Assert.AreEqual(9, invocations); + d.CompareNodes(fooCDataSection, barComment)); + Assert.AreEqual(9, ex.invoked); } [Test] public void CompareProcessingInstructions() { DOMDifferenceEngine d = new DOMDifferenceEngine(); - int invocations = 0; - d.DifferenceListener += delegate(Comparison comp, - ComparisonResult r) { - Assert.AreEqual(0, invocations); - invocations++; - Assert.AreEqual(ComparisonType.PROCESSING_INSTRUCTION_TARGET, - comp.Type); - Assert.AreEqual(ComparisonResult.CRITICAL, r); - }; + DiffExpecter ex = + new DiffExpecter(ComparisonType.PROCESSING_INSTRUCTION_TARGET); + d.DifferenceListener += ex.ComparisonPerformed; d.DifferenceEvaluator = DifferenceEvaluators.DefaultStopWhenDifferent; @@ -237,47 +216,30 @@ XmlProcessingInstruction bar1 = doc.CreateProcessingInstruction("bar", "1"); Assert.AreEqual(ComparisonResult.EQUAL, - d.NodeTypeSpecificComparison(foo1, foo1)); + d.CompareNodes(foo1, foo1)); Assert.AreEqual(ComparisonResult.CRITICAL, - d.NodeTypeSpecificComparison(foo1, bar1)); - Assert.AreEqual(ComparisonResult.EQUAL, - d.NodeTypeSpecificComparison(foo1, - doc.CreateElement("bar"))); - Assert.AreEqual(1, invocations); + d.CompareNodes(foo1, bar1)); + Assert.AreEqual(1, ex.invoked); d = new DOMDifferenceEngine(); - invocations = 0; - d.DifferenceListener += delegate(Comparison comp, - ComparisonResult r) { - Assert.AreEqual(0, invocations); - invocations++; - Assert.AreEqual(ComparisonType.PROCESSING_INSTRUCTION_DATA, - comp.Type); - Assert.AreEqual(ComparisonResult.CRITICAL, r); - }; + ex = new DiffExpecter(ComparisonType.PROCESSING_INSTRUCTION_DATA); + d.DifferenceListener += ex.ComparisonPerformed; d.DifferenceEvaluator = DifferenceEvaluators.DefaultStopWhenDifferent; XmlProcessingInstruction foo2 = doc.CreateProcessingInstruction("foo", "2"); - Assert.AreEqual(ComparisonResult.EQUAL, - d.NodeTypeSpecificComparison(foo1, foo1)); + Assert.AreEqual(ComparisonResult.EQUAL, d.CompareNodes(foo1, foo1)); Assert.AreEqual(ComparisonResult.CRITICAL, - d.NodeTypeSpecificComparison(foo1, foo2)); - Assert.AreEqual(1, invocations); + d.CompareNodes(foo1, foo2)); + Assert.AreEqual(1, ex.invoked); } [Test] public void CompareDocuments() { DOMDifferenceEngine d = new DOMDifferenceEngine(); - int invocations = 0; - d.DifferenceListener += delegate(Comparison comp, - ComparisonResult r) { - Assert.AreEqual(0, invocations); - invocations++; - Assert.AreEqual(ComparisonType.HAS_DOCTYPE_DECLARATION, - comp.Type); - Assert.AreEqual(ComparisonResult.CRITICAL, r); - }; + DiffExpecter ex = + new DiffExpecter(ComparisonType.HAS_DOCTYPE_DECLARATION); + d.DifferenceListener += ex.ComparisonPerformed; d.DifferenceEvaluator = delegate(Comparison comparison, ComparisonResult outcome) { if (comparison.Type == ComparisonType.HAS_DOCTYPE_DECLARATION) { @@ -301,23 +263,16 @@ + "<Book/>") .Build()); Assert.AreEqual(ComparisonResult.CRITICAL, - d.NodeTypeSpecificComparison(d1, d2)); - Assert.AreEqual(1, invocations); + d.CompareNodes(d1, d2)); + Assert.AreEqual(1, ex.invoked); #endif #if false // need a way to figure out the XML_* differences // .NET doesn't like XML 1.1 anyway - invocations = 0; d = new DOMDifferenceEngine(); - d.DifferenceListener += delegate(Comparison comp, - ComparisonResult r) { - Assert.AreEqual(0, invocations); - invocations++; - Assert.AreEqual(ComparisonType.XML_VERSION, - comp.Type); - Assert.AreEqual(ComparisonResult.CRITICAL, r); - }; + ex = new DiffExpecter(ComparisonType.XML_VERSION); + d.DifferenceListener += ex.ComparisonPerformed; d.DifferenceEvaluator = DifferenceEvaluators.DefaultStopWhenDifferent; @@ -330,21 +285,14 @@ + " encoding=\"UTF-8\"?>" + "<Book/>").Build()); Assert.AreEqual(ComparisonResult.CRITICAL, - d.NodeTypeSpecificComparison(d1, d2)); - Assert.AreEqual(1, invocations); + d.CompareNodes(d1, d2)); + Assert.AreEqual(1, ex.invoked); #endif #if false // need a way to figure out the XML_* differences - invocations = 0; d = new DOMDifferenceEngine(); - d.DifferenceListener += delegate(Comparison comp, - ComparisonResult r) { - Assert.AreEqual(0, invocations); - invocations++; - Assert.AreEqual(ComparisonType.XML_STANDALONE, - comp.Type); - Assert.AreEqual(ComparisonResult.CRITICAL, r); - }; + ex = new DiffExpecter(ComparisonType.XML_STANDALONE); + d.DifferenceListener += ex.ComparisonPerformed; d.DifferenceEvaluator = DifferenceEvaluators.DefaultStopWhenDifferent; @@ -357,21 +305,14 @@ + " standalone=\"no\"?>" + "<Book/>").Build()); Assert.AreEqual(ComparisonResult.CRITICAL, - d.NodeTypeSpecificComparison(d1, d2)); - Assert.AreEqual(1, invocations); + d.CompareNodes(d1, d2)); + Assert.AreEqual(1, ex.invoked); #endif #if false // need a way to figure out the XML_* differences - invocations = 0; d = new DOMDifferenceEngine(); - d.DifferenceListener += delegate(Comparison comp, - ComparisonResult r) { - Assert.AreEqual(0, invocations); - invocations++; - Assert.AreEqual(ComparisonType.XML_ENCODING, - comp.Type); - Assert.AreEqual(ComparisonResult.CRITICAL, r); - }; + ex = new DiffExpecter(ComparisonType.XML_ENCODING); + d.DifferenceListener += ex.ComparisonPerformed; d.DifferenceEvaluator = delegate(Comparison comparison, ComparisonResult outcome) { if (comparison.Type == ComparisonType.XML_ENCODING) { @@ -391,23 +332,16 @@ + " encoding=\"UTF-16\"?>" + "<Book/>").Build()); Assert.AreEqual(ComparisonResult.CRITICAL, - d.NodeTypeSpecificComparison(d1, d2)); - Assert.AreEqual(1, invocations); + d.CompareNodes(d1, d2)); + Assert.AreEqual(1, ex.invoked); #endif } [Test] public void CompareDocTypes() { - int invocations = 0; DOMDifferenceEngine d = new DOMDifferenceEngine(); - d.DifferenceListener += delegate(Comparison comp, - ComparisonResult r) { - Assert.AreEqual(0, invocations); - invocations++; - Assert.AreEqual(ComparisonType.DOCTYPE_NAME, - comp.Type); - Assert.AreEqual(ComparisonResult.CRITICAL, r); - }; + DiffExpecter ex = new DiffExpecter(ComparisonType.DOCTYPE_NAME); + d.DifferenceListener += ex.ComparisonPerformed; d.DifferenceEvaluator = DifferenceEvaluators.DefaultStopWhenDifferent; @@ -418,37 +352,23 @@ TestResources.BOOK_DTD, null); Assert.AreEqual(ComparisonResult.CRITICAL, - d.NodeTypeSpecificComparison(dt1, dt2)); - Assert.AreEqual(1, invocations); + d.CompareNodes(dt1, dt2)); + Assert.AreEqual(1, ex.invoked); - invocations = 0; d = new DOMDifferenceEngine(); - d.DifferenceListener += delegate(Comparison comp, - ComparisonResult r) { - Assert.AreEqual(0, invocations); - invocations++; - Assert.AreEqual(ComparisonType.DOCTYPE_PUBLIC_ID, - comp.Type); - Assert.AreEqual(ComparisonResult.CRITICAL, r); - }; + ex = new DiffExpecter(ComparisonType.DOCTYPE_PUBLIC_ID); + d.DifferenceListener += ex.ComparisonPerformed; d.DifferenceEvaluator = DifferenceEvaluators.DefaultStopWhenDifferent; dt2 = doc.CreateDocumentType("name", "pub2", TestResources.BOOK_DTD, null); Assert.AreEqual(ComparisonResult.CRITICAL, - d.NodeTypeSpecificComparison(dt1, dt2)); - Assert.AreEqual(1, invocations); + d.CompareNodes(dt1, dt2)); + Assert.AreEqual(1, ex.invoked); - invocations = 0; d = new DOMDifferenceEngine(); - d.DifferenceListener += delegate(Comparison comp, - ComparisonResult r) { - Assert.AreEqual(0, invocations); - invocations++; - Assert.AreEqual(ComparisonType.DOCTYPE_SYSTEM_ID, - comp.Type); - Assert.AreEqual(ComparisonResult.CRITICAL, r); - }; + ex = new DiffExpecter(ComparisonType.DOCTYPE_SYSTEM_ID); + d.DifferenceListener += ex.ComparisonPerformed; d.DifferenceEvaluator = delegate(Comparison comparison, ComparisonResult outcome) { if (comparison.Type == ComparisonType.DOCTYPE_SYSTEM_ID) { @@ -461,9 +381,86 @@ dt2 = doc.CreateDocumentType("name", "pub", TestResources.TEST_DTD, null); Assert.AreEqual(ComparisonResult.CRITICAL, - d.NodeTypeSpecificComparison(dt1, dt2)); - Assert.AreEqual(1, invocations); + d.CompareNodes(dt1, dt2)); + Assert.AreEqual(1, ex.invoked); } + [Test] + public void CompareElements() { + DOMDifferenceEngine d = new DOMDifferenceEngine(); + DiffExpecter ex = new DiffExpecter(ComparisonType.ELEMENT_TAG_NAME); + d.DifferenceListener += ex.ComparisonPerformed; + d.DifferenceEvaluator = + DifferenceEvaluators.DefaultStopWhenDifferent; + + XmlElement e1 = doc.CreateElement("foo"); + XmlElement e2 = doc.CreateElement("foo"); + XmlElement e3 = doc.CreateElement("bar"); + Assert.AreEqual(ComparisonResult.EQUAL, d.CompareNodes(e1, e2)); + Assert.AreEqual(ComparisonResult.CRITICAL, d.CompareNodes(e1, e3)); + Assert.AreEqual(1, ex.invoked); + + d = new DOMDifferenceEngine(); + ex = new DiffExpecter(ComparisonType.ELEMENT_NUM_ATTRIBUTES); + d.DifferenceListener += ex.ComparisonPerformed; + d.DifferenceEvaluator = + DifferenceEvaluators.DefaultStopWhenDifferent; + e1.SetAttribute("attr1", "value1"); + Assert.AreEqual(ComparisonResult.CRITICAL, d.CompareNodes(e1, e2)); + Assert.AreEqual(1, ex.invoked); + + d = new DOMDifferenceEngine(); + ex = new DiffExpecter(ComparisonType.ATTR_NAME_LOOKUP); + d.DifferenceListener += ex.ComparisonPerformed; + d.DifferenceEvaluator = + DifferenceEvaluators.DefaultStopWhenDifferent; + e2.SetAttribute("attr1", "urn:xmlunit:test", "value1"); + Assert.AreEqual(ComparisonResult.CRITICAL, d.CompareNodes(e1, e2)); + Assert.AreEqual(1, ex.invoked); + + d = new DOMDifferenceEngine(); + d.DifferenceListener += delegate(Comparison comp, + ComparisonResult r) { + Assert.Fail("unexpected Comparison of type " + comp.Type + + " with outcome " + r + " and values '" + + comp.ControlNodeDetails.Value + + "' and '" + + comp.TestNodeDetails.Value + "'"); + }; + d.DifferenceEvaluator = + DifferenceEvaluators.DefaultStopWhenDifferent; + e1.SetAttribute("attr1", "urn:xmlunit:test", "value1"); + e2.SetAttribute("attr1", null, "value1"); + Assert.AreEqual(ComparisonResult.EQUAL, d.CompareNodes(e1, e2)); + } + + [Test] + public void CompareAttributes() { + XmlAttribute a1 = doc.CreateAttribute("foo"); + XmlAttribute a2 = doc.CreateAttribute("foo"); + + DOMDifferenceEngine d = new DOMDifferenceEngine(); +#if false // Can't reset "explicitly set" state for Documents created via API + DiffExpecter ex = new DiffExpecter(ComparisonType.ATTR_VALUE_EXPLICITLY_SPECIFIED); + d.DifferenceListener += ex.ComparisonPerformed; + d.DifferenceEvaluator = DifferenceEvaluators.Accept; + a2.Value = string.Empty; + Assert.AreEqual(ComparisonResult.CRITICAL, d.CompareNodes(a1, a2)); + Assert.AreEqual(1, ex.invoked); +#endif + + d = new DOMDifferenceEngine(); + DiffExpecter ex = new DiffExpecter(ComparisonType.ATTR_VALUE); + d.DifferenceListener += ex.ComparisonPerformed; + d.DifferenceEvaluator = + DifferenceEvaluators.DefaultStopWhenDifferent; + XmlAttribute a3 = doc.CreateAttribute("foo"); + a1.Value = "foo"; + a2.Value = "foo"; + a3.Value = "bar"; + Assert.AreEqual(ComparisonResult.EQUAL, d.CompareNodes(a1, a2)); + Assert.AreEqual(ComparisonResult.CRITICAL, d.CompareNodes(a1, a3)); + Assert.AreEqual(1, ex.invoked); + } } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bo...@us...> - 2010-07-06 15:01:34
|
Revision: 412 http://xmlunit.svn.sourceforge.net/xmlunit/?rev=412&view=rev Author: bodewig Date: 2010-07-06 15:01:27 +0000 (Tue, 06 Jul 2010) Log Message: ----------- port DocumentType comparisons and parts of Document comparisons Modified Paths: -------------- trunk/xmlunit/src/main/net-core/diff/ComparisonType.cs trunk/xmlunit/src/main/net-core/diff/DOMDifferenceEngine.xml trunk/xmlunit/src/main/net-core/diff/DifferenceEvaluators.cs trunk/xmlunit/src/main/net-core/util/Convert.cs trunk/xmlunit/src/tests/net-core/TestResources.cs trunk/xmlunit/src/tests/net-core/diff/DOMDifferenceEngineTest.cs Modified: trunk/xmlunit/src/main/net-core/diff/ComparisonType.cs =================================================================== --- trunk/xmlunit/src/main/net-core/diff/ComparisonType.cs 2010-07-06 15:00:37 UTC (rev 411) +++ trunk/xmlunit/src/main/net-core/diff/ComparisonType.cs 2010-07-06 15:01:27 UTC (rev 412) @@ -19,6 +19,20 @@ /// </summary> public enum ComparisonType { /// <summary> + /// Do both documents specify the same version in their XML declaration? + /// </summary> + XML_VERSION, + /// <summary> + /// Do both documents specify the same standalone declaration + /// in their XML declaration? + /// </summary> + XML_STANDALONE, + /// <summary> + /// Do both documents specify the same encoding in their XML + /// declaration? + /// </summary> + XML_ENCODING, + /// <summary> /// Do both documents have a DOCTYPE (or neither of each)? /// </summary> HAS_DOCTYPE_DECLARATION, Modified: trunk/xmlunit/src/main/net-core/diff/DOMDifferenceEngine.xml =================================================================== --- trunk/xmlunit/src/main/net-core/diff/DOMDifferenceEngine.xml 2010-07-06 15:00:37 UTC (rev 411) +++ trunk/xmlunit/src/main/net-core/diff/DOMDifferenceEngine.xml 2010-07-06 15:01:27 UTC (rev 412) @@ -78,12 +78,10 @@ } break; case XmlNodeType.Document: -#if false - if (test instanceof Document) { - return compareDocuments((Document) control, - (Document) test); + if (test is XmlDocument) { + return CompareDocuments((XmlDocument) control, + (XmlDocument) test); } -#endif break; case XmlNodeType.Element: #if false @@ -100,6 +98,12 @@ (XmlProcessingInstruction) test); } break; + case XmlNodeType.DocumentType: + if (test is XmlDocumentType) { + return CompareDocTypes((XmlDocumentType) control, + (XmlDocumentType) test); + } + break; } return ComparisonResult.EQUAL; } @@ -114,6 +118,48 @@ test, null, test.Data)); } + private ComparisonResult CompareDocuments(XmlDocument control, + XmlDocument test) { + XmlDocumentType controlDt = control.DocumentType; + XmlDocumentType testDt = test.DocumentType; +]]></literal> + <lastResultDef/> + <compareExpr type="HAS_DOCTYPE_DECLARATION" + controlExpr="controlDt != null" + testExpr="testDt != null"/> + <literal><![CDATA[ + if (controlDt != null && testDt != null) { +]]></literal> + <compareMethodExpr method="NodeTypeSpecificComparison" + controlExpr="controlDt" + testExpr="testDt"/> + <literal><![CDATA[ + } +]]></literal> +<!-- + <compare type="XML_VERSION" property="getXmlVersion()"/> + <compare type="XML_STANDALONE" property="getXmlStandalone()"/> + <literal><![CDATA[ + return Compare(new Comparison(ComparisonType.XML_ENCODING, + control, null, control.getXmlEncoding(), + test, null, test.getXmlEncoding())); +--> + <literal><![CDATA[ + return lastResult; + } + + private ComparisonResult CompareDocTypes(XmlDocumentType control, + XmlDocumentType test) { +]]></literal> + <lastResultDef/> + <compare type="DOCTYPE_NAME" property="Name"/> + <compare type="DOCTYPE_PUBLIC_ID" property="PublicId"/> + <literal><![CDATA[ + return Compare(new Comparison(ComparisonType.DOCTYPE_SYSTEM_ID, + control, null, control.SystemId, + test, null, test.SystemId)); + } + private ComparisonResult CompareProcessingInstructions(XmlProcessingInstruction control, XmlProcessingInstruction test) { Modified: trunk/xmlunit/src/main/net-core/diff/DifferenceEvaluators.cs =================================================================== --- trunk/xmlunit/src/main/net-core/diff/DifferenceEvaluators.cs 2010-07-06 15:00:37 UTC (rev 411) +++ trunk/xmlunit/src/main/net-core/diff/DifferenceEvaluators.cs 2010-07-06 15:01:27 UTC (rev 412) @@ -43,6 +43,7 @@ outcome = ComparisonResult.SIMILAR; } break; + case ComparisonType.XML_ENCODING: case ComparisonType.HAS_DOCTYPE_DECLARATION: case ComparisonType.DOCTYPE_SYSTEM_ID: case ComparisonType.SCHEMA_LOCATION: Modified: trunk/xmlunit/src/main/net-core/util/Convert.cs =================================================================== --- trunk/xmlunit/src/main/net-core/util/Convert.cs 2010-07-06 15:00:37 UTC (rev 411) +++ trunk/xmlunit/src/main/net-core/util/Convert.cs 2010-07-06 15:01:27 UTC (rev 412) @@ -27,6 +27,13 @@ /// Creates a DOM Document from an ISource. /// </summary> public static XmlDocument ToDocument(ISource s) { + return ToDocument(s, true); + } + + /// <summary> + /// Creates a DOM Document from an ISource. + /// </summary> + public static XmlDocument ToDocument(ISource s, bool prohibitDTD) { DOMSource ds = s as DOMSource; if (ds != null) { XmlDocument doc = ds.Node as XmlDocument; @@ -35,7 +42,9 @@ } } XmlDocument d = new XmlDocument(); - d.Load(s.Reader); + XmlReaderSettings sett = new XmlReaderSettings(); + sett.ProhibitDtd = prohibitDTD; + d.Load(XmlReader.Create(s.Reader, sett)); return d; } Modified: trunk/xmlunit/src/tests/net-core/TestResources.cs =================================================================== --- trunk/xmlunit/src/tests/net-core/TestResources.cs 2010-07-06 15:00:37 UTC (rev 411) +++ trunk/xmlunit/src/tests/net-core/TestResources.cs 2010-07-06 15:01:27 UTC (rev 412) @@ -20,6 +20,9 @@ public const string ANIMAL_XSL = "../../../src/tests/resources/animal.xsl"; public const string DOG_FILE = "../../../src/tests/resources/testAnimal.xml"; + public const string BOOK_DTD = "../../../src/tests/resources/Book.dtd"; + public const string TEST_DTD = "../../../src/tests/resources/test.dtd"; + private TestResources() { } } } Modified: trunk/xmlunit/src/tests/net-core/diff/DOMDifferenceEngineTest.cs =================================================================== --- trunk/xmlunit/src/tests/net-core/diff/DOMDifferenceEngineTest.cs 2010-07-06 15:00:37 UTC (rev 411) +++ trunk/xmlunit/src/tests/net-core/diff/DOMDifferenceEngineTest.cs 2010-07-06 15:01:27 UTC (rev 412) @@ -14,6 +14,7 @@ using System; using System.Xml; using NUnit.Framework; +using net.sf.xmlunit.builder; namespace net.sf.xmlunit.diff { @@ -265,5 +266,204 @@ Assert.AreEqual(1, invocations); } + [Test] + public void CompareDocuments() { + DOMDifferenceEngine d = new DOMDifferenceEngine(); + int invocations = 0; + d.DifferenceListener += delegate(Comparison comp, + ComparisonResult r) { + Assert.AreEqual(0, invocations); + invocations++; + Assert.AreEqual(ComparisonType.HAS_DOCTYPE_DECLARATION, + comp.Type); + Assert.AreEqual(ComparisonResult.CRITICAL, r); + }; + d.DifferenceEvaluator = delegate(Comparison comparison, + ComparisonResult outcome) { + if (comparison.Type == ComparisonType.HAS_DOCTYPE_DECLARATION) { + Assert.AreEqual(ComparisonResult.DIFFERENT, outcome); + return ComparisonResult.CRITICAL; + } + Assert.AreEqual(ComparisonResult.EQUAL, outcome); + return ComparisonResult.EQUAL; + }; + + XmlDocument d1, d2; + +#if false // ProhibitDtd needs to be handled at a lower level + d1 = net.sf.xmlunit.util.Convert + .ToDocument(Input.FromMemory("<Book/>").Build()); + d2 = net.sf.xmlunit.util.Convert + .ToDocument(Input.FromMemory("<!DOCTYPE Book PUBLIC " + + "\"XMLUNIT/TEST/PUB\" " + + "\"" + TestResources.BOOK_DTD + + "\">" + + "<Book/>") + .Build()); + Assert.AreEqual(ComparisonResult.CRITICAL, + d.NodeTypeSpecificComparison(d1, d2)); + Assert.AreEqual(1, invocations); +#endif + +#if false // need a way to figure out the XML_* differences + + // .NET doesn't like XML 1.1 anyway + invocations = 0; + d = new DOMDifferenceEngine(); + d.DifferenceListener += delegate(Comparison comp, + ComparisonResult r) { + Assert.AreEqual(0, invocations); + invocations++; + Assert.AreEqual(ComparisonType.XML_VERSION, + comp.Type); + Assert.AreEqual(ComparisonResult.CRITICAL, r); + }; + d.DifferenceEvaluator = + DifferenceEvaluators.DefaultStopWhenDifferent; + + d1 = net.sf.xmlunit.util.Convert + .ToDocument(Input.FromMemory("<?xml version=\"1.0\"" + + " encoding=\"UTF-8\"?>" + + "<Book/>").Build()); + d2 = net.sf.xmlunit.util.Convert + .ToDocument(Input.FromMemory("<?xml version=\"1.1\"" + + " encoding=\"UTF-8\"?>" + + "<Book/>").Build()); + Assert.AreEqual(ComparisonResult.CRITICAL, + d.NodeTypeSpecificComparison(d1, d2)); + Assert.AreEqual(1, invocations); +#endif + +#if false // need a way to figure out the XML_* differences + invocations = 0; + d = new DOMDifferenceEngine(); + d.DifferenceListener += delegate(Comparison comp, + ComparisonResult r) { + Assert.AreEqual(0, invocations); + invocations++; + Assert.AreEqual(ComparisonType.XML_STANDALONE, + comp.Type); + Assert.AreEqual(ComparisonResult.CRITICAL, r); + }; + d.DifferenceEvaluator = + DifferenceEvaluators.DefaultStopWhenDifferent; + + d1 = net.sf.xmlunit.util.Convert + .ToDocument(Input.FromMemory("<?xml version=\"1.0\"" + + " standalone=\"yes\"?>" + + "<Book/>").Build()); + d2 = net.sf.xmlunit.util.Convert + .ToDocument(Input.FromMemory("<?xml version=\"1.0\"" + + " standalone=\"no\"?>" + + "<Book/>").Build()); + Assert.AreEqual(ComparisonResult.CRITICAL, + d.NodeTypeSpecificComparison(d1, d2)); + Assert.AreEqual(1, invocations); +#endif + +#if false // need a way to figure out the XML_* differences + invocations = 0; + d = new DOMDifferenceEngine(); + d.DifferenceListener += delegate(Comparison comp, + ComparisonResult r) { + Assert.AreEqual(0, invocations); + invocations++; + Assert.AreEqual(ComparisonType.XML_ENCODING, + comp.Type); + Assert.AreEqual(ComparisonResult.CRITICAL, r); + }; + d.DifferenceEvaluator = delegate(Comparison comparison, + ComparisonResult outcome) { + if (comparison.Type == ComparisonType.XML_ENCODING) { + Assert.AreEqual(ComparisonResult.DIFFERENT, outcome); + return ComparisonResult.CRITICAL; + } + Assert.AreEqual(ComparisonResult.EQUAL, outcome); + return ComparisonResult.EQUAL; + }; + + d1 = net.sf.xmlunit.util.Convert + .ToDocument(Input.FromMemory("<?xml version=\"1.0\"" + + " encoding=\"UTF-8\"?>" + + "<Book/>").Build()); + d2 = net.sf.xmlunit.util.Convert + .ToDocument(Input.FromMemory("<?xml version=\"1.0\"" + + " encoding=\"UTF-16\"?>" + + "<Book/>").Build()); + Assert.AreEqual(ComparisonResult.CRITICAL, + d.NodeTypeSpecificComparison(d1, d2)); + Assert.AreEqual(1, invocations); +#endif + } + + [Test] + public void CompareDocTypes() { + int invocations = 0; + DOMDifferenceEngine d = new DOMDifferenceEngine(); + d.DifferenceListener += delegate(Comparison comp, + ComparisonResult r) { + Assert.AreEqual(0, invocations); + invocations++; + Assert.AreEqual(ComparisonType.DOCTYPE_NAME, + comp.Type); + Assert.AreEqual(ComparisonResult.CRITICAL, r); + }; + d.DifferenceEvaluator = + DifferenceEvaluators.DefaultStopWhenDifferent; + + XmlDocumentType dt1 = doc.CreateDocumentType("name", "pub", + TestResources.BOOK_DTD, + null); + XmlDocumentType dt2 = doc.CreateDocumentType("name2", "pub", + TestResources.BOOK_DTD, + null); + Assert.AreEqual(ComparisonResult.CRITICAL, + d.NodeTypeSpecificComparison(dt1, dt2)); + Assert.AreEqual(1, invocations); + + invocations = 0; + d = new DOMDifferenceEngine(); + d.DifferenceListener += delegate(Comparison comp, + ComparisonResult r) { + Assert.AreEqual(0, invocations); + invocations++; + Assert.AreEqual(ComparisonType.DOCTYPE_PUBLIC_ID, + comp.Type); + Assert.AreEqual(ComparisonResult.CRITICAL, r); + }; + d.DifferenceEvaluator = + DifferenceEvaluators.DefaultStopWhenDifferent; + dt2 = doc.CreateDocumentType("name", "pub2", + TestResources.BOOK_DTD, null); + Assert.AreEqual(ComparisonResult.CRITICAL, + d.NodeTypeSpecificComparison(dt1, dt2)); + Assert.AreEqual(1, invocations); + + invocations = 0; + d = new DOMDifferenceEngine(); + d.DifferenceListener += delegate(Comparison comp, + ComparisonResult r) { + Assert.AreEqual(0, invocations); + invocations++; + Assert.AreEqual(ComparisonType.DOCTYPE_SYSTEM_ID, + comp.Type); + Assert.AreEqual(ComparisonResult.CRITICAL, r); + }; + d.DifferenceEvaluator = delegate(Comparison comparison, + ComparisonResult outcome) { + if (comparison.Type == ComparisonType.DOCTYPE_SYSTEM_ID) { + Assert.AreEqual(ComparisonResult.DIFFERENT, outcome); + return ComparisonResult.CRITICAL; + } + Assert.AreEqual(ComparisonResult.EQUAL, outcome); + return ComparisonResult.EQUAL; + }; + dt2 = doc.CreateDocumentType("name", "pub", + TestResources.TEST_DTD, null); + Assert.AreEqual(ComparisonResult.CRITICAL, + d.NodeTypeSpecificComparison(dt1, dt2)); + Assert.AreEqual(1, invocations); + } + } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bo...@us...> - 2010-07-06 15:00:43
|
Revision: 411 http://xmlunit.svn.sourceforge.net/xmlunit/?rev=411&view=rev Author: bodewig Date: 2010-07-06 15:00:37 +0000 (Tue, 06 Jul 2010) Log Message: ----------- use the more generic nodeSpecificTests method Modified Paths: -------------- trunk/xmlunit/src/main/java-core/net/sf/xmlunit/diff/DOMDifferenceEngine.java.xml trunk/xmlunit/src/tests/java-core/net/sf/xmlunit/diff/DOMDifferenceEngineTest.java Modified: trunk/xmlunit/src/main/java-core/net/sf/xmlunit/diff/DOMDifferenceEngine.java.xml =================================================================== --- trunk/xmlunit/src/main/java-core/net/sf/xmlunit/diff/DOMDifferenceEngine.java.xml 2010-07-06 10:43:39 UTC (rev 410) +++ trunk/xmlunit/src/main/java-core/net/sf/xmlunit/diff/DOMDifferenceEngine.java.xml 2010-07-06 15:00:37 UTC (rev 411) @@ -103,6 +103,12 @@ (ProcessingInstruction) test); } break; + case Node.DOCUMENT_TYPE_NODE: + if (test instanceof DocumentType) { + return compareDocTypes((DocumentType) control, + (DocumentType) test); + } + break; } return ComparisonResult.EQUAL; } @@ -117,8 +123,8 @@ test, null, test.getData())); } - ComparisonResult compareDocuments(Document control, - Document test) { + private ComparisonResult compareDocuments(Document control, + Document test) { DocumentType controlDt = control.getDoctype(); DocumentType testDt = test.getDoctype(); ]]></literal> @@ -129,7 +135,7 @@ <literal><![CDATA[ if (controlDt != null && testDt != null) { ]]></literal> - <compareMethodExpr method="compareDocTypes" + <compareMethodExpr method="nodeTypeSpecificComparison" controlExpr="controlDt" testExpr="testDt"/> <literal><![CDATA[ @@ -143,8 +149,8 @@ test, null, test.getXmlEncoding())); } - ComparisonResult compareDocTypes(DocumentType control, - DocumentType test) { + private ComparisonResult compareDocTypes(DocumentType control, + DocumentType test) { ]]></literal> <lastResultDef/> <compare type="DOCTYPE_NAME" property="getName()"/> Modified: trunk/xmlunit/src/tests/java-core/net/sf/xmlunit/diff/DOMDifferenceEngineTest.java =================================================================== --- trunk/xmlunit/src/tests/java-core/net/sf/xmlunit/diff/DOMDifferenceEngineTest.java 2010-07-06 10:43:39 UTC (rev 410) +++ trunk/xmlunit/src/tests/java-core/net/sf/xmlunit/diff/DOMDifferenceEngineTest.java 2010-07-06 15:00:37 UTC (rev 411) @@ -27,6 +27,7 @@ import org.w3c.dom.DocumentType; import org.w3c.dom.Element; import org.w3c.dom.NamedNodeMap; +import org.w3c.dom.Node; import org.w3c.dom.ProcessingInstruction; import org.w3c.dom.Text; import static org.junit.Assert.*; @@ -247,7 +248,8 @@ + "\">" + "<Book/>") .build()); - assertEquals(ComparisonResult.CRITICAL, d.compareDocuments(d1, d2)); + assertEquals(ComparisonResult.CRITICAL, + d.nodeTypeSpecificComparison(d1, d2)); assertEquals(1, ex.invoked); d = new DOMDifferenceEngine(); @@ -261,7 +263,8 @@ d2 = Convert.toDocument(Input.fromMemory("<?xml version=\"1.1\"" + " encoding=\"UTF-8\"?>" + "<Book/>").build()); - assertEquals(ComparisonResult.CRITICAL, d.compareDocuments(d1, d2)); + assertEquals(ComparisonResult.CRITICAL, + d.nodeTypeSpecificComparison(d1, d2)); assertEquals(1, ex.invoked); d = new DOMDifferenceEngine(); @@ -275,7 +278,8 @@ d2 = Convert.toDocument(Input.fromMemory("<?xml version=\"1.0\"" + " standalone=\"no\"?>" + "<Book/>").build()); - assertEquals(ComparisonResult.CRITICAL, d.compareDocuments(d1, d2)); + assertEquals(ComparisonResult.CRITICAL, + d.nodeTypeSpecificComparison(d1, d2)); assertEquals(1, ex.invoked); d = new DOMDifferenceEngine(); @@ -300,7 +304,8 @@ d2 = Convert.toDocument(Input.fromMemory("<?xml version=\"1.0\"" + " encoding=\"UTF-16\"?>" + "<Book/>").build()); - assertEquals(ComparisonResult.CRITICAL, d.compareDocuments(d1, d2)); + assertEquals(ComparisonResult.CRITICAL, + d.nodeTypeSpecificComparison(d1, d2)); assertEquals(1, ex.invoked); } @@ -311,6 +316,9 @@ this.publicId = publicId; this.systemId = systemId; } + @Override public short getNodeType() { + return Node.DOCUMENT_TYPE_NODE; + } public NamedNodeMap getEntities() { return null; } @@ -338,7 +346,8 @@ d.setDifferenceEvaluator(DifferenceEvaluators.DefaultStopWhenDifferent); DocumentType dt1 = new DocType("name", "pub", "system"); DocumentType dt2 = new DocType("name2", "pub", "system"); - assertEquals(ComparisonResult.CRITICAL, d.compareDocTypes(dt1, dt2)); + assertEquals(ComparisonResult.CRITICAL, + d.nodeTypeSpecificComparison(dt1, dt2)); assertEquals(1, ex.invoked); d = new DOMDifferenceEngine(); @@ -346,7 +355,8 @@ d.addDifferenceListener(ex); d.setDifferenceEvaluator(DifferenceEvaluators.DefaultStopWhenDifferent); dt2 = new DocType("name", "pub2", "system"); - assertEquals(ComparisonResult.CRITICAL, d.compareDocTypes(dt1, dt2)); + assertEquals(ComparisonResult.CRITICAL, + d.nodeTypeSpecificComparison(dt1, dt2)); assertEquals(1, ex.invoked); d = new DOMDifferenceEngine(); @@ -365,7 +375,8 @@ } }); dt2 = new DocType("name", "pub", "system2"); - assertEquals(ComparisonResult.CRITICAL, d.compareDocTypes(dt1, dt2)); + assertEquals(ComparisonResult.CRITICAL, + d.nodeTypeSpecificComparison(dt1, dt2)); assertEquals(1, ex.invoked); } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bo...@us...> - 2010-07-06 10:43:46
|
Revision: 410 http://xmlunit.svn.sourceforge.net/xmlunit/?rev=410&view=rev Author: bodewig Date: 2010-07-06 10:43:39 +0000 (Tue, 06 Jul 2010) Log Message: ----------- tests for document and document type level comparisions Modified Paths: -------------- trunk/xmlunit/src/main/java-core/net/sf/xmlunit/diff/DifferenceEvaluators.java trunk/xmlunit/src/tests/java-core/net/sf/xmlunit/TestResources.java trunk/xmlunit/src/tests/java-core/net/sf/xmlunit/diff/DOMDifferenceEngineTest.java Added Paths: ----------- trunk/xmlunit/src/tests/java-core/net/sf/xmlunit/NullNode.java Modified: trunk/xmlunit/src/main/java-core/net/sf/xmlunit/diff/DifferenceEvaluators.java =================================================================== --- trunk/xmlunit/src/main/java-core/net/sf/xmlunit/diff/DifferenceEvaluators.java 2010-06-29 04:26:39 UTC (rev 409) +++ trunk/xmlunit/src/main/java-core/net/sf/xmlunit/diff/DifferenceEvaluators.java 2010-07-06 10:43:39 UTC (rev 410) @@ -53,6 +53,7 @@ case NAMESPACE_PREFIX: case ATTR_VALUE_EXPLICITLY_SPECIFIED: case CHILD_NODELIST_SEQUENCE: + case XML_ENCODING: outcome = ComparisonResult.SIMILAR; break; } Added: trunk/xmlunit/src/tests/java-core/net/sf/xmlunit/NullNode.java =================================================================== --- trunk/xmlunit/src/tests/java-core/net/sf/xmlunit/NullNode.java (rev 0) +++ trunk/xmlunit/src/tests/java-core/net/sf/xmlunit/NullNode.java 2010-07-06 10:43:39 UTC (rev 410) @@ -0,0 +1,133 @@ +/* + This file is licensed to You under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ +package net.sf.xmlunit; + +import org.w3c.dom.Document; +import org.w3c.dom.NamedNodeMap; +import org.w3c.dom.Node; +import org.w3c.dom.NodeList; +import org.w3c.dom.UserDataHandler; + +public class NullNode implements Node { + public Node appendChild(Node n) { + return n; + } + public Node cloneNode(boolean deep) { + return this; + } + public short compareDocumentPosition(Node other) { + return 0; + } + public NamedNodeMap getAttributes() { + return null; + } + public String getBaseURI() { + return null; + } + public NodeList getChildNodes() { + return new NodeList() { + public int getLength() { + return 0; + } + public Node item(int idx) { + throw new IndexOutOfBoundsException(); + } + }; + } + public Object getFeature(String f, String v) { + return null; + } + public Node getFirstChild() { + return null; + } + public Node getLastChild() { + return null; + } + public String getLocalName() { + return null; + } + public String getNamespaceURI() { + return null; + } + public Node getNextSibling() { + return null; + } + public String getNodeName() { + return null; + } + public short getNodeType() { + return 0; + } + public String getNodeValue() { + return null; + } + public Document getOwnerDocument() { + return null; + } + public Node getParentNode() { + return null; + } + public String getPrefix() { + return null; + } + public Node getPreviousSibling() { + return null; + } + public String getTextContent() { + return null; + } + public Object getUserData(String key) { + return null; + } + public boolean hasAttributes() { + return false; + } + public boolean hasChildNodes() { + return false; + } + public Node insertBefore(Node n, Node r) { + return n; + } + public boolean isDefaultNamespace(String u) { + return false; + } + public boolean isEqualNode(Node n) { + return isSameNode(n); + } + public boolean isSameNode(Node n) { + return this == n; + } + public boolean isSupported(String f, String v) { + return false; + } + public String lookupNamespaceURI(String s) { + return null; + } + public String lookupPrefix(String s) { + return null; + } + public void normalize() { } + public Node removeChild(Node n) { + return n; + } + public Node replaceChild(Node n, Node o) { + return o; + } + public void setNodeValue(String s) { } + public void setPrefix(String s) { } + public void setTextContent(String s) { } + public Object setUserData(String k, Object d, UserDataHandler h) { + return null; + } +} Property changes on: trunk/xmlunit/src/tests/java-core/net/sf/xmlunit/NullNode.java ___________________________________________________________________ Added: svn:eol-style + native Modified: trunk/xmlunit/src/tests/java-core/net/sf/xmlunit/TestResources.java =================================================================== --- trunk/xmlunit/src/tests/java-core/net/sf/xmlunit/TestResources.java 2010-06-29 04:26:39 UTC (rev 409) +++ trunk/xmlunit/src/tests/java-core/net/sf/xmlunit/TestResources.java 2010-07-06 10:43:39 UTC (rev 410) @@ -19,6 +19,8 @@ public static final String ANIMAL_XSL = "src/tests/resources/animal.xsl"; public static final String DOG_FILE = "src/tests/resources/testAnimal.xml"; + public static final String BOOK_DTD = "src/tests/resources/Book.dtd"; + private TestResources() { } } Modified: trunk/xmlunit/src/tests/java-core/net/sf/xmlunit/diff/DOMDifferenceEngineTest.java =================================================================== --- trunk/xmlunit/src/tests/java-core/net/sf/xmlunit/diff/DOMDifferenceEngineTest.java 2010-06-29 04:26:39 UTC (rev 409) +++ trunk/xmlunit/src/tests/java-core/net/sf/xmlunit/diff/DOMDifferenceEngineTest.java 2010-07-06 10:43:39 UTC (rev 410) @@ -15,12 +15,18 @@ import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; +import net.sf.xmlunit.NullNode; +import net.sf.xmlunit.TestResources; +import net.sf.xmlunit.builder.Input; +import net.sf.xmlunit.util.Convert; import org.junit.Before; import org.junit.Test; import org.w3c.dom.CDATASection; import org.w3c.dom.Comment; import org.w3c.dom.Document; +import org.w3c.dom.DocumentType; import org.w3c.dom.Element; +import org.w3c.dom.NamedNodeMap; import org.w3c.dom.ProcessingInstruction; import org.w3c.dom.Text; import static org.junit.Assert.*; @@ -216,4 +222,150 @@ d.nodeTypeSpecificComparison(foo1, foo2)); assertEquals(1, ex.invoked); } + + @Test public void compareDocuments() { + DOMDifferenceEngine d = new DOMDifferenceEngine(); + DiffExpecter ex = new DiffExpecter(ComparisonType.HAS_DOCTYPE_DECLARATION); + d.addDifferenceListener(ex); + d.setDifferenceEvaluator(new DifferenceEvaluator() { + public ComparisonResult evaluate(Comparison comparison, + ComparisonResult outcome) { + if (comparison.getType() + == ComparisonType.HAS_DOCTYPE_DECLARATION) { + assertEquals(ComparisonResult.DIFFERENT, outcome); + return ComparisonResult.CRITICAL; + } + assertEquals(ComparisonResult.EQUAL, outcome); + return ComparisonResult.EQUAL; + } + }); + Document d1 = Convert.toDocument(Input.fromMemory("<Book/>").build()); + Document d2 = + Convert.toDocument(Input.fromMemory("<!DOCTYPE Book PUBLIC " + + "\"XMLUNIT/TEST/PUB\" " + + "\"" + TestResources.BOOK_DTD + + "\">" + + "<Book/>") + .build()); + assertEquals(ComparisonResult.CRITICAL, d.compareDocuments(d1, d2)); + assertEquals(1, ex.invoked); + + d = new DOMDifferenceEngine(); + ex = new DiffExpecter(ComparisonType.XML_VERSION); + d.addDifferenceListener(ex); + d.setDifferenceEvaluator(DifferenceEvaluators.DefaultStopWhenDifferent); + + d1 = Convert.toDocument(Input.fromMemory("<?xml version=\"1.0\"" + + " encoding=\"UTF-8\"?>" + + "<Book/>").build()); + d2 = Convert.toDocument(Input.fromMemory("<?xml version=\"1.1\"" + + " encoding=\"UTF-8\"?>" + + "<Book/>").build()); + assertEquals(ComparisonResult.CRITICAL, d.compareDocuments(d1, d2)); + assertEquals(1, ex.invoked); + + d = new DOMDifferenceEngine(); + ex = new DiffExpecter(ComparisonType.XML_STANDALONE); + d.addDifferenceListener(ex); + d.setDifferenceEvaluator(DifferenceEvaluators.DefaultStopWhenDifferent); + + d1 = Convert.toDocument(Input.fromMemory("<?xml version=\"1.0\"" + + " standalone=\"yes\"?>" + + "<Book/>").build()); + d2 = Convert.toDocument(Input.fromMemory("<?xml version=\"1.0\"" + + " standalone=\"no\"?>" + + "<Book/>").build()); + assertEquals(ComparisonResult.CRITICAL, d.compareDocuments(d1, d2)); + assertEquals(1, ex.invoked); + + d = new DOMDifferenceEngine(); + ex = new DiffExpecter(ComparisonType.XML_ENCODING); + d.addDifferenceListener(ex); + d.setDifferenceEvaluator(new DifferenceEvaluator() { + public ComparisonResult evaluate(Comparison comparison, + ComparisonResult outcome) { + if (comparison.getType() + == ComparisonType.XML_ENCODING) { + assertEquals(ComparisonResult.DIFFERENT, outcome); + return ComparisonResult.CRITICAL; + } + assertEquals(ComparisonResult.EQUAL, outcome); + return ComparisonResult.EQUAL; + } + }); + + d1 = Convert.toDocument(Input.fromMemory("<?xml version=\"1.0\"" + + " encoding=\"UTF-8\"?>" + + "<Book/>").build()); + d2 = Convert.toDocument(Input.fromMemory("<?xml version=\"1.0\"" + + " encoding=\"UTF-16\"?>" + + "<Book/>").build()); + assertEquals(ComparisonResult.CRITICAL, d.compareDocuments(d1, d2)); + assertEquals(1, ex.invoked); + } + + private static class DocType extends NullNode implements DocumentType { + private final String name, publicId, systemId; + private DocType(String name, String publicId, String systemId) { + this.name = name; + this.publicId = publicId; + this.systemId = systemId; + } + public NamedNodeMap getEntities() { + return null; + } + public String getInternalSubset() { + return null; + } + public String getName() { + return name; + } + public NamedNodeMap getNotations() { + return null; + } + public String getPublicId() { + return publicId; + } + public String getSystemId() { + return systemId; + } + } + + @Test public void compareDocTypes() { + DOMDifferenceEngine d = new DOMDifferenceEngine(); + DiffExpecter ex = new DiffExpecter(ComparisonType.DOCTYPE_NAME); + d.addDifferenceListener(ex); + d.setDifferenceEvaluator(DifferenceEvaluators.DefaultStopWhenDifferent); + DocumentType dt1 = new DocType("name", "pub", "system"); + DocumentType dt2 = new DocType("name2", "pub", "system"); + assertEquals(ComparisonResult.CRITICAL, d.compareDocTypes(dt1, dt2)); + assertEquals(1, ex.invoked); + + d = new DOMDifferenceEngine(); + ex = new DiffExpecter(ComparisonType.DOCTYPE_PUBLIC_ID); + d.addDifferenceListener(ex); + d.setDifferenceEvaluator(DifferenceEvaluators.DefaultStopWhenDifferent); + dt2 = new DocType("name", "pub2", "system"); + assertEquals(ComparisonResult.CRITICAL, d.compareDocTypes(dt1, dt2)); + assertEquals(1, ex.invoked); + + d = new DOMDifferenceEngine(); + ex = new DiffExpecter(ComparisonType.DOCTYPE_SYSTEM_ID); + d.addDifferenceListener(ex); + d.setDifferenceEvaluator(new DifferenceEvaluator() { + public ComparisonResult evaluate(Comparison comparison, + ComparisonResult outcome) { + if (comparison.getType() + == ComparisonType.DOCTYPE_SYSTEM_ID) { + assertEquals(ComparisonResult.DIFFERENT, outcome); + return ComparisonResult.CRITICAL; + } + assertEquals(ComparisonResult.EQUAL, outcome); + return ComparisonResult.EQUAL; + } + }); + dt2 = new DocType("name", "pub", "system2"); + assertEquals(ComparisonResult.CRITICAL, d.compareDocTypes(dt1, dt2)); + assertEquals(1, ex.invoked); + } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bo...@us...> - 2010-06-29 04:26:45
|
Revision: 409 http://xmlunit.svn.sourceforge.net/xmlunit/?rev=409&view=rev Author: bodewig Date: 2010-06-29 04:26:39 +0000 (Tue, 29 Jun 2010) Log Message: ----------- unused variable Modified Paths: -------------- trunk/xmlunit/src/main/net-core/validation/Validator.cs Modified: trunk/xmlunit/src/main/net-core/validation/Validator.cs =================================================================== --- trunk/xmlunit/src/main/net-core/validation/Validator.cs 2010-06-28 15:25:39 UTC (rev 408) +++ trunk/xmlunit/src/main/net-core/validation/Validator.cs 2010-06-29 04:26:39 UTC (rev 409) @@ -80,8 +80,7 @@ List<ValidationProblem> problems = new List<ValidationProblem>(); foreach (ISource loc in sourceLocations) { - XmlSchema s = XmlSchema.Read(loc.Reader, - CollectProblems(problems)); + XmlSchema.Read(loc.Reader, CollectProblems(problems)); } return new ValidationResult(problems.Count == 0, problems); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bo...@us...> - 2010-06-28 15:25:50
|
Revision: 408 http://xmlunit.svn.sourceforge.net/xmlunit/?rev=408&view=rev Author: bodewig Date: 2010-06-28 15:25:39 +0000 (Mon, 28 Jun 2010) Log Message: ----------- XSLT as poor man's code generator to get rid of the repetitive 'if last comparison resulted in a CRITICAL difference, break out of the method' logic Modified Paths: -------------- trunk/xmlunit/build.xml trunk/xmlunit/xmlunit.nant.build Added Paths: ----------- trunk/xmlunit/src/buildtools/ trunk/xmlunit/src/buildtools/codegen.xslt trunk/xmlunit/src/main/java-core/net/sf/xmlunit/diff/DOMDifferenceEngine.java.xml trunk/xmlunit/src/main/net-core/diff/DOMDifferenceEngine.xml Removed Paths: ------------- trunk/xmlunit/src/main/java-core/net/sf/xmlunit/diff/DOMDifferenceEngine.java trunk/xmlunit/src/main/net-core/diff/DOMDifferenceEngine.cs Modified: trunk/xmlunit/build.xml =================================================================== --- trunk/xmlunit/build.xml 2010-06-28 11:49:08 UTC (rev 407) +++ trunk/xmlunit/build.xml 2010-06-28 15:25:39 UTC (rev 408) @@ -24,6 +24,7 @@ <property name="src.dir" value="src/main"/> <property name="test.dir" value="src/tests"/> <property name="build.dir" location="build/java"/> + <property name="gen.src.dir" value="${build.dir}/generated"/> <property name="lib.dir" value="${build.dir}/lib"/> <property name="core.out.dir" value="${build.dir}/core-classes"/> <property name="legacy.out.dir" value="${build.dir}/legacy-classes"/> @@ -60,6 +61,7 @@ <mkdir dir="${dist.dir}"/> <mkdir dir="${docs.dir}"/> <mkdir dir="${userguide.docs.dir}"/> + <mkdir dir="${gen.src.dir}"/> </target> <target name="clean" @@ -78,9 +80,30 @@ </delete> </target> - <target name="compile-core" depends="-init" - description="compiles legacy sources and tests"> - <javac srcdir="${src.dir}/java-core" destdir="${core.out.dir}" + <target name="-generate-sources" depends="-init"> + <xslt destdir="${gen.src.dir}" + useImplicitFileset="false" + style="src/buildtools/codegen.xslt"> + <fileset dir="${src.dir}/java-core" includes="**/*.java.xml"/> + <globmapper from="*.java.xml" to="*.java"/> + + <param name="nsQualifier" expression="package"/> + <param name="nsStart" expression=";"/> + <param name="nsEnd" expression=""/> + <param name="import" expression="import"/> + <param name="extends" expression="extends"/> + <param name="implements" expression="implements"/> + <param name="summaryStart" expression="/** "/> + <param name="summaryEnd" expression="*/"/> + + <param name="compareMethod" expression="compare"/> + </xslt> + </target> + + <target name="compile-core" depends="-init,-generate-sources" + description="compiles core sources"> + <javac srcdir="${src.dir}/java-core:${gen.src.dir}" + destdir="${core.out.dir}" includeantruntime="false" debug="${javac.debug}" target="${javac.target}" source="${javac.source}"> @@ -88,7 +111,7 @@ </target> <target name="compile-legacy" depends="compile-core" - description="compiles legacy sources and tests"> + description="compiles legacy sources"> <javac srcdir="${src.dir}/java-legacy" destdir="${legacy.out.dir}" includeantruntime="false" debug="${javac.debug}" target="${javac.target}" source="${javac.source}"> Added: trunk/xmlunit/src/buildtools/codegen.xslt =================================================================== --- trunk/xmlunit/src/buildtools/codegen.xslt (rev 0) +++ trunk/xmlunit/src/buildtools/codegen.xslt 2010-06-28 15:25:39 UTC (rev 408) @@ -0,0 +1,130 @@ +<?xml version="1.0"?> +<!-- + This file is licensed to You under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" + version="1.0" + xmlns:html="http://www.w3.org/Profiles/XHTML-transitional"> + + <xsl:output method="text" indent="no"/> + + <xsl:param name="compareMethod"/> + <xsl:param name="nsQualifier"/> + <xsl:param name="nsStart"/> + <xsl:param name="nsEnd"/> + <xsl:param name="import"/> + <xsl:param name="extends"/> + <xsl:param name="implements"/> + <xsl:param name="summaryStart"/> + <xsl:param name="summaryEnd"/> + + <xsl:template match="class"> +/* + This file is licensed to You under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + <xsl:value-of select="$nsQualifier"/> + <xsl:text> </xsl:text> + <xsl:value-of select="@ns"/> + <xsl:value-of select="$nsStart"/> + <xsl:text> + </xsl:text> + + <xsl:apply-templates mode="imports" select="import"/> + + <xsl:value-of select="$summaryStart"/> + <xsl:value-of select="@summary"/> + <xsl:text> + </xsl:text> + <xsl:value-of select="$summaryEnd"/> + <xsl:text> +</xsl:text> + + <xsl:value-of select="@qualifiers"/> + <xsl:text> </xsl:text> + class + <xsl:value-of select="@name"/> + <xsl:if test="@extends"> + <xsl:text> </xsl:text> + <xsl:value-of select="$extends"/> + <xsl:text> </xsl:text> + <xsl:value-of select="@extends"/> + </xsl:if> + <xsl:if test="@implements"> + <xsl:text> </xsl:text> + <xsl:value-of select="$implements"/> + <xsl:text> </xsl:text> + <xsl:value-of select="@implements"/> + </xsl:if> + + { + <xsl:apply-templates/> + } + <xsl:value-of select="$nsEnd"/> + </xsl:template> + + <xsl:template match="import" mode="imports"> + <xsl:value-of select="$import"/> + <xsl:text> </xsl:text> + <xsl:value-of select="@reference"/>; + </xsl:template> + + <xsl:template match="lastResultDef"> + ComparisonResult lastResult = ComparisonResult.CRITICAL; + </xsl:template> + + <xsl:template match="compare"> + lastResult = + <xsl:value-of select="$compareMethod"/>(new Comparison(ComparisonType.<xsl:value-of select="@type"/>, + control, null, + control.<xsl:value-of select="@property"/>, + test, null, + test.<xsl:value-of select="@property"/>)); + <xsl:call-template name="if-return-boilerplate"/> + </xsl:template> + + <xsl:template match="compareExpr"> + lastResult = + <xsl:value-of select="$compareMethod"/>(new Comparison(ComparisonType.<xsl:value-of select="@type"/>, + control, null, + <xsl:value-of select="@controlExpr"/>, + test, null, + <xsl:value-of select="@testExpr"/>)); + <xsl:call-template name="if-return-boilerplate"/> + </xsl:template> + + <xsl:template match="compareMethod"> + lastResult = <xsl:value-of select="@method"/>(control, test); + <xsl:call-template name="if-return-boilerplate"/> + </xsl:template> + + <xsl:template match="compareMethodExpr"> + lastResult = <xsl:value-of select="@method"/>(<xsl:value-of select="@controlExpr"/>, <xsl:value-of select="@testExpr"/>); + <xsl:call-template name="if-return-boilerplate"/> + </xsl:template> + + <xsl:template name="if-return-boilerplate"> + if (lastResult == ComparisonResult.CRITICAL) { + return lastResult; + } + </xsl:template> +</xsl:stylesheet> Property changes on: trunk/xmlunit/src/buildtools/codegen.xslt ___________________________________________________________________ Added: svn:eol-style + native Deleted: trunk/xmlunit/src/main/java-core/net/sf/xmlunit/diff/DOMDifferenceEngine.java =================================================================== --- trunk/xmlunit/src/main/java-core/net/sf/xmlunit/diff/DOMDifferenceEngine.java 2010-06-28 11:49:08 UTC (rev 407) +++ trunk/xmlunit/src/main/java-core/net/sf/xmlunit/diff/DOMDifferenceEngine.java 2010-06-28 15:25:39 UTC (rev 408) @@ -1,219 +0,0 @@ -/* - This file is licensed to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ -package net.sf.xmlunit.diff; - -import javax.xml.transform.Source; -import net.sf.xmlunit.util.Convert; -import org.w3c.dom.CharacterData; -import org.w3c.dom.Document; -import org.w3c.dom.DocumentType; -import org.w3c.dom.Element; -import org.w3c.dom.Node; -import org.w3c.dom.NodeList; -import org.w3c.dom.ProcessingInstruction; - -/** - * Difference engine based on DOM. - */ -public final class DOMDifferenceEngine extends AbstractDifferenceEngine { - - public void compare(Source control, Source test) { - if (control == null) { - throw new IllegalArgumentException("control must not be null"); - } - if (test == null) { - throw new IllegalArgumentException("test must not be null"); - } - compareNodes(Convert.toNode(control), Convert.toNode(test)); - } - - /** - * Recursively compares two XML nodes. - * - * <p>Performs comparisons common to all node types, the performs - * the node type specific comparisons and finally recures into - * the node's child lists.</p> - * - * <p>Stops as soon as any comparison returns - * ComparisonResult.CRITICAL.</p> - * - * <p>package private to support tests.</p> - */ - ComparisonResult compareNodes(Node control, Node test) { - ComparisonResult lastResult = - compare(new Comparison(ComparisonType.NODE_TYPE, control, - null, control.getNodeType(), - test, null, test.getNodeType())); - if (lastResult == ComparisonResult.CRITICAL) { - return lastResult; - } - lastResult = - compare(new Comparison(ComparisonType.NAMESPACE_URI, control, - null, control.getNamespaceURI(), - test, null, test.getNamespaceURI())); - if (lastResult == ComparisonResult.CRITICAL) { - return lastResult; - } - lastResult = - compare(new Comparison(ComparisonType.NAMESPACE_PREFIX, control, - null, control.getPrefix(), - test, null, test.getPrefix())); - if (lastResult == ComparisonResult.CRITICAL) { - return lastResult; - } - NodeList controlChildren = control.getChildNodes(); - NodeList testChildren = test.getChildNodes(); - lastResult = - compare(new Comparison(ComparisonType.CHILD_NODELIST_LENGTH, - control, null, controlChildren.getLength(), - test, null, testChildren.getLength())); - if (lastResult == ComparisonResult.CRITICAL) { - return lastResult; - } - lastResult = nodeTypeSpecificComparison(control, test); - if (lastResult == ComparisonResult.CRITICAL) { - return lastResult; - } - return compareNodeLists(controlChildren, testChildren); - } - - /** - * Dispatches to the node type specific comparison if one is - * defined for the given combination of nodes. - * - * <p>package private to support tests.</p> - */ - ComparisonResult nodeTypeSpecificComparison(Node control, Node test) { - switch (control.getNodeType()) { - case Node.CDATA_SECTION_NODE: - case Node.COMMENT_NODE: - case Node.TEXT_NODE: - if (test instanceof CharacterData) { - return compareCharacterData((CharacterData) control, - (CharacterData) test); - } - break; - case Node.DOCUMENT_NODE: - if (test instanceof Document) { - return compareDocuments((Document) control, - (Document) test); - } - break; - case Node.ELEMENT_NODE: - if (test instanceof Element) { - return compareElements((Element) control, - (Element) test); - } - break; - case Node.PROCESSING_INSTRUCTION_NODE: - if (test instanceof ProcessingInstruction) { - return - compareProcessingInstructions((ProcessingInstruction) control, - (ProcessingInstruction) test); - } - break; - } - return ComparisonResult.EQUAL; - } - - /** - * Compares textual content. - */ - private ComparisonResult compareCharacterData(CharacterData control, - CharacterData test) { - return compare(new Comparison(ComparisonType.TEXT_VALUE, control, - null, control.getData(), - test, null, test.getData())); - } - - ComparisonResult compareDocuments(Document control, - Document test) { - DocumentType controlDt = control.getDoctype(); - DocumentType testDt = test.getDoctype(); - ComparisonResult r = - compare(new Comparison(ComparisonType.HAS_DOCTYPE_DECLARATION, - control, null, - Boolean.valueOf(controlDt != null), - test, null, - Boolean.valueOf(testDt != null))); - if (r == ComparisonResult.CRITICAL) { - return r; - } - if (controlDt != null && testDt != null) { - r = compareDocTypes(controlDt, testDt); - } - if (r == ComparisonResult.CRITICAL) { - return r; - } - r = compare(new Comparison(ComparisonType.XML_VERSION, - control, null, control.getXmlVersion(), - test, null, test.getXmlVersion())); - if (r == ComparisonResult.CRITICAL) { - return r; - } - r = compare(new Comparison(ComparisonType.XML_STANDALONE, - control, null, control.getXmlStandalone(), - test, null, test.getXmlStandalone())); - if (r == ComparisonResult.CRITICAL) { - return r; - } - return compare(new Comparison(ComparisonType.XML_ENCODING, - control, null, control.getXmlEncoding(), - test, null, test.getXmlEncoding())); - } - - ComparisonResult compareDocTypes(DocumentType control, - DocumentType test) { - ComparisonResult r = - compare(new Comparison(ComparisonType.DOCTYPE_NAME, - control, null, control.getName(), - test, null, test.getName())); - if (r == ComparisonResult.CRITICAL) { - return r; - } - r = compare(new Comparison(ComparisonType.DOCTYPE_PUBLIC_ID, - control, null, control.getPublicId(), - test, null, test.getPublicId())); - if (r == ComparisonResult.CRITICAL) { - return r; - } - return compare(new Comparison(ComparisonType.DOCTYPE_SYSTEM_ID, - control, null, control.getSystemId(), - test, null, test.getSystemId())); - } - - ComparisonResult compareElements(Element control, - Element test) { - return ComparisonResult.EQUAL; - } - - ComparisonResult - compareProcessingInstructions(ProcessingInstruction control, - ProcessingInstruction test) { - ComparisonResult r = - compare(new Comparison(ComparisonType.PROCESSING_INSTRUCTION_TARGET, - control, null, control.getTarget(), - test, null, test.getTarget())); - if (r == ComparisonResult.CRITICAL) { - return r; - } - return compare(new Comparison(ComparisonType.PROCESSING_INSTRUCTION_DATA, - control, null, control.getData(), - test, null, test.getData())); - } - - ComparisonResult compareNodeLists(NodeList control, NodeList test) { - return ComparisonResult.EQUAL; - } -} Copied: trunk/xmlunit/src/main/java-core/net/sf/xmlunit/diff/DOMDifferenceEngine.java.xml (from rev 407, trunk/xmlunit/src/main/java-core/net/sf/xmlunit/diff/DOMDifferenceEngine.java) =================================================================== --- trunk/xmlunit/src/main/java-core/net/sf/xmlunit/diff/DOMDifferenceEngine.java.xml (rev 0) +++ trunk/xmlunit/src/main/java-core/net/sf/xmlunit/diff/DOMDifferenceEngine.java.xml 2010-06-28 15:25:39 UTC (rev 408) @@ -0,0 +1,179 @@ +<?xml version="1.0"?> +<!-- + This file is licensed to You under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<class ns="net.sf.xmlunit.diff" qualifiers="public final" + name="DOMDifferenceEngine" + summary="Difference engine based on DOM." + extends="AbstractDifferenceEngine"> + + <import reference="javax.xml.transform.Source"/> + <import reference="net.sf.xmlunit.util.Convert"/> + <import reference="org.w3c.dom.CharacterData"/> + <import reference="org.w3c.dom.Document"/> + <import reference="org.w3c.dom.DocumentType"/> + <import reference="org.w3c.dom.Element"/> + <import reference="org.w3c.dom.Node"/> + <import reference="org.w3c.dom.NodeList"/> + <import reference="org.w3c.dom.ProcessingInstruction"/> + + <literal><![CDATA[ + public void compare(Source control, Source test) { + if (control == null) { + throw new IllegalArgumentException("control must not be null"); + } + if (test == null) { + throw new IllegalArgumentException("test must not be null"); + } + compareNodes(Convert.toNode(control), Convert.toNode(test)); + } + + /** + * Recursively compares two XML nodes. + * + * <p>Performs comparisons common to all node types, the performs + * the node type specific comparisons and finally recures into + * the node's child lists.</p> + * + * <p>Stops as soon as any comparison returns + * ComparisonResult.CRITICAL.</p> + * + * <p>package private to support tests.</p> + */ + ComparisonResult compareNodes(Node control, Node test) { +]]></literal> + <lastResultDef/> + <compare type="NODE_TYPE" property="getNodeType()"/> + <compare type="NAMESPACE_URI" property="getNamespaceURI()"/> + <compare type="NAMESPACE_PREFIX" property="getPrefix()"/> + <literal><![CDATA[ + NodeList controlChildren = control.getChildNodes(); + NodeList testChildren = test.getChildNodes(); +]]></literal> + <compareExpr type="CHILD_NODELIST_LENGTH" + controlExpr="controlChildren.getLength()" + testExpr="testChildren.getLength()"/> + <compareMethod method="nodeTypeSpecificComparison"/> + <literal><![CDATA[ + return compareNodeLists(controlChildren, testChildren); + } + + /** + * Dispatches to the node type specific comparison if one is + * defined for the given combination of nodes. + * + * <p>package private to support tests.</p> + */ + ComparisonResult nodeTypeSpecificComparison(Node control, Node test) { + switch (control.getNodeType()) { + case Node.CDATA_SECTION_NODE: + case Node.COMMENT_NODE: + case Node.TEXT_NODE: + if (test instanceof CharacterData) { + return compareCharacterData((CharacterData) control, + (CharacterData) test); + } + break; + case Node.DOCUMENT_NODE: + if (test instanceof Document) { + return compareDocuments((Document) control, + (Document) test); + } + break; + case Node.ELEMENT_NODE: + if (test instanceof Element) { + return compareElements((Element) control, + (Element) test); + } + break; + case Node.PROCESSING_INSTRUCTION_NODE: + if (test instanceof ProcessingInstruction) { + return + compareProcessingInstructions((ProcessingInstruction) control, + (ProcessingInstruction) test); + } + break; + } + return ComparisonResult.EQUAL; + } + + /** + * Compares textual content. + */ + private ComparisonResult compareCharacterData(CharacterData control, + CharacterData test) { + return compare(new Comparison(ComparisonType.TEXT_VALUE, control, + null, control.getData(), + test, null, test.getData())); + } + + ComparisonResult compareDocuments(Document control, + Document test) { + DocumentType controlDt = control.getDoctype(); + DocumentType testDt = test.getDoctype(); +]]></literal> + <lastResultDef/> + <compareExpr type="HAS_DOCTYPE_DECLARATION" + controlExpr="Boolean.valueOf(controlDt != null)" + testExpr="Boolean.valueOf(testDt != null)"/> + <literal><![CDATA[ + if (controlDt != null && testDt != null) { +]]></literal> + <compareMethodExpr method="compareDocTypes" + controlExpr="controlDt" + testExpr="testDt"/> + <literal><![CDATA[ + } +]]></literal> + <compare type="XML_VERSION" property="getXmlVersion()"/> + <compare type="XML_STANDALONE" property="getXmlStandalone()"/> + <literal><![CDATA[ + return compare(new Comparison(ComparisonType.XML_ENCODING, + control, null, control.getXmlEncoding(), + test, null, test.getXmlEncoding())); + } + + ComparisonResult compareDocTypes(DocumentType control, + DocumentType test) { +]]></literal> + <lastResultDef/> + <compare type="DOCTYPE_NAME" property="getName()"/> + <compare type="DOCTYPE_PUBLIC_ID" property="getPublicId()"/> + <literal><![CDATA[ + return compare(new Comparison(ComparisonType.DOCTYPE_SYSTEM_ID, + control, null, control.getSystemId(), + test, null, test.getSystemId())); + } + + ComparisonResult compareElements(Element control, + Element test) { + return ComparisonResult.EQUAL; + } + + ComparisonResult + compareProcessingInstructions(ProcessingInstruction control, + ProcessingInstruction test) { +]]></literal> + <lastResultDef/> + <compare type="PROCESSING_INSTRUCTION_TARGET" property="getTarget()"/> + <literal><![CDATA[ + return compare(new Comparison(ComparisonType.PROCESSING_INSTRUCTION_DATA, + control, null, control.getData(), + test, null, test.getData())); + } + + ComparisonResult compareNodeLists(NodeList control, NodeList test) { + return ComparisonResult.EQUAL; + } +]]></literal> +</class> \ No newline at end of file Deleted: trunk/xmlunit/src/main/net-core/diff/DOMDifferenceEngine.cs =================================================================== --- trunk/xmlunit/src/main/net-core/diff/DOMDifferenceEngine.cs 2010-06-28 11:49:08 UTC (rev 407) +++ trunk/xmlunit/src/main/net-core/diff/DOMDifferenceEngine.cs 2010-06-28 15:25:39 UTC (rev 408) @@ -1,158 +0,0 @@ -/* - This file is licensed to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -using System; -using System.Xml; - -namespace net.sf.xmlunit.diff { - - /// <summary> - /// Difference engine based on DOM. - /// </summary> - public sealed class DOMDifferenceEngine : AbstractDifferenceEngine { - - public override void Compare(ISource control, ISource test) { - if (control == null) { - throw new ArgumentNullException("control"); - } - if (test == null) { - throw new ArgumentNullException("test"); - } - - CompareNodes(net.sf.xmlunit.util.Convert.ToNode(control), - net.sf.xmlunit.util.Convert.ToNode(test)); - } - - /// <summary> - /// Recursively compares two XML nodes. - /// </summary> - /// <remarks> - /// Performs comparisons common to all node types, the performs - /// the node type specific comparisons and finally recures into - /// the node's child lists. - /// - /// Stops as soon as any comparison returns ComparisonResult.CRITICAL. - /// </remarks> - internal ComparisonResult CompareNodes(XmlNode control, XmlNode test) { - ComparisonResult lastResult = - Compare(new Comparison(ComparisonType.NODE_TYPE, control, - null, control.NodeType, - test, null, test.NodeType)); - if (lastResult == ComparisonResult.CRITICAL) { - return lastResult; - } - lastResult = - Compare(new Comparison(ComparisonType.NAMESPACE_URI, control, - null, control.NamespaceURI, - test, null, test.NamespaceURI)); - if (lastResult == ComparisonResult.CRITICAL) { - return lastResult; - } - lastResult = - Compare(new Comparison(ComparisonType.NAMESPACE_PREFIX, control, - null, control.Prefix, - test, null, test.Prefix)); - if (lastResult == ComparisonResult.CRITICAL) { - return lastResult; - } - XmlNodeList controlChildren = control.ChildNodes; - XmlNodeList testChildren = test.ChildNodes; - lastResult = - Compare(new Comparison(ComparisonType.CHILD_NODELIST_LENGTH, - control, null, controlChildren.Count, - test, null, testChildren.Count)); - if (lastResult == ComparisonResult.CRITICAL) { - return lastResult; - } - lastResult = NodeTypeSpecificComparison(control, test); - if (lastResult == ComparisonResult.CRITICAL) { - return lastResult; - } - return CompareNodeLists(controlChildren, testChildren); - } - - /// <summary> - /// Dispatches to the node type specific comparison if one is - /// defined for the given combination of nodes. - /// </summary> - internal ComparisonResult NodeTypeSpecificComparison(XmlNode control, - XmlNode test) { - switch (control.NodeType) { - case XmlNodeType.CDATA: - case XmlNodeType.Comment: - case XmlNodeType.Text: - if (test is XmlCharacterData) { - return CompareCharacterData((XmlCharacterData) control, - (XmlCharacterData) test); - } - break; - case XmlNodeType.Document: -#if false - if (test instanceof Document) { - return compareDocuments((Document) control, - (Document) test); - } -#endif - break; - case XmlNodeType.Element: -#if false - if (test instanceof Element) { - return compareElements((Element) control, - (Element) test); - } -#endif - break; - case XmlNodeType.ProcessingInstruction: - if (test is XmlProcessingInstruction) { - return - CompareProcessingInstructions((XmlProcessingInstruction) control, - (XmlProcessingInstruction) test); - } - break; - } - return ComparisonResult.EQUAL; - } - - /// <summary> - /// Compares textual content. - /// </summary> - private ComparisonResult CompareCharacterData(XmlCharacterData control, - XmlCharacterData test) { - return Compare(new Comparison(ComparisonType.TEXT_VALUE, control, - null, control.Data, - test, null, test.Data)); - } - - private ComparisonResult - CompareProcessingInstructions(XmlProcessingInstruction control, - XmlProcessingInstruction test) { - ComparisonResult r = - Compare(new Comparison(ComparisonType.PROCESSING_INSTRUCTION_TARGET, - control, null, control.Target, - test, null, test.Target)); - if (r == ComparisonResult.CRITICAL) { - return r; - } - return Compare(new Comparison(ComparisonType.PROCESSING_INSTRUCTION_DATA, - control, null, control.Data, - test, null, test.Data)); - } - - ComparisonResult CompareNodeLists(XmlNodeList control, - XmlNodeList test) { - return ComparisonResult.EQUAL; - } - - } -} Copied: trunk/xmlunit/src/main/net-core/diff/DOMDifferenceEngine.xml (from rev 407, trunk/xmlunit/src/main/net-core/diff/DOMDifferenceEngine.cs) =================================================================== --- trunk/xmlunit/src/main/net-core/diff/DOMDifferenceEngine.xml (rev 0) +++ trunk/xmlunit/src/main/net-core/diff/DOMDifferenceEngine.xml 2010-06-28 15:25:39 UTC (rev 408) @@ -0,0 +1,135 @@ +<?xml version="1.0"?> +<!-- + This file is licensed to You under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<class ns="net.sf.xmlunit.diff" qualifiers="public sealed" + name="DOMDifferenceEngine" + summary="Difference engine based on DOM." + extends="AbstractDifferenceEngine"> + + <import reference="System"/> + <import reference="System.Xml"/> + + <literal><![CDATA[ + + public override void Compare(ISource control, ISource test) { + if (control == null) { + throw new ArgumentNullException("control"); + } + if (test == null) { + throw new ArgumentNullException("test"); + } + + CompareNodes(net.sf.xmlunit.util.Convert.ToNode(control), + net.sf.xmlunit.util.Convert.ToNode(test)); + } + + /// <summary> + /// Recursively compares two XML nodes. + /// </summary> + /// <remarks> + /// Performs comparisons common to all node types, the performs + /// the node type specific comparisons and finally recures into + /// the node's child lists. + /// + /// Stops as soon as any comparison returns ComparisonResult.CRITICAL. + /// </remarks> + internal ComparisonResult CompareNodes(XmlNode control, XmlNode test) { +]]></literal> + <lastResultDef/> + <compare type="NODE_TYPE" property="NodeType"/> + <compare type="NAMESPACE_URI" property="NamespaceURI"/> + <compare type="NAMESPACE_PREFIX" property="Prefix"/> + <literal><![CDATA[ + XmlNodeList controlChildren = control.ChildNodes; + XmlNodeList testChildren = test.ChildNodes; +]]></literal> + <compareExpr type="CHILD_NODELIST_LENGTH" + controlExpr="controlChildren.Count" + testExpr="testChildren.Count"/> + <compareMethod method="NodeTypeSpecificComparison"/> + <literal><![CDATA[ + return CompareNodeLists(controlChildren, testChildren); + } + + /// <summary> + /// Dispatches to the node type specific comparison if one is + /// defined for the given combination of nodes. + /// </summary> + internal ComparisonResult NodeTypeSpecificComparison(XmlNode control, + XmlNode test) { + switch (control.NodeType) { + case XmlNodeType.CDATA: + case XmlNodeType.Comment: + case XmlNodeType.Text: + if (test is XmlCharacterData) { + return CompareCharacterData((XmlCharacterData) control, + (XmlCharacterData) test); + } + break; + case XmlNodeType.Document: +#if false + if (test instanceof Document) { + return compareDocuments((Document) control, + (Document) test); + } +#endif + break; + case XmlNodeType.Element: +#if false + if (test instanceof Element) { + return compareElements((Element) control, + (Element) test); + } +#endif + break; + case XmlNodeType.ProcessingInstruction: + if (test is XmlProcessingInstruction) { + return + CompareProcessingInstructions((XmlProcessingInstruction) control, + (XmlProcessingInstruction) test); + } + break; + } + return ComparisonResult.EQUAL; + } + + /// <summary> + /// Compares textual content. + /// </summary> + private ComparisonResult CompareCharacterData(XmlCharacterData control, + XmlCharacterData test) { + return Compare(new Comparison(ComparisonType.TEXT_VALUE, control, + null, control.Data, + test, null, test.Data)); + } + + private ComparisonResult + CompareProcessingInstructions(XmlProcessingInstruction control, + XmlProcessingInstruction test) { +]]></literal> + <lastResultDef/> + <compare type="PROCESSING_INSTRUCTION_TARGET" property="Target"/> + <literal><![CDATA[ + return Compare(new Comparison(ComparisonType.PROCESSING_INSTRUCTION_DATA, + control, null, control.Data, + test, null, test.Data)); + } + + ComparisonResult CompareNodeLists(XmlNodeList control, + XmlNodeList test) { + return ComparisonResult.EQUAL; + } + +]]></literal> +</class> \ No newline at end of file Modified: trunk/xmlunit/xmlunit.nant.build =================================================================== --- trunk/xmlunit/xmlunit.nant.build 2010-06-28 11:49:08 UTC (rev 407) +++ trunk/xmlunit/xmlunit.nant.build 2010-06-28 15:25:39 UTC (rev 408) @@ -22,9 +22,9 @@ <property name="core.tests.src.dir" value="${base.dir}/src/tests/net-core" overwrite="false"/> - <property name="gen.src.dir" value="${base.dir}/build/generated/net" + <property name="build.dir" value="${base.dir}/build/net" overwrite="false"/> + <property name="gen.src.dir" value="${build.dir}/generated" overwrite="false"/> - <property name="build.dir" value="${base.dir}/build/net" overwrite="false"/> <property name="test.report.dir" value="${build.dir}/test-report"/> <property name="bin.dir" value="${build.dir}/bin" overwrite="false"/> @@ -74,6 +74,26 @@ <include name="**/*.cs"/> </fileset> </copy> + <style destdir="${gen.src.dir}" + extension="cs" + style="src/buildtools/codegen.xslt"> + <infiles basedir="${core.src.dir}"> + <include name="**/*.xml"/> + </infiles> + <parameters> + + <parameter name="nsQualifier" value="namespace"/> + <parameter name="nsStart" value="{"/> + <parameter name="nsEnd" value="}"/> + <parameter name="import" value="using"/> + <parameter name="extends" value=":"/> + <parameter name="implements" value=":"/> + <parameter name="summaryStart" value="/// <summary>"/> + <parameter name="summaryEnd" value="/// </summary>"/> + + <parameter name="compareMethod" value="Compare"/> + </parameters> + </style> <csc target="library" output="${bin.dir}/${project::get-name()}-core.dll" debug="true" verbose="${csc.verbose}"> <sources basedir="${gen.src.dir}"> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bo...@us...> - 2010-06-28 11:49:15
|
Revision: 407 http://xmlunit.svn.sourceforge.net/xmlunit/?rev=407&view=rev Author: bodewig Date: 2010-06-28 11:49:08 +0000 (Mon, 28 Jun 2010) Log Message: ----------- extract an abstract difference engine implementation Modified Paths: -------------- trunk/xmlunit/src/main/java-core/net/sf/xmlunit/diff/DOMDifferenceEngine.java trunk/xmlunit/src/main/net-core/diff/DOMDifferenceEngine.cs trunk/xmlunit/src/tests/java-core/net/sf/xmlunit/diff/DOMDifferenceEngineTest.java trunk/xmlunit/src/tests/net-core/diff/DOMDifferenceEngineTest.cs Added Paths: ----------- trunk/xmlunit/src/main/java-core/net/sf/xmlunit/diff/AbstractDifferenceEngine.java trunk/xmlunit/src/main/net-core/diff/AbstractDifferenceEngine.cs trunk/xmlunit/src/tests/java-core/net/sf/xmlunit/diff/AbstractDifferenceEngineTest.java trunk/xmlunit/src/tests/net-core/diff/AbstractDifferenceEngineTest.cs Copied: trunk/xmlunit/src/main/java-core/net/sf/xmlunit/diff/AbstractDifferenceEngine.java (from rev 406, trunk/xmlunit/src/main/java-core/net/sf/xmlunit/diff/DOMDifferenceEngine.java) =================================================================== --- trunk/xmlunit/src/main/java-core/net/sf/xmlunit/diff/AbstractDifferenceEngine.java (rev 0) +++ trunk/xmlunit/src/main/java-core/net/sf/xmlunit/diff/AbstractDifferenceEngine.java 2010-06-28 11:49:08 UTC (rev 407) @@ -0,0 +1,88 @@ +/* + This file is licensed to You under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ +package net.sf.xmlunit.diff; + +/** + * Useful base-implementation of some parts of the DifferenceEngine + * interface. + */ +public abstract class AbstractDifferenceEngine implements DifferenceEngine { + private final ComparisonListenerSupport listeners = + new ComparisonListenerSupport(); + private ElementSelector elementSelector = ElementSelectors.Default; + private DifferenceEvaluator diffEvaluator = DifferenceEvaluators.Default; + + public void addComparisonListener(ComparisonListener l) { + if (l == null) { + throw new IllegalArgumentException("listener must not be null"); + } + listeners.addComparisonListener(l); + } + + public void addMatchListener(ComparisonListener l) { + if (l == null) { + throw new IllegalArgumentException("listener must not be null"); + } + listeners.addMatchListener(l); + } + + public void addDifferenceListener(ComparisonListener l) { + if (l == null) { + throw new IllegalArgumentException("listener must not be null"); + } + listeners.addDifferenceListener(l); + } + + public void setElementSelector(ElementSelector s) { + if (s == null) { + throw new IllegalArgumentException("element selector must" + + " not be null"); + } + elementSelector = s; + } + + public ElementSelector getElementSelector() { + return elementSelector; + } + + public void setDifferenceEvaluator(DifferenceEvaluator e) { + if (e == null) { + throw new IllegalArgumentException("difference evaluator must" + + " not be null"); + } + diffEvaluator = e; + } + + public DifferenceEvaluator getDifferenceEvaluator() { + return diffEvaluator; + } + + /** + * Compares the detail values for object equality, lets the + * difference evaluator evaluate the result, notifies all + * listeners and returns the outcome. + */ + protected final ComparisonResult compare(Comparison comp) { + Object controlValue = comp.getControlNodeDetails().getValue(); + Object testValue = comp.getTestNodeDetails().getValue(); + boolean equal = controlValue == null + ? testValue == null : controlValue.equals(testValue); + ComparisonResult initial = + equal ? ComparisonResult.EQUAL : ComparisonResult.DIFFERENT; + ComparisonResult altered = + getDifferenceEvaluator().evaluate(comp, initial); + listeners.fireComparisonPerformed(comp, altered); + return altered; + } +} Modified: trunk/xmlunit/src/main/java-core/net/sf/xmlunit/diff/DOMDifferenceEngine.java =================================================================== --- trunk/xmlunit/src/main/java-core/net/sf/xmlunit/diff/DOMDifferenceEngine.java 2010-06-25 15:35:43 UTC (rev 406) +++ trunk/xmlunit/src/main/java-core/net/sf/xmlunit/diff/DOMDifferenceEngine.java 2010-06-28 11:49:08 UTC (rev 407) @@ -26,49 +26,8 @@ /** * Difference engine based on DOM. */ -public final class DOMDifferenceEngine implements DifferenceEngine { - private final ComparisonListenerSupport listeners = - new ComparisonListenerSupport(); - private ElementSelector elementSelector = ElementSelectors.Default; - private DifferenceEvaluator diffEvaluator = DifferenceEvaluators.Default; +public final class DOMDifferenceEngine extends AbstractDifferenceEngine { - public void addComparisonListener(ComparisonListener l) { - if (l == null) { - throw new IllegalArgumentException("listener must not be null"); - } - listeners.addComparisonListener(l); - } - - public void addMatchListener(ComparisonListener l) { - if (l == null) { - throw new IllegalArgumentException("listener must not be null"); - } - listeners.addMatchListener(l); - } - - public void addDifferenceListener(ComparisonListener l) { - if (l == null) { - throw new IllegalArgumentException("listener must not be null"); - } - listeners.addDifferenceListener(l); - } - - public void setElementSelector(ElementSelector s) { - if (s == null) { - throw new IllegalArgumentException("element selector must" - + " not be null"); - } - elementSelector = s; - } - - public void setDifferenceEvaluator(DifferenceEvaluator e) { - if (e == null) { - throw new IllegalArgumentException("difference evaluator must" - + " not be null"); - } - diffEvaluator = e; - } - public void compare(Source control, Source test) { if (control == null) { throw new IllegalArgumentException("control must not be null"); @@ -257,23 +216,4 @@ ComparisonResult compareNodeLists(NodeList control, NodeList test) { return ComparisonResult.EQUAL; } - - /** - * Compares the detail values for object equality, lets the - * difference evaluator evaluate the result, notifies all - * listeners and returns the outcome. - * - * <p>package private to support tests.</p> - */ - ComparisonResult compare(Comparison comp) { - Object controlValue = comp.getControlNodeDetails().getValue(); - Object testValue = comp.getTestNodeDetails().getValue(); - boolean equal = controlValue == null - ? testValue == null : controlValue.equals(testValue); - ComparisonResult initial = - equal ? ComparisonResult.EQUAL : ComparisonResult.DIFFERENT; - ComparisonResult altered = diffEvaluator.evaluate(comp, initial); - listeners.fireComparisonPerformed(comp, altered); - return altered; - } } Copied: trunk/xmlunit/src/main/net-core/diff/AbstractDifferenceEngine.cs (from rev 406, trunk/xmlunit/src/main/net-core/diff/DOMDifferenceEngine.cs) =================================================================== --- trunk/xmlunit/src/main/net-core/diff/AbstractDifferenceEngine.cs (rev 0) +++ trunk/xmlunit/src/main/net-core/diff/AbstractDifferenceEngine.cs 2010-06-28 11:49:08 UTC (rev 407) @@ -0,0 +1,86 @@ +/* + This file is licensed to You under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +using System; + +namespace net.sf.xmlunit.diff { + + /// <summary> + /// Useful base-implementation of some parts of the + /// IDifferenceEngine interface. + /// </summary> + public abstract class AbstractDifferenceEngine : IDifferenceEngine { + public event ComparisonListener ComparisonListener; + public event ComparisonListener MatchListener; + public event ComparisonListener DifferenceListener; + + private ElementSelector elementSelector = ElementSelectors.Default; + public virtual ElementSelector ElementSelector { + set { + if (value == null) { + throw new ArgumentNullException("element selector"); + } + elementSelector = value; + } + get { + return elementSelector; + } + } + + private DifferenceEvaluator diffEvaluator = DifferenceEvaluators.Default; + public virtual DifferenceEvaluator DifferenceEvaluator { + set { + if (value == null) { + throw new ArgumentNullException("difference evaluator"); + } + diffEvaluator = value; + } + get { + return diffEvaluator; + } + } + + public abstract void Compare(ISource control, ISource test); + + /// <summary> + /// Compares the detail values for object equality, lets the + /// difference evaluator evaluate the result, notifies all + /// listeners and returns the outcome. + /// </summary> + protected internal ComparisonResult Compare(Comparison comp) { + object controlValue = comp.ControlNodeDetails.Value; + object testValue = comp.TestNodeDetails.Value; + bool equal = controlValue == null + ? testValue == null : controlValue.Equals(testValue); + ComparisonResult initial = + equal ? ComparisonResult.EQUAL : ComparisonResult.DIFFERENT; + ComparisonResult altered = DifferenceEvaluator(comp, initial); + FireComparisonPerformed(comp, altered); + return altered; + } + + private void FireComparisonPerformed(Comparison comp, + ComparisonResult outcome) { + if (ComparisonListener != null) { + ComparisonListener(comp, outcome); + } + if (outcome == ComparisonResult.EQUAL && MatchListener != null) { + MatchListener(comp, outcome); + } else if (outcome != ComparisonResult.EQUAL + && DifferenceListener != null) { + DifferenceListener(comp, outcome); + } + } + } +} Modified: trunk/xmlunit/src/main/net-core/diff/DOMDifferenceEngine.cs =================================================================== --- trunk/xmlunit/src/main/net-core/diff/DOMDifferenceEngine.cs 2010-06-25 15:35:43 UTC (rev 406) +++ trunk/xmlunit/src/main/net-core/diff/DOMDifferenceEngine.cs 2010-06-28 11:49:08 UTC (rev 407) @@ -20,32 +20,9 @@ /// <summary> /// Difference engine based on DOM. /// </summary> - public sealed class DOMDifferenceEngine : IDifferenceEngine { - public event ComparisonListener ComparisonListener; - public event ComparisonListener MatchListener; - public event ComparisonListener DifferenceListener; + public sealed class DOMDifferenceEngine : AbstractDifferenceEngine { - private ElementSelector elementSelector = ElementSelectors.Default; - public ElementSelector ElementSelector { - set { - if (value == null) { - throw new ArgumentNullException("element selector"); - } - elementSelector = value; - } - } - - private DifferenceEvaluator diffEvaluator = DifferenceEvaluators.Default; - public DifferenceEvaluator DifferenceEvaluator { - set { - if (value == null) { - throw new ArgumentNullException("difference evaluator"); - } - diffEvaluator = value; - } - } - - public void Compare(ISource control, ISource test) { + public override void Compare(ISource control, ISource test) { if (control == null) { throw new ArgumentNullException("control"); } @@ -177,34 +154,5 @@ return ComparisonResult.EQUAL; } - /// <summary> - /// Compares the detail values for object equality, lets the - /// difference evaluator evaluate the result, notifies all - /// listeners and returns the outcome. - /// </summary> - internal ComparisonResult Compare(Comparison comp) { - object controlValue = comp.ControlNodeDetails.Value; - object testValue = comp.TestNodeDetails.Value; - bool equal = controlValue == null - ? testValue == null : controlValue.Equals(testValue); - ComparisonResult initial = - equal ? ComparisonResult.EQUAL : ComparisonResult.DIFFERENT; - ComparisonResult altered = diffEvaluator(comp, initial); - FireComparisonPerformed(comp, altered); - return altered; - } - - private void FireComparisonPerformed(Comparison comp, - ComparisonResult outcome) { - if (ComparisonListener != null) { - ComparisonListener(comp, outcome); - } - if (outcome == ComparisonResult.EQUAL && MatchListener != null) { - MatchListener(comp, outcome); - } else if (outcome != ComparisonResult.EQUAL - && DifferenceListener != null) { - DifferenceListener(comp, outcome); - } - } } } Copied: trunk/xmlunit/src/tests/java-core/net/sf/xmlunit/diff/AbstractDifferenceEngineTest.java (from rev 406, trunk/xmlunit/src/tests/java-core/net/sf/xmlunit/diff/DOMDifferenceEngineTest.java) =================================================================== --- trunk/xmlunit/src/tests/java-core/net/sf/xmlunit/diff/AbstractDifferenceEngineTest.java (rev 0) +++ trunk/xmlunit/src/tests/java-core/net/sf/xmlunit/diff/AbstractDifferenceEngineTest.java 2010-06-28 11:49:08 UTC (rev 407) @@ -0,0 +1,117 @@ +/* + This file is licensed to You under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ +package net.sf.xmlunit.diff; + +import org.junit.Test; +import static org.junit.Assert.*; + +public abstract class AbstractDifferenceEngineTest { + + protected abstract AbstractDifferenceEngine getDifferenceEngine(); + + private static class ResultGrabber implements DifferenceEvaluator { + private ComparisonResult outcome = ComparisonResult.CRITICAL; + public ComparisonResult evaluate(Comparison comparison, + ComparisonResult outcome) { + this.outcome = outcome; + return outcome; + } + } + + @Test public void compareTwoNulls() { + ResultGrabber g = new ResultGrabber(); + AbstractDifferenceEngine d = getDifferenceEngine(); + d.setDifferenceEvaluator(g); + assertEquals(ComparisonResult.EQUAL, + d.compare(new Comparison(ComparisonType.HAS_DOCTYPE_DECLARATION, + null, null, null, + null, null, null))); + assertEquals(ComparisonResult.EQUAL, g.outcome); + } + + @Test public void compareControlNullTestNonNull() { + ResultGrabber g = new ResultGrabber(); + AbstractDifferenceEngine d = getDifferenceEngine(); + d.setDifferenceEvaluator(g); + assertEquals(ComparisonResult.DIFFERENT, + d.compare(new Comparison(ComparisonType.HAS_DOCTYPE_DECLARATION, + null, null, null, + null, null, ""))); + assertEquals(ComparisonResult.DIFFERENT, g.outcome); + } + + @Test public void compareControlNonNullTestNull() { + ResultGrabber g = new ResultGrabber(); + AbstractDifferenceEngine d = getDifferenceEngine(); + d.setDifferenceEvaluator(g); + assertEquals(ComparisonResult.DIFFERENT, + d.compare(new Comparison(ComparisonType.HAS_DOCTYPE_DECLARATION, + null, null, "", + null, null, null))); + assertEquals(ComparisonResult.DIFFERENT, g.outcome); + } + + @Test public void compareTwoDifferentNonNulls() { + ResultGrabber g = new ResultGrabber(); + AbstractDifferenceEngine d = getDifferenceEngine(); + d.setDifferenceEvaluator(g); + assertEquals(ComparisonResult.DIFFERENT, + d.compare(new Comparison(ComparisonType.HAS_DOCTYPE_DECLARATION, + null, null, new Short("1"), + null, null, new Short("2")))); + assertEquals(ComparisonResult.DIFFERENT, g.outcome); + } + + @Test public void compareTwoEqualNonNulls() { + ResultGrabber g = new ResultGrabber(); + AbstractDifferenceEngine d = getDifferenceEngine(); + d.setDifferenceEvaluator(g); + assertEquals(ComparisonResult.EQUAL, + d.compare(new Comparison(ComparisonType.HAS_DOCTYPE_DECLARATION, + null, null, new Short("2"), + null, null, new Short("2")))); + assertEquals(ComparisonResult.EQUAL, g.outcome); + } + + @Test public void compareNotifiesListener() { + AbstractDifferenceEngine d = getDifferenceEngine(); + ComparisonListenerSupportTest.Listener l = + new ComparisonListenerSupportTest.Listener(ComparisonResult.EQUAL); + d.addComparisonListener(l); + assertEquals(ComparisonResult.EQUAL, + d.compare(new Comparison(ComparisonType.HAS_DOCTYPE_DECLARATION, + null, null, new Short("2"), + null, null, new Short("2")))); + assertEquals(1, l.getInvocations()); + } + + @Test public void compareUsesResultOfEvaluator() { + AbstractDifferenceEngine d = getDifferenceEngine(); + ComparisonListenerSupportTest.Listener l = + new ComparisonListenerSupportTest.Listener(ComparisonResult.SIMILAR); + d.addComparisonListener(l); + d.setDifferenceEvaluator(new DifferenceEvaluator() { + public ComparisonResult evaluate(Comparison comparison, + ComparisonResult outcome) { + return ComparisonResult.SIMILAR; + } + }); + assertEquals(ComparisonResult.SIMILAR, + d.compare(new Comparison(ComparisonType.HAS_DOCTYPE_DECLARATION, + null, null, new Short("2"), + null, null, new Short("2")))); + assertEquals(1, l.getInvocations()); + } + +} Modified: trunk/xmlunit/src/tests/java-core/net/sf/xmlunit/diff/DOMDifferenceEngineTest.java =================================================================== --- trunk/xmlunit/src/tests/java-core/net/sf/xmlunit/diff/DOMDifferenceEngineTest.java 2010-06-25 15:35:43 UTC (rev 406) +++ trunk/xmlunit/src/tests/java-core/net/sf/xmlunit/diff/DOMDifferenceEngineTest.java 2010-06-28 11:49:08 UTC (rev 407) @@ -25,102 +25,12 @@ import org.w3c.dom.Text; import static org.junit.Assert.*; -public class DOMDifferenceEngineTest { +public class DOMDifferenceEngineTest extends AbstractDifferenceEngineTest { - private static class ResultGrabber implements DifferenceEvaluator { - private ComparisonResult outcome = ComparisonResult.CRITICAL; - public ComparisonResult evaluate(Comparison comparison, - ComparisonResult outcome) { - this.outcome = outcome; - return outcome; - } + @Override protected AbstractDifferenceEngine getDifferenceEngine() { + return new DOMDifferenceEngine(); } - @Test public void compareTwoNulls() { - ResultGrabber g = new ResultGrabber(); - DOMDifferenceEngine d = new DOMDifferenceEngine(); - d.setDifferenceEvaluator(g); - assertEquals(ComparisonResult.EQUAL, - d.compare(new Comparison(ComparisonType.HAS_DOCTYPE_DECLARATION, - null, null, null, - null, null, null))); - assertEquals(ComparisonResult.EQUAL, g.outcome); - } - - @Test public void compareControlNullTestNonNull() { - ResultGrabber g = new ResultGrabber(); - DOMDifferenceEngine d = new DOMDifferenceEngine(); - d.setDifferenceEvaluator(g); - assertEquals(ComparisonResult.DIFFERENT, - d.compare(new Comparison(ComparisonType.HAS_DOCTYPE_DECLARATION, - null, null, null, - null, null, ""))); - assertEquals(ComparisonResult.DIFFERENT, g.outcome); - } - - @Test public void compareControlNonNullTestNull() { - ResultGrabber g = new ResultGrabber(); - DOMDifferenceEngine d = new DOMDifferenceEngine(); - d.setDifferenceEvaluator(g); - assertEquals(ComparisonResult.DIFFERENT, - d.compare(new Comparison(ComparisonType.HAS_DOCTYPE_DECLARATION, - null, null, "", - null, null, null))); - assertEquals(ComparisonResult.DIFFERENT, g.outcome); - } - - @Test public void compareTwoDifferentNonNulls() { - ResultGrabber g = new ResultGrabber(); - DOMDifferenceEngine d = new DOMDifferenceEngine(); - d.setDifferenceEvaluator(g); - assertEquals(ComparisonResult.DIFFERENT, - d.compare(new Comparison(ComparisonType.HAS_DOCTYPE_DECLARATION, - null, null, new Short("1"), - null, null, new Short("2")))); - assertEquals(ComparisonResult.DIFFERENT, g.outcome); - } - - @Test public void compareTwoEqualNonNulls() { - ResultGrabber g = new ResultGrabber(); - DOMDifferenceEngine d = new DOMDifferenceEngine(); - d.setDifferenceEvaluator(g); - assertEquals(ComparisonResult.EQUAL, - d.compare(new Comparison(ComparisonType.HAS_DOCTYPE_DECLARATION, - null, null, new Short("2"), - null, null, new Short("2")))); - assertEquals(ComparisonResult.EQUAL, g.outcome); - } - - @Test public void compareNotifiesListener() { - DOMDifferenceEngine d = new DOMDifferenceEngine(); - ComparisonListenerSupportTest.Listener l = - new ComparisonListenerSupportTest.Listener(ComparisonResult.EQUAL); - d.addComparisonListener(l); - assertEquals(ComparisonResult.EQUAL, - d.compare(new Comparison(ComparisonType.HAS_DOCTYPE_DECLARATION, - null, null, new Short("2"), - null, null, new Short("2")))); - assertEquals(1, l.getInvocations()); - } - - @Test public void compareUsesResultOfEvaluator() { - DOMDifferenceEngine d = new DOMDifferenceEngine(); - ComparisonListenerSupportTest.Listener l = - new ComparisonListenerSupportTest.Listener(ComparisonResult.SIMILAR); - d.addComparisonListener(l); - d.setDifferenceEvaluator(new DifferenceEvaluator() { - public ComparisonResult evaluate(Comparison comparison, - ComparisonResult outcome) { - return ComparisonResult.SIMILAR; - } - }); - assertEquals(ComparisonResult.SIMILAR, - d.compare(new Comparison(ComparisonType.HAS_DOCTYPE_DECLARATION, - null, null, new Short("2"), - null, null, new Short("2")))); - assertEquals(1, l.getInvocations()); - } - private static class DiffExpecter implements ComparisonListener { private int invoked = 0; private final int expectedInvocations; Copied: trunk/xmlunit/src/tests/net-core/diff/AbstractDifferenceEngineTest.cs (from rev 406, trunk/xmlunit/src/tests/net-core/diff/DOMDifferenceEngineTest.cs) =================================================================== --- trunk/xmlunit/src/tests/net-core/diff/AbstractDifferenceEngineTest.cs (rev 0) +++ trunk/xmlunit/src/tests/net-core/diff/AbstractDifferenceEngineTest.cs 2010-06-28 11:49:08 UTC (rev 407) @@ -0,0 +1,132 @@ +/* + This file is licensed to You under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ +using System; +using NUnit.Framework; + +namespace net.sf.xmlunit.diff { + + public abstract class AbstractDifferenceEngineTest { + + protected abstract AbstractDifferenceEngine DifferenceEngine { + get; + } + + private ComparisonResult outcome = ComparisonResult.CRITICAL; + private ComparisonResult ResultGrabber(Comparison comparison, + ComparisonResult outcome) { + this.outcome = outcome; + return outcome; + } + + [Test] + public void CompareTwoNulls() { + AbstractDifferenceEngine d = DifferenceEngine; + d.DifferenceEvaluator = ResultGrabber; + Assert.AreEqual(ComparisonResult.EQUAL, + d.Compare(new Comparison(ComparisonType.HAS_DOCTYPE_DECLARATION, + null, null, null, + null, null, null))); + Assert.AreEqual(ComparisonResult.EQUAL, outcome); + } + + [Test] + public void CompareControlNullTestNonNull() { + AbstractDifferenceEngine d = DifferenceEngine; + d.DifferenceEvaluator = ResultGrabber; + Assert.AreEqual(ComparisonResult.DIFFERENT, + d.Compare(new Comparison(ComparisonType.HAS_DOCTYPE_DECLARATION, + null, null, null, + null, null, ""))); + Assert.AreEqual(ComparisonResult.DIFFERENT, outcome); + } + + [Test] + public void CompareControlNonNullTestNull() { + AbstractDifferenceEngine d = DifferenceEngine; + d.DifferenceEvaluator = ResultGrabber; + Assert.AreEqual(ComparisonResult.DIFFERENT, + d.Compare(new Comparison(ComparisonType.HAS_DOCTYPE_DECLARATION, + null, null, "", + null, null, null))); + Assert.AreEqual(ComparisonResult.DIFFERENT, outcome); + } + + [Test] + public void CompareTwoDifferentNonNulls() { + AbstractDifferenceEngine d = DifferenceEngine; + d.DifferenceEvaluator = ResultGrabber; + Assert.AreEqual(ComparisonResult.DIFFERENT, + d.Compare(new Comparison(ComparisonType.HAS_DOCTYPE_DECLARATION, + null, null, + Convert.ToInt16("1"), + null, null, + Convert.ToInt16("2")))); + Assert.AreEqual(ComparisonResult.DIFFERENT, outcome); + } + + [Test] + public void CompareTwoEqualNonNulls() { + AbstractDifferenceEngine d = DifferenceEngine; + d.DifferenceEvaluator = ResultGrabber; + Assert.AreEqual(ComparisonResult.EQUAL, + d.Compare(new Comparison(ComparisonType.HAS_DOCTYPE_DECLARATION, + null, null, + Convert.ToInt16("2"), + null, null, + Convert.ToInt16("2")))); + Assert.AreEqual(ComparisonResult.EQUAL, outcome); + } + + [Test] + public void CompareNotifiesListener() { + AbstractDifferenceEngine d = DifferenceEngine; + int invocations = 0; + d.ComparisonListener += delegate(Comparison comp, + ComparisonResult r) { + invocations++; + Assert.AreEqual(ComparisonResult.EQUAL, r); + }; + Assert.AreEqual(ComparisonResult.EQUAL, + d.Compare(new Comparison(ComparisonType.HAS_DOCTYPE_DECLARATION, + null, null, + Convert.ToInt16("2"), + null, null, + Convert.ToInt16("2")))); + Assert.AreEqual(1, invocations); + } + + [Test] + public void CompareUsesResultOfEvaluator() { + AbstractDifferenceEngine d = DifferenceEngine; + int invocations = 0; + d.ComparisonListener += delegate(Comparison comp, + ComparisonResult r) { + invocations++; + Assert.AreEqual(ComparisonResult.SIMILAR, r); + }; + d.DifferenceEvaluator = delegate(Comparison comparison, + ComparisonResult outcome) { + return ComparisonResult.SIMILAR; + }; + Assert.AreEqual(ComparisonResult.SIMILAR, + d.Compare(new Comparison(ComparisonType.HAS_DOCTYPE_DECLARATION, + null, null, + Convert.ToInt16("2"), + null, null, + Convert.ToInt16("2")))); + Assert.AreEqual(1, invocations); + } + + } +} Modified: trunk/xmlunit/src/tests/net-core/diff/DOMDifferenceEngineTest.cs =================================================================== --- trunk/xmlunit/src/tests/net-core/diff/DOMDifferenceEngineTest.cs 2010-06-25 15:35:43 UTC (rev 406) +++ trunk/xmlunit/src/tests/net-core/diff/DOMDifferenceEngineTest.cs 2010-06-28 11:49:08 UTC (rev 407) @@ -18,114 +18,14 @@ namespace net.sf.xmlunit.diff { [TestFixture] - public class DOMDifferenceEngineTest { + public class DOMDifferenceEngineTest : AbstractDifferenceEngineTest { - private ComparisonResult outcome = ComparisonResult.CRITICAL; - private ComparisonResult ResultGrabber(Comparison comparison, - ComparisonResult outcome) { - this.outcome = outcome; - return outcome; + protected override AbstractDifferenceEngine DifferenceEngine { + get { + return new DOMDifferenceEngine(); + } } - [Test] - public void CompareTwoNulls() { - DOMDifferenceEngine d = new DOMDifferenceEngine(); - d.DifferenceEvaluator = ResultGrabber; - Assert.AreEqual(ComparisonResult.EQUAL, - d.Compare(new Comparison(ComparisonType.HAS_DOCTYPE_DECLARATION, - null, null, null, - null, null, null))); - Assert.AreEqual(ComparisonResult.EQUAL, outcome); - } - - [Test] - public void CompareControlNullTestNonNull() { - DOMDifferenceEngine d = new DOMDifferenceEngine(); - d.DifferenceEvaluator = ResultGrabber; - Assert.AreEqual(ComparisonResult.DIFFERENT, - d.Compare(new Comparison(ComparisonType.HAS_DOCTYPE_DECLARATION, - null, null, null, - null, null, ""))); - Assert.AreEqual(ComparisonResult.DIFFERENT, outcome); - } - - [Test] - public void CompareControlNonNullTestNull() { - DOMDifferenceEngine d = new DOMDifferenceEngine(); - d.DifferenceEvaluator = ResultGrabber; - Assert.AreEqual(ComparisonResult.DIFFERENT, - d.Compare(new Comparison(ComparisonType.HAS_DOCTYPE_DECLARATION, - null, null, "", - null, null, null))); - Assert.AreEqual(ComparisonResult.DIFFERENT, outcome); - } - - [Test] - public void CompareTwoDifferentNonNulls() { - DOMDifferenceEngine d = new DOMDifferenceEngine(); - d.DifferenceEvaluator = ResultGrabber; - Assert.AreEqual(ComparisonResult.DIFFERENT, - d.Compare(new Comparison(ComparisonType.HAS_DOCTYPE_DECLARATION, - null, null, - Convert.ToInt16("1"), - null, null, - Convert.ToInt16("2")))); - Assert.AreEqual(ComparisonResult.DIFFERENT, outcome); - } - - [Test] - public void CompareTwoEqualNonNulls() { - DOMDifferenceEngine d = new DOMDifferenceEngine(); - d.DifferenceEvaluator = ResultGrabber; - Assert.AreEqual(ComparisonResult.EQUAL, - d.Compare(new Comparison(ComparisonType.HAS_DOCTYPE_DECLARATION, - null, null, - Convert.ToInt16("2"), - null, null, - Convert.ToInt16("2")))); - Assert.AreEqual(ComparisonResult.EQUAL, outcome); - } - - [Test] - public void CompareNotifiesListener() { - DOMDifferenceEngine d = new DOMDifferenceEngine(); - int invocations = 0; - d.ComparisonListener += delegate(Comparison comp, - ComparisonResult r) { - invocations++; - Assert.AreEqual(ComparisonResult.EQUAL, r); - }; - Assert.AreEqual(ComparisonResult.EQUAL, - d.Compare(new Comparison(ComparisonType.HAS_DOCTYPE_DECLARATION, - null, null, - Convert.ToInt16("2"), - null, null, - Convert.ToInt16("2")))); - Assert.AreEqual(1, invocations); - } - - [Test] - public void CompareUsesResultOfEvaluator() { - DOMDifferenceEngine d = new DOMDifferenceEngine(); - int invocations = 0; - d.ComparisonListener += delegate(Comparison comp, - ComparisonResult r) { - invocations++; - Assert.AreEqual(ComparisonResult.SIMILAR, r); - }; - d.DifferenceEvaluator = delegate(Comparison comparison, - ComparisonResult outcome) { - return ComparisonResult.SIMILAR; - }; - Assert.AreEqual(ComparisonResult.SIMILAR, - d.Compare(new Comparison(ComparisonType.HAS_DOCTYPE_DECLARATION, - null, null, - Convert.ToInt16("2"), - null, null, - Convert.ToInt16("2")))); - Assert.AreEqual(1, invocations); - } - private XmlDocument doc; [SetUp] @@ -316,7 +216,8 @@ Assert.AreEqual(9, invocations); } - [Test] public void compareProcessingInstructions() { + [Test] + public void CompareProcessingInstructions() { DOMDifferenceEngine d = new DOMDifferenceEngine(); int invocations = 0; d.DifferenceListener += delegate(Comparison comp, This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bo...@us...> - 2010-06-25 15:35:49
|
Revision: 406 http://xmlunit.svn.sourceforge.net/xmlunit/?rev=406&view=rev Author: bodewig Date: 2010-06-25 15:35:43 +0000 (Fri, 25 Jun 2010) Log Message: ----------- port the node specific tests that already have unit tests Modified Paths: -------------- trunk/xmlunit/src/main/net-core/diff/DOMDifferenceEngine.cs trunk/xmlunit/src/tests/net-core/diff/DOMDifferenceEngineTest.cs Modified: trunk/xmlunit/src/main/net-core/diff/DOMDifferenceEngine.cs =================================================================== --- trunk/xmlunit/src/main/net-core/diff/DOMDifferenceEngine.cs 2010-06-24 15:31:25 UTC (rev 405) +++ trunk/xmlunit/src/main/net-core/diff/DOMDifferenceEngine.cs 2010-06-25 15:35:43 UTC (rev 406) @@ -98,10 +98,80 @@ if (lastResult == ComparisonResult.CRITICAL) { return lastResult; } - /* TODO node type specific stuff */ + lastResult = NodeTypeSpecificComparison(control, test); + if (lastResult == ComparisonResult.CRITICAL) { + return lastResult; + } return CompareNodeLists(controlChildren, testChildren); } + /// <summary> + /// Dispatches to the node type specific comparison if one is + /// defined for the given combination of nodes. + /// </summary> + internal ComparisonResult NodeTypeSpecificComparison(XmlNode control, + XmlNode test) { + switch (control.NodeType) { + case XmlNodeType.CDATA: + case XmlNodeType.Comment: + case XmlNodeType.Text: + if (test is XmlCharacterData) { + return CompareCharacterData((XmlCharacterData) control, + (XmlCharacterData) test); + } + break; + case XmlNodeType.Document: +#if false + if (test instanceof Document) { + return compareDocuments((Document) control, + (Document) test); + } +#endif + break; + case XmlNodeType.Element: +#if false + if (test instanceof Element) { + return compareElements((Element) control, + (Element) test); + } +#endif + break; + case XmlNodeType.ProcessingInstruction: + if (test is XmlProcessingInstruction) { + return + CompareProcessingInstructions((XmlProcessingInstruction) control, + (XmlProcessingInstruction) test); + } + break; + } + return ComparisonResult.EQUAL; + } + + /// <summary> + /// Compares textual content. + /// </summary> + private ComparisonResult CompareCharacterData(XmlCharacterData control, + XmlCharacterData test) { + return Compare(new Comparison(ComparisonType.TEXT_VALUE, control, + null, control.Data, + test, null, test.Data)); + } + + private ComparisonResult + CompareProcessingInstructions(XmlProcessingInstruction control, + XmlProcessingInstruction test) { + ComparisonResult r = + Compare(new Comparison(ComparisonType.PROCESSING_INSTRUCTION_TARGET, + control, null, control.Target, + test, null, test.Target)); + if (r == ComparisonResult.CRITICAL) { + return r; + } + return Compare(new Comparison(ComparisonType.PROCESSING_INSTRUCTION_DATA, + control, null, control.Data, + test, null, test.Data)); + } + ComparisonResult CompareNodeLists(XmlNodeList control, XmlNodeList test) { return ComparisonResult.EQUAL; Modified: trunk/xmlunit/src/tests/net-core/diff/DOMDifferenceEngineTest.cs =================================================================== --- trunk/xmlunit/src/tests/net-core/diff/DOMDifferenceEngineTest.cs 2010-06-24 15:31:25 UTC (rev 405) +++ trunk/xmlunit/src/tests/net-core/diff/DOMDifferenceEngineTest.cs 2010-06-25 15:35:43 UTC (rev 406) @@ -237,5 +237,132 @@ Assert.AreEqual(ComparisonResult.CRITICAL, d.CompareNodes(e1, e2)); Assert.AreEqual(2, invocations); } + + [Test] + public void CompareCharacterData() { + DOMDifferenceEngine d = new DOMDifferenceEngine(); + int invocations = 0; + d.DifferenceListener += delegate(Comparison comp, + ComparisonResult r) { + Assert.Greater(9, invocations); + invocations++; + Assert.AreEqual(ComparisonType.TEXT_VALUE, + comp.Type); + Assert.AreEqual(ComparisonResult.CRITICAL, r); + }; + d.DifferenceEvaluator = + DifferenceEvaluators.DefaultStopWhenDifferent; + + XmlComment fooComment = doc.CreateComment("foo"); + XmlComment barComment = doc.CreateComment("bar"); + XmlText fooText = doc.CreateTextNode("foo"); + XmlText barText = doc.CreateTextNode("bar"); + XmlCDataSection fooCDataSection = doc.CreateCDataSection("foo"); + XmlCDataSection barCDataSection = doc.CreateCDataSection("bar"); + + Assert.AreEqual(ComparisonResult.EQUAL, + d.NodeTypeSpecificComparison(fooComment, + fooComment)); + Assert.AreEqual(ComparisonResult.CRITICAL, + d.NodeTypeSpecificComparison(fooComment, + barComment)); + Assert.AreEqual(ComparisonResult.EQUAL, + d.NodeTypeSpecificComparison(fooText, fooText)); + Assert.AreEqual(ComparisonResult.CRITICAL, + d.NodeTypeSpecificComparison(fooText, barText)); + Assert.AreEqual(ComparisonResult.EQUAL, + d.NodeTypeSpecificComparison(fooCDataSection, + fooCDataSection)); + Assert.AreEqual(ComparisonResult.CRITICAL, + d.NodeTypeSpecificComparison(fooCDataSection, + barCDataSection)); + + Assert.AreEqual(ComparisonResult.EQUAL, + d.NodeTypeSpecificComparison(fooComment, fooText)); + Assert.AreEqual(ComparisonResult.CRITICAL, + d.NodeTypeSpecificComparison(fooComment, barText)); + Assert.AreEqual(ComparisonResult.EQUAL, + d.NodeTypeSpecificComparison(fooComment, + fooCDataSection)); + Assert.AreEqual(ComparisonResult.CRITICAL, + d.NodeTypeSpecificComparison(fooComment, + barCDataSection)); + Assert.AreEqual(ComparisonResult.EQUAL, + d.NodeTypeSpecificComparison(fooText, + fooComment)); + Assert.AreEqual(ComparisonResult.CRITICAL, + d.NodeTypeSpecificComparison(fooText, barComment)); + Assert.AreEqual(ComparisonResult.EQUAL, + d.NodeTypeSpecificComparison(fooText, + fooCDataSection)); + Assert.AreEqual(ComparisonResult.CRITICAL, + d.NodeTypeSpecificComparison(fooText, + barCDataSection)); + Assert.AreEqual(ComparisonResult.EQUAL, + d.NodeTypeSpecificComparison(fooCDataSection, + fooText)); + Assert.AreEqual(ComparisonResult.CRITICAL, + d.NodeTypeSpecificComparison(fooCDataSection, + barText)); + Assert.AreEqual(ComparisonResult.EQUAL, + d.NodeTypeSpecificComparison(fooCDataSection, + fooComment)); + Assert.AreEqual(ComparisonResult.CRITICAL, + d.NodeTypeSpecificComparison(fooCDataSection, + barComment)); + Assert.AreEqual(ComparisonResult.EQUAL, + d.NodeTypeSpecificComparison(fooText, + doc.CreateElement("bar"))); + Assert.AreEqual(9, invocations); + } + + [Test] public void compareProcessingInstructions() { + DOMDifferenceEngine d = new DOMDifferenceEngine(); + int invocations = 0; + d.DifferenceListener += delegate(Comparison comp, + ComparisonResult r) { + Assert.AreEqual(0, invocations); + invocations++; + Assert.AreEqual(ComparisonType.PROCESSING_INSTRUCTION_TARGET, + comp.Type); + Assert.AreEqual(ComparisonResult.CRITICAL, r); + }; + d.DifferenceEvaluator = + DifferenceEvaluators.DefaultStopWhenDifferent; + + XmlProcessingInstruction foo1 = doc.CreateProcessingInstruction("foo", + "1"); + XmlProcessingInstruction bar1 = doc.CreateProcessingInstruction("bar", + "1"); + Assert.AreEqual(ComparisonResult.EQUAL, + d.NodeTypeSpecificComparison(foo1, foo1)); + Assert.AreEqual(ComparisonResult.CRITICAL, + d.NodeTypeSpecificComparison(foo1, bar1)); + Assert.AreEqual(ComparisonResult.EQUAL, + d.NodeTypeSpecificComparison(foo1, + doc.CreateElement("bar"))); + Assert.AreEqual(1, invocations); + + d = new DOMDifferenceEngine(); + invocations = 0; + d.DifferenceListener += delegate(Comparison comp, + ComparisonResult r) { + Assert.AreEqual(0, invocations); + invocations++; + Assert.AreEqual(ComparisonType.PROCESSING_INSTRUCTION_DATA, + comp.Type); + Assert.AreEqual(ComparisonResult.CRITICAL, r); + }; + d.DifferenceEvaluator = + DifferenceEvaluators.DefaultStopWhenDifferent; + XmlProcessingInstruction foo2 = doc.CreateProcessingInstruction("foo", + "2"); + Assert.AreEqual(ComparisonResult.EQUAL, + d.NodeTypeSpecificComparison(foo1, foo1)); + Assert.AreEqual(ComparisonResult.CRITICAL, + d.NodeTypeSpecificComparison(foo1, foo2)); + Assert.AreEqual(1, invocations); + } + } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bo...@us...> - 2010-06-24 15:31:31
|
Revision: 405 http://xmlunit.svn.sourceforge.net/xmlunit/?rev=405&view=rev Author: bodewig Date: 2010-06-24 15:31:25 +0000 (Thu, 24 Jun 2010) Log Message: ----------- comparisons for texts, PIs and Document Nodes (the latter lacking tests for now) Modified Paths: -------------- trunk/xmlunit/src/main/java-core/net/sf/xmlunit/diff/ComparisonType.java trunk/xmlunit/src/main/java-core/net/sf/xmlunit/diff/DOMDifferenceEngine.java trunk/xmlunit/src/main/net-core/diff/ComparisonType.cs trunk/xmlunit/src/tests/java-core/net/sf/xmlunit/diff/DOMDifferenceEngineTest.java Modified: trunk/xmlunit/src/main/java-core/net/sf/xmlunit/diff/ComparisonType.java =================================================================== --- trunk/xmlunit/src/main/java-core/net/sf/xmlunit/diff/ComparisonType.java 2010-06-21 14:37:51 UTC (rev 404) +++ trunk/xmlunit/src/main/java-core/net/sf/xmlunit/diff/ComparisonType.java 2010-06-24 15:31:25 UTC (rev 405) @@ -18,6 +18,19 @@ */ public enum ComparisonType { /** + * Do both documents specify the same version in their XML declaration? + */ + XML_VERSION, + /** + * Do both documents specify the same standalone declaration in + * their XML declaration? + */ + XML_STANDALONE, + /** + * Do both documents specify the same encoding in their XML declaration? + */ + XML_ENCODING, + /** * Do both documents have a DOCTYPE (or neither of each)? */ HAS_DOCTYPE_DECLARATION, @@ -62,17 +75,10 @@ NAMESPACE_URI, /** - * Compare content of CDATA sections. + * Compare content of text nodes, comments and CDATA sections. */ - CDATA_VALUE, - /** - * Compare content of comments. - */ - COMMENT_VALUE, - /** - * Compare content of text nodes. - */ TEXT_VALUE, + /** * Compare targets of processing instructions. */ Modified: trunk/xmlunit/src/main/java-core/net/sf/xmlunit/diff/DOMDifferenceEngine.java =================================================================== --- trunk/xmlunit/src/main/java-core/net/sf/xmlunit/diff/DOMDifferenceEngine.java 2010-06-21 14:37:51 UTC (rev 404) +++ trunk/xmlunit/src/main/java-core/net/sf/xmlunit/diff/DOMDifferenceEngine.java 2010-06-24 15:31:25 UTC (rev 405) @@ -13,11 +13,15 @@ */ package net.sf.xmlunit.diff; +import javax.xml.transform.Source; import net.sf.xmlunit.util.Convert; -import javax.xml.transform.Source; +import org.w3c.dom.CharacterData; +import org.w3c.dom.Document; +import org.w3c.dom.DocumentType; +import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; -import org.w3c.dom.Document; +import org.w3c.dom.ProcessingInstruction; /** * Difference engine based on DOM. @@ -90,22 +94,22 @@ ComparisonResult compareNodes(Node control, Node test) { ComparisonResult lastResult = compare(new Comparison(ComparisonType.NODE_TYPE, control, - null, control.getNodeType(), - test, null, test.getNodeType())); + null, control.getNodeType(), + test, null, test.getNodeType())); if (lastResult == ComparisonResult.CRITICAL) { return lastResult; } lastResult = compare(new Comparison(ComparisonType.NAMESPACE_URI, control, - null, control.getNamespaceURI(), - test, null, test.getNamespaceURI())); + null, control.getNamespaceURI(), + test, null, test.getNamespaceURI())); if (lastResult == ComparisonResult.CRITICAL) { return lastResult; } lastResult = compare(new Comparison(ComparisonType.NAMESPACE_PREFIX, control, - null, control.getPrefix(), - test, null, test.getPrefix())); + null, control.getPrefix(), + test, null, test.getPrefix())); if (lastResult == ComparisonResult.CRITICAL) { return lastResult; } @@ -113,15 +117,143 @@ NodeList testChildren = test.getChildNodes(); lastResult = compare(new Comparison(ComparisonType.CHILD_NODELIST_LENGTH, - control, null, controlChildren.getLength(), - test, null, testChildren.getLength())); + control, null, controlChildren.getLength(), + test, null, testChildren.getLength())); if (lastResult == ComparisonResult.CRITICAL) { return lastResult; } - /* TODO node type specific stuff */ + lastResult = nodeTypeSpecificComparison(control, test); + if (lastResult == ComparisonResult.CRITICAL) { + return lastResult; + } return compareNodeLists(controlChildren, testChildren); } + /** + * Dispatches to the node type specific comparison if one is + * defined for the given combination of nodes. + * + * <p>package private to support tests.</p> + */ + ComparisonResult nodeTypeSpecificComparison(Node control, Node test) { + switch (control.getNodeType()) { + case Node.CDATA_SECTION_NODE: + case Node.COMMENT_NODE: + case Node.TEXT_NODE: + if (test instanceof CharacterData) { + return compareCharacterData((CharacterData) control, + (CharacterData) test); + } + break; + case Node.DOCUMENT_NODE: + if (test instanceof Document) { + return compareDocuments((Document) control, + (Document) test); + } + break; + case Node.ELEMENT_NODE: + if (test instanceof Element) { + return compareElements((Element) control, + (Element) test); + } + break; + case Node.PROCESSING_INSTRUCTION_NODE: + if (test instanceof ProcessingInstruction) { + return + compareProcessingInstructions((ProcessingInstruction) control, + (ProcessingInstruction) test); + } + break; + } + return ComparisonResult.EQUAL; + } + + /** + * Compares textual content. + */ + private ComparisonResult compareCharacterData(CharacterData control, + CharacterData test) { + return compare(new Comparison(ComparisonType.TEXT_VALUE, control, + null, control.getData(), + test, null, test.getData())); + } + + ComparisonResult compareDocuments(Document control, + Document test) { + DocumentType controlDt = control.getDoctype(); + DocumentType testDt = test.getDoctype(); + ComparisonResult r = + compare(new Comparison(ComparisonType.HAS_DOCTYPE_DECLARATION, + control, null, + Boolean.valueOf(controlDt != null), + test, null, + Boolean.valueOf(testDt != null))); + if (r == ComparisonResult.CRITICAL) { + return r; + } + if (controlDt != null && testDt != null) { + r = compareDocTypes(controlDt, testDt); + } + if (r == ComparisonResult.CRITICAL) { + return r; + } + r = compare(new Comparison(ComparisonType.XML_VERSION, + control, null, control.getXmlVersion(), + test, null, test.getXmlVersion())); + if (r == ComparisonResult.CRITICAL) { + return r; + } + r = compare(new Comparison(ComparisonType.XML_STANDALONE, + control, null, control.getXmlStandalone(), + test, null, test.getXmlStandalone())); + if (r == ComparisonResult.CRITICAL) { + return r; + } + return compare(new Comparison(ComparisonType.XML_ENCODING, + control, null, control.getXmlEncoding(), + test, null, test.getXmlEncoding())); + } + + ComparisonResult compareDocTypes(DocumentType control, + DocumentType test) { + ComparisonResult r = + compare(new Comparison(ComparisonType.DOCTYPE_NAME, + control, null, control.getName(), + test, null, test.getName())); + if (r == ComparisonResult.CRITICAL) { + return r; + } + r = compare(new Comparison(ComparisonType.DOCTYPE_PUBLIC_ID, + control, null, control.getPublicId(), + test, null, test.getPublicId())); + if (r == ComparisonResult.CRITICAL) { + return r; + } + return compare(new Comparison(ComparisonType.DOCTYPE_SYSTEM_ID, + control, null, control.getSystemId(), + test, null, test.getSystemId())); + } + + ComparisonResult compareElements(Element control, + Element test) { + return ComparisonResult.EQUAL; + } + + ComparisonResult + compareProcessingInstructions(ProcessingInstruction control, + ProcessingInstruction test) { + ComparisonResult r = + compare(new Comparison(ComparisonType.PROCESSING_INSTRUCTION_TARGET, + control, null, control.getTarget(), + test, null, test.getTarget())); + if (r == ComparisonResult.CRITICAL) { + return r; + } + return compare(new Comparison(ComparisonType.PROCESSING_INSTRUCTION_DATA, + control, null, control.getData(), + test, null, test.getData())); + } + ComparisonResult compareNodeLists(NodeList control, NodeList test) { return ComparisonResult.EQUAL; } Modified: trunk/xmlunit/src/main/net-core/diff/ComparisonType.cs =================================================================== --- trunk/xmlunit/src/main/net-core/diff/ComparisonType.cs 2010-06-21 14:37:51 UTC (rev 404) +++ trunk/xmlunit/src/main/net-core/diff/ComparisonType.cs 2010-06-24 15:31:25 UTC (rev 405) @@ -63,17 +63,10 @@ NAMESPACE_URI, /// <summary> - /// Compare content of CDATA sections. + /// Compare content of text nodes, comments, CDATA sections. /// </summary> - CDATA_VALUE, - /// <summary> - /// Compare content of comments. - /// </summary> - COMMENT_VALUE, - /// <summary> - /// Compare content of text nodes. - /// </summary> TEXT_VALUE, + /// <summary> /// Compare targets of processing instructions. /// </summary> @@ -99,6 +92,7 @@ /// Compare attribute's value. /// </summary> ATTR_VALUE, + /// <summary> /// Compare number of child nodes. /// </summary> Modified: trunk/xmlunit/src/tests/java-core/net/sf/xmlunit/diff/DOMDifferenceEngineTest.java =================================================================== --- trunk/xmlunit/src/tests/java-core/net/sf/xmlunit/diff/DOMDifferenceEngineTest.java 2010-06-21 14:37:51 UTC (rev 404) +++ trunk/xmlunit/src/tests/java-core/net/sf/xmlunit/diff/DOMDifferenceEngineTest.java 2010-06-24 15:31:25 UTC (rev 405) @@ -17,8 +17,12 @@ import javax.xml.parsers.DocumentBuilderFactory; import org.junit.Before; import org.junit.Test; +import org.w3c.dom.CDATASection; +import org.w3c.dom.Comment; import org.w3c.dom.Document; import org.w3c.dom.Element; +import org.w3c.dom.ProcessingInstruction; +import org.w3c.dom.Text; import static org.junit.Assert.*; public class DOMDifferenceEngineTest { @@ -218,4 +222,88 @@ assertEquals(2, ex.invoked); } + @Test public void compareCharacterData() { + DOMDifferenceEngine d = new DOMDifferenceEngine(); + DiffExpecter ex = new DiffExpecter(ComparisonType.TEXT_VALUE, 9); + d.addDifferenceListener(ex); + d.setDifferenceEvaluator(DifferenceEvaluators.DefaultStopWhenDifferent); + + Comment fooComment = doc.createComment("foo"); + Comment barComment = doc.createComment("bar"); + Text fooText = doc.createTextNode("foo"); + Text barText = doc.createTextNode("bar"); + CDATASection fooCDATASection = doc.createCDATASection("foo"); + CDATASection barCDATASection = doc.createCDATASection("bar"); + + assertEquals(ComparisonResult.EQUAL, + d.nodeTypeSpecificComparison(fooComment, fooComment)); + assertEquals(ComparisonResult.CRITICAL, + d.nodeTypeSpecificComparison(fooComment, barComment)); + assertEquals(ComparisonResult.EQUAL, + d.nodeTypeSpecificComparison(fooText, fooText)); + assertEquals(ComparisonResult.CRITICAL, + d.nodeTypeSpecificComparison(fooText, barText)); + assertEquals(ComparisonResult.EQUAL, + d.nodeTypeSpecificComparison(fooCDATASection, fooCDATASection)); + assertEquals(ComparisonResult.CRITICAL, + d.nodeTypeSpecificComparison(fooCDATASection, barCDATASection)); + + assertEquals(ComparisonResult.EQUAL, + d.nodeTypeSpecificComparison(fooComment, fooText)); + assertEquals(ComparisonResult.CRITICAL, + d.nodeTypeSpecificComparison(fooComment, barText)); + assertEquals(ComparisonResult.EQUAL, + d.nodeTypeSpecificComparison(fooComment, fooCDATASection)); + assertEquals(ComparisonResult.CRITICAL, + d.nodeTypeSpecificComparison(fooComment, barCDATASection)); + assertEquals(ComparisonResult.EQUAL, + d.nodeTypeSpecificComparison(fooText, fooComment)); + assertEquals(ComparisonResult.CRITICAL, + d.nodeTypeSpecificComparison(fooText, barComment)); + assertEquals(ComparisonResult.EQUAL, + d.nodeTypeSpecificComparison(fooText, fooCDATASection)); + assertEquals(ComparisonResult.CRITICAL, + d.nodeTypeSpecificComparison(fooText, barCDATASection)); + assertEquals(ComparisonResult.EQUAL, + d.nodeTypeSpecificComparison(fooCDATASection, fooText)); + assertEquals(ComparisonResult.CRITICAL, + d.nodeTypeSpecificComparison(fooCDATASection, barText)); + assertEquals(ComparisonResult.EQUAL, + d.nodeTypeSpecificComparison(fooCDATASection, fooComment)); + assertEquals(ComparisonResult.CRITICAL, + d.nodeTypeSpecificComparison(fooCDATASection, barComment)); + assertEquals(ComparisonResult.EQUAL, + d.nodeTypeSpecificComparison(fooText, + doc.createElement("bar"))); + assertEquals(9, ex.invoked); + } + + @Test public void compareProcessingInstructions() { + DOMDifferenceEngine d = new DOMDifferenceEngine(); + DiffExpecter ex = new DiffExpecter(ComparisonType.PROCESSING_INSTRUCTION_TARGET); + d.addDifferenceListener(ex); + d.setDifferenceEvaluator(DifferenceEvaluators.DefaultStopWhenDifferent); + + ProcessingInstruction foo1 = doc.createProcessingInstruction("foo", "1"); + ProcessingInstruction bar1 = doc.createProcessingInstruction("bar", "1"); + assertEquals(ComparisonResult.EQUAL, + d.nodeTypeSpecificComparison(foo1, foo1)); + assertEquals(ComparisonResult.CRITICAL, + d.nodeTypeSpecificComparison(foo1, bar1)); + assertEquals(ComparisonResult.EQUAL, + d.nodeTypeSpecificComparison(foo1, + doc.createElement("bar"))); + assertEquals(1, ex.invoked); + + d = new DOMDifferenceEngine(); + ex = new DiffExpecter(ComparisonType.PROCESSING_INSTRUCTION_DATA); + d.addDifferenceListener(ex); + d.setDifferenceEvaluator(DifferenceEvaluators.DefaultStopWhenDifferent); + ProcessingInstruction foo2 = doc.createProcessingInstruction("foo", "2"); + assertEquals(ComparisonResult.EQUAL, + d.nodeTypeSpecificComparison(foo1, foo1)); + assertEquals(ComparisonResult.CRITICAL, + d.nodeTypeSpecificComparison(foo1, foo2)); + assertEquals(1, ex.invoked); + } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bo...@us...> - 2010-06-21 14:37:58
|
Revision: 404 http://xmlunit.svn.sourceforge.net/xmlunit/?rev=404&view=rev Author: bodewig Date: 2010-06-21 14:37:51 +0000 (Mon, 21 Jun 2010) Log Message: ----------- node type independent comparisons Modified Paths: -------------- trunk/xmlunit/src/main/java-core/net/sf/xmlunit/diff/DOMDifferenceEngine.java trunk/xmlunit/src/main/java-core/net/sf/xmlunit/diff/DifferenceEvaluators.java trunk/xmlunit/src/main/net-core/diff/DOMDifferenceEngine.cs trunk/xmlunit/src/tests/java-core/net/sf/xmlunit/diff/DOMDifferenceEngineTest.java trunk/xmlunit/src/tests/net-core/diff/DOMDifferenceEngineTest.cs trunk/xmlunit/xmlunit.nant.build Added Paths: ----------- trunk/xmlunit/lib/NUnitSummary.xsl trunk/xmlunit/lib/toolkit.xsl Added: trunk/xmlunit/lib/NUnitSummary.xsl =================================================================== --- trunk/xmlunit/lib/NUnitSummary.xsl (rev 0) +++ trunk/xmlunit/lib/NUnitSummary.xsl 2010-06-21 14:37:51 UTC (rev 404) @@ -0,0 +1,214 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> +<!-- +The goal of the NUnit2Report task is to merge the individual XML files generated by the NUnit2 task and apply a stylesheet on the resulting merged document to provide a browsable report of the testcases results. + +This project is host on Sourceforge http://sourceforge.net/projects/nunit2report/ + +NUnit2Report is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. +--> +<!-- + This XSL File is based on the NUnitSummary.xsl + template created by Tomas Restrepo fot NAnt's NUnitReport. + + Modified by Gilles Bayon (gil...@la...) for use + with NUnit2Report. + +--> +<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" xmlns:html="http://www.w3.org/Profiles/XHTML-transitional"> + + <xsl:output method="html" indent="yes"/> + <xsl:include href="toolkit.xsl"/> + <xsl:preserve-space elements="a root"/> + + +<!-- + ==================================================== + Create the page structure + ==================================================== +--> +<xsl:template match="test-results"> + <HTML> + <HEAD> + <style type="text/css"> + BODY { + font:normal 68% verdana,arial,helvetica; + color:#000000; + } + TD { + FONT-SIZE: 68% + } + P { + line-height:1.5em; + margin-top:0.5em; margin-bottom:1.0em; + } + H1 { + MARGIN: 0px 0px 5px; FONT: 165% verdana,arial,helvetica + } + H2 { + MARGIN-TOP: 1em; MARGIN-BOTTOM: 0.5em; FONT: bold 125% verdana,arial,helvetica + } + H3 { + MARGIN-BOTTOM: 0.5em; FONT: bold 115% verdana,arial,helvetica + } + H4 { + MARGIN-BOTTOM: 0.5em; FONT: bold 100% verdana,arial,helvetica + } + H5 { + MARGIN-BOTTOM: 0.5em; FONT: bold 100% verdana,arial,helvetica + } + H6 { + MARGIN-BOTTOM: 0.5em; FONT: bold 100% verdana,arial,helvetica + } + .Error { + font-weight:bold; background:#EEEEE0; color:purple; + } + .Failure { + font-weight:bold; background:#EEEEE0; color:red; + } + .FailureDetail { + font-size: -1; + padding-left: 2.0em; + } + .Pass { + background:#EEEEE0; + } + .TableHeader { + background: #6699cc; + color: white; + font-weight: bold; + horizontal-align: center; + } + .EnvInfoHeader { + background: #ff0000; + color: white; + font-weight: bold; + horizontal-align: center; + } + .EnvInfoRow { + background:#EEEEE0 + } + + A:visited { + color: #0000ff; + } + A { + color: #0000ff; + } + A:active { + color: #800000; + } + </style> + <script language="JavaScript"><![CDATA[ + function toggle (field) + { + field.style.display = (field.style.display == "block") ? "none" : "block"; + } ]]> + </script> + </HEAD> + <body text="#000000" bgColor="#ffffff"> + <a name="#top"/> + <xsl:call-template name="header"/> + + <!-- Summary part --> + <xsl:call-template name="summary"/> + <hr size="1" width="95%" align="left"/> + + <!-- Package List part --> + <xsl:call-template name="packagelist"/> + <hr size="1" width="95%" align="left"/> + + <!-- For each testsuite create the part --> + <xsl:call-template name="testsuites"/> + <hr size="1" width="95%" align="left"/> + + <!-- Environment info part --> + + <xsl:call-template name="envinfo"/> + + </body> + </HTML> +</xsl:template> + + + + <!-- ================================================================== --> + <!-- Write a list of all packages with an hyperlink to the anchor of --> + <!-- of the package name. --> + <!-- ================================================================== --> + <xsl:template name="packagelist"> + <h2 id=":i18n:TestSuiteSummary">TestSuite Summary</h2> + <table border="0" cellpadding="5" cellspacing="2" width="95%"> + <xsl:call-template name="packageSummaryHeader"/> + <!-- list all packages recursively --> + <xsl:for-each select="//test-suite[(child::results/test-case)]"> + <xsl:sort select="@name"/> + <xsl:variable name="testCount" select="count(child::results/test-case)"/> + <xsl:variable name="errorCount" select="count(child::results/test-case[@executed='False'])"/> + <xsl:variable name="failureCount" select="count(child::results/test-case[@success='False'])"/> + <xsl:variable name="timeCount" select="concat(substring-before(@time,','),'.',substring-after(@time,','))"/> + + <!-- write a summary for the package --> + <tr valign="top"> + <!-- set a nice color depending if there is an error/failure --> + <xsl:attribute name="class"> + <xsl:choose> + <xsl:when test="$failureCount > 0">Failure</xsl:when> + <xsl:when test="$errorCount > 0"> Error</xsl:when> + <xsl:otherwise>Pass</xsl:otherwise> + </xsl:choose> + </xsl:attribute> + <td><a href="#{generate-id(@name)}"><xsl:value-of select="@name"/></a></td> + <td><xsl:value-of select="$testCount"/> + </td> + <td><xsl:value-of select="$errorCount"/></td> + <td><xsl:value-of select="$failureCount"/></td> + <td> + <xsl:call-template name="display-time"> + <xsl:with-param name="value" select="$timeCount"/> + </xsl:call-template> + </td> + </tr> + </xsl:for-each> + </table> + </xsl:template> + + + <xsl:template name="testsuites"> + <script language="JScript"><![CDATA[ + function ToggleRow(id) { + if ( id.style.display == "none" ) + id.style.display = "block"; + else + id.style.display = "none"; + } + ]]></script> + + <xsl:for-each select="//test-suite[(child::results/test-case)]"> + <xsl:sort select="@name"/> + <!-- create an anchor to this class name --> + <a name="#{generate-id(@name)}"/> + <h3>TestSuite <xsl:value-of select="@name"/></h3> + + <table border="0" cellpadding="5" cellspacing="2" width="95%"> + <!-- Header --> + <xsl:call-template name="classesSummaryHeader"/> + + <!-- match the testcases of this package --> + <xsl:apply-templates select="results/test-case"> + <xsl:sort select="@name"/> + </xsl:apply-templates> + </table> + <a href="#top" id=":i18n:Backtotop">Back to top</a> + </xsl:for-each> + </xsl:template> + + + <xsl:template name="dot-replace"> + <xsl:param name="package"/> + <xsl:choose> + <xsl:when test="contains($package,'.')"><xsl:value-of select="substring-before($package,'.')"/>_<xsl:call-template name="dot-replace"><xsl:with-param name="package" select="substring-after($package,'.')"/></xsl:call-template></xsl:when> + <xsl:otherwise><xsl:value-of select="$package"/></xsl:otherwise> + </xsl:choose> + </xsl:template> + +</xsl:stylesheet> \ No newline at end of file Property changes on: trunk/xmlunit/lib/NUnitSummary.xsl ___________________________________________________________________ Added: svn:eol-style + native Added: trunk/xmlunit/lib/toolkit.xsl =================================================================== --- trunk/xmlunit/lib/toolkit.xsl (rev 0) +++ trunk/xmlunit/lib/toolkit.xsl 2010-06-21 14:37:51 UTC (rev 404) @@ -0,0 +1,420 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> +<!-- +The goal of the NUnit2Report task is to merge the individual XML files generated by the NUnit2 task and apply a stylesheet on the resulting merged document to provide a browsable report of the testcases results. + +This project is host on Sourceforge http://sourceforge.net/projects/nunit2report/ + +NUnit2Report is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. +--> +<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:nunit2report="urn:my-scripts"> +<xsl:param name="nant.filename"/> +<xsl:param name="nant.version"/> +<xsl:param name="nant.project.name"/> +<xsl:param name="nant.project.buildfile"/> +<xsl:param name="nant.project.basedir"/> +<xsl:param name="nant.project.default"/> +<xsl:param name="sys.os"/> +<xsl:param name="sys.os.platform"/> +<xsl:param name="sys.os.version"/> +<xsl:param name="sys.clr.version"/> + +<msxsl:script language="C#" implements-prefix="nunit2report"> + + public string TestCaseName(string path) { + + string[] a = path.Split('.'); + + return(a[a.Length-1]); + } + +</msxsl:script> + +<!-- + TO DO + Corriger les alignement sur error + Couleur http://nanning.sourceforge.net/junit-report.html +--> + + +<!-- + format a number in to display its value in percent + @param value the number to format +--> +<xsl:template name="display-time"> + <xsl:param name="value"/> + <xsl:value-of select="format-number($value,'0.000')"/> +</xsl:template> + +<!-- + format a number in to display its value in percent + @param value the number to format +--> +<xsl:template name="display-percent"> + <xsl:param name="value"/> + <xsl:value-of select="format-number($value,'0.00 %')"/> +</xsl:template> + +<!-- + transform string like a.b.c to ../../../ + @param path the path to transform into a descending directory path +--> +<xsl:template name="path"> + <xsl:param name="path"/> + <xsl:if test="contains($path,'.')"> + <xsl:text>../</xsl:text> + <xsl:call-template name="path"> + <xsl:with-param name="path"><xsl:value-of select="substring-after($path,'.')"/></xsl:with-param> + </xsl:call-template> + </xsl:if> + <xsl:if test="not(contains($path,'.')) and not($path = '')"> + <xsl:text>../</xsl:text> + </xsl:if> +</xsl:template> + +<!-- + template that will convert a carriage return into a br tag + @param word the text from which to convert CR to BR tag +--> +<xsl:template name="br-replace"> + <xsl:param name="word"/> + <xsl:choose> + <xsl:when test="contains($word,' +')"> + <xsl:value-of select="substring-before($word,' +')"/> + <br/> + <xsl:call-template name="br-replace"> + <xsl:with-param name="word" select="substring-after($word,' +')"/> + </xsl:call-template> + </xsl:when> + <xsl:otherwise> + <xsl:value-of select="$word"/> + </xsl:otherwise> + </xsl:choose> +</xsl:template> + +<!-- + ===================================================================== + classes summary header + ===================================================================== +--> +<xsl:template name="header"> + <xsl:param name="path"/> + <h1><span id=":i18n:UnitTestsResults">Unit Tests Results</span> - <xsl:value-of select="$nant.project.name"/></h1> + <table width="100%"> + <tr> + <td align="left"> + <span id=":i18n:GeneratedBy">Generated by</span>\xA0<a target="_blank" href="http://sourceforge.net/projects/nunit2report/">NUnit2Report</a> : <xsl:value-of select="@date"/> - <xsl:value-of select="concat(@time,' ')"/>\xA0<a href="#envinfo" id=":i18n:EnvironmentInformation">Environment Information</a> + </td> + <td align="right"><span id=":i18n:Designed">Designed for use with</span>\xA0<a href="http://nunit.sourceforge.net/">NUnit</a>\xA0<span id=":i18n:and">and</span>\xA0<a href="http://nant.sourceforge.net/">NAnt</a>. + </td> + </tr> + </table> + <hr size="1"/> +</xsl:template> + +<xsl:template name="summaryHeader"> + <tr valign="top" class="TableHeader"> + <td width="50px"><b id=":i18n:Tests">Tests</b></td> + <td width="70px"><b id=":i18n:Failures">Failures</b></td> + <td width="70px"><b id=":i18n:Errors">Errors</b></td> + <td colspan="2"><b id=":i18n:SuccessRate">Success Rate</b></td> + <td width="70px" nowrap="nowrap"><b id=":i18n:Time">Time(s)</b></td> + </tr> +</xsl:template> + +<!-- + ===================================================================== + package summary header + ===================================================================== +--> +<xsl:template name="packageSummaryHeader"> + <tr class="TableHeader" valign="top"> + <td width="75%" colspan="3"><b id=":i18n:Name">Name</b></td> + <td width="5%"><b id=":i18n:Tests">Tests</b></td> + <td width="5%"><b id=":i18n:Errors">Errors</b></td> + <td width="5%"><b id=":i18n:Failures">Failures</b></td> + <td width="10%" nowrap="nowrap"><b id=":i18n:Time">Time(s)</b></td> + </tr> +</xsl:template> + + +<!-- + ===================================================================== + classes summary header + ===================================================================== +--> +<xsl:template name="classesSummaryHeader"> + <tr class="TableHeader" valign="top"> + <td width="85%" colspan="2"><b id=":i18n:Name">Name</b></td> + <td width="10%"><b id=":i18n:Status">Status</b></td> + <td width="5%" nowrap="nowrap"><b id=":i18n:Time">Time(s)</b></td> + </tr> +</xsl:template> + +<!-- + ===================================================================== + Write the summary report + It creates a table with computed values from the document: + User | Date | Environment | Tests | Failures | Errors | Rate | Time + Note : this template must call at the testsuites level + ===================================================================== +--> + <xsl:template name="summary"> + <h2 id=":i18n:Summary">Summary</h2> + <xsl:variable name="runCount" select="@total"/> + <xsl:variable name="failureCount" select="@failures"/> + <xsl:variable name="ignoreCount" select="@not-run"/> + <xsl:variable name="total" select="$runCount + $ignoreCount + $failureCount"/> + + <xsl:variable name="timeCount" select="translate(test-suite/@time,',','.')"/> + + <xsl:variable name="successRate" select="$runCount div $total"/> + <table border="0" cellpadding="2" cellspacing="0" width="95%" style="border: #dcdcdc 1px solid;"> + <xsl:call-template name="summaryHeader"/> + <tr valign="top"> + <xsl:attribute name="class"> + <xsl:choose> + <xsl:when test="$failureCount > 0">Failure</xsl:when> + <xsl:when test="$ignoreCount > 0">Error</xsl:when> + <xsl:otherwise>Pass</xsl:otherwise> + </xsl:choose> + </xsl:attribute> + <td><xsl:value-of select="$runCount"/></td> + <td><xsl:value-of select="$failureCount"/></td> + <td><xsl:value-of select="$ignoreCount"/></td> + <td nowrap="nowrap" width="70px"> + <xsl:call-template name="display-percent"> + <xsl:with-param name="value" select="$successRate"/> + </xsl:call-template> + </td> + <td> + <xsl:if test="round($runCount * 200 div $total )!=0"> + <span class="covered"> + <xsl:attribute name="style">width:<xsl:value-of select="round($runCount * 200 div $total )"/>px</xsl:attribute> + </span> + </xsl:if> + <xsl:if test="round($ignoreCount * 200 div $total )!=0"> + <span class="ignored"> + <xsl:attribute name="style">width:<xsl:value-of select="round($ignoreCount * 200 div $total )"/>px</xsl:attribute> + </span> + </xsl:if> + <xsl:if test="round($failureCount * 200 div $total )!=0"> + <span class="uncovered"> + <xsl:attribute name="style">width:<xsl:value-of select="round($failureCount * 200 div $total )"/>px</xsl:attribute> + </span> + </xsl:if> + </td> + <td> + <xsl:call-template name="display-time"> + <xsl:with-param name="value" select="$timeCount"/> + </xsl:call-template> + </td> + </tr> + </table> + <span id=":i18n:Note">Note</span>: <i id=":i18n:failures">failures</i>\xA0<span id=":i18n:anticipated">are anticipated and checked for with assertions while</span>\xA0<i id=":i18n:errors">errors</i>\xA0<span id=":i18n:unanticipated">are unanticipated.</span> + </xsl:template> + +<!-- + ===================================================================== + testcase report + ===================================================================== +--> +<xsl:template match="test-case"> + <xsl:param name="summary.xml"/> + <xsl:param name="open.description"/> + + <xsl:variable name="summaries" select="document($summary.xml)"/> + + <xsl:variable name="Mname" select="concat('M:',./@name)"/> + + <xsl:variable name="result"> + <xsl:choose> + <xsl:when test="./failure"><span id=":i18n:Failure">Failure</span></xsl:when> + <xsl:when test="./error"><span id=":i18n:Error">Error</span></xsl:when> + <xsl:when test="@executed='False'"><span id=":i18n:Ignored">Ignored</span></xsl:when> + <xsl:otherwise><span id=":i18n:Pass">Pass</span></xsl:otherwise> + </xsl:choose> + </xsl:variable> + + <xsl:variable name="newid" select="generate-id(@name)"/> + <tr valign="top"> + <xsl:attribute name="class"><xsl:value-of select="$result"/></xsl:attribute> + + <td width="20%"> + <xsl:choose> + <xsl:when test="$summary.xml != ''"> + <!-- Triangle image --> + <a title="Show/Hide XML Comment" class="summarie"><xsl:attribute name="href">javascript:Toggle('<xsl:value-of select="concat('M:',$newid)"/>');ToggleImage('<xsl:value-of select="concat('I:',$newid)"/>')</xsl:attribute><xsl:attribute name="id"><xsl:value-of select="concat('I:',$newid)"/></xsl:attribute> + <!-- Set the good triangle image 6/4 font-family:Webdings--> + <xsl:choose> + <xsl:when test="$result != "Pass"">-</xsl:when> + <xsl:otherwise> + <xsl:choose> + <xsl:when test="$open.description='yes'">-</xsl:when> + <xsl:otherwise>+</xsl:otherwise> + </xsl:choose> + </xsl:otherwise> + </xsl:choose> + </a> + </xsl:when> + </xsl:choose> + <!-- If failure, add click on the test method name and color red --> + <xsl:choose> + <xsl:when test="$result = 'Failure' or $result = 'Error'">\xA0<a title="Show/Hide message error"> + <xsl:attribute name="href">javascript:Toggle('<xsl:value-of select="$newid"/>')</xsl:attribute> + <xsl:attribute name="class">error</xsl:attribute> + <xsl:value-of select="nunit2report:TestCaseName(./@name)"/> + </a> + </xsl:when> + <xsl:when test="$result = 'Ignored'">\xA0<a title="Show/Hide message error"> + <xsl:attribute name="href">javascript:Toggle('<xsl:value-of select="$newid"/>')</xsl:attribute> + <xsl:attribute name="class">ignored</xsl:attribute> + <xsl:value-of select="nunit2report:TestCaseName(./@name)"/> + </a> + </xsl:when> + <xsl:otherwise> + <xsl:attribute name="class">method</xsl:attribute>\xA0<xsl:value-of select="nunit2report:TestCaseName(./@name)"/> + </xsl:otherwise> + </xsl:choose> + </td> + <td width="65%" style="padding-left:3px" height="9px"> + <xsl:choose> + <xsl:when test="$result = 'Pass'"> + <span class="covered" style="width:200px"/> + </xsl:when> + <xsl:when test="$result = 'Ignored'"> + <span class="ignored" style="width:200px"/> + </xsl:when> + <xsl:when test="$result = 'Failure' or $result = 'Error'"> + <span class="uncovered" style="width:200px"/> + </xsl:when> + </xsl:choose> + <!-- The test method description--> + <xsl:choose> + <xsl:when test="$summary.xml != ''"> + <div class="description" style="display:block"> + <!-- Attribute id --> + <xsl:attribute name="id"><xsl:value-of select="concat('M:',$newid)"/></xsl:attribute> + <!-- Open method description if failure --> + <xsl:choose> + <xsl:when test="$result != "Pass""> + <xsl:attribute name="style">display:block</xsl:attribute> + </xsl:when> + <xsl:otherwise> + <xsl:choose> + <xsl:when test="$open.description = 'yes'"> + <xsl:attribute name="style">display:block</xsl:attribute> + </xsl:when> + <xsl:otherwise> + <xsl:attribute name="style">display:none</xsl:attribute> + </xsl:otherwise> + </xsl:choose> + </xsl:otherwise> + </xsl:choose> + <!-- The description of the test method --> + <xsl:value-of select="normalize-space($summaries//member[@name=$Mname]/summary/text())"/> + </div> + </xsl:when> + </xsl:choose> + </td> + <td><xsl:attribute name="id">:i18n:<xsl:value-of select="$result"/></xsl:attribute><xsl:value-of select="$result"/></td> + <td> + <xsl:call-template name="display-time"> + <xsl:with-param name="value" select="@time"/> + </xsl:call-template> + </td> + </tr> + + <xsl:if test="$result != "Pass""> + <tr style="display: block;"> + <xsl:attribute name="id"> + <xsl:value-of select="$newid"/> + </xsl:attribute> + <td colspan="4" class="FailureDetail"> + <xsl:apply-templates select="./failure"/> + <xsl:apply-templates select="./error"/> + <xsl:apply-templates select="./reason"/> + </td> + </tr> + </xsl:if> +</xsl:template> + +<!-- Note : the below template error and failure are the same style + so just call the same style store in the toolkit template --> +<!-- <xsl:template match="failure"> + <xsl:call-template name="display-failures"/> +</xsl:template> + +<xsl:template match="error"> + <xsl:call-template name="display-failures"/> +</xsl:template> --> + +<!-- Style for the error and failure in the tescase template --> +<!-- <xsl:template name="display-failures"> + <xsl:choose> + <xsl:when test="not(@message)">N/A</xsl:when> + <xsl:otherwise> + <xsl:value-of select="@message"/> + </xsl:otherwise> + </xsl:choose> --> + <!-- display the stacktrace --> +<!-- <code> + <p/> + <xsl:call-template name="br-replace"> + <xsl:with-param name="word" select="."/> + </xsl:call-template> + </code> --> + <!-- the later is better but might be problematic for non-21" monitors... --> + <!--pre><xsl:value-of select="."/></pre--> +<!-- </xsl:template> + --> + +<!-- + ===================================================================== + Environtment Info Report + ===================================================================== +--> +<xsl:template name="envinfo"> + <a name="envinfo"/> + <h2 id=":i18n:EnvironmentInformation">Environment Information</h2> + <table border="0" cellpadding="5" cellspacing="2" width="95%"> + <tr class="TableHeader"> + <td id=":i18n:Property">Property</td> + <td id=":i18n:Value">Value</td> + </tr> + <tr> + <td id=":i18n:NAntLocation">NAnt Location</td> + <td><xsl:value-of select="$nant.filename"/></td> + </tr> + <tr> + <td id=":i18n:NAntVersion">NAnt Version</td> + <td><xsl:value-of select="$nant.version"/></td> + </tr> + <tr> + <td id=":i18n:Buildfile">Buildfile</td> + <td><xsl:value-of select="$nant.project.buildfile"/></td> + </tr> + <tr> + <td id=":i18n:BaseDirectory">Base Directory</td> + <td><xsl:value-of select="$nant.project.basedir"/></td> + </tr> + <tr> + <td id=":i18n:OperatingSystem">Operating System</td> + <td><xsl:value-of select="$sys.os"/></td> + </tr> + <tr> + <td id=":i18n:NETCLRVersion">.NET CLR Version</td> + <td><xsl:value-of select="$sys.clr.version"/></td> + </tr> + </table> + <a href="#top" id=":i18n:Backtotop">Back to top</a> +</xsl:template> + +<!-- I am sure that all nodes are called --> +<xsl:template match="*"> + <xsl:apply-templates/> +</xsl:template> + +</xsl:stylesheet> \ No newline at end of file Property changes on: trunk/xmlunit/lib/toolkit.xsl ___________________________________________________________________ Added: svn:eol-style + native Modified: trunk/xmlunit/src/main/java-core/net/sf/xmlunit/diff/DOMDifferenceEngine.java =================================================================== --- trunk/xmlunit/src/main/java-core/net/sf/xmlunit/diff/DOMDifferenceEngine.java 2010-06-21 09:02:59 UTC (rev 403) +++ trunk/xmlunit/src/main/java-core/net/sf/xmlunit/diff/DOMDifferenceEngine.java 2010-06-21 14:37:51 UTC (rev 404) @@ -16,6 +16,7 @@ import net.sf.xmlunit.util.Convert; import javax.xml.transform.Source; import org.w3c.dom.Node; +import org.w3c.dom.NodeList; import org.w3c.dom.Document; /** @@ -74,7 +75,54 @@ compareNodes(Convert.toNode(control), Convert.toNode(test)); } - private ComparisonResult compareNodes(Node control, Node test) { + /** + * Recursively compares two XML nodes. + * + * <p>Performs comparisons common to all node types, the performs + * the node type specific comparisons and finally recures into + * the node's child lists.</p> + * + * <p>Stops as soon as any comparison returns + * ComparisonResult.CRITICAL.</p> + * + * <p>package private to support tests.</p> + */ + ComparisonResult compareNodes(Node control, Node test) { + ComparisonResult lastResult = + compare(new Comparison(ComparisonType.NODE_TYPE, control, + null, control.getNodeType(), + test, null, test.getNodeType())); + if (lastResult == ComparisonResult.CRITICAL) { + return lastResult; + } + lastResult = + compare(new Comparison(ComparisonType.NAMESPACE_URI, control, + null, control.getNamespaceURI(), + test, null, test.getNamespaceURI())); + if (lastResult == ComparisonResult.CRITICAL) { + return lastResult; + } + lastResult = + compare(new Comparison(ComparisonType.NAMESPACE_PREFIX, control, + null, control.getPrefix(), + test, null, test.getPrefix())); + if (lastResult == ComparisonResult.CRITICAL) { + return lastResult; + } + NodeList controlChildren = control.getChildNodes(); + NodeList testChildren = test.getChildNodes(); + lastResult = + compare(new Comparison(ComparisonType.CHILD_NODELIST_LENGTH, + control, null, controlChildren.getLength(), + test, null, testChildren.getLength())); + if (lastResult == ComparisonResult.CRITICAL) { + return lastResult; + } + /* TODO node type specific stuff */ + return compareNodeLists(controlChildren, testChildren); + } + + ComparisonResult compareNodeLists(NodeList control, NodeList test) { return ComparisonResult.EQUAL; } Modified: trunk/xmlunit/src/main/java-core/net/sf/xmlunit/diff/DifferenceEvaluators.java =================================================================== --- trunk/xmlunit/src/main/java-core/net/sf/xmlunit/diff/DifferenceEvaluators.java 2010-06-21 09:02:59 UTC (rev 403) +++ trunk/xmlunit/src/main/java-core/net/sf/xmlunit/diff/DifferenceEvaluators.java 2010-06-21 14:37:51 UTC (rev 404) @@ -67,7 +67,7 @@ * evaluator to decide which differences leave the documents * simlar. */ - public static final DifferenceEvaluator defaultStopWhenDifferent + public static final DifferenceEvaluator DefaultStopWhenDifferent = stopWhenDifferent(Default); /** Modified: trunk/xmlunit/src/main/net-core/diff/DOMDifferenceEngine.cs =================================================================== --- trunk/xmlunit/src/main/net-core/diff/DOMDifferenceEngine.cs 2010-06-21 09:02:59 UTC (rev 403) +++ trunk/xmlunit/src/main/net-core/diff/DOMDifferenceEngine.cs 2010-06-21 14:37:51 UTC (rev 404) @@ -57,7 +57,53 @@ net.sf.xmlunit.util.Convert.ToNode(test)); } - private ComparisonResult CompareNodes(XmlNode control, XmlNode test) { + /// <summary> + /// Recursively compares two XML nodes. + /// </summary> + /// <remarks> + /// Performs comparisons common to all node types, the performs + /// the node type specific comparisons and finally recures into + /// the node's child lists. + /// + /// Stops as soon as any comparison returns ComparisonResult.CRITICAL. + /// </remarks> + internal ComparisonResult CompareNodes(XmlNode control, XmlNode test) { + ComparisonResult lastResult = + Compare(new Comparison(ComparisonType.NODE_TYPE, control, + null, control.NodeType, + test, null, test.NodeType)); + if (lastResult == ComparisonResult.CRITICAL) { + return lastResult; + } + lastResult = + Compare(new Comparison(ComparisonType.NAMESPACE_URI, control, + null, control.NamespaceURI, + test, null, test.NamespaceURI)); + if (lastResult == ComparisonResult.CRITICAL) { + return lastResult; + } + lastResult = + Compare(new Comparison(ComparisonType.NAMESPACE_PREFIX, control, + null, control.Prefix, + test, null, test.Prefix)); + if (lastResult == ComparisonResult.CRITICAL) { + return lastResult; + } + XmlNodeList controlChildren = control.ChildNodes; + XmlNodeList testChildren = test.ChildNodes; + lastResult = + Compare(new Comparison(ComparisonType.CHILD_NODELIST_LENGTH, + control, null, controlChildren.Count, + test, null, testChildren.Count)); + if (lastResult == ComparisonResult.CRITICAL) { + return lastResult; + } + /* TODO node type specific stuff */ + return CompareNodeLists(controlChildren, testChildren); + } + + ComparisonResult CompareNodeLists(XmlNodeList control, + XmlNodeList test) { return ComparisonResult.EQUAL; } Modified: trunk/xmlunit/src/tests/java-core/net/sf/xmlunit/diff/DOMDifferenceEngineTest.java =================================================================== --- trunk/xmlunit/src/tests/java-core/net/sf/xmlunit/diff/DOMDifferenceEngineTest.java 2010-06-21 09:02:59 UTC (rev 403) +++ trunk/xmlunit/src/tests/java-core/net/sf/xmlunit/diff/DOMDifferenceEngineTest.java 2010-06-21 14:37:51 UTC (rev 404) @@ -13,7 +13,12 @@ */ package net.sf.xmlunit.diff; +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import org.junit.Before; import org.junit.Test; +import org.w3c.dom.Document; +import org.w3c.dom.Element; import static org.junit.Assert.*; public class DOMDifferenceEngineTest { @@ -111,4 +116,106 @@ null, null, new Short("2")))); assertEquals(1, l.getInvocations()); } + + private static class DiffExpecter implements ComparisonListener { + private int invoked = 0; + private final int expectedInvocations; + private final ComparisonType type; + private DiffExpecter(ComparisonType type) { + this(type, 1); + } + private DiffExpecter(ComparisonType type, int expected) { + this.type = type; + this.expectedInvocations = expected; + } + public void comparisonPerformed(Comparison comparison, + ComparisonResult outcome) { + assertTrue(invoked < expectedInvocations); + invoked++; + assertEquals(type, comparison.getType()); + assertEquals(ComparisonResult.CRITICAL, outcome); + } + } + + private Document doc; + + @Before public void createDoc() throws Exception { + doc = DocumentBuilderFactory.newInstance().newDocumentBuilder() + .newDocument(); + } + + @Test public void compareNodesOfDifferentType() { + DOMDifferenceEngine d = new DOMDifferenceEngine(); + DiffExpecter ex = new DiffExpecter(ComparisonType.NODE_TYPE); + d.addDifferenceListener(ex); + d.setDifferenceEvaluator(DifferenceEvaluators.DefaultStopWhenDifferent); + assertEquals(ComparisonResult.CRITICAL, + d.compareNodes(doc.createElement("x"), + doc.createComment("x"))); + assertEquals(1, ex.invoked); + } + + @Test public void compareNodesWithoutNS() { + DOMDifferenceEngine d = new DOMDifferenceEngine(); + DiffExpecter ex = new DiffExpecter(ComparisonType.NODE_TYPE, 0); + d.addDifferenceListener(ex); + d.setDifferenceEvaluator(DifferenceEvaluators.DefaultStopWhenDifferent); + assertEquals(ComparisonResult.EQUAL, + d.compareNodes(doc.createElement("x"), + doc.createElement("x"))); + assertEquals(0, ex.invoked); + } + + @Test public void compareNodesDifferentNS() { + DOMDifferenceEngine d = new DOMDifferenceEngine(); + DiffExpecter ex = new DiffExpecter(ComparisonType.NAMESPACE_URI); + d.addDifferenceListener(ex); + d.setDifferenceEvaluator(DifferenceEvaluators.DefaultStopWhenDifferent); + assertEquals(ComparisonResult.CRITICAL, + d.compareNodes(doc.createElementNS("x", "y"), + doc.createElementNS("z", "y"))); + assertEquals(1, ex.invoked); + } + + @Test public void compareNodesDifferentPrefix() { + DOMDifferenceEngine d = new DOMDifferenceEngine(); + DiffExpecter ex = new DiffExpecter(ComparisonType.NAMESPACE_PREFIX); + d.addDifferenceListener(ex); + d.setDifferenceEvaluator(new DifferenceEvaluator() { + public ComparisonResult evaluate(Comparison comparison, + ComparisonResult outcome) { + if (comparison.getType() + == ComparisonType.NAMESPACE_PREFIX) { + assertEquals(ComparisonResult.DIFFERENT, outcome); + return ComparisonResult.CRITICAL; + } + assertEquals(ComparisonResult.EQUAL, outcome); + return ComparisonResult.EQUAL; + } + }); + assertEquals(ComparisonResult.CRITICAL, + d.compareNodes(doc.createElementNS("x", "x:y"), + doc.createElementNS("x", "z:y"))); + assertEquals(1, ex.invoked); + } + + @Test public void compareNodesDifferentNumberOfChildren() { + DOMDifferenceEngine d = new DOMDifferenceEngine(); + DiffExpecter ex = + new DiffExpecter(ComparisonType.CHILD_NODELIST_LENGTH, 2); + d.addDifferenceListener(ex); + d.setDifferenceEvaluator(DifferenceEvaluators.DefaultStopWhenDifferent); + Element e1 = doc.createElement("x"); + Element e2 = doc.createElement("x"); + assertEquals(ComparisonResult.EQUAL, d.compareNodes(e1, e2)); + e1.appendChild(doc.createElement("x")); + assertEquals(ComparisonResult.CRITICAL, d.compareNodes(e1, e2)); + assertEquals(1, ex.invoked); + e2.appendChild(doc.createElement("x")); + assertEquals(ComparisonResult.EQUAL, d.compareNodes(e1, e2)); + e2.appendChild(doc.createElement("x")); + assertEquals(ComparisonResult.CRITICAL, d.compareNodes(e1, e2)); + assertEquals(2, ex.invoked); + } + } Modified: trunk/xmlunit/src/tests/net-core/diff/DOMDifferenceEngineTest.cs =================================================================== --- trunk/xmlunit/src/tests/net-core/diff/DOMDifferenceEngineTest.cs 2010-06-21 09:02:59 UTC (rev 403) +++ trunk/xmlunit/src/tests/net-core/diff/DOMDifferenceEngineTest.cs 2010-06-21 14:37:51 UTC (rev 404) @@ -12,6 +12,7 @@ limitations under the License. */ using System; +using System.Xml; using NUnit.Framework; namespace net.sf.xmlunit.diff { @@ -124,5 +125,117 @@ Convert.ToInt16("2")))); Assert.AreEqual(1, invocations); } + + private XmlDocument doc; + + [SetUp] + public void CreateDoc() { + doc = new XmlDocument(); + } + + [Test] + public void CompareNodesOfDifferentType() { + DOMDifferenceEngine d = new DOMDifferenceEngine(); + int invocations = 0; + d.DifferenceListener += delegate(Comparison comp, + ComparisonResult r) { + Assert.AreEqual(0, invocations); + invocations++; + Assert.AreEqual(ComparisonType.NODE_TYPE, comp.Type); + Assert.AreEqual(ComparisonResult.CRITICAL, r); + }; + d.DifferenceEvaluator = + DifferenceEvaluators.DefaultStopWhenDifferent; + Assert.AreEqual(ComparisonResult.CRITICAL, + d.CompareNodes(doc.CreateElement("x"), + doc.CreateComment("x"))); + Assert.AreEqual(1, invocations); + } + + [Test] + public void CompareNodesWithoutNS() { + DOMDifferenceEngine d = new DOMDifferenceEngine(); + d.DifferenceListener += delegate(Comparison comp, + ComparisonResult r) { + Assert.Fail("unexpected invocation"); + }; + d.DifferenceEvaluator = + DifferenceEvaluators.DefaultStopWhenDifferent; + Assert.AreEqual(ComparisonResult.EQUAL, + d.CompareNodes(doc.CreateElement("x"), + doc.CreateElement("x"))); + } + + [Test] + public void CompareNodesDifferentNS() { + DOMDifferenceEngine d = new DOMDifferenceEngine(); + int invocations = 0; + d.DifferenceListener += delegate(Comparison comp, + ComparisonResult r) { + Assert.AreEqual(0, invocations); + invocations++; + Assert.AreEqual(ComparisonType.NAMESPACE_URI, comp.Type); + Assert.AreEqual(ComparisonResult.CRITICAL, r); + }; + d.DifferenceEvaluator = + DifferenceEvaluators.DefaultStopWhenDifferent; + Assert.AreEqual(ComparisonResult.CRITICAL, + d.CompareNodes(doc.CreateElement("y", "x"), + doc.CreateElement("y", "z"))); + Assert.AreEqual(1, invocations); + } + + [Test] + public void CompareNodesDifferentPrefix() { + DOMDifferenceEngine d = new DOMDifferenceEngine(); + int invocations = 0; + d.DifferenceListener += delegate(Comparison comp, + ComparisonResult r) { + Assert.AreEqual(0, invocations); + invocations++; + Assert.AreEqual(ComparisonType.NAMESPACE_PREFIX, comp.Type); + Assert.AreEqual(ComparisonResult.CRITICAL, r); + }; + d.DifferenceEvaluator = delegate(Comparison comparison, + ComparisonResult outcome) { + if (comparison.Type == ComparisonType.NAMESPACE_PREFIX) { + Assert.AreEqual(ComparisonResult.DIFFERENT, outcome); + return ComparisonResult.CRITICAL; + } + Assert.AreEqual(ComparisonResult.EQUAL, outcome); + return ComparisonResult.EQUAL; + }; + Assert.AreEqual(ComparisonResult.CRITICAL, + d.CompareNodes(doc.CreateElement("x:y", "x"), + doc.CreateElement("z:y", "x"))); + Assert.AreEqual(1, invocations); + } + + [Test] + public void CompareNodesDifferentNumberOfChildren() { + DOMDifferenceEngine d = new DOMDifferenceEngine(); + int invocations = 0; + d.DifferenceListener += delegate(Comparison comp, + ComparisonResult r) { + Assert.Greater(2, invocations); + invocations++; + Assert.AreEqual(ComparisonType.CHILD_NODELIST_LENGTH, + comp.Type); + Assert.AreEqual(ComparisonResult.CRITICAL, r); + }; + d.DifferenceEvaluator = + DifferenceEvaluators.DefaultStopWhenDifferent; + XmlElement e1 = doc.CreateElement("x"); + XmlElement e2 = doc.CreateElement("x"); + Assert.AreEqual(ComparisonResult.EQUAL, d.CompareNodes(e1, e2)); + e1.AppendChild(doc.CreateElement("x")); + Assert.AreEqual(ComparisonResult.CRITICAL, d.CompareNodes(e1, e2)); + Assert.AreEqual(1, invocations); + e2.AppendChild(doc.CreateElement("x")); + Assert.AreEqual(ComparisonResult.EQUAL, d.CompareNodes(e1, e2)); + e2.AppendChild(doc.CreateElement("x")); + Assert.AreEqual(ComparisonResult.CRITICAL, d.CompareNodes(e1, e2)); + Assert.AreEqual(2, invocations); + } } } Modified: trunk/xmlunit/xmlunit.nant.build =================================================================== --- trunk/xmlunit/xmlunit.nant.build 2010-06-21 09:02:59 UTC (rev 403) +++ trunk/xmlunit/xmlunit.nant.build 2010-06-21 14:37:51 UTC (rev 404) @@ -25,6 +25,7 @@ <property name="gen.src.dir" value="${base.dir}/build/generated/net" overwrite="false"/> <property name="build.dir" value="${base.dir}/build/net" overwrite="false"/> + <property name="test.report.dir" value="${build.dir}/test-report"/> <property name="bin.dir" value="${build.dir}/bin" overwrite="false"/> <property name="csc.verbose" value="false" overwrite="false"/> @@ -99,8 +100,12 @@ <target name="test" description="run all tests" depends="compile"> <nunit2> <formatter type="Plain"/> + <formatter type="Xml" usefile="true" outputdir="${test.report.dir}"/> <test assemblyname="${bin.dir}/${project::get-name()}-core.tests.dll"/> </nunit2> + <style style="lib/NUnitSummary.xsl" + in="${test.report.dir}/${project::get-name()}-core.tests.dll-results" + out="${test.report.dir}/html/index.html"/> </target> <target name="deploy" description="zip all code for deployment" This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bo...@us...> - 2010-06-21 09:03:06
|
Revision: 403 http://xmlunit.svn.sourceforge.net/xmlunit/?rev=403&view=rev Author: bodewig Date: 2010-06-21 09:02:59 +0000 (Mon, 21 Jun 2010) Log Message: ----------- allow tests to access internal methods, reduce method visibility Modified Paths: -------------- trunk/xmlunit/src/main/net-core/diff/DOMDifferenceEngine.cs trunk/xmlunit/xmlunit.nant.build Modified: trunk/xmlunit/src/main/net-core/diff/DOMDifferenceEngine.cs =================================================================== --- trunk/xmlunit/src/main/net-core/diff/DOMDifferenceEngine.cs 2010-06-18 15:21:25 UTC (rev 402) +++ trunk/xmlunit/src/main/net-core/diff/DOMDifferenceEngine.cs 2010-06-21 09:02:59 UTC (rev 403) @@ -66,7 +66,7 @@ /// difference evaluator evaluate the result, notifies all /// listeners and returns the outcome. /// </summary> - public ComparisonResult Compare(Comparison comp) { + internal ComparisonResult Compare(Comparison comp) { object controlValue = comp.ControlNodeDetails.Value; object testValue = comp.TestNodeDetails.Value; bool equal = controlValue == null @@ -78,8 +78,8 @@ return altered; } - public void FireComparisonPerformed(Comparison comp, - ComparisonResult outcome) { + private void FireComparisonPerformed(Comparison comp, + ComparisonResult outcome) { if (ComparisonListener != null) { ComparisonListener(comp, outcome); } Modified: trunk/xmlunit/xmlunit.nant.build =================================================================== --- trunk/xmlunit/xmlunit.nant.build 2010-06-18 15:21:25 UTC (rev 402) +++ trunk/xmlunit/xmlunit.nant.build 2010-06-21 09:02:59 UTC (rev 403) @@ -12,14 +12,18 @@ See the License for the specific language governing permissions and limitations under the License. --> -<project name="xmlunit" description="XmlUnit for .Net" default="compile"> +<project name="xmlunit" description="XMLUnit for .Net" default="compile"> <property name="project.version" value="2.0" overwrite="false"/> + <property name="project.version4" value="${project.version}.0.0" + overwrite="false"/> <property name="base.dir" value="${project::get-base-directory()}" overwrite="false"/> <property name="core.src.dir" value="${base.dir}/src/main/net-core" overwrite="false"/> <property name="core.tests.src.dir" value="${base.dir}/src/tests/net-core" overwrite="false"/> + <property name="gen.src.dir" value="${base.dir}/build/generated/net" + overwrite="false"/> <property name="build.dir" value="${base.dir}/build/net" overwrite="false"/> <property name="bin.dir" value="${build.dir}/bin" overwrite="false"/> @@ -34,6 +38,7 @@ value="lib" /> <target name="init" description="prepare for other targets"> + <mkdir dir="${gen.src.dir}"/> <mkdir dir="${bin.dir}"/> <copy file="${nunit.v2.bin.dir}/${nunit.v2.assembly}" tofile="${bin.dir}/${nunit.v2.assembly}"/> @@ -45,9 +50,32 @@ <target name="compile-core" description="compile core source files" depends="init"> + <asminfo output="${gen.src.dir}/AssemblyInfo.cs" language="CSharp"> + <imports> + <import namespace="System" /> + <import namespace="System.Reflection" /> + <import namespace="System.Runtime.InteropServices" /> + <import namespace="System.Runtime.CompilerServices" /> + </imports> + <attributes> + <attribute type="ComVisibleAttribute" value="false"/> + <attribute type="CLSCompliantAttribute" value="true"/> + <attribute type="AssemblyVersionAttribute" value="${project.version4}"/> + <attribute type="AssemblyTitleAttribute" value="XMLUnit Core" /> + <attribute type="AssemblyDescriptionAttribute" + value="Core Classes of XMLUnit for .NET" /> + <attribute type="InternalsVisibleToAttribute" + value="${project::get-name()}-core.tests"/> + </attributes> + </asminfo> + <copy todir="${gen.src.dir}"> + <fileset basedir="${core.src.dir}"> + <include name="**/*.cs"/> + </fileset> + </copy> <csc target="library" output="${bin.dir}/${project::get-name()}-core.dll" debug="true" verbose="${csc.verbose}"> - <sources basedir="${core.src.dir}"> + <sources basedir="${gen.src.dir}"> <include name="**/*.cs"/> </sources> </csc> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bo...@us...> - 2010-06-18 15:21:31
|
Revision: 402 http://xmlunit.svn.sourceforge.net/xmlunit/?rev=402&view=rev Author: bodewig Date: 2010-06-18 15:21:25 +0000 (Fri, 18 Jun 2010) Log Message: ----------- very early steps to a DOM based DifferenceEngine Added Paths: ----------- trunk/xmlunit/src/main/net-core/diff/DOMDifferenceEngine.cs trunk/xmlunit/src/tests/net-core/diff/DOMDifferenceEngineTest.cs Added: trunk/xmlunit/src/main/net-core/diff/DOMDifferenceEngine.cs =================================================================== --- trunk/xmlunit/src/main/net-core/diff/DOMDifferenceEngine.cs (rev 0) +++ trunk/xmlunit/src/main/net-core/diff/DOMDifferenceEngine.cs 2010-06-18 15:21:25 UTC (rev 402) @@ -0,0 +1,94 @@ +/* + This file is licensed to You under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +using System; +using System.Xml; + +namespace net.sf.xmlunit.diff { + + /// <summary> + /// Difference engine based on DOM. + /// </summary> + public sealed class DOMDifferenceEngine : IDifferenceEngine { + public event ComparisonListener ComparisonListener; + public event ComparisonListener MatchListener; + public event ComparisonListener DifferenceListener; + + private ElementSelector elementSelector = ElementSelectors.Default; + public ElementSelector ElementSelector { + set { + if (value == null) { + throw new ArgumentNullException("element selector"); + } + elementSelector = value; + } + } + + private DifferenceEvaluator diffEvaluator = DifferenceEvaluators.Default; + public DifferenceEvaluator DifferenceEvaluator { + set { + if (value == null) { + throw new ArgumentNullException("difference evaluator"); + } + diffEvaluator = value; + } + } + + public void Compare(ISource control, ISource test) { + if (control == null) { + throw new ArgumentNullException("control"); + } + if (test == null) { + throw new ArgumentNullException("test"); + } + + CompareNodes(net.sf.xmlunit.util.Convert.ToNode(control), + net.sf.xmlunit.util.Convert.ToNode(test)); + } + + private ComparisonResult CompareNodes(XmlNode control, XmlNode test) { + return ComparisonResult.EQUAL; + } + + /// <summary> + /// Compares the detail values for object equality, lets the + /// difference evaluator evaluate the result, notifies all + /// listeners and returns the outcome. + /// </summary> + public ComparisonResult Compare(Comparison comp) { + object controlValue = comp.ControlNodeDetails.Value; + object testValue = comp.TestNodeDetails.Value; + bool equal = controlValue == null + ? testValue == null : controlValue.Equals(testValue); + ComparisonResult initial = + equal ? ComparisonResult.EQUAL : ComparisonResult.DIFFERENT; + ComparisonResult altered = diffEvaluator(comp, initial); + FireComparisonPerformed(comp, altered); + return altered; + } + + public void FireComparisonPerformed(Comparison comp, + ComparisonResult outcome) { + if (ComparisonListener != null) { + ComparisonListener(comp, outcome); + } + if (outcome == ComparisonResult.EQUAL && MatchListener != null) { + MatchListener(comp, outcome); + } else if (outcome != ComparisonResult.EQUAL + && DifferenceListener != null) { + DifferenceListener(comp, outcome); + } + } + } +} Property changes on: trunk/xmlunit/src/main/net-core/diff/DOMDifferenceEngine.cs ___________________________________________________________________ Added: svn:eol-style + native Copied: trunk/xmlunit/src/tests/net-core/diff/DOMDifferenceEngineTest.cs (from rev 401, trunk/xmlunit/src/tests/java-core/net/sf/xmlunit/diff/DOMDifferenceEngineTest.java) =================================================================== --- trunk/xmlunit/src/tests/net-core/diff/DOMDifferenceEngineTest.cs (rev 0) +++ trunk/xmlunit/src/tests/net-core/diff/DOMDifferenceEngineTest.cs 2010-06-18 15:21:25 UTC (rev 402) @@ -0,0 +1,128 @@ +/* + This file is licensed to You under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ +using System; +using NUnit.Framework; + +namespace net.sf.xmlunit.diff { + + [TestFixture] + public class DOMDifferenceEngineTest { + + private ComparisonResult outcome = ComparisonResult.CRITICAL; + private ComparisonResult ResultGrabber(Comparison comparison, + ComparisonResult outcome) { + this.outcome = outcome; + return outcome; + } + + [Test] + public void CompareTwoNulls() { + DOMDifferenceEngine d = new DOMDifferenceEngine(); + d.DifferenceEvaluator = ResultGrabber; + Assert.AreEqual(ComparisonResult.EQUAL, + d.Compare(new Comparison(ComparisonType.HAS_DOCTYPE_DECLARATION, + null, null, null, + null, null, null))); + Assert.AreEqual(ComparisonResult.EQUAL, outcome); + } + + [Test] + public void CompareControlNullTestNonNull() { + DOMDifferenceEngine d = new DOMDifferenceEngine(); + d.DifferenceEvaluator = ResultGrabber; + Assert.AreEqual(ComparisonResult.DIFFERENT, + d.Compare(new Comparison(ComparisonType.HAS_DOCTYPE_DECLARATION, + null, null, null, + null, null, ""))); + Assert.AreEqual(ComparisonResult.DIFFERENT, outcome); + } + + [Test] + public void CompareControlNonNullTestNull() { + DOMDifferenceEngine d = new DOMDifferenceEngine(); + d.DifferenceEvaluator = ResultGrabber; + Assert.AreEqual(ComparisonResult.DIFFERENT, + d.Compare(new Comparison(ComparisonType.HAS_DOCTYPE_DECLARATION, + null, null, "", + null, null, null))); + Assert.AreEqual(ComparisonResult.DIFFERENT, outcome); + } + + [Test] + public void CompareTwoDifferentNonNulls() { + DOMDifferenceEngine d = new DOMDifferenceEngine(); + d.DifferenceEvaluator = ResultGrabber; + Assert.AreEqual(ComparisonResult.DIFFERENT, + d.Compare(new Comparison(ComparisonType.HAS_DOCTYPE_DECLARATION, + null, null, + Convert.ToInt16("1"), + null, null, + Convert.ToInt16("2")))); + Assert.AreEqual(ComparisonResult.DIFFERENT, outcome); + } + + [Test] + public void CompareTwoEqualNonNulls() { + DOMDifferenceEngine d = new DOMDifferenceEngine(); + d.DifferenceEvaluator = ResultGrabber; + Assert.AreEqual(ComparisonResult.EQUAL, + d.Compare(new Comparison(ComparisonType.HAS_DOCTYPE_DECLARATION, + null, null, + Convert.ToInt16("2"), + null, null, + Convert.ToInt16("2")))); + Assert.AreEqual(ComparisonResult.EQUAL, outcome); + } + + [Test] + public void CompareNotifiesListener() { + DOMDifferenceEngine d = new DOMDifferenceEngine(); + int invocations = 0; + d.ComparisonListener += delegate(Comparison comp, + ComparisonResult r) { + invocations++; + Assert.AreEqual(ComparisonResult.EQUAL, r); + }; + Assert.AreEqual(ComparisonResult.EQUAL, + d.Compare(new Comparison(ComparisonType.HAS_DOCTYPE_DECLARATION, + null, null, + Convert.ToInt16("2"), + null, null, + Convert.ToInt16("2")))); + Assert.AreEqual(1, invocations); + } + + [Test] + public void CompareUsesResultOfEvaluator() { + DOMDifferenceEngine d = new DOMDifferenceEngine(); + int invocations = 0; + d.ComparisonListener += delegate(Comparison comp, + ComparisonResult r) { + invocations++; + Assert.AreEqual(ComparisonResult.SIMILAR, r); + }; + d.DifferenceEvaluator = delegate(Comparison comparison, + ComparisonResult outcome) { + return ComparisonResult.SIMILAR; + }; + Assert.AreEqual(ComparisonResult.SIMILAR, + d.Compare(new Comparison(ComparisonType.HAS_DOCTYPE_DECLARATION, + null, null, + Convert.ToInt16("2"), + null, null, + Convert.ToInt16("2")))); + Assert.AreEqual(1, invocations); + } + } +} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bo...@us...> - 2010-06-18 14:51:32
|
Revision: 401 http://xmlunit.svn.sourceforge.net/xmlunit/?rev=401&view=rev Author: bodewig Date: 2010-06-18 14:51:25 +0000 (Fri, 18 Jun 2010) Log Message: ----------- very early steps to a DOM based DifferenceEngine Modified Paths: -------------- trunk/xmlunit/src/tests/java-core/net/sf/xmlunit/diff/ComparisonListenerSupportTest.java Added Paths: ----------- trunk/xmlunit/src/main/java-core/net/sf/xmlunit/diff/DOMDifferenceEngine.java trunk/xmlunit/src/tests/java-core/net/sf/xmlunit/diff/DOMDifferenceEngineTest.java Added: trunk/xmlunit/src/main/java-core/net/sf/xmlunit/diff/DOMDifferenceEngine.java =================================================================== --- trunk/xmlunit/src/main/java-core/net/sf/xmlunit/diff/DOMDifferenceEngine.java (rev 0) +++ trunk/xmlunit/src/main/java-core/net/sf/xmlunit/diff/DOMDifferenceEngine.java 2010-06-18 14:51:25 UTC (rev 401) @@ -0,0 +1,99 @@ +/* + This file is licensed to You under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ +package net.sf.xmlunit.diff; + +import net.sf.xmlunit.util.Convert; +import javax.xml.transform.Source; +import org.w3c.dom.Node; +import org.w3c.dom.Document; + +/** + * Difference engine based on DOM. + */ +public final class DOMDifferenceEngine implements DifferenceEngine { + private final ComparisonListenerSupport listeners = + new ComparisonListenerSupport(); + private ElementSelector elementSelector = ElementSelectors.Default; + private DifferenceEvaluator diffEvaluator = DifferenceEvaluators.Default; + + public void addComparisonListener(ComparisonListener l) { + if (l == null) { + throw new IllegalArgumentException("listener must not be null"); + } + listeners.addComparisonListener(l); + } + + public void addMatchListener(ComparisonListener l) { + if (l == null) { + throw new IllegalArgumentException("listener must not be null"); + } + listeners.addMatchListener(l); + } + + public void addDifferenceListener(ComparisonListener l) { + if (l == null) { + throw new IllegalArgumentException("listener must not be null"); + } + listeners.addDifferenceListener(l); + } + + public void setElementSelector(ElementSelector s) { + if (s == null) { + throw new IllegalArgumentException("element selector must" + + " not be null"); + } + elementSelector = s; + } + + public void setDifferenceEvaluator(DifferenceEvaluator e) { + if (e == null) { + throw new IllegalArgumentException("difference evaluator must" + + " not be null"); + } + diffEvaluator = e; + } + + public void compare(Source control, Source test) { + if (control == null) { + throw new IllegalArgumentException("control must not be null"); + } + if (test == null) { + throw new IllegalArgumentException("test must not be null"); + } + compareNodes(Convert.toNode(control), Convert.toNode(test)); + } + + private ComparisonResult compareNodes(Node control, Node test) { + return ComparisonResult.EQUAL; + } + + /** + * Compares the detail values for object equality, lets the + * difference evaluator evaluate the result, notifies all + * listeners and returns the outcome. + * + * <p>package private to support tests.</p> + */ + ComparisonResult compare(Comparison comp) { + Object controlValue = comp.getControlNodeDetails().getValue(); + Object testValue = comp.getTestNodeDetails().getValue(); + boolean equal = controlValue == null + ? testValue == null : controlValue.equals(testValue); + ComparisonResult initial = + equal ? ComparisonResult.EQUAL : ComparisonResult.DIFFERENT; + ComparisonResult altered = diffEvaluator.evaluate(comp, initial); + listeners.fireComparisonPerformed(comp, altered); + return altered; + } +} Property changes on: trunk/xmlunit/src/main/java-core/net/sf/xmlunit/diff/DOMDifferenceEngine.java ___________________________________________________________________ Added: svn:eol-style + native Modified: trunk/xmlunit/src/tests/java-core/net/sf/xmlunit/diff/ComparisonListenerSupportTest.java =================================================================== --- trunk/xmlunit/src/tests/java-core/net/sf/xmlunit/diff/ComparisonListenerSupportTest.java 2010-05-21 15:19:15 UTC (rev 400) +++ trunk/xmlunit/src/tests/java-core/net/sf/xmlunit/diff/ComparisonListenerSupportTest.java 2010-06-18 14:51:25 UTC (rev 401) @@ -51,12 +51,12 @@ s.fireComparisonPerformed(null, ComparisonResult.EQUAL); } - private static class Listener implements ComparisonListener { + static class Listener implements ComparisonListener { private final HashSet<ComparisonResult> acceptable = new HashSet<ComparisonResult>(); private int invocations = 0; - private Listener(ComparisonResult... accept) { + Listener(ComparisonResult... accept) { acceptable.addAll(Arrays.asList(accept)); } @@ -67,5 +67,9 @@ fail("unexpected outcome: " + outcome); } } + + int getInvocations() { + return invocations; + } } } Added: trunk/xmlunit/src/tests/java-core/net/sf/xmlunit/diff/DOMDifferenceEngineTest.java =================================================================== --- trunk/xmlunit/src/tests/java-core/net/sf/xmlunit/diff/DOMDifferenceEngineTest.java (rev 0) +++ trunk/xmlunit/src/tests/java-core/net/sf/xmlunit/diff/DOMDifferenceEngineTest.java 2010-06-18 14:51:25 UTC (rev 401) @@ -0,0 +1,114 @@ +/* + This file is licensed to You under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ +package net.sf.xmlunit.diff; + +import org.junit.Test; +import static org.junit.Assert.*; + +public class DOMDifferenceEngineTest { + + private static class ResultGrabber implements DifferenceEvaluator { + private ComparisonResult outcome = ComparisonResult.CRITICAL; + public ComparisonResult evaluate(Comparison comparison, + ComparisonResult outcome) { + this.outcome = outcome; + return outcome; + } + } + + @Test public void compareTwoNulls() { + ResultGrabber g = new ResultGrabber(); + DOMDifferenceEngine d = new DOMDifferenceEngine(); + d.setDifferenceEvaluator(g); + assertEquals(ComparisonResult.EQUAL, + d.compare(new Comparison(ComparisonType.HAS_DOCTYPE_DECLARATION, + null, null, null, + null, null, null))); + assertEquals(ComparisonResult.EQUAL, g.outcome); + } + + @Test public void compareControlNullTestNonNull() { + ResultGrabber g = new ResultGrabber(); + DOMDifferenceEngine d = new DOMDifferenceEngine(); + d.setDifferenceEvaluator(g); + assertEquals(ComparisonResult.DIFFERENT, + d.compare(new Comparison(ComparisonType.HAS_DOCTYPE_DECLARATION, + null, null, null, + null, null, ""))); + assertEquals(ComparisonResult.DIFFERENT, g.outcome); + } + + @Test public void compareControlNonNullTestNull() { + ResultGrabber g = new ResultGrabber(); + DOMDifferenceEngine d = new DOMDifferenceEngine(); + d.setDifferenceEvaluator(g); + assertEquals(ComparisonResult.DIFFERENT, + d.compare(new Comparison(ComparisonType.HAS_DOCTYPE_DECLARATION, + null, null, "", + null, null, null))); + assertEquals(ComparisonResult.DIFFERENT, g.outcome); + } + + @Test public void compareTwoDifferentNonNulls() { + ResultGrabber g = new ResultGrabber(); + DOMDifferenceEngine d = new DOMDifferenceEngine(); + d.setDifferenceEvaluator(g); + assertEquals(ComparisonResult.DIFFERENT, + d.compare(new Comparison(ComparisonType.HAS_DOCTYPE_DECLARATION, + null, null, new Short("1"), + null, null, new Short("2")))); + assertEquals(ComparisonResult.DIFFERENT, g.outcome); + } + + @Test public void compareTwoEqualNonNulls() { + ResultGrabber g = new ResultGrabber(); + DOMDifferenceEngine d = new DOMDifferenceEngine(); + d.setDifferenceEvaluator(g); + assertEquals(ComparisonResult.EQUAL, + d.compare(new Comparison(ComparisonType.HAS_DOCTYPE_DECLARATION, + null, null, new Short("2"), + null, null, new Short("2")))); + assertEquals(ComparisonResult.EQUAL, g.outcome); + } + + @Test public void compareNotifiesListener() { + DOMDifferenceEngine d = new DOMDifferenceEngine(); + ComparisonListenerSupportTest.Listener l = + new ComparisonListenerSupportTest.Listener(ComparisonResult.EQUAL); + d.addComparisonListener(l); + assertEquals(ComparisonResult.EQUAL, + d.compare(new Comparison(ComparisonType.HAS_DOCTYPE_DECLARATION, + null, null, new Short("2"), + null, null, new Short("2")))); + assertEquals(1, l.getInvocations()); + } + + @Test public void compareUsesResultOfEvaluator() { + DOMDifferenceEngine d = new DOMDifferenceEngine(); + ComparisonListenerSupportTest.Listener l = + new ComparisonListenerSupportTest.Listener(ComparisonResult.SIMILAR); + d.addComparisonListener(l); + d.setDifferenceEvaluator(new DifferenceEvaluator() { + public ComparisonResult evaluate(Comparison comparison, + ComparisonResult outcome) { + return ComparisonResult.SIMILAR; + } + }); + assertEquals(ComparisonResult.SIMILAR, + d.compare(new Comparison(ComparisonType.HAS_DOCTYPE_DECLARATION, + null, null, new Short("2"), + null, null, new Short("2")))); + assertEquals(1, l.getInvocations()); + } +} Property changes on: trunk/xmlunit/src/tests/java-core/net/sf/xmlunit/diff/DOMDifferenceEngineTest.java ___________________________________________________________________ Added: svn:eol-style + native This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: Stefan B. <bo...@ap...> - 2010-06-08 07:38:03
|
To whom it may engage... This is an automated request, but not an unsolicited one. For more information please visit http://gump.apache.org/nagged.html, and/or contact the folk at ge...@gu.... Project xmlunit.net has an issue affecting its community integration. This issue affects 1 projects, and has been outstanding for 3 runs. The current state of this project is 'Failed', with reason 'Build Failed'. For reference only, the following projects are affected by this: - xmlunit.net : JUnit extension for XML unit tests. Full details are available at: http://vmgump.apache.org/gump/public/xmlunit/xmlunit.net/index.html That said, some information snippets are provided here. The following annotations (debug/informational/warning/error messages) were provided: -INFO- Failed with reason build failed The following work was performed: http://vmgump.apache.org/gump/public/xmlunit/xmlunit.net/gump_work/build_xmlunit_xmlunit.net.html Work Name: build_xmlunit_xmlunit.net (Type: Build) Work ended in a state of : Failed Elapsed: 1 sec Command Line: NAnt.exe -D:java.awt.headless=true -D:gump.merge=/srv/gump/public/gump/work/merge.xml -D:build.sysclasspath=only -buildfile:xmlunit.build test [Working Directory: /srv/gump/public/workspace/xmlunit] DEVPATH: --------------------------------------------- NAnt 0.85 (Build 0.85.2478.0; release; 10/14/2006) Copyright (C) 2001-2006 Gerry Shaw http://nant.sourceforge.net BUILD FAILED /srv/gump/public/workspace/xmlunit/xmlunit.build: Error loading buildfile. Could not find file "/srv/gump/public/workspace/xmlunit/xmlunit.build". For more information regarding the cause of the build failure, run the build again in debug mode. Try 'nant -help' for more information --------------------------------------------- To subscribe to this information via syndicated feeds: - RSS: http://vmgump.apache.org/gump/public/xmlunit/xmlunit.net/rss.xml - Atom: http://vmgump.apache.org/gump/public/xmlunit/xmlunit.net/atom.xml ============================== Gump Tracking Only === Produced by Gump version 2.3. Gump Run 16000008062010, vmgump:vmgump-public:16000008062010 Gump E-mail Identifier (unique within run) #2. -- Apache Gump http://gump.apache.org/ [Instance: vmgump] |
From: Stefan B. <bo...@ap...> - 2010-06-05 07:32:58
|
To whom it may engage... This is an automated request, but not an unsolicited one. For more information please visit http://gump.apache.org/nagged.html, and/or contact the folk at ge...@gu.... Project xmlunit.net has an issue affecting its community integration. This issue affects 1 projects. The current state of this project is 'Failed', with reason 'Build Failed'. For reference only, the following projects are affected by this: - xmlunit.net : JUnit extension for XML unit tests. Full details are available at: http://vmgump.apache.org/gump/public/xmlunit/xmlunit.net/index.html That said, some information snippets are provided here. The following annotations (debug/informational/warning/error messages) were provided: -INFO- Failed with reason build failed The following work was performed: http://vmgump.apache.org/gump/public/xmlunit/xmlunit.net/gump_work/build_xmlunit_xmlunit.net.html Work Name: build_xmlunit_xmlunit.net (Type: Build) Work ended in a state of : Failed Elapsed: 1 sec Command Line: NAnt.exe -D:java.awt.headless=true -D:gump.merge=/srv/gump/public/gump/work/merge.xml -D:build.sysclasspath=only -buildfile:xmlunit.build test [Working Directory: /srv/gump/public/workspace/xmlunit] DEVPATH: --------------------------------------------- NAnt 0.85 (Build 0.85.2478.0; release; 10/14/2006) Copyright (C) 2001-2006 Gerry Shaw http://nant.sourceforge.net BUILD FAILED /srv/gump/public/workspace/xmlunit/xmlunit.build: Error loading buildfile. Could not find file "/srv/gump/public/workspace/xmlunit/xmlunit.build". For more information regarding the cause of the build failure, run the build again in debug mode. Try 'nant -help' for more information --------------------------------------------- To subscribe to this information via syndicated feeds: - RSS: http://vmgump.apache.org/gump/public/xmlunit/xmlunit.net/rss.xml - Atom: http://vmgump.apache.org/gump/public/xmlunit/xmlunit.net/atom.xml ============================== Gump Tracking Only === Produced by Gump version 2.3. Gump Run 05000005062010, vmgump:vmgump-public:05000005062010 Gump E-mail Identifier (unique within run) #2. -- Apache Gump http://gump.apache.org/ [Instance: vmgump] |
From: <bo...@us...> - 2010-05-21 15:19:21
|
Revision: 400 http://xmlunit.svn.sourceforge.net/xmlunit/?rev=400&view=rev Author: bodewig Date: 2010-05-21 15:19:15 +0000 (Fri, 21 May 2010) Log Message: ----------- remove .NET legacy codebase Modified Paths: -------------- trunk/xmlunit/xmlunit.nant.build Removed Paths: ------------- trunk/xmlunit/src/main/net-legacy/ trunk/xmlunit/src/tests/net-legacy/ Modified: trunk/xmlunit/xmlunit.nant.build =================================================================== --- trunk/xmlunit/xmlunit.nant.build 2010-05-21 15:16:13 UTC (rev 399) +++ trunk/xmlunit/xmlunit.nant.build 2010-05-21 15:19:15 UTC (rev 400) @@ -17,11 +17,8 @@ <property name="base.dir" value="${project::get-base-directory()}" overwrite="false"/> <property name="core.src.dir" value="${base.dir}/src/main/net-core" overwrite="false"/> - <property name="legacy.src.dir" value="${base.dir}/src/main/net-legacy" overwrite="false"/> <property name="core.tests.src.dir" value="${base.dir}/src/tests/net-core" overwrite="false"/> - <property name="legacy.tests.src.dir" value="${base.dir}/src/tests/net-legacy" - overwrite="false"/> <property name="build.dir" value="${base.dir}/build/net" overwrite="false"/> <property name="bin.dir" value="${build.dir}/bin" overwrite="false"/> @@ -43,9 +40,7 @@ </target> <target name="clean" description="clean out compiled files"> - <delete failonerror="false"> - <fileset basedir="${build.dir}"/> - </delete> + <delete dir="${build.dir}"/> </target> <target name="compile-core" @@ -60,17 +55,6 @@ <target name="compile" description="compile all source files" depends="compile-core"> - <csc target="library" output="${bin.dir}/${project::get-name()}-legacy.dll" - debug="true" verbose="${csc.verbose}"> - <references basedir="${bin.dir}"> - <include name="${project::get-name()}-core.dll"/> - <include name="${nunit.v2.assembly}"/> - </references> - <sources basedir="${legacy.src.dir}"> - <include name="*.cs"/> - </sources> - </csc> - <csc target="library" output="${bin.dir}/${project::get-name()}-core.tests.dll" debug="true" verbose="${csc.verbose}"> @@ -82,26 +66,12 @@ <include name="**/*.cs"/> </sources> </csc> - <csc target="library" - output="${bin.dir}/${project::get-name()}-legacy.tests.dll" - debug="true" verbose="${csc.verbose}"> - <references basedir="${bin.dir}"> - <include name="${project::get-name()}-core.dll"/> - <include name="${project::get-name()}-legacy.dll"/> - <include name="${nunit.v2.assembly}"/> - </references> - <sources basedir="${legacy.tests.src.dir}"> - <include name="*.cs"/> - <exclude name="AllTests.cs"/> - </sources> - </csc> </target> <target name="test" description="run all tests" depends="compile"> <nunit2> <formatter type="Plain"/> <test assemblyname="${bin.dir}/${project::get-name()}-core.tests.dll"/> - <test assemblyname="${bin.dir}/${project::get-name()}-legacy.tests.dll"/> </nunit2> </target> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bo...@us...> - 2010-05-21 15:16:19
|
Revision: 399 http://xmlunit.svn.sourceforge.net/xmlunit/?rev=399&view=rev Author: bodewig Date: 2010-05-21 15:16:13 +0000 (Fri, 21 May 2010) Log Message: ----------- fix/add license Modified Paths: -------------- trunk/xmlunit/build.xml trunk/xmlunit/xmlunit.nant.build Modified: trunk/xmlunit/build.xml =================================================================== --- trunk/xmlunit/build.xml 2010-05-21 15:12:49 UTC (rev 398) +++ trunk/xmlunit/build.xml 2010-05-21 15:16:13 UTC (rev 399) @@ -1,19 +1,16 @@ <?xml version="1.0"?> <!-- - Licensed to the XMLUnit developers under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - This file is licensed to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at + This file is licensed to You under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 + http://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. --> <project name="xmlunit" default="test" basedir="."> Modified: trunk/xmlunit/xmlunit.nant.build =================================================================== --- trunk/xmlunit/xmlunit.nant.build 2010-05-21 15:12:49 UTC (rev 398) +++ trunk/xmlunit/xmlunit.nant.build 2010-05-21 15:16:13 UTC (rev 399) @@ -1,3 +1,17 @@ +<?xml version="1.0"?> +<!-- + This file is licensed to You under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> <project name="xmlunit" description="XmlUnit for .Net" default="compile"> <property name="project.version" value="2.0" overwrite="false"/> <property name="base.dir" value="${project::get-base-directory()}" This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bo...@us...> - 2010-05-21 15:13:00
|
Revision: 398 http://xmlunit.svn.sourceforge.net/xmlunit/?rev=398&view=rev Author: bodewig Date: 2010-05-21 15:12:49 +0000 (Fri, 21 May 2010) Log Message: ----------- The Java codebase was undecided whether it used IFoo or Foo for interfaces. Stay true to your Java roots and drop the I everywhere. Modified Paths: -------------- trunk/xmlunit/src/main/java-core/net/sf/xmlunit/builder/AbstractTransformationBuilder.java trunk/xmlunit/src/main/java-core/net/sf/xmlunit/builder/Input.java trunk/xmlunit/src/main/java-core/net/sf/xmlunit/builder/Transform.java trunk/xmlunit/src/main/java-core/net/sf/xmlunit/xpath/JAXPXPathEngine.java trunk/xmlunit/src/tests/java-core/net/sf/xmlunit/xpath/AbstractXPathEngineTest.java trunk/xmlunit/src/tests/java-core/net/sf/xmlunit/xpath/JAXPXPathEngineTest.java Added Paths: ----------- trunk/xmlunit/src/main/java-core/net/sf/xmlunit/builder/TransformationBuilderBase.java trunk/xmlunit/src/main/java-core/net/sf/xmlunit/diff/DifferenceEngine.java trunk/xmlunit/src/main/java-core/net/sf/xmlunit/xpath/XPathEngine.java Removed Paths: ------------- trunk/xmlunit/src/main/java-core/net/sf/xmlunit/builder/ITransformationBuilderBase.java trunk/xmlunit/src/main/java-core/net/sf/xmlunit/diff/IDifferenceEngine.java trunk/xmlunit/src/main/java-core/net/sf/xmlunit/xpath/IXPathEngine.java Modified: trunk/xmlunit/src/main/java-core/net/sf/xmlunit/builder/AbstractTransformationBuilder.java =================================================================== --- trunk/xmlunit/src/main/java-core/net/sf/xmlunit/builder/AbstractTransformationBuilder.java 2010-05-20 11:26:40 UTC (rev 397) +++ trunk/xmlunit/src/main/java-core/net/sf/xmlunit/builder/AbstractTransformationBuilder.java 2010-05-21 15:12:49 UTC (rev 398) @@ -26,8 +26,8 @@ * <p>I wish there was a way to say <code>implements B</code>.</p> */ abstract class - AbstractTransformationBuilder<B extends ITransformationBuilderBase<B>> - implements ITransformationBuilderBase<B> { + AbstractTransformationBuilder<B extends TransformationBuilderBase<B>> + implements TransformationBuilderBase<B> { private final Transformation helper; Deleted: trunk/xmlunit/src/main/java-core/net/sf/xmlunit/builder/ITransformationBuilderBase.java =================================================================== --- trunk/xmlunit/src/main/java-core/net/sf/xmlunit/builder/ITransformationBuilderBase.java 2010-05-20 11:26:40 UTC (rev 397) +++ trunk/xmlunit/src/main/java-core/net/sf/xmlunit/builder/ITransformationBuilderBase.java 2010-05-21 15:12:49 UTC (rev 398) @@ -1,48 +0,0 @@ -/* - This file is licensed to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ -package net.sf.xmlunit.builder; - -import javax.xml.transform.Source; -import javax.xml.transform.TransformerFactory; -import javax.xml.transform.URIResolver; - -/** - * Holds the common builder methods for XSLT related builders. - * - * <p><code>B</code> is the derived builder interface.</p> - */ -public interface - ITransformationBuilderBase<B extends ITransformationBuilderBase<B>> { - /** - * sets the TraX factory to use. - */ - B usingFactory(TransformerFactory f); - /** - * Adds an output property. - */ - B withOutputProperty(String name, String value); - /** - * Adds a parameter. - */ - B withParameter(String name, Object value); - /** - * Sets the stylesheet to use. - */ - B withStylesheet(Source s); - /** - * Sets the resolver to use for the document() function and - * xsi:import/include. - */ - B withURIResolver(URIResolver r); -} Modified: trunk/xmlunit/src/main/java-core/net/sf/xmlunit/builder/Input.java =================================================================== --- trunk/xmlunit/src/main/java-core/net/sf/xmlunit/builder/Input.java 2010-05-20 11:26:40 UTC (rev 397) +++ trunk/xmlunit/src/main/java-core/net/sf/xmlunit/builder/Input.java 2010-05-21 15:12:49 UTC (rev 398) @@ -196,7 +196,7 @@ } public static interface TransformationBuilder - extends ITransformationBuilderBase<TransformationBuilder>, Builder { + extends TransformationBuilderBase<TransformationBuilder>, Builder { /** * Sets the stylesheet to use. */ Modified: trunk/xmlunit/src/main/java-core/net/sf/xmlunit/builder/Transform.java =================================================================== --- trunk/xmlunit/src/main/java-core/net/sf/xmlunit/builder/Transform.java 2010-05-20 11:26:40 UTC (rev 397) +++ trunk/xmlunit/src/main/java-core/net/sf/xmlunit/builder/Transform.java 2010-05-21 15:12:49 UTC (rev 398) @@ -23,7 +23,7 @@ */ public final class Transform { - public interface Builder extends ITransformationBuilderBase<Builder> { + public interface Builder extends TransformationBuilderBase<Builder> { /** * Create the result of the transformation. */ Copied: trunk/xmlunit/src/main/java-core/net/sf/xmlunit/builder/TransformationBuilderBase.java (from rev 397, trunk/xmlunit/src/main/java-core/net/sf/xmlunit/builder/ITransformationBuilderBase.java) =================================================================== --- trunk/xmlunit/src/main/java-core/net/sf/xmlunit/builder/TransformationBuilderBase.java (rev 0) +++ trunk/xmlunit/src/main/java-core/net/sf/xmlunit/builder/TransformationBuilderBase.java 2010-05-21 15:12:49 UTC (rev 398) @@ -0,0 +1,48 @@ +/* + This file is licensed to You under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ +package net.sf.xmlunit.builder; + +import javax.xml.transform.Source; +import javax.xml.transform.TransformerFactory; +import javax.xml.transform.URIResolver; + +/** + * Holds the common builder methods for XSLT related builders. + * + * <p><code>B</code> is the derived builder interface.</p> + */ +public interface + TransformationBuilderBase<B extends TransformationBuilderBase<B>> { + /** + * sets the TraX factory to use. + */ + B usingFactory(TransformerFactory f); + /** + * Adds an output property. + */ + B withOutputProperty(String name, String value); + /** + * Adds a parameter. + */ + B withParameter(String name, Object value); + /** + * Sets the stylesheet to use. + */ + B withStylesheet(Source s); + /** + * Sets the resolver to use for the document() function and + * xsi:import/include. + */ + B withURIResolver(URIResolver r); +} Copied: trunk/xmlunit/src/main/java-core/net/sf/xmlunit/diff/DifferenceEngine.java (from rev 397, trunk/xmlunit/src/main/java-core/net/sf/xmlunit/diff/IDifferenceEngine.java) =================================================================== --- trunk/xmlunit/src/main/java-core/net/sf/xmlunit/diff/DifferenceEngine.java (rev 0) +++ trunk/xmlunit/src/main/java-core/net/sf/xmlunit/diff/DifferenceEngine.java 2010-05-21 15:12:49 UTC (rev 398) @@ -0,0 +1,54 @@ +/* + This file is licensed to You under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ +package net.sf.xmlunit.diff; + +import javax.xml.transform.Source; + +/** + * XMLUnit's difference engine. + */ +public interface DifferenceEngine { + /** + * Registers a listener that is notified of each comparison. + */ + void addComparisonListener(ComparisonListener l); + + /** + * Registers a listener that is notified of each comparison with + * outcome {@link ComparisonResult#EQUAL}. + */ + void addMatchListener(ComparisonListener l); + + /** + * Registers a listener that is notified of each comparison with + * outcome other than {@link ComparisonResult#EQUAL}. + */ + void addDifferenceListener(ComparisonListener l); + + /** + * Sets the strategy for selecting elements to compare. + */ + void setElementSelector(ElementSelector s); + + /** + * Determines whether the comparison should stop after given + * difference has been found. + */ + void setDifferenceEvaluator(DifferenceEvaluator e); + + /** + * Compares two pieces of XML and invokes the registered listeners. + */ + void compare(Source control, Source test); +} Deleted: trunk/xmlunit/src/main/java-core/net/sf/xmlunit/diff/IDifferenceEngine.java =================================================================== --- trunk/xmlunit/src/main/java-core/net/sf/xmlunit/diff/IDifferenceEngine.java 2010-05-20 11:26:40 UTC (rev 397) +++ trunk/xmlunit/src/main/java-core/net/sf/xmlunit/diff/IDifferenceEngine.java 2010-05-21 15:12:49 UTC (rev 398) @@ -1,54 +0,0 @@ -/* - This file is licensed to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ -package net.sf.xmlunit.diff; - -import javax.xml.transform.Source; - -/** - * XMLUnit's difference engine. - */ -public interface IDifferenceEngine { - /** - * Registers a listener that is notified of each comparison. - */ - void addComparisonListener(ComparisonListener l); - - /** - * Registers a listener that is notified of each comparison with - * outcome {@link ComparisonResult#EQUAL}. - */ - void addMatchListener(ComparisonListener l); - - /** - * Registers a listener that is notified of each comparison with - * outcome other than {@link ComparisonResult#EQUAL}. - */ - void addDifferenceListener(ComparisonListener l); - - /** - * Sets the strategy for selecting elements to compare. - */ - void setElementSelector(ElementSelector s); - - /** - * Determines whether the comparison should stop after given - * difference has been found. - */ - void setDifferenceEvaluator(DifferenceEvaluator e); - - /** - * Compares two pieces of XML and invokes the registered listeners. - */ - void compare(Source control, Source test); -} Deleted: trunk/xmlunit/src/main/java-core/net/sf/xmlunit/xpath/IXPathEngine.java =================================================================== --- trunk/xmlunit/src/main/java-core/net/sf/xmlunit/xpath/IXPathEngine.java 2010-05-20 11:26:40 UTC (rev 397) +++ trunk/xmlunit/src/main/java-core/net/sf/xmlunit/xpath/IXPathEngine.java 2010-05-21 15:12:49 UTC (rev 398) @@ -1,39 +0,0 @@ -/* - This file is licensed to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ -package net.sf.xmlunit.xpath; - -import java.util.Map; -import javax.xml.transform.Source; -import org.w3c.dom.Node; - -/** - * Interface for XMLUnit's XPath abstraction. - */ -public interface IXPathEngine { - /** - * Returns a potentially empty collection of Nodes matching an - * XPath expression. - */ - Iterable<Node> selectNodes(String xPath, Source s); - /** - * Evaluates an XPath expression and stringifies the result. - */ - String evaluate(String xPath, Source s); - /** - * Establish a namespace context. - * - * @param prefix2Uri maps from prefix to namespace URI. - */ - void setNamespaceContext(Map<String, String> prefix2Uri); -} Modified: trunk/xmlunit/src/main/java-core/net/sf/xmlunit/xpath/JAXPXPathEngine.java =================================================================== --- trunk/xmlunit/src/main/java-core/net/sf/xmlunit/xpath/JAXPXPathEngine.java 2010-05-20 11:26:40 UTC (rev 397) +++ trunk/xmlunit/src/main/java-core/net/sf/xmlunit/xpath/JAXPXPathEngine.java 2010-05-21 15:12:49 UTC (rev 398) @@ -29,7 +29,7 @@ /** * Simplified access to JAXP's XPath API. */ -public class JAXPXPathEngine implements IXPathEngine { +public class JAXPXPathEngine implements XPathEngine { private final XPath xpath; public JAXPXPathEngine(XPathFactory fac) { Copied: trunk/xmlunit/src/main/java-core/net/sf/xmlunit/xpath/XPathEngine.java (from rev 397, trunk/xmlunit/src/main/java-core/net/sf/xmlunit/xpath/IXPathEngine.java) =================================================================== --- trunk/xmlunit/src/main/java-core/net/sf/xmlunit/xpath/XPathEngine.java (rev 0) +++ trunk/xmlunit/src/main/java-core/net/sf/xmlunit/xpath/XPathEngine.java 2010-05-21 15:12:49 UTC (rev 398) @@ -0,0 +1,39 @@ +/* + This file is licensed to You under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ +package net.sf.xmlunit.xpath; + +import java.util.Map; +import javax.xml.transform.Source; +import org.w3c.dom.Node; + +/** + * Interface for XMLUnit's XPath abstraction. + */ +public interface XPathEngine { + /** + * Returns a potentially empty collection of Nodes matching an + * XPath expression. + */ + Iterable<Node> selectNodes(String xPath, Source s); + /** + * Evaluates an XPath expression and stringifies the result. + */ + String evaluate(String xPath, Source s); + /** + * Establish a namespace context. + * + * @param prefix2Uri maps from prefix to namespace URI. + */ + void setNamespaceContext(Map<String, String> prefix2Uri); +} Modified: trunk/xmlunit/src/tests/java-core/net/sf/xmlunit/xpath/AbstractXPathEngineTest.java =================================================================== --- trunk/xmlunit/src/tests/java-core/net/sf/xmlunit/xpath/AbstractXPathEngineTest.java 2010-05-20 11:26:40 UTC (rev 397) +++ trunk/xmlunit/src/tests/java-core/net/sf/xmlunit/xpath/AbstractXPathEngineTest.java 2010-05-21 15:12:49 UTC (rev 398) @@ -27,7 +27,7 @@ public abstract class AbstractXPathEngineTest { - protected abstract IXPathEngine getEngine(); + protected abstract XPathEngine getEngine(); private Source source; @@ -91,7 +91,7 @@ } @Test public void selectNodesWithNS() { - IXPathEngine e = getEngine(); + XPathEngine e = getEngine(); source = Input.fromMemory("<n:d xmlns:n='urn:test:1'><n:e/></n:d>") .build(); HashMap<String, String> m = new HashMap<String, String>(); @@ -102,7 +102,7 @@ } @Test public void selectNodesWithDefaultNS() { - IXPathEngine e = getEngine(); + XPathEngine e = getEngine(); source = Input.fromMemory("<d xmlns='urn:test:1'><e/></d>") .build(); HashMap<String, String> m = new HashMap<String, String>(); @@ -113,7 +113,7 @@ } @Test public void selectNodesWithDefaultNSEmptyPrefix() { - IXPathEngine e = getEngine(); + XPathEngine e = getEngine(); source = Input.fromMemory("<d xmlns='urn:test:1'><e/></d>") .build(); HashMap<String, String> m = new HashMap<String, String>(); @@ -125,7 +125,7 @@ // doesn't match public void selectNodesWithDefaultNSNoPrefix() { - IXPathEngine e = getEngine(); + XPathEngine e = getEngine(); source = Input.fromMemory("<d xmlns='urn:test:1'><e/></d>") .build(); HashMap<String, String> m = new HashMap<String, String>(); Modified: trunk/xmlunit/src/tests/java-core/net/sf/xmlunit/xpath/JAXPXPathEngineTest.java =================================================================== --- trunk/xmlunit/src/tests/java-core/net/sf/xmlunit/xpath/JAXPXPathEngineTest.java 2010-05-20 11:26:40 UTC (rev 397) +++ trunk/xmlunit/src/tests/java-core/net/sf/xmlunit/xpath/JAXPXPathEngineTest.java 2010-05-21 15:12:49 UTC (rev 398) @@ -14,7 +14,7 @@ package net.sf.xmlunit.xpath; public class JAXPXPathEngineTest extends AbstractXPathEngineTest { - @Override protected IXPathEngine getEngine() { + @Override protected XPathEngine getEngine() { return new JAXPXPathEngine(); } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |