From: <bo...@us...> - 2013-02-03 09:41:56
|
Revision: 505 http://xmlunit.svn.sourceforge.net/xmlunit/?rev=505&view=rev Author: bodewig Date: 2013-02-03 09:41:49 +0000 (Sun, 03 Feb 2013) Log Message: ----------- some additonal tests Modified 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 trunk/xmlunit/src/tests/java-core/net/sf/xmlunit/diff/XPathContextTest.java 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 2013-02-03 08:35:12 UTC (rev 504) +++ trunk/xmlunit/src/main/java-core/net/sf/xmlunit/diff/DOMDifferenceEngine.java 2013-02-03 09:41:49 UTC (rev 505) @@ -665,10 +665,13 @@ } private static QName valueAsQName(Attr attribute) { + // split QName into prefix and local name String[] pieces = attribute.getValue().split(":"); if (pieces.length < 2) { + // unprefixed name pieces = new String[] { null, pieces[0] }; } else if (pieces.length > 2) { + // actually, this is not a valid QName - be lenient pieces = new String[] { pieces[0], attribute.getValue().substring(pieces[0].length() + 1) 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 2013-02-03 08:35:12 UTC (rev 504) +++ trunk/xmlunit/src/tests/java-core/net/sf/xmlunit/diff/DOMDifferenceEngineTest.java 2013-02-03 09:41:49 UTC (rev 505) @@ -759,4 +759,127 @@ assertEquals(1, ex.invoked); } + @Test public void xsiTypesWithDifferentPrefixes() { + Document d1 = + documentForString("<foo xsi:type='p1:Foo'" + + " xmlns:p1='urn:xmlunit:test'" + + " xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'" + + "/>"); + Document d2 = + documentForString("<foo xsi:type='p2:Foo'" + + " xmlns:p2='urn:xmlunit:test'" + + " xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'" + + "/>"); + DOMDifferenceEngine d = new DOMDifferenceEngine(); + DiffExpecter ex = new DiffExpecter(ComparisonType.ATTR_VALUE); + d.addDifferenceListener(ex); + d.setDifferenceEvaluator(DifferenceEvaluators.DefaultStopWhenDifferent); + assertEquals(ComparisonResult.EQUAL, + d.compareNodes(d1, new XPathContext(), + d2, new XPathContext())); + } + + @Test public void xsiTypesWithDefaultNamespace() { + Document d1 = + documentForString("<a:foo xsi:type='Foo'" + + " xmlns='urn:xmlunit:test'" + + " xmlns:a='urn:xmlunit:test2'" + + " xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'" + + "/>"); + Document d2 = + documentForString("<a:foo xsi:type='p2:Foo'" + + " xmlns:p2='urn:xmlunit:test'" + + " xmlns:a='urn:xmlunit:test2'" + + " xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'" + + "/>"); + DOMDifferenceEngine d = new DOMDifferenceEngine(); + DiffExpecter ex = new DiffExpecter(ComparisonType.ATTR_VALUE); + d.addDifferenceListener(ex); + d.setDifferenceEvaluator(DifferenceEvaluators.DefaultStopWhenDifferent); + assertEquals(ComparisonResult.EQUAL, + d.compareNodes(d1, new XPathContext(), + d2, new XPathContext())); + } + + @Test public void xsiTypesWithDifferentLocalNames() { + Document d1 = + documentForString("<foo xsi:type='p1:Bar'" + + " xmlns:p1='urn:xmlunit:test'" + + " xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'" + + "/>"); + Document d2 = + documentForString("<foo xsi:type='p1:Foo'" + + " xmlns:p1='urn:xmlunit:test'" + + " xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'" + + "/>"); + DOMDifferenceEngine d = new DOMDifferenceEngine(); + DiffExpecter ex = new DiffExpecter(ComparisonType.ATTR_VALUE); + d.addDifferenceListener(ex); + d.setDifferenceEvaluator(DifferenceEvaluators.DefaultStopWhenDifferent); + assertEquals(ComparisonResult.CRITICAL, + d.compareNodes(d1, new XPathContext(), + d2, new XPathContext())); + } + + @Test public void xsiTypesWithDifferentNamespaceURIs() { + Document d1 = + documentForString("<foo xsi:type='p1:Foo'" + + " xmlns:p1='urn:xmlunit:test'" + + " xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'" + + "/>"); + Document d2 = + documentForString("<foo xsi:type='p1:Foo'" + + " xmlns:p1='urn:xmlunit:test2'" + + " xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'" + + "/>"); + DOMDifferenceEngine d = new DOMDifferenceEngine(); + DiffExpecter ex = new DiffExpecter(ComparisonType.ATTR_VALUE); + d.addDifferenceListener(ex); + d.setDifferenceEvaluator(DifferenceEvaluators.DefaultStopWhenDifferent); + assertEquals(ComparisonResult.CRITICAL, + d.compareNodes(d1, new XPathContext(), + d2, new XPathContext())); + } + + @Test public void xsiTypesWithNamespaceDeclarationOnDifferentLevels() { + Document d1 = + documentForString("<bar xmlns:p1='urn:xmlunit:test'>" + + "<foo xsi:type='p1:Foo'" + + " xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'" + + "/></bar>"); + Document d2 = + documentForString("<bar><foo xsi:type='p1:Foo'" + + " xmlns:p1='urn:xmlunit:test'" + + " xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'" + + "/></bar>"); + DOMDifferenceEngine d = new DOMDifferenceEngine(); + DiffExpecter ex = new DiffExpecter(ComparisonType.ATTR_VALUE); + d.addDifferenceListener(ex); + d.setDifferenceEvaluator(DifferenceEvaluators.DefaultStopWhenDifferent); + assertEquals(ComparisonResult.EQUAL, + d.compareNodes(d1, new XPathContext(), + d2, new XPathContext())); + } + + @Test public void xsiNil() { + Document d1 = + documentForString("<foo xsi:nil='true'" + + " xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'" + + "/>"); + Document d2 = + documentForString("<foo xsi:nil='false'" + + " xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'" + + "/>"); + DOMDifferenceEngine d = new DOMDifferenceEngine(); + DiffExpecter ex = new DiffExpecter(ComparisonType.ATTR_VALUE); + d.addDifferenceListener(ex); + d.setDifferenceEvaluator(DifferenceEvaluators.DefaultStopWhenDifferent); + assertEquals(ComparisonResult.CRITICAL, + d.compareNodes(d1, new XPathContext(), + d2, new XPathContext())); + } + + private Document documentForString(String s) { + return Convert.toDocument(Input.fromMemory(s).build()); + } } Modified: trunk/xmlunit/src/tests/java-core/net/sf/xmlunit/diff/XPathContextTest.java =================================================================== --- trunk/xmlunit/src/tests/java-core/net/sf/xmlunit/diff/XPathContextTest.java 2013-02-03 08:35:12 UTC (rev 504) +++ trunk/xmlunit/src/tests/java-core/net/sf/xmlunit/diff/XPathContextTest.java 2013-02-03 09:41:49 UTC (rev 505) @@ -102,6 +102,15 @@ assertEquals("/foo[1]/@bar", ctx.getXPath()); } + @Test public void singleAttribute() { + XPathContext ctx = new XPathContext(); + ctx.setChildren(Linqy.singleton(new Element("foo"))); + ctx.navigateToChild(0); + ctx.addAttribute(new QName("bar")); + ctx.navigateToAttribute(new QName("bar")); + assertEquals("/foo[1]/@bar", ctx.getXPath()); + } + @Test public void mixed() { ArrayList<XPathContext.NodeInfo> l = new ArrayList<XPathContext.NodeInfo>(); l.add(new Text()); @@ -203,4 +212,4 @@ private static class CDATA extends NonElement { public short getType() { return Node.CDATA_SECTION_NODE; } } -} \ No newline at end of file +} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |