public void FillInObservesElementIndexing()
        {
            XmlDocumentAlterer docAlter = new XmlDocumentAlterer();
            Expression         xpath1   = new Expression("/root/a[1]/b");
            Expression         xpath2   = new Expression("/root/a[2]/c");

            docAlter.FillIn(xpath1);
            docAlter.FillIn(xpath2);
            Assert.AreEqual("root", docAlter.Document.DocumentElement.Name);
            Assert.AreEqual(2, docAlter.Document.DocumentElement.ChildNodes.Count);
            Assert.AreEqual("a", docAlter.Document.DocumentElement.ChildNodes[0].Name);
            Assert.AreEqual("b", docAlter.Document.DocumentElement.ChildNodes[0].FirstChild.Name);
            Assert.AreEqual("a", docAlter.Document.DocumentElement.ChildNodes[1].Name);
            Assert.AreEqual("c", docAlter.Document.DocumentElement.ChildNodes[1].FirstChild.Name);
        }
        public void FillInInvalidNodeFails()
        {
            XmlDocumentAlterer docAlterer = new XmlDocumentAlterer();
            Expression         xpath1     = new Expression("/root/a/@b/c");

            docAlterer.FillIn(xpath1);
        }
        public void FillInCreatesNodes()
        {
            XmlDocumentAlterer docAlter = new XmlDocumentAlterer();
            Expression         xpath    = new Expression("/root");

            docAlter.FillIn(xpath);
            Assert.AreEqual("root", docAlter.Document.DocumentElement.Name);
        }
        public void FillInWorksForAttributes()
        {
            XmlDocumentAlterer docAlter = new XmlDocumentAlterer();
            Expression         xpath    = new Expression("/root/@attr");

            docAlter.FillIn(xpath);
            Assert.AreEqual("root", docAlter.Document.DocumentElement.Name);
            Assert.AreEqual("attr", docAlter.Document.DocumentElement.Attributes[0].Name);
        }
        public void FillInAssumesPredicates()
        {
            XmlDocumentAlterer docAlter = new XmlDocumentAlterer();
            Expression         xpath    = new Expression("/root/a[@id=3]/b");

            docAlter.FillIn(xpath);
            Assert.AreEqual("root", docAlter.Document.DocumentElement.Name);
            Assert.AreEqual("a", docAlter.Document.DocumentElement.FirstChild.Name);
            Assert.AreEqual("id", docAlter.Document.DocumentElement.FirstChild.Attributes[0].Name);
            Assert.AreEqual("3", docAlter.Document.DocumentElement.FirstChild.Attributes[0].Value);
            Assert.AreEqual("b", docAlter.Document.DocumentElement.FirstChild.FirstChild.Name);
        }
        public void FillInWorksSeveralLevelsDeep()
        {
            XmlDocumentAlterer docAlter = new XmlDocumentAlterer();
            Expression         xpath    = new Expression("/root/a/b/c/d");

            docAlter.FillIn(xpath);
            Assert.AreEqual("root", docAlter.Document.DocumentElement.Name);
            Assert.AreEqual("a", docAlter.Document.DocumentElement.FirstChild.Name);
            Assert.AreEqual("b", docAlter.Document.DocumentElement.FirstChild.FirstChild.Name);
            Assert.AreEqual("c", docAlter.Document.DocumentElement.FirstChild.FirstChild.FirstChild.Name);
            Assert.AreEqual("d", docAlter.Document.DocumentElement.FirstChild.FirstChild.FirstChild.FirstChild.Name);
        }
        public void AddingANamespaceAddsItToTheDocument()
        {
            XmlDocumentAlterer docAlterer = new XmlDocumentAlterer();

            docAlterer.AddNamespace("ns0", "http://www.ns0.com");
            docAlterer.FillIn(new Expression("/root/a/b/c"));
            docAlterer.FillIn(new Expression("/root/a/b/d"));
            docAlterer.FillIn(new Expression("/root/a/b/e"));
            docAlterer.FillIn(new Expression("/root/a/f/g"));
            docAlterer.FillIn(new Expression("/root/a/f/h"));
            docAlterer.FillIn(new Expression("/root/a/f/i"));
        }