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. |