public void BufferingReadingTest() { this.CombinatorialEngineProvider.RunCombinations( new bool[] { false, true }, new bool[] { false, true }, (moveToElementBeforeRead, verifyAttributes) => { using (XmlReader baselineReader = XmlReader.Create(new StringReader(TestXml))) { this.expectedXmlBaseUriStack.Clear(); using (XmlReader comparedReader = XmlReader.Create(new StringReader(TestXml))) { BufferingXmlReader bufferingXmlReader = new BufferingXmlReader( comparedReader, /*parentXmlReader*/ null, /*documentBaseUri*/ null, /*disableXmlBase*/ false, ODataConstants.DefaultMaxRecursionDepth, this.Assert); bufferingXmlReader.StartBuffering(); this.VerifyReadersAreEqual(baselineReader, bufferingXmlReader, Int32.MaxValue, moveToElementBeforeRead, verifyAttributes); } } }); }
public void NonBufferingReadingTest() { this.CombinatorialEngineProvider.RunCombinations( new bool[] { false, true }, new bool[] { false, true }, (moveToElementBeforeRead, verifyAttributes) => { using (XmlReader baselineReader = XmlReader.Create(new StringReader(TestXml))) { this.expectedXmlBaseUriStack.Clear(); using (XmlReader comparedReader = XmlReader.Create(new StringReader(TestXml))) { BufferingXmlReader bufferingXmlReader = new BufferingXmlReader( comparedReader, /*parentXmlReader*/ null, /*documentBaseUri*/ null, /*disableXmlBase*/ false, ODataConstants.DefaultMaxRecursionDepth, this.Assert); this.VerifyReadersAreEqual(baselineReader, bufferingXmlReader, Int32.MaxValue, moveToElementBeforeRead, verifyAttributes); } } }); }
public void ReadInnerXmlTest() { var testCases = new[] { new { Xml = TestXml, InterestingElementName = "deep" }, new { Xml = "<foo/>", InterestingElementName = "foo" }, new { Xml = "<foo>some text node</foo>", InterestingElementName = "foo" }, }; this.CombinatorialEngineProvider.RunCombinations( testCases, testCase => { using (XmlReader baselineReader = XmlReader.Create(new StringReader(testCase.Xml))) { this.expectedXmlBaseUriStack.Clear(); using (XmlReader comparedReader = XmlReader.Create(new StringReader(testCase.Xml))) { BufferingXmlReader bufferingXmlReader = new BufferingXmlReader( comparedReader, /*parentXmlReader*/ null, /*documentBaseUri*/ null, /*disableXmlBase*/ false, ODataConstants.DefaultMaxRecursionDepth, this.Assert); while (true) { this.VerifyReadersAreEqual(baselineReader, bufferingXmlReader, 1, false, false); if (testCase.InterestingElementName == null) { break; } else if (baselineReader.NodeType == XmlNodeType.Element && baselineReader.LocalName == testCase.InterestingElementName) { break; } } this.Assert.AreEqual(baselineReader.ReadInnerXml(), bufferingXmlReader.ReadInnerXml(), "ReadInnerXml failed."); this.VerifyReadersAreEqual(baselineReader, bufferingXmlReader, Int32.MaxValue, false, false); } } }); }
public void XmlBaseTest() { string xml = "<root><child xml:base='relative'/></root>"; using (XmlReader baseReader = XmlReader.Create(new StringReader(xml))) { BufferingXmlReader bufferingXmlReader = new BufferingXmlReader( baseReader, /*parentXmlReader*/ null, /*documentBaseUri*/ null, /*disableXmlBase*/ false, ODataConstants.DefaultMaxRecursionDepth, this.Assert); // Move to the root element bufferingXmlReader.Read(); this.Assert.AreEqual(XmlNodeType.Element, bufferingXmlReader.NodeType, "Unexpected node type."); this.Assert.IsNull(bufferingXmlReader.XmlBaseUri, "XmlBaseUri should be null if none is defined."); // Move to the child - should fail since there's a relative xml:base without base URI on it. this.Assert.ExpectedException(() => bufferingXmlReader.Read(), ODataExpectedExceptions.ODataException("ODataAtomDeserializer_RelativeUriUsedWithoutBaseUriSpecified", "relative"), this.ExceptionVerifier); } }
public void BufferingAndNonBufferingReaderTest() { this.CombinatorialEngineProvider.RunCombinations( new bool[] { false, true }, new int[][] { // The arrays will be looped over until the end of the input. Start non-buffering, reads the number, switches to buffering, reads the number and over. new int[] { 3 }, new int[] { 3, 0 }, new int[] { 0, 3, 3, 0 }, new int[] { 1 }, new int[] { 7 }, }, (verifyAttribtues, readCountLoop) => { using (XmlReader comparedReader = XmlReader.Create(new StringReader(TestXml))) { BufferingXmlReader bufferingXmlReader = new BufferingXmlReader( comparedReader, /*parentXmlReader*/ null, /*documentBaseUri*/ null, /*disableXmlBase*/ false, ODataConstants.DefaultMaxRecursionDepth, this.Assert); var countLoop = readCountLoop.EndLessLoop(); bool buffering = false; int nodesConsumed = 0; while (true) { countLoop.MoveNext(); int readCount = countLoop.Current; using (XmlReader baselineReader = XmlReader.Create(new StringReader(TestXml))) { this.expectedXmlBaseUriStack.Clear(); for (int i = 0; i < nodesConsumed; i++) { this.ReadFromBaselineReader(baselineReader); } // Note we have to move to element always, because StartBuffering/StopBuffering is supported only on element boundary. bool moreAvailable = this.VerifyReadersAreEqual(baselineReader, bufferingXmlReader, readCount, true, verifyAttribtues); if (buffering) { bufferingXmlReader.StopBuffering(); buffering = false; } else { nodesConsumed += readCount; if (!moreAvailable) { break; } bufferingXmlReader.StartBuffering(); buffering = true; } } } } }); }