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); } }
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); } }
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); } }
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); } }
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); } }
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); } } }
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); } } }
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); } }
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); } }
private XmlAttribute[] GetNonSpecialAttributes(ReaderWithState r) { ArrayList l = new ArrayList(); int length = r.Reader.AttributeCount; if (length > 0) { XmlDocument doc = new XmlDocument(); r.Reader.MoveToFirstAttribute(); for (int i = 0; i < length; i++) { XmlAttribute a = doc.CreateAttribute(r.Reader.Name, r.Reader.NamespaceURI); if (!IsXMLNSAttribute(a)) { a.Value = r.Reader.Value; l.Add(a); } r.Reader.MoveToNextAttribute(); } } return((XmlAttribute[])l.ToArray(typeof(XmlAttribute))); }
private XmlAttribute[] GetNonSpecialAttributes(ReaderWithState r) { ArrayList l = new ArrayList(); int length = r.Reader.AttributeCount; if (length > 0) { XmlDocument doc = new XmlDocument(); r.Reader.MoveToFirstAttribute(); for (int i = 0; i < length; i++) { XmlAttribute a = doc.CreateAttribute(r.Reader.Name, r.Reader.NamespaceURI); if (!IsXMLNSAttribute(a)) { a.Value = r.Reader.Value; l.Add(a); } r.Reader.MoveToNextAttribute(); } } return (XmlAttribute[]) l.ToArray(typeof (XmlAttribute)); }