From: <bo...@us...> - 2008-03-13 17:08:49
|
Revision: 249 http://xmlunit.svn.sourceforge.net/xmlunit/?rev=249&view=rev Author: bodewig Date: 2008-03-13 10:08:43 -0700 (Thu, 13 Mar 2008) Log Message: ----------- Add a simplistic DifferenceListener that uses a tolerance when comparing numbers Modified Paths: -------------- trunk/xmlunit/src/java/org/custommonkey/xmlunit/examples/CaseInsensitiveDifferenceListener.java trunk/xmlunit/src/java/org/custommonkey/xmlunit/examples/TextDifferenceListenerBase.java Added Paths: ----------- trunk/xmlunit/src/java/org/custommonkey/xmlunit/examples/FloatingPointTolerantDifferenceListener.java trunk/xmlunit/tests/java/org/custommonkey/xmlunit/examples/test_FloatingPointTolerantDifferenceListener.java Modified: trunk/xmlunit/src/java/org/custommonkey/xmlunit/examples/CaseInsensitiveDifferenceListener.java =================================================================== --- trunk/xmlunit/src/java/org/custommonkey/xmlunit/examples/CaseInsensitiveDifferenceListener.java 2008-03-12 16:57:59 UTC (rev 248) +++ trunk/xmlunit/src/java/org/custommonkey/xmlunit/examples/CaseInsensitiveDifferenceListener.java 2008-03-13 17:08:43 UTC (rev 249) @@ -60,6 +60,7 @@ DifferenceListener.RETURN_IGNORE_DIFFERENCE_NODES_IDENTICAL; } } - return DifferenceListener.RETURN_ACCEPT_DIFFERENCE; + // some string is null, delegate + return super.textualDifference(d); } } \ No newline at end of file Added: trunk/xmlunit/src/java/org/custommonkey/xmlunit/examples/FloatingPointTolerantDifferenceListener.java =================================================================== --- trunk/xmlunit/src/java/org/custommonkey/xmlunit/examples/FloatingPointTolerantDifferenceListener.java (rev 0) +++ trunk/xmlunit/src/java/org/custommonkey/xmlunit/examples/FloatingPointTolerantDifferenceListener.java 2008-03-13 17:08:43 UTC (rev 249) @@ -0,0 +1,73 @@ +/* +****************************************************************** +Copyright (c) 2008, Jeff Martin, Tim Bacon +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + * Neither the name of the xmlunit.sourceforge.net nor the names + of its contributors may be used to endorse or promote products + derived from this software without specific prior written + permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. + +****************************************************************** +*/ +package org.custommonkey.xmlunit.examples; + +import org.custommonkey.xmlunit.Difference; +import org.custommonkey.xmlunit.DifferenceListener; + +/** + * Expects texts to be floating point numbers and treats them as + * identical if they only differ by a given tolerance value (or less). + */ +public class FloatingPointTolerantDifferenceListener + extends TextDifferenceListenerBase { + + private final double tolerance; + + public FloatingPointTolerantDifferenceListener(DifferenceListener delegateTo, + double tolerance) { + super(delegateTo); + this.tolerance = tolerance; + } + + protected int textualDifference(Difference d) { + String control = d.getControlNodeDetail().getValue(); + String test = d.getTestNodeDetail().getValue(); + if (control != null && test != null) { + try { + double controlVal = Double.parseDouble(control); + double testVal = Double.parseDouble(test); + return Math.abs(controlVal - testVal) < tolerance + ? DifferenceListener.RETURN_IGNORE_DIFFERENCE_NODES_IDENTICAL + : DifferenceListener.RETURN_ACCEPT_DIFFERENCE; + } catch (NumberFormatException nfe) { + // ignore, delegate to nested DifferenceListener + } + } + // no numbers or null, delegate + return super.textualDifference(d); + } +} \ No newline at end of file Property changes on: trunk/xmlunit/src/java/org/custommonkey/xmlunit/examples/FloatingPointTolerantDifferenceListener.java ___________________________________________________________________ Name: svn:eol-style + native Modified: trunk/xmlunit/src/java/org/custommonkey/xmlunit/examples/TextDifferenceListenerBase.java =================================================================== --- trunk/xmlunit/src/java/org/custommonkey/xmlunit/examples/TextDifferenceListenerBase.java 2008-03-12 16:57:59 UTC (rev 248) +++ trunk/xmlunit/src/java/org/custommonkey/xmlunit/examples/TextDifferenceListenerBase.java 2008-03-13 17:08:43 UTC (rev 249) @@ -1,6 +1,6 @@ /* ****************************************************************** -Copyright (c) 2006-2008, Jeff Martin, Tim Bacon +Copyright (c) 2008, Jeff Martin, Tim Bacon All rights reserved. Redistribution and use in source and binary forms, with or without Added: trunk/xmlunit/tests/java/org/custommonkey/xmlunit/examples/test_FloatingPointTolerantDifferenceListener.java =================================================================== --- trunk/xmlunit/tests/java/org/custommonkey/xmlunit/examples/test_FloatingPointTolerantDifferenceListener.java (rev 0) +++ trunk/xmlunit/tests/java/org/custommonkey/xmlunit/examples/test_FloatingPointTolerantDifferenceListener.java 2008-03-13 17:08:43 UTC (rev 249) @@ -0,0 +1,84 @@ +/* +****************************************************************** +Copyright (c) 2008, Jeff Martin, Tim Bacon +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + * Neither the name of the xmlunit.sourceforge.net nor the names + of its contributors may be used to endorse or promote products + derived from this software without specific prior written + permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. + +****************************************************************** +*/ +package org.custommonkey.xmlunit.examples; + +import java.util.Locale; +import junit.framework.TestCase; + +import org.custommonkey.xmlunit.Diff; +import org.custommonkey.xmlunit.Difference; +import org.custommonkey.xmlunit.DifferenceListener; +import org.w3c.dom.Node; + +public class test_FloatingPointTolerantDifferenceListener extends TestCase { + + public void testFloatingPointTolerance() throws Exception { + String control = "<foo value=\"2.718281828\"/>"; + String test = "<foo value=\"2.71\"/>"; + Diff d = new Diff(control, test); + + FloatingPointTolerantDifferenceListener c = + new FloatingPointTolerantDifferenceListener(new DifferenceListener() { + public int differenceFound(Difference d) { + fail("differenceFound shouldn't get invoked, but" + + " was with type " + d.getId()); + return -42; + } + public void skippedComparison(Node c, Node t) { + fail("skippedComparison shouldn't get invoked"); + } + }, 1e-2); + + d.overrideDifferenceListener(c); + assertTrue(d.identical()); + + c = new FloatingPointTolerantDifferenceListener(new DifferenceListener() { + public int differenceFound(Difference d) { + fail("differenceFound shouldn't get invoked, but" + + " was with type " + d.getId()); + return -42; + } + public void skippedComparison(Node c, Node t) { + fail("skippedComparison shouldn't get invoked"); + } + }, 1e-3); + + d = new Diff(control, test); + d.overrideDifferenceListener(c); + assertFalse(d.identical()); + } + +} \ No newline at end of file Property changes on: trunk/xmlunit/tests/java/org/custommonkey/xmlunit/examples/test_FloatingPointTolerantDifferenceListener.java ___________________________________________________________________ Name: svn:eol-style + native This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |