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