public void TestRepeaterNotClosed()
 {
     const string TagName = "EndRepeater";
     var endRepeater = TraverseUtils.TagElement(this.documentRoot, TagName);
     endRepeater.Remove();
     var parser = new RepeaterParser();
     try
     {
         parser.Parse(new TagProcessorMock<RepeaterProcessor>(), this.documentRoot.Descendants(WordMl.SdtName).First());
         Assert.Fail("An exception shoud've been thrown");
     }
     catch (Exception e)
     {
         Assert.AreEqual(string.Format(MessageStrings.TagNotFoundOrEmpty, TagName), e.Message);
     }
 }
        public void TestOkay()
        {
            var parser = new RepeaterParser();
            var tagProcessorMock = new TagProcessorMock<RepeaterProcessor>();
            parser.Parse(tagProcessorMock, this.documentRoot.Descendants(WordMl.SdtName).First());

            var result = tagProcessorMock.InnerProcessor.RepeaterTag;

            var repeaterElements = 
                TraverseUtils.ElementsBetween(result.StartRepeater, result.EndRepeater)
                             .Select(result.MakeElementCallback).ToList();
            Assert.AreEqual(1, repeaterElements.Count);

            var childrenOfFirstElement = repeaterElements.First().Elements.ToList();
            Assert.AreEqual(9, childrenOfFirstElement.Count);
            Assert.AreEqual("./Subject", childrenOfFirstElement[3].Expression);
            Assert.AreEqual(true, childrenOfFirstElement[5].IsIndex);
            Assert.AreEqual("./ExpireDate", childrenOfFirstElement[7].Expression);
            Assert.AreEqual("//test/certificates", result.Source);
        }
        public void TestParseNested()
        {
            var parser = new RepeaterParser();
            var rootProcessor = new RootProcessor();
            parser.Parse(rootProcessor, this.nestedDocumentRoot.Descendants(WordMl.SdtName).First());

            var repeaterProcessor = rootProcessor.Processors.First();
            var result = ((RepeaterProcessor)repeaterProcessor).RepeaterTag;

            var repeaterElements = 
                TraverseUtils.ElementsBetween(result.StartRepeater, result.EndRepeater)
                             .Select(result.MakeElementCallback).ToList();
            Assert.AreEqual(2, repeaterElements.Count);

            var textTag = repeaterElements.First();

            Assert.IsTrue(textTag.XElement.IsSdt());
            Assert.IsTrue(textTag.XElement.IsTag("Text"));

            var repeaterContent = repeaterElements[1].Elements.ToList();

            Assert.AreEqual(10, repeaterContent.Count);
            var textSdt = repeaterContent[3];
            Assert.IsNull(textSdt.Expression);
            Assert.IsTrue(textSdt.XElement.IsSdt());
            Assert.IsTrue(textSdt.XElement.IsTag("Text"));
            Assert.AreEqual("./Subject", repeaterContent[4].Expression);
            Assert.AreEqual(true, repeaterContent[6].IsIndex);
            Assert.AreEqual("./ExpireDate", repeaterContent[8].Expression);
            Assert.AreEqual("//test/certificates", result.Source);

            Assert.IsTrue(repeaterProcessor.Processors.All(p => p is TextProcessor));
            Assert.AreEqual(2, repeaterProcessor.Processors.Count);
        }