public override XElement Parse(ITagProcessor parentProcessor, XElement startElement) { this.ValidateStartTag(startElement, TagName); var endRepeater = TryGetRequiredTag(startElement, EndTagName); var itemsSource = startElement.GetExpression(); if (string.IsNullOrEmpty(itemsSource)) { throw new Exception(MessageStrings.ItemsAreEmpty); } IEnumerable<XElement> elementsBetween = TraverseUtils.ElementsBetween(startElement, endRepeater).ToList(); var repeaterTag = new RepeaterTag { Source = itemsSource, StartRepeater = startElement, EndRepeater = endRepeater, MakeElementCallback = MakeElementCallback }; var repeaterProcessor = new RepeaterProcessor { RepeaterTag = repeaterTag, }; if (elementsBetween.Any()) { this.GoDeeper(repeaterProcessor, elementsBetween.First()); } parentProcessor.AddProcessor(repeaterProcessor); return endRepeater; }
public void TestParse() { var expectedTableProcessor = new TableProcessor(); var expectedIfProcessor = new IfProcessor(); expectedIfProcessor.AddProcessor(new TextProcessor()); expectedTableProcessor.AddProcessor(new TextProcessor()); expectedTableProcessor.AddProcessor(expectedIfProcessor); var expectedRepeaterProcessor = new RepeaterProcessor(); expectedRepeaterProcessor.AddProcessor(new TextProcessor()); var expectedRootProcessor = new RootProcessor(); expectedRootProcessor.AddProcessor(expectedTableProcessor); expectedRootProcessor.AddProcessor(expectedRepeaterProcessor); var actualRootProcessor = new RootProcessor(); generalParser.Parse(actualRootProcessor, this.doc.Root); Assert.AreEqual(2, actualRootProcessor.Processors.Count); var actualInnerRootProcessors = new List<ITagProcessor>(actualRootProcessor.Processors); Assert.AreEqual(typeof(TableProcessor), actualInnerRootProcessors[0].GetType()); Assert.AreEqual(typeof(RepeaterProcessor), actualInnerRootProcessors[1].GetType()); var actualTableProcessor = actualInnerRootProcessors[0]; Assert.AreEqual(2, actualTableProcessor.Processors.Count); var actualInnerTableProcessors = new List<ITagProcessor>(actualTableProcessor.Processors); Assert.AreEqual(typeof(TextProcessor), actualInnerTableProcessors[0].GetType()); Assert.AreEqual(typeof(IfProcessor), actualInnerTableProcessors[1].GetType()); Assert.AreEqual(0, actualInnerTableProcessors[0].Processors.Count); var actualIfProcessor = actualInnerTableProcessors[1]; Assert.AreEqual(1, actualIfProcessor.Processors.Count); var actualInnerIfProcessors = new List<ITagProcessor>(actualIfProcessor.Processors); Assert.AreEqual(typeof(TextProcessor), actualInnerIfProcessors[0].GetType()); var actualRepeaterProcessor = actualInnerRootProcessors[1]; Assert.AreEqual(1,actualRepeaterProcessor.Processors.Count); var actualInnerRepeaterProcessors = new List<ITagProcessor>(actualRepeaterProcessor.Processors); Assert.AreEqual(typeof(TextProcessor), actualInnerRepeaterProcessors[0].GetType()); Assert.AreEqual(0, actualInnerRepeaterProcessors[0].Processors.Count); }
public void TestParseRepeaterNested() { using (var docStream = AssemblyResourceHelper.GetResourceStream(this, "text_in_repeater_document.xml")) { this.doc = XDocument.Load(docStream); var expectedRootProcessor = new RootProcessor(); var expectedRepeaterProcessor = new RepeaterProcessor(); expectedRepeaterProcessor.AddProcessor(new TextProcessor()); var expectedRepeaterProcessors = new List<ITagProcessor>(expectedRepeaterProcessor.Processors); expectedRootProcessor.AddProcessor(expectedRepeaterProcessor); var expectedRootProcessors = new List<ITagProcessor>(expectedRootProcessor.Processors); var actualRoot = new RootProcessor(); this.generalParser.Parse(actualRoot, this.doc.Root); var actualRootProcessors = new List<ITagProcessor>(actualRoot.Processors); Assert.AreEqual(actualRootProcessors.Count, expectedRootProcessors.Count); Assert.AreEqual(expectedRootProcessors[0].GetType(), actualRootProcessors[0].GetType()); Assert.AreEqual(expectedRootProcessors[0].Processors.Count, actualRootProcessors[0].Processors.Count); var actualRepeaterProcessors = new List<ITagProcessor>(actualRootProcessors[0].Processors); Assert.AreEqual(expectedRepeaterProcessors[0].GetType(), actualRepeaterProcessors[0].GetType()); Assert.AreEqual(expectedRepeaterProcessors.Count, actualRepeaterProcessors.Count); } }
public void TestProcessWithLock() { var processor = new RepeaterProcessor(); processor.DataReader = this.dataReader.Object; processor.RepeaterTag = new RepeaterTag { Source = this.xPath, StartRepeater = this.startRepeater, EndRepeater = this.endRepeater, MakeElementCallback = MakeElementCallback }; processor.CreateDynamicContentTags = true; processor.Process(); var dynamicContentTags = this.body.Elements(WordMl.SdtName) .Where( element => element.Element(WordMl.SdtPrName) .Element(WordMl.TagName) .Attribute(WordMl.ValAttributeName) .Value.ToLower() .Equals("dynamiccontent")); Assert.IsTrue(dynamicContentTags.Any()); Assert.AreEqual(1, dynamicContentTags.Count()); this.CheckRepeaterContent(dynamicContentTags.First().Element(WordMl.SdtContentName)); }
public void TestProcess() { var processor = new RepeaterProcessor(); processor.DataReader = this.dataReader.Object; processor.RepeaterTag = new RepeaterTag { Source = this.xPath, StartRepeater = this.startRepeater, EndRepeater = this.endRepeater, MakeElementCallback = MakeElementCallback }; processor.Process(); var dynamicContentTags = this.body.Elements(WordMl.SdtName) .Where( element => element.Element(WordMl.SdtPrName) .Element(WordMl.TagName) .Attribute(WordMl.ValAttributeName) .Value.ToLower() .Equals("dynamiccontent")); Assert.IsFalse(dynamicContentTags.Any()); Console.WriteLine(body.ToString()); this.CheckRepeaterContent(this.body); }