protected virtual PDFStyleMatcher AssertMatcher() { if (null == this._match) { this._fromApplied = true; if (string.IsNullOrEmpty(this.AppliedID) && string.IsNullOrEmpty(this.AppliedClass) && (null == this.AppliedType)) { return(new PDFStyleCatchAllMatcher()); } var stack = new PDFStyleSelector() { AppliedClass = string.IsNullOrEmpty(this.AppliedClass) ? null : new PDFStyleClassSelector(this.AppliedClass), AppliedID = this.AppliedID, AppliedType = this.AppliedType, AppliedState = this.AppliedState, Placement = StylePlacement.Any }; this._match = new PDFStyleMatcher(stack); } return(this._match); }
public void StyleMatcherParentAncestor_Test() { string test = ".blue > .red"; var parsed = PDFStyleMatcher.Parse(test); Assert.IsNotNull(parsed); Assert.IsNotNull(parsed.Selector); //Because these are parsed in reverse order, then they need to be Assert.AreEqual(".red", parsed.Selector.AppliedClass.ToString(), ".Class .Class Test failed"); Assert.IsNull(parsed.Selector.AppliedID, ".Class .Class Test failed"); Assert.IsNull(parsed.Selector.AppliedElement, ".Class .Class Test failed"); Assert.IsNotNull(parsed.Selector.Ancestor, ".Class.Class Test failed"); Assert.IsTrue(parsed.Selector.HasAncestor, ".Class .Class Test failed"); Assert.AreEqual(parsed.Selector.Placement, StylePlacement.Any, ".Class .Class Test failed"); Assert.AreEqual(".blue", parsed.Selector.Ancestor.AppliedClass.ToString(), ".Class .Class Test failed"); Assert.IsNull(parsed.Selector.Ancestor.AppliedID, ".Class .Class Test failed"); Assert.IsNull(parsed.Selector.Ancestor.AppliedElement, ".Class .Class Test failed"); Assert.AreEqual(parsed.Selector.Ancestor.Placement, StylePlacement.DirectParent, ".Class .Class Test failed"); Assert.AreEqual(test, parsed.ToString(), "ToString did not match"); test = "doc:Page.red > doc:Div#MyDiv"; parsed = PDFStyleMatcher.Parse(test); Assert.IsNotNull(parsed); Assert.IsNotNull(parsed.Selector); //Because these are parsed in reverse order, then they need to be Assert.IsNull(parsed.Selector.AppliedClass, "Element.Class > Element.ID Test failed"); Assert.AreEqual("MyDiv", parsed.Selector.AppliedID, "Element.Class > Element.ID Test failed"); Assert.AreEqual("doc:Div", parsed.Selector.AppliedElement, "Element.Class > Element.ID Test failed"); Assert.IsNotNull(parsed.Selector.Ancestor, "Element.Class > Element.ID Test failed"); Assert.IsTrue(parsed.Selector.HasAncestor, "Element.Class > Element.ID Test failed"); Assert.AreEqual(parsed.Selector.Placement, StylePlacement.Any, "Element.Class > Element.ID Test failed"); Assert.AreEqual(".red", parsed.Selector.Ancestor.AppliedClass.ToString(), "Element.Class > Element.ID Test failed"); Assert.IsNull(parsed.Selector.Ancestor.AppliedID, "Element.Class > Element.ID Test failed"); Assert.AreEqual("doc:Page", parsed.Selector.Ancestor.AppliedElement, "Element.Class > Element.ID Test failed"); Assert.AreEqual(parsed.Selector.Ancestor.Placement, StylePlacement.DirectParent, "Element.Class > Element.ID Test failed"); Assert.AreEqual(test, parsed.ToString(), "ToString did not match"); test = "doc:Page.red > doc:Table doc:Cell.alt.green doc:Date"; parsed = PDFStyleMatcher.Parse(test); Assert.IsNotNull(parsed); Assert.IsNotNull(parsed.Selector); PDFStyleSelector match = parsed.Selector; //Because these are parsed in reverse order, then they need to be read in that order //doc:Date Assert.IsNull(match.AppliedClass, "Element.Class > Element Element.Class Element Test failed"); Assert.IsNull(match.AppliedID, "Element.Class > Element Element.Class Element Test failed"); Assert.AreEqual("doc:Date", match.AppliedElement, "Element.Class > Element Element.Class Element Test failed"); Assert.IsNotNull(match.Ancestor, "Element.Class > Element Element.Class Element Test failed"); Assert.IsTrue(match.HasAncestor, "Element.Class > Element Element.Class Element Test failed"); Assert.AreEqual(match.Placement, StylePlacement.Any, "Element.Class > Element Element.Class Element Test failed"); //doc:Cell.alt match = match.Ancestor; Assert.AreEqual(".alt.green", match.AppliedClass.ToString(), "Element.Class > Element Element.Class Element Test failed"); Assert.IsNull(match.AppliedID, "Element.Class > Element Element.Class Element Test failed"); Assert.AreEqual("doc:Cell", match.AppliedElement, "Element.Class > Element Element.Class Element Test failed"); Assert.IsNotNull(match.Ancestor, "Element.Class > Element Element.Class Element Test failed"); Assert.IsTrue(match.HasAncestor, "Element.Class > Element Element.Class Element Test failed"); Assert.AreEqual(match.Placement, StylePlacement.Any, "Element.Class > Element Element.Class Element Test failed"); //doc.Table match = match.Ancestor; Assert.IsNull(match.AppliedClass, "Element.Class > Element Element.Class Element Test failed"); Assert.IsNull(match.AppliedID, "Element.Class > Element Element.Class Element Test failed"); Assert.AreEqual("doc:Table", match.AppliedElement, "Element.Class > Element Element.Class Element Test failed"); Assert.IsNotNull(match.Ancestor, "Element.Class > Element Element.Class Element Test failed"); Assert.IsTrue(match.HasAncestor, "Element.Class > Element Element.Class Element Test failed"); Assert.AreEqual(match.Placement, StylePlacement.Any, "Element.Class > Element Element.Class Element Test failed"); //doc:Page.red > match = match.Ancestor; Assert.AreEqual(".red", match.AppliedClass.ToString(), "Element.Class > Element Element.Class Element Test failed"); Assert.IsNull(match.AppliedID, "Element.Class > Element Element.Class Element Test failed"); Assert.AreEqual("doc:Page", match.AppliedElement, "Element.Class > Element Element.Class Element Test failed"); Assert.AreEqual(match.Placement, StylePlacement.DirectParent, "Element.Class > Element Element.Class Element Test failed"); Assert.AreEqual(test, parsed.ToString(), "ToString did not match"); }