From: <bo...@us...> - 2010-09-13 11:37:15
|
Revision: 470 http://xmlunit.svn.sourceforge.net/xmlunit/?rev=470&view=rev Author: bodewig Date: 2010-09-13 11:37:08 +0000 (Mon, 13 Sep 2010) Log Message: ----------- don't match test nodes more than once Modified Paths: -------------- trunk/xmlunit/src/main/java-core/net/sf/xmlunit/diff/DOMDifferenceEngine.java.xml trunk/xmlunit/src/main/net-core/diff/DOMDifferenceEngine.xml trunk/xmlunit/src/tests/java-legacy/org/custommonkey/xmlunit/test_Diff.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-09-13 11:25:11 UTC (rev 469) +++ trunk/xmlunit/src/main/java-core/net/sf/xmlunit/diff/DOMDifferenceEngine.java.xml 2010-09-13 11:37:08 UTC (rev 470) @@ -333,7 +333,8 @@ controlContext.navigateToChild(i); try { Match testMatch = findMatchingNode(controlList.get(i), testList, - lastMatch.index); + lastMatch.index, + unmatchedTestIndexes); if (testMatch != null) { ]]></literal> testContext.navigateToChild(testMatch.index); @@ -460,14 +461,21 @@ private Match findMatchingNode(final Node searchFor, final List<Node> searchIn, - final int indexOfLastMatch) { + final int indexOfLastMatch, + final Set<Integer> availableIndexes) { final int searchSize = searchIn.size(); for (int i = indexOfLastMatch + 1; i < searchSize; i++) { + if (!availableIndexes.contains(Integer.valueOf(i))) { + continue; + } if (nodesMatch(searchFor, searchIn.get(i))) { return new Match(searchIn.get(i), i); } } for (int i = 0; i < indexOfLastMatch; i++) { + if (!availableIndexes.contains(Integer.valueOf(i))) { + continue; + } if (nodesMatch(searchFor, searchIn.get(i))) { return new Match(searchIn.get(i), i); } Modified: trunk/xmlunit/src/main/net-core/diff/DOMDifferenceEngine.xml =================================================================== --- trunk/xmlunit/src/main/net-core/diff/DOMDifferenceEngine.xml 2010-09-13 11:25:11 UTC (rev 469) +++ trunk/xmlunit/src/main/net-core/diff/DOMDifferenceEngine.xml 2010-09-13 11:37:08 UTC (rev 470) @@ -368,7 +368,8 @@ Match lastMatch = new Match(null, -1); for (int i = 0; i < controlList.Count; i++) { Match testMatch = FindMatchingNode(controlList[i], testList, - lastMatch.Index); + lastMatch.Index, + unmatchedTestIndexes); controlContext.NavigateToChild(i); try { if (testMatch != null) { @@ -492,14 +493,22 @@ private Match FindMatchingNode(XmlNode searchFor, IList<XmlNode> searchIn, - int indexOfLastMatch) { + int indexOfLastMatch, + IDictionary<int, object> + availableIndexes) { int searchSize = searchIn.Count; for (int i = indexOfLastMatch + 1; i < searchSize; i++) { + if (!availableIndexes.ContainsKey(i)) { + continue; + } if (NodesMatch(searchFor, searchIn[i])) { return new Match(searchIn[i], i); } } for (int i = 0; i < indexOfLastMatch; i++) { + if (!availableIndexes.ContainsKey(i)) { + continue; + } if (NodesMatch(searchFor, searchIn[i])) { return new Match(searchIn[i], i); } Modified: trunk/xmlunit/src/tests/java-legacy/org/custommonkey/xmlunit/test_Diff.java =================================================================== --- trunk/xmlunit/src/tests/java-legacy/org/custommonkey/xmlunit/test_Diff.java 2010-09-13 11:25:11 UTC (rev 469) +++ trunk/xmlunit/src/tests/java-legacy/org/custommonkey/xmlunit/test_Diff.java 2010-09-13 11:37:08 UTC (rev 470) @@ -941,7 +941,7 @@ /** * @see https://sourceforge.net/tracker/?func=detail&aid=2807167&group_id=23187&atid=377768 */ - public void NOtestIssue2807167() throws Exception { + public void testIssue2807167() throws Exception { String test = "<tag>" + "<child amount=\"100\" />" + "<child amount=\"100\" />" + This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |