public DiffResultTests()
 {
     _result = new DiffResult();
     _diff = new XmlDiff("<a/>", "<b/>");
     _majorDifference = new Difference(DifferenceType.ELEMENT_TAG_NAME_ID, XmlNodeType.Element,
                                       XmlNodeType.Element);
     _minorDifference = new Difference(DifferenceType.ATTR_SEQUENCE_ID, XmlNodeType.Comment, XmlNodeType.Comment);
 }
Beispiel #2
0
 public DiffResult Compare()
 {
     if (_diffResult == null)
     {
         _diffResult = new DiffResult();
         XmlReader controlReader, testReader;
         controlReader = testReader = null;
         try
         {
             controlReader = CreateXmlReader(controlInput);
             testReader = CreateXmlReader(testInput);
             if (!controlInput.Equals(testInput))
             {
                 
                 Compare(_diffResult, controlReader, testReader);
             }
         }
         finally
         {
             try
             {
                 if (testReader != null)
                 {
                     testReader.Close();
                 }
             }
             finally
             {
                 if (controlReader != null)
                 {
                     controlReader.Close();
                 }
             }
         }
     }
     return _diffResult;
 }
Beispiel #3
0
 private void Compare(DiffResult result, XmlReader controlReader,
                      XmlReader testReader)
 {
     try
     {
         ReaderWithState control = new ReaderWithState(controlReader);
         ReaderWithState test = new ReaderWithState(testReader);
         do
         {
             control.Read();
             test.Read();
             Compare(result, control, test);
         } while (control.HasRead && test.HasRead);
     }
     catch (FlowControlException e)
     {
         Console.Out.WriteLine(e.Message);
     }
 }
Beispiel #4
0
 private void CheckEmptyOrAtEndElement(DiffResult result,
                                       ReaderWithState control,
                                       ReaderWithState test)
 {
     if (control.LastElementWasEmpty)
     {
         if (!test.LastElementWasEmpty)
         {
             CheckEndElement(test, result);
         }
     }
     else
     {
         if (test.LastElementWasEmpty)
         {
             CheckEndElement(control, result);
         }
     }
 }
Beispiel #5
0
 private void CheckEndElement(ReaderWithState reader, DiffResult result)
 {
     bool readResult = reader.Read();
     if (!readResult
         || reader.Reader.NodeType != XmlNodeType.EndElement)
     {
         DifferenceFound(DifferenceType.CHILD_NODELIST_LENGTH_ID, result);
     }
 }
Beispiel #6
0
 private void DifferenceFound(Difference difference, DiffResult result)
 {
     result.DifferenceFound(this, difference);
     if (!ContinueComparison(difference))
     {
         throw new FlowControlException(difference);
     }
 }
Beispiel #7
0
 private void DifferenceFound(DifferenceType differenceType,
                              XmlNodeType controlNodeType,
                              XmlNodeType testNodeType,
                              DiffResult result)
 {
     DifferenceFound(new Difference(differenceType, controlNodeType, testNodeType),
                     result);
 }
Beispiel #8
0
 private void CompareText(DiffResult result, ReaderWithState control,
                          ReaderWithState test)
 {
     string controlText = control.Reader.Value;
     string testText = test.Reader.Value;
     if (!String.Equals(controlText, testText))
     {
         DifferenceFound(DifferenceType.TEXT_VALUE_ID, result);
     }
 }
Beispiel #9
0
 private void DifferenceFound(DifferenceType differenceType, DiffResult result)
 {
     DifferenceFound(new Difference(differenceType), result);
 }
Beispiel #10
0
        private void CompareAttributes(DiffResult result,
                                       XmlAttribute[] controlAttributes,
                                       XmlAttribute[] testAttributes)
        {
            if (!_diffConfiguration.IgnoreAttribute)
            {
                ArrayList unmatchedTestAttributes = new ArrayList();
                unmatchedTestAttributes.AddRange(testAttributes);
                for (int i = 0; i < controlAttributes.Length; ++i)
                {
                    bool controlIsInNs = IsNamespaced(controlAttributes[i]);
                    string controlAttrName =
                        GetUnNamespacedNodeName(controlAttributes[i]);
                    XmlAttribute testAttr = null;
                    if (!controlIsInNs)
                    {
                        testAttr = FindAttributeByName(testAttributes,
                                                       controlAttrName);
                    }
                    else
                    {
                        testAttr = FindAttributeByNameAndNs(testAttributes,
                                                            controlAttrName,
                                                            controlAttributes[i]
                                                                .NamespaceURI);
                    }

                    if (testAttr != null)
                    {
                        unmatchedTestAttributes.Remove(testAttr);
                        if (!_diffConfiguration.IgnoreAttributeOrder
                            && testAttr != testAttributes[i])
                        {
                            DifferenceFound(DifferenceType.ATTR_SEQUENCE_ID,
                                            result);
                        }

                        if (controlAttributes[i].Value != testAttr.Value)
                        {
                            DifferenceFound(DifferenceType.ATTR_VALUE_ID, result);
                        }
                    }
                    else
                    {
                        DifferenceFound(DifferenceType.ATTR_NAME_NOT_FOUND_ID,
                                        result);
                    }
                }
                foreach (XmlAttribute a in unmatchedTestAttributes)
                {
                    DifferenceFound(DifferenceType.ATTR_NAME_NOT_FOUND_ID, result);
                }
            }
        }
Beispiel #11
0
 private void CompareElements(DiffResult result, ReaderWithState control,
                              ReaderWithState test)
 {
     string controlTagName = control.Reader.Name;
     string testTagName = test.Reader.Name;
     if (!String.Equals(controlTagName, testTagName))
     {
         DifferenceFound(DifferenceType.ELEMENT_TAG_NAME_ID, result);
     }
     else
     {
         XmlAttribute[] controlAttributes =
             GetNonSpecialAttributes(control);
         XmlAttribute[] testAttributes = GetNonSpecialAttributes(test);
         if (controlAttributes.Length != testAttributes.Length)
         {
             DifferenceFound(DifferenceType.ELEMENT_NUM_ATTRIBUTES_ID, result);
         }
         CompareAttributes(result, controlAttributes, testAttributes);
     }
 }
Beispiel #12
0
        private void CheckNodeTypes(XmlNodeType controlNodeType,
                                    XmlNodeType testNodeType,
                                    DiffResult result,
                                    ReaderWithState control,
                                    ReaderWithState test)
        {
            ReaderWithState readerToAdvance = null;
            if (controlNodeType.Equals(XmlNodeType.XmlDeclaration))
            {
                readerToAdvance = control;
            }
            else if (testNodeType.Equals(XmlNodeType.XmlDeclaration))
            {
                readerToAdvance = test;
            }

            if (readerToAdvance != null)
            {
                DifferenceFound(DifferenceType.HAS_XML_DECLARATION_PREFIX_ID,
                                controlNodeType, testNodeType, result);
                readerToAdvance.Read();
                CompareNodes(result, control, test);
            }
            else
            {
                DifferenceFound(DifferenceType.NODE_TYPE_ID, controlNodeType,
                                testNodeType, result);
            }
        }
Beispiel #13
0
 private void CompareNodes(DiffResult result, ReaderWithState control,
                           ReaderWithState test)
 {
     XmlNodeType controlNodeType = control.Reader.NodeType;
     XmlNodeType testNodeType = test.Reader.NodeType;
     if (!controlNodeType.Equals(testNodeType))
     {
         CheckNodeTypes(controlNodeType, testNodeType, result,
                        control, test);
     }
     else if (controlNodeType == XmlNodeType.Element)
     {
         CompareElements(result, control, test);
     }
     else if (controlNodeType == XmlNodeType.Text)
     {
         CompareText(result, control, test);
     }
 }
Beispiel #14
0
 private void Compare(DiffResult result, ReaderWithState control,
                      ReaderWithState test)
 {
     if (control.HasRead)
     {
         if (test.HasRead)
         {
             CompareNodes(result, control, test);
             CheckEmptyOrAtEndElement(result, control, test);
         }
         else
         {
             DifferenceFound(DifferenceType.CHILD_NODELIST_LENGTH_ID, result);
         }
     }
 }