/// <summary>
 /// The "standard" difference evaluator which decides which
 /// differences make two XML documents really different and which
 /// still leave them similar.
 /// </summary>
 public static ComparisonResult Default(Comparison comparison,
                                        ComparisonResult outcome)
 {
     if (outcome == ComparisonResult.DIFFERENT) {
         switch (comparison.Type) {
         case ComparisonType.NODE_TYPE:
             XmlNodeType control =
                 (XmlNodeType) comparison.ControlDetails.Value;
             XmlNodeType test =
                 (XmlNodeType) comparison.TestDetails.Value;
             if ((control == XmlNodeType.Text && test == XmlNodeType.CDATA)
                 ||
                 (control == XmlNodeType.CDATA && test == XmlNodeType.Text)
                 ) {
                 outcome = ComparisonResult.SIMILAR;
             }
             break;
         case ComparisonType.XML_ENCODING:
         case ComparisonType.HAS_DOCTYPE_DECLARATION:
         case ComparisonType.DOCTYPE_SYSTEM_ID:
         case ComparisonType.SCHEMA_LOCATION:
         case ComparisonType.NO_NAMESPACE_SCHEMA_LOCATION:
         case ComparisonType.NAMESPACE_PREFIX:
         case ComparisonType.ATTR_VALUE_EXPLICITLY_SPECIFIED:
         case ComparisonType.CHILD_NODELIST_SEQUENCE:
             outcome = ComparisonResult.SIMILAR;
             break;
         }
     }
     return outcome;
 }
 /// <summary>
 /// Difference evaluator that just echos the result passed in.
 /// </summary>
 public static ComparisonResult Accept(Comparison comparison,
                                       ComparisonResult outcome)
 {
     return outcome;
 }
 public void ComparisonPerformed(Comparison comparison,
                                 ComparisonResult outcome)
 {
     Assert.Greater(expectedInvocations, invoked);
     invoked++;
     Assert.AreEqual(type, comparison.Type);
     Assert.AreEqual(ComparisonResult.CRITICAL, outcome);
     if (withXPath) {
         Assert.AreEqual(controlXPath,
                         comparison.ControlDetails.XPath,
                         "Control XPath");
         Assert.AreEqual(testXPath,
                         comparison.TestDetails.XPath,
                         "Test XPath");
     }
 }
 /// <summary>
 /// Compares the detail values for object equality, lets the
 /// difference evaluator evaluate the result, notifies all
 /// listeners and returns the outcome.
 /// </summary>
 protected internal ComparisonResult Compare(Comparison comp)
 {
     object controlValue = comp.ControlDetails.Value;
     object testValue = comp.TestDetails.Value;
     bool equal = controlValue == null
         ? testValue == null : controlValue.Equals(testValue);
     ComparisonResult initial =
         equal ? ComparisonResult.EQUAL : ComparisonResult.DIFFERENT;
     ComparisonResult altered = DifferenceEvaluator(comp, initial);
     FireComparisonPerformed(comp, altered);
     return altered;
 }
 private void FireComparisonPerformed(Comparison comp,
                                      ComparisonResult outcome)
 {
     if (ComparisonListener != null) {
         ComparisonListener(comp, outcome);
     }
     if (outcome == ComparisonResult.EQUAL && MatchListener != null) {
         MatchListener(comp, outcome);
     } else if (outcome != ComparisonResult.EQUAL
                && DifferenceListener != null) {
         DifferenceListener(comp, outcome);
     }
 }
 public ComparisonResult Evaluate(Comparison comparison,
                                  ComparisonResult orig)
 {
     Called = true;
     return ret;
 }
 private ComparisonResult ResultGrabber(Comparison comparison,
                                        ComparisonResult outcome)
 {
     this.outcome = outcome;
     return outcome;
 }