コード例 #1
0
        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);
                    }
                }
            });
        }
コード例 #2
0
        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);
                        }
                    }
                });
        }
コード例 #3
0
        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);
                    }
                }
            });
        }
コード例 #4
0
        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);
            }
        }
コード例 #5
0
        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;
                            }
                        }
                    }
                }
            });
        }
コード例 #6
0
        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);
            }
        }
コード例 #7
0
        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;
                                }
                            }
                        }
                    }
                });
        }
コード例 #8
0
        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);
                        }
                    }
                });
        }