示例#1
0
        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");
        }