public void Generate(XElement startTableElement, XElement endTableElement, DataReader dataReader) { var coreParser = new CoreTableParser(true); var tag = coreParser.Parse(startTableElement, endTableElement); var processor = new TableProcessor() { DataReader = dataReader, TableTag = tag }; processor.Process(); }
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); }
/// <summary> /// Do parsing /// </summary> public override XElement Parse(ITagProcessor parentProcessor, XElement startElement) { this.ValidateStartTag(startElement, "Table"); if (parentProcessor == null) { throw new ArgumentNullException(); } var endTableTag = this.TryGetRequiredTags(startElement, "EndTable").First(); var coreParser = new CoreTableParser(false); var tag = coreParser.Parse(startElement, endTableTag); var processor = new TableProcessor { TableTag = tag }; if (TraverseUtils.ElementsBetween(startElement, endTableTag).Any()) { this.GoDeeper(processor, TraverseUtils.ElementsBetween(startElement, endTableTag).First()); } parentProcessor.AddProcessor(processor); return endTableTag; }
public void TestParseTableNested() { using (var docStream = AssemblyResourceHelper.GetResourceStream(this, "if_in_table_document.xml")) { doc = XDocument.Load(docStream); var expectedRootProcessor = new RootProcessor(); var expectedTableProcessor = new TableProcessor(); expectedTableProcessor.AddProcessor(new IfProcessor()); expectedRootProcessor.AddProcessor(expectedTableProcessor); var expectedTableProcessors = new List<ITagProcessor>(expectedTableProcessor.Processors); var expectedRootProcessors = new List<ITagProcessor>(expectedRootProcessor.Processors); var actualRootProcessor = new RootProcessor(); generalParser.Parse(actualRootProcessor, doc.Root); var actualRootProcessors = new List<ITagProcessor>(actualRootProcessor.Processors); Assert.AreEqual(expectedRootProcessors.Count, actualRootProcessors.Count); Assert.AreEqual(expectedRootProcessors[0].GetType(), actualRootProcessors[0].GetType()); var actualTableProcessors = new List<ITagProcessor>(expectedRootProcessors[0].Processors); Assert.AreEqual(expectedTableProcessors.Count, actualTableProcessors.Count); Assert.AreEqual(expectedTableProcessors[0].GetType(), actualTableProcessors[0].GetType()); Assert.AreEqual(expectedTableProcessors[0].Processors.Count, actualTableProcessors[0].Processors.Count); } }
public void TestProcessNullReader() { var processor = new TableProcessor { TableTag = this.GetTableTag() }; processor.Process(); }
public void TestProcessNullTag() { var processor = new TableProcessor(); processor.DataReader = this.dataReader; processor.Process(); }
public void TestProcessItemIfCells() { XElement root; using (var docStream = AssemblyResourceHelper.GetResourceStream(this, "TableItemIfsTest.xml")) { var document = XDocument.Load(docStream); root = document.Root.Element(WordMl.BodyName); } var tableTag = this.GetTableTag(root); XDocument data; using (var docStream = AssemblyResourceHelper.GetResourceStream(this, "TableItemIfsData.xml")) { data = XDocument.Load(docStream); } Func<XElement, IEnumerable<TableElement>> MakeTableElementCallback = element => { var cells = element.Descendants(WordMl.TableCellName).ToList(); ICollection<TableElement> tableElements = new Collection<TableElement>(); foreach (var cell in cells) { var cellTags = cell.Descendants(WordMl.SdtName).ToList(); var firtsIf = new TableElement { IsIndex = false, IsItem = false, IsItemIf = true, StartTag = cellTags[0], EndTag = cellTags[2], Expression = cellTags[0].Value, TagElements = new TableElement[] { new TableElement { IsIndex = false, IsItemIf = false, IsItem = true, StartTag = cellTags[1], Expression = cellTags[1].Value, } } }; var secondIf = new TableElement { IsIndex = false, IsItem = false, IsItemIf = true, StartTag = cellTags[3], EndTag = cellTags[5], Expression = cellTags[3].Value, TagElements = new TableElement[] { new TableElement { IsIndex = false, IsItemIf = false, IsItem = true, StartTag = cellTags[4], Expression = cellTags[4].Value, } } }; tableElements.Add(firtsIf); tableElements.Add(secondIf); } return tableElements; }; tableTag.MakeTableElementCallback = MakeTableElementCallback; var tableProcessor = new TableProcessor { TableTag = tableTag, DataReader = DataReaderFactory.CreateReader(data) }; tableProcessor.Process(); var expectedTableStructure = new[] { new[] { "#", "Certificate", "Date" }, new[] { string.Empty, string.Empty, "Issue", "Expiration" }, new[] { "1", "2", "3", "4" }, new[] { "row1 - value1", "row1 - value2", "row1 - value3", "row1 - value4" }, new[] { "row2 - value1", "row2 - value2", "row2 - value3", "row2 - value4" }, new[] { "row3 - value1", "row3 - value2", "row3 - value3", "row3 - value4" }, new[] { "row4 - value1", "row4 - value2", "row4 - value3", "row4 - value4" }, new[] { "row5 - value1", "row5 - value2", "row5 - value3", "row5 - value4" }, new[] { "This", "row", "stays", "untouched" }, }; var rows = tableTag.Table.Elements(WordMl.TableRowName).ToList(); Assert.AreEqual(expectedTableStructure.Count(), rows.Count()); int rowIndex = 0; foreach (var row in rows) { var expectedRow = expectedTableStructure[rowIndex]; var cellsInRow = row.Elements(WordMl.TableCellName).ToList(); Assert.AreEqual(expectedRow.Count(), cellsInRow.Count()); int cellIndex = 0; foreach (var cell in cellsInRow) { Assert.AreEqual(expectedRow[cellIndex], cell.Value); cellIndex++; } rowIndex++; } /* var tagsBetween = tableTag.TagTable.ElementsAfterSelf().Where(element => element.IsBefore(tableTag.TagContent)); Assert.IsFalse(tagsBetween.Any()); tagsBetween = tableTag.TagEndContent.ElementsAfterSelf().Where(element => element.IsBefore(tableTag.TagEndTable)); Assert.IsFalse(tagsBetween.Any());*/ this.ValidateTagsRemoved(root); }
public void TestProcess() { var tableTag = this.GetTableTag(); Func<XElement, IEnumerable<TableElement>> MakeTableElementCallback = element => { var tags = element.Descendants(WordMl.SdtName).ToList(); var index = tags.Find( e => e.Element(WordMl.SdtPrName) .Element(WordMl.TagName) .Attribute(WordMl.ValAttributeName) .Value.ToLower() .Equals("itemindex")); var subject = tags.Find( e => e.Element(WordMl.SdtPrName) .Element(WordMl.TagName) .Attribute(WordMl.ValAttributeName) .Value.ToLower() .Equals("itemtext") && e.Element(WordMl.SdtContentName).Value == "./Subject"); var issueDate = tags.Find( e => e.Element(WordMl.SdtPrName) .Element(WordMl.TagName) .Attribute(WordMl.ValAttributeName) .Value.ToLower() .Equals("itemtext") && e.Element(WordMl.SdtContentName).Value == "./IssueDate"); var expireDate = tags.Find( e => e.Element(WordMl.SdtPrName) .Element(WordMl.TagName) .Attribute(WordMl.ValAttributeName) .Value.ToLower() .Equals("itemtext") && e.Element(WordMl.SdtContentName).Value == "./ExpireDate"); var itemIf = tags.Find( e => e.Element(WordMl.SdtPrName) .Element(WordMl.TagName) .Attribute(WordMl.ValAttributeName) .Value.ToLower() .Equals("itemif")); var endItemIf = tags.Find( e => e.Element(WordMl.SdtPrName) .Element(WordMl.TagName) .Attribute(WordMl.ValAttributeName) .Value.ToLower() .Equals("enditemif")); IEnumerable<TableElement> tableElements = new TableElement[] { new TableElement { IsIndex = true, IsItem = false, IsItemIf = false, StartTag = index, }, new TableElement { IsItemIf = true, IsIndex = false, IsItem = false, StartTag = itemIf, EndTag = endItemIf, Expression = "./HasSubject", TagElements = new TableElement[] { new TableElement { IsItem = true, IsIndex = false, IsItemIf = false, StartTag = subject, Expression = "./Subject" } } }, new TableElement { IsItem = true, IsIndex = false, IsItemIf = false, StartTag = issueDate, Expression = "./IssueDate" }, new TableElement { IsItem = true, IsIndex = false, IsItemIf = false, StartTag = expireDate, Expression = "./ExpireDate" } }; return tableElements; }; tableTag.MakeTableElementCallback = MakeTableElementCallback; var tableProcessor = new TableProcessor { TableTag = tableTag, DataReader = this.dataReader }; tableProcessor.Process(); Assert.IsFalse(this.documentRoot.Elements(WordMl.SdtName).Any(element => element.IsSdt())); var expectedTableStructure = new[] { new[] { "#", "Certificate", "Date" }, new[] { string.Empty, string.Empty, "Issue", "Expiration" }, new[] { "1", "2", "3", "4" }, new[] { "1", "Subject1", "01.04.2014", "01.10.2015" }, new[] { "2", "Subject2", "01.03.2014", "01.09.2015" }, new[] { "3", "Subject3", "01.01.2011", "01.01.2012" }, new[] { "This", "row", "stays", "untouched" }, }; var rows = tableTag.Table.Elements(WordMl.TableRowName).ToList(); Assert.AreEqual(expectedTableStructure.Count(), rows.Count()); int rowIndex = 0; foreach (var row in rows) { var expectedRow = expectedTableStructure[rowIndex]; var cellsInRow = row.Elements(WordMl.TableCellName).ToList(); Assert.AreEqual(expectedRow.Count(), cellsInRow.Count()); int cellIndex = 0; foreach (var cell in cellsInRow) { Assert.AreEqual(expectedRow[cellIndex], cell.Value); cellIndex++; } rowIndex++; } /* var tagsBetween = tableTag.TagTable.ElementsAfterSelf().Where(element => element.IsBefore(tableTag.TagContent)); Assert.IsFalse(tagsBetween.Any()); tagsBetween = tableTag.TagEndContent.ElementsAfterSelf().Where(element => element.IsBefore(tableTag.TagEndTable)); Assert.IsFalse(tagsBetween.Any());*/ this.ValidateTagsRemoved(this.documentRoot); }
public void TestProcessWithStaticCells() { XElement root; using (var docStream = AssemblyResourceHelper.GetResourceStream(this, "TableProcessorWithStaticCellsTest.xml")) { var document = XDocument.Load(docStream); root = document.Root.Element(WordMl.BodyName); } var tableTag = this.GetTableTag(root); Func<XElement, IEnumerable<TableElement>> MakeTableElementCallback = element => { var tags = element.Descendants(WordMl.SdtName).ToList(); var index = tags.Find( e => e.Element(WordMl.SdtPrName) .Element(WordMl.TagName) .Attribute(WordMl.ValAttributeName) .Value.ToLower() .Equals("itemindex")); var issueDate = tags.Find( e => e.Element(WordMl.SdtPrName) .Element(WordMl.TagName) .Attribute(WordMl.ValAttributeName) .Value.ToLower() .Equals("itemtext") && e.Element(WordMl.SdtContentName).Value == "./IssueDate"); IEnumerable<TableElement> tableElements = new TableElement[] { new TableElement { IsIndex = true, IsItem = false, IsItemIf = false, StartTag = index, }, new TableElement { IsItem = true, IsIndex = false, IsItemIf = false, StartTag = issueDate, Expression = "./IssueDate" }, }; return tableElements; }; tableTag.MakeTableElementCallback = MakeTableElementCallback; var tableProcessor = new TableProcessor { TableTag = tableTag, DataReader = this.dataReader }; tableProcessor.Process(); var expectedTableStructure = new[] { new[] { "#", "Certificate", "Date" }, new[] { string.Empty, string.Empty, "Issue", "Expiration" }, new[] { "1", "2", "3", "4" }, new[] { "1", "First static text", "01.04.2014", "Second static text" }, new[] { "2", "First static text", "01.03.2014", "Second static text" }, new[] { "3", "First static text", "01.01.2011", "Second static text" }, new[] { "This", "row", "stays", "untouched" }, }; var rows = tableTag.Table.Elements(WordMl.TableRowName).ToList(); Assert.AreEqual(expectedTableStructure.Count(), rows.Count()); int rowIndex = 0; foreach (var row in rows) { var expectedRow = expectedTableStructure[rowIndex]; var cellsInRow = row.Elements(WordMl.TableCellName).ToList(); Assert.AreEqual(expectedRow.Count(), cellsInRow.Count()); int cellIndex = 0; foreach (var cell in cellsInRow) { Assert.AreEqual(expectedRow[cellIndex], cell.Value); cellIndex++; } rowIndex++; } this.ValidateTagsRemoved(root); }