From: <bo...@us...> - 2010-08-31 08:36:58
|
Revision: 441 http://xmlunit.svn.sourceforge.net/xmlunit/?rev=441&view=rev Author: bodewig Date: 2010-08-31 08:36:50 +0000 (Tue, 31 Aug 2010) Log Message: ----------- a first-wins combiner for DifferenceEvaluators Modified Paths: -------------- trunk/xmlunit/src/main/java-core/net/sf/xmlunit/diff/DifferenceEvaluators.java trunk/xmlunit/src/main/net-core/diff/DifferenceEvaluators.cs Added Paths: ----------- trunk/xmlunit/src/tests/java-core/net/sf/xmlunit/diff/DifferenceEvaluatorsTest.java trunk/xmlunit/src/tests/net-core/diff/DifferenceEvaluatorsTest.cs 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-08-30 07:57:04 UTC (rev 440) +++ trunk/xmlunit/src/main/java-core/net/sf/xmlunit/diff/DifferenceEvaluators.java 2010-08-31 08:36:50 UTC (rev 441) @@ -101,4 +101,24 @@ } }; } + + /** + * Combines multiple DifferenceEvaluators so that the first one + * that changes the outcome wins. + */ + public static DifferenceEvaluator + first(final DifferenceEvaluator... evaluators) { + return new DifferenceEvaluator() { + public ComparisonResult evaluate(Comparison comparison, + ComparisonResult orig) { + for (DifferenceEvaluator ev : evaluators) { + ComparisonResult evaluated = ev.evaluate(comparison, orig); + if (evaluated != orig) { + return evaluated; + } + } + return orig; + } + }; + } } Modified: trunk/xmlunit/src/main/net-core/diff/DifferenceEvaluators.cs =================================================================== --- trunk/xmlunit/src/main/net-core/diff/DifferenceEvaluators.cs 2010-08-30 07:57:04 UTC (rev 440) +++ trunk/xmlunit/src/main/net-core/diff/DifferenceEvaluators.cs 2010-08-31 08:36:50 UTC (rev 441) @@ -96,5 +96,22 @@ ? ComparisonResult.CRITICAL : r; }; } + + /// <summary> + /// Combines multiple DifferenceEvaluators so that the first + /// one that changes the outcome wins. + /// </summary> + public static DifferenceEvaluator + First(params DifferenceEvaluator[] evaluators) { + return delegate(Comparison comparison, ComparisonResult orig) { + foreach (DifferenceEvaluator ev in evaluators) { + ComparisonResult evaluated = ev(comparison, orig); + if (evaluated != orig) { + return evaluated; + } + } + return orig; + }; + } } } \ No newline at end of file Added: trunk/xmlunit/src/tests/java-core/net/sf/xmlunit/diff/DifferenceEvaluatorsTest.java =================================================================== --- trunk/xmlunit/src/tests/java-core/net/sf/xmlunit/diff/DifferenceEvaluatorsTest.java (rev 0) +++ trunk/xmlunit/src/tests/java-core/net/sf/xmlunit/diff/DifferenceEvaluatorsTest.java 2010-08-31 08:36:50 UTC (rev 441) @@ -0,0 +1,56 @@ +/* + 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 DifferenceEvaluatorsTest { + + private static class Evaluator implements DifferenceEvaluator { + private boolean called = false; + private final ComparisonResult ret; + private Evaluator(ComparisonResult ret) { + this.ret = ret; + } + public ComparisonResult evaluate(Comparison comparison, + ComparisonResult orig) { + called = true; + return ret; + } + } + + @Test public void emptyFirstJustWorks() { + DifferenceEvaluator d = DifferenceEvaluators.first(); + assertEquals(ComparisonResult.CRITICAL, + d.evaluate(null, ComparisonResult.CRITICAL)); + } + + @Test public void firstChangeWinsInFirst() { + Evaluator e1 = new Evaluator(ComparisonResult.CRITICAL); + Evaluator e2 = new Evaluator(ComparisonResult.EQUAL); + DifferenceEvaluator d = DifferenceEvaluators.first(e1, e2); + assertEquals(ComparisonResult.CRITICAL, + d.evaluate(null, ComparisonResult.DIFFERENT)); + assertTrue(e1.called); + assertFalse(e2.called); + e1.called = false; + assertEquals(ComparisonResult.EQUAL, + d.evaluate(null, ComparisonResult.CRITICAL)); + assertTrue(e1.called); + assertTrue(e2.called); + } + +} Property changes on: trunk/xmlunit/src/tests/java-core/net/sf/xmlunit/diff/DifferenceEvaluatorsTest.java ___________________________________________________________________ Added: svn:eol-style + native Added: trunk/xmlunit/src/tests/net-core/diff/DifferenceEvaluatorsTest.cs =================================================================== --- trunk/xmlunit/src/tests/net-core/diff/DifferenceEvaluatorsTest.cs (rev 0) +++ trunk/xmlunit/src/tests/net-core/diff/DifferenceEvaluatorsTest.cs 2010-08-31 08:36:50 UTC (rev 441) @@ -0,0 +1,59 @@ +/* + 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 NUnit.Framework; + +namespace net.sf.xmlunit.diff { + + [TestFixture] + public class DifferenceEvaluatorsTest { + + internal class Evaluator { + internal bool Called = false; + private readonly ComparisonResult ret; + internal Evaluator(ComparisonResult ret) { + this.ret = ret; + } + public ComparisonResult Evaluate(Comparison comparison, + ComparisonResult orig) { + Called = true; + return ret; + } + } + + [Test] + public void EmptyFirstJustWorks() { + DifferenceEvaluator d = DifferenceEvaluators.First(); + Assert.AreEqual(ComparisonResult.CRITICAL, + d(null, ComparisonResult.CRITICAL)); + } + + [Test] + public void FirstChangeWinsInFirst() { + Evaluator e1 = new Evaluator(ComparisonResult.CRITICAL); + Evaluator e2 = new Evaluator(ComparisonResult.EQUAL); + DifferenceEvaluator d = DifferenceEvaluators.First(e1.Evaluate, + e2.Evaluate); + Assert.AreEqual(ComparisonResult.CRITICAL, + d(null, ComparisonResult.DIFFERENT)); + Assert.IsTrue(e1.Called); + Assert.IsFalse(e2.Called); + e1.Called = false; + Assert.AreEqual(ComparisonResult.EQUAL, + d(null, ComparisonResult.CRITICAL)); + Assert.IsTrue(e1.Called); + Assert.IsTrue(e2.Called); + } + } +} Property changes on: trunk/xmlunit/src/tests/net-core/diff/DifferenceEvaluatorsTest.cs ___________________________________________________________________ Added: svn:eol-style + native This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |