public void DomReaderBasicTest()
        {
            bool      moved             = false;
            string    paragraphOuterXml = "<w:p w:rsidP=\"001\" xmlns:w=\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\"><w:r><w:t>Run Text.</w:t><w:t>Run 2.</w:t></w:r></w:p>";
            Paragraph para = new Paragraph(paragraphOuterXml);

            OpenXmlReader targetReader = OpenXmlReader.Create(para);

            targetReader.Read();

            TestReaderOnParagraph(targetReader);

            moved = targetReader.Read(); // should be false

            Assert.False(moved);
            Assert.True(targetReader.EOF);
            Assert.True(string.IsNullOrEmpty(targetReader.GetText()));

            targetReader.Close();

            targetReader = OpenXmlReader.Create(para);
            targetReader.Read();

            moved = targetReader.ReadFirstChild(); // read to <w:r>

            OpenXmlElement element = targetReader.LoadCurrentElement();

            // at the end of the run
            Assert.False(targetReader.EOF);
            Assert.NotNull(targetReader.Attributes);
            Assert.Empty(targetReader.Attributes);
            Assert.False(targetReader.HasAttributes);
            Assert.False(targetReader.IsStartElement);
            Assert.True(targetReader.IsEndElement);
            Assert.False(targetReader.IsMiscNode);
            Assert.Equal(typeof(Run), targetReader.ElementType);
            Assert.True(string.IsNullOrEmpty(targetReader.GetText()));
            Assert.False(targetReader.GetLineInfo().HasLineInfo());

            // loaded element is Run
            Assert.NotNull(element);
            Assert.IsType <Run>(element);

            Run run = (Run)element;

            Assert.Equal("Run Text.", (run.FirstChild as Text).Text);
            Assert.Equal("Run 2.", (run.LastChild as Text).Text);

            targetReader.Close();
        }
        public void PartReaderMiscNodeTest()
        {
            string partText = "<w:document xmlns:w=\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\">" +
                              "<!-- start body -->" +
                              "<w:body>" +
                              "<w:p w:rsidP=\"001\"><w:r><w:t>Run Text.</w:t><w:t>Run 2.</w:t></w:r></w:p>" +
                              "</w:body>" +
                              "</w:document>";

            UTF8Encoding utf8Encoding = new UTF8Encoding();
            Stream       stream       = new MemoryStream(utf8Encoding.GetBytes(partText), false);

            //======== new test with a new reader ========
            OpenXmlReader reader = OpenXmlReader.Create(stream, true); // read misc nodes

            Assert.False(reader.EOF);

            bool moved = reader.Read();

            Assert.True(moved);
            Assert.False(reader.EOF);
            Assert.Equal(0, reader.Depth);
            Assert.True(reader.IsStartElement);
            Assert.False(reader.IsEndElement);
            Assert.False(reader.IsMiscNode);
            Assert.True(reader.GetLineInfo().HasLineInfo());
            Assert.Equal(1, reader.GetLineInfo().LineNumber);
            Assert.Equal(2, reader.GetLineInfo().LinePosition);

            moved = reader.Read();
            Assert.True(moved);
            Assert.False(reader.EOF);
            Assert.Equal(1, reader.Depth);
            Assert.False(reader.IsStartElement);
            Assert.False(reader.IsEndElement);
            Assert.True(reader.IsMiscNode);
            Assert.True(reader.GetLineInfo().HasLineInfo());
            Assert.Equal(1, reader.GetLineInfo().LineNumber);
            Assert.Equal(88, reader.GetLineInfo().LinePosition);

            Assert.Equal(string.Empty, reader.Prefix);
            Assert.Equal(string.Empty, reader.NamespaceUri);

            reader.Close();
        }
        public void PartReaderBasicTest()
        {
            string partText = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>" +
                              "<w:document xmlns:w=\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\">" +
                              "<w:body>" +
                              "<w:p w:rsidP=\"001\"><w:r><w:t>Run Text.</w:t><w:t>Run 2.</w:t></w:r></w:p>" +
                              "<w:p w:rsidP=\"001\"><w:r><w:t>Run Text.</w:t><w:t>Run 2.</w:t></w:r></w:p>" +
                              "</w:body>" +
                              "</w:document>";

            UTF8Encoding utf8Encoding = new UTF8Encoding();
            Stream       stream       = new MemoryStream(utf8Encoding.GetBytes(partText), false);

            OpenXmlReader targetReader = OpenXmlReader.Create(stream);

            targetReader.Read();

            Assert.False(targetReader.EOF);
            Assert.NotNull(targetReader.Attributes);
            Assert.Empty(targetReader.Attributes);
            Assert.False(targetReader.HasAttributes);
            Assert.True(targetReader.IsStartElement);
            Assert.False(targetReader.IsEndElement);
            Assert.False(targetReader.IsMiscNode);
            Assert.True(string.IsNullOrEmpty(targetReader.GetText()));
            Assert.Equal(typeof(Document), targetReader.ElementType);

            targetReader.ReadFirstChild(); // to <w:body>
            targetReader.Read();           // to <w:p>

            TestReaderOnParagraph(targetReader);

            Assert.False(targetReader.EOF);
            Assert.NotNull(targetReader.Attributes);
            Assert.Empty(targetReader.Attributes);
            Assert.False(targetReader.HasAttributes);
            Assert.False(targetReader.IsStartElement);
            Assert.True(targetReader.IsEndElement);
            Assert.False(targetReader.IsMiscNode);
            Assert.Equal(typeof(Paragraph), targetReader.ElementType);
            Assert.True(string.IsNullOrEmpty(targetReader.GetText()));
            Assert.True(targetReader.GetLineInfo().HasLineInfo());
            Assert.Equal(1, targetReader.GetLineInfo().LineNumber);
            Assert.Equal(216, targetReader.GetLineInfo().LinePosition);

            targetReader.ReadNextSibling(); // next <w:p>

            OpenXmlElement element = targetReader.LoadCurrentElement();

            // at </w:p>
            Assert.False(targetReader.EOF);
            Assert.NotNull(targetReader.Attributes);
            Assert.Empty(targetReader.Attributes);
            Assert.False(targetReader.HasAttributes);
            Assert.False(targetReader.IsStartElement);
            Assert.True(targetReader.IsEndElement);
            Assert.False(targetReader.IsMiscNode);
            Assert.Equal(typeof(Paragraph), targetReader.ElementType);
            Assert.True(string.IsNullOrEmpty(targetReader.GetText()));
            Assert.Equal(1, targetReader.GetLineInfo().LineNumber);
            Assert.Equal(295, targetReader.GetLineInfo().LinePosition);

            // loaded element is Run
            Assert.NotNull(element);
            Assert.IsType <Paragraph>(element);

            Run run = (Run)element.FirstChild;

            Assert.Equal("Run Text.", (run.FirstChild as Text).Text);
            Assert.Equal("Run 2.", (run.LastChild as Text).Text);

            targetReader.Close();
        }