示例#1
0
        public void AddStylesheet_ShouldSetStyleClassPositions()
        {
            var stylesheet1 = "#id .class1 element { color: #fff; } #id .class2 element { color: #aaa; }";
            var stylesheet2 = "#id .class3 element { color: #000; } #id .class2 element { color: #bbb; }";
            var parser      = new CssParser();

            parser.AddStyleSheet(stylesheet1);
            parser.AddStyleSheet(stylesheet2);

            Assert.AreEqual(1, parser.Styles.Values[0].Position);
            Assert.AreEqual(4, parser.Styles.Values[1].Position);
            Assert.AreEqual(3, parser.Styles.Values[2].Position);
        }
        public void AddStylesheet_ContainsUnsupportedMediaQuery_ShouldStrip()
        {
            var stylesheet = "@media print { div { width: 90%; } }";

            var parser = new CssParser();
            parser.AddStyleSheet(stylesheet);

            Assert.AreEqual(0, parser.Styles.Count);
        }
        public void AddStylesheet_ContainsAtCharsetRule_ShouldStripRuleAndParseStylesheet()
        {
            var stylesheet = "@charset utf-8; div { width: 100% }";

            var parser = new CssParser();
            parser.AddStyleSheet(stylesheet);

            Assert.IsTrue(parser.Styles.ContainsKey("div"));
        }
        public void AddStylesheet_ContainsAtPageSection_ShouldStripRuleAndParseStylesheet()
        {
            var stylesheet = "@page :first { margin: 2in 3in; } div { width: 100% }";

            var parser = new CssParser();
            parser.AddStyleSheet(stylesheet);

            Assert.AreEqual(1, parser.Styles.Count);
            Assert.IsTrue(parser.Styles.ContainsKey("div"));
        }
示例#5
0
        public void AddStylesheet_ContainsUnsupportedMediaQuery_ShouldStrip()
        {
            var stylesheet = "@media print { div { width: 90%; } }";

            var parser = new CssParser();

            parser.AddStyleSheet(stylesheet);

            Assert.AreEqual(0, parser.Styles.Count);
        }
示例#6
0
        public void AddStylesheet_ContainsAtCharsetRule_ShouldStripRuleAndParseStylesheet()
        {
            var stylesheet = "@charset utf-8; div { width: 100% }";

            var parser = new CssParser();

            parser.AddStyleSheet(stylesheet);

            Assert.IsTrue(parser.Styles.ContainsKey("div"));
        }
        public void AddStylesheet_ContainsImportStatement_ShouldStripOutImportStatement()
        {
            var stylesheet = "@import url(http://google.com/stylesheet); div { width : 600px; }";
            var parser = new CssParser();
            parser.AddStyleSheet(stylesheet);
            Assert.AreEqual(1, parser.Styles.Count);

            Assert.IsTrue(parser.Styles.ContainsKey("div"));
            Assert.AreEqual("600px", parser.Styles["div"].Attributes["width"].Value);
        }
示例#8
0
        public void AddStylesheet_ContainsImportStatement_ShouldStripOutImportStatement()
        {
            var stylesheet = "@import url(http://google.com/stylesheet); div { width : 600px; }";
            var parser     = new CssParser();

            parser.AddStyleSheet(stylesheet);
            Assert.Equal(1, parser.Styles.Count);

            Assert.True(parser.Styles.ContainsKey("div"));
            Assert.Equal("600px", parser.Styles["div"].Attributes["width"].Value);
        }
示例#9
0
        public void AddStylesheet_ContainsDoubleQuotes_ShouldParseStylesheet()
        {
            var stylesheet = "a { color: #fff; font-family: \"Segoe UI\", Verdana, Arial, sans-serif; text-decoration: underline; }";
            var parser     = new CssParser();

            parser.AddStyleSheet(stylesheet);

            Assert.NotNull(parser.Styles["a"]);
            Assert.NotNull(parser.Styles["a"].Attributes["font-family"]);
            Assert.Equal(3, parser.Styles["a"].Attributes.Count);
        }
示例#10
0
        public void AddStylesheet_ContainsMultipleImportStatement_ShouldStripOutImportStatements()
        {
            var stylesheet = "@import url(http://google.com/stylesheet); @import url(http://jquery.com/stylesheet1); @import url(http://amazon.com/stylesheet2); div { width : 600px; }";
            var parser     = new CssParser();

            parser.AddStyleSheet(stylesheet);
            Assert.Single(parser.Styles);

            Assert.True(parser.Styles.ContainsKey("div"));
            Assert.Equal("600px", parser.Styles["div"].Attributes["width"].Value);
        }
示例#11
0
        public void AddStylesheet_ContainsImportStatementTest_ShouldStripOutImportStatement()
        {
            var stylesheet = "@import 'stylesheet.css'; div { width : 600px; }";
            var parser     = new CssParser();

            parser.AddStyleSheet(stylesheet);
            Assert.AreEqual(1, parser.Styles.Count);

            Assert.IsTrue(parser.Styles.ContainsKey("div"));
            Assert.AreEqual("600px", parser.Styles["div"].Attributes["width"].Value);
        }
示例#12
0
        public void AddStylesheet_ContainsMediaQuery_ShouldExtract()
        {
            var stylesheet = "@media print { div { width: 90%; } }";

            var parser = new CssParser();

            parser.AddStyleSheet(stylesheet);

            Assert.AreEqual(0, parser.Styles.Count);
            Assert.AreEqual(stylesheet, parser.MediaQueries[0]);
        }
示例#13
0
        public void AddStylesheet_ContainsMuiltpleImportStatementWithMediaQuerys_ShouldStripOutImportStatements()
        {
            var stylesheet = "@import url(http://google.com/stylesheet) mobile; @import url(http://google.com/stylesheet) mobile; @import url(http://google.com/stylesheet) mobile; div { width : 600px; }";
            var parser     = new CssParser();

            parser.AddStyleSheet(stylesheet);
            Assert.AreEqual(1, parser.Styles.Count);

            Assert.IsTrue(parser.Styles.ContainsKey("div"));
            Assert.AreEqual("600px", parser.Styles["div"].Attributes["width"].Value);
        }
示例#14
0
        public void AddStylesheet_ContainsAtPageSection_ShouldStripRuleAndParseStylesheet()
        {
            var stylesheet = "@page :first { margin: 2in 3in; } div { width: 100% }";

            var parser = new CssParser();

            parser.AddStyleSheet(stylesheet);

            Assert.AreEqual(1, parser.Styles.Count);
            Assert.IsTrue(parser.Styles.ContainsKey("div"));
        }
        public void AddStylesheet_ContainsSupportedMediaQuery_ShouldParseQueryRules()
        {
            var stylesheet = "@media only screen { div { width: 600px; } }";

            var parser = new CssParser();
            parser.AddStyleSheet(stylesheet);

            Assert.AreEqual(1, parser.Styles.Count);

            Assert.IsTrue(parser.Styles.ContainsKey("div"));
            Assert.AreEqual("600px", parser.Styles["div"].Attributes["width"].Value);
        }
示例#16
0
        public void AddStylesheet_ContainsSupportedMediaQuery_ShouldParseQueryRules()
        {
            var stylesheet = "@media only screen { div { width: 600px; } }";

            var parser = new CssParser();

            parser.AddStyleSheet(stylesheet);

            Assert.AreEqual(1, parser.Styles.Count);

            Assert.IsTrue(parser.Styles.ContainsKey("div"));
            Assert.AreEqual("600px", parser.Styles["div"].Attributes["width"].Value);
        }
示例#17
0
        public void AddStylesheet_ContainsEncodedImage()
        {
            var stylesheet = @"#logo
{
	content: url('data:image/jpeg; base64,R0lGODlhAQABAIAAAAUEBAAAACwAAAAAAQABAAACAkQBADs=');
	max-width: 200px;
	height: auto;
}";
            var parser     = new CssParser();

            parser.AddStyleSheet(stylesheet);
            var attributes = parser.Styles["#logo"].Attributes;
        }
示例#18
0
        public void AddStylesheet_ContainsMultipleMediaQueries_ShouldExtractMediaQueries()
        {
            var stylesheet = "@media print { div { width:100% } } @media only screen and (max-width:620px) { div { width: 100% } }";

            var parser = new CssParser();

            parser.AddStyleSheet(stylesheet);

            Assert.AreEqual(2, parser.MediaQueries.Count);

            Assert.AreEqual("@media print { div { width:100% } }", parser.MediaQueries[0]);
            Assert.AreEqual("@media only screen and (max-width:620px) { div { width: 100% } }", parser.MediaQueries[1]);
        }
示例#19
0
        private CssParser GetParser(string bootstrapThemeFolder, string swatch)
        {
            // cache CssParser
            if (_swatch != swatch)
            {
                _parser = null;
            }

            if (_parser == null)
            {
                _parser = new CssParser();
                _parser.AddStyleSheet(BuildPath(Path.Combine(bootstrapThemeFolder, cascade), swatch, "site", "css"));
            }
            return(_parser);
        }
        public void AddStylesheet_ContainsUnsupportedMediaQueryAndNormalRules_ShouldStripMediaQueryAndParseRules()
        {
            var stylesheet = "div { width: 600px; } @media only screen and (max-width:620px) { div { width: 100% } } p { font-family: serif; }";

            var parser = new CssParser();
            parser.AddStyleSheet(stylesheet);

            Assert.AreEqual(2, parser.Styles.Count);

            Assert.IsTrue(parser.Styles.ContainsKey("div"));
            Assert.AreEqual("600px", parser.Styles["div"].Attributes["width"].Value);

            Assert.IsTrue(parser.Styles.ContainsKey("p"));
            Assert.AreEqual("serif", parser.Styles["p"].Attributes["font-family"].Value);
        }
示例#21
0
        public void AddStylesheet_ContainsUnsupportedMediaQueryAndNormalRules_ShouldStripMediaQueryAndParseRules()
        {
            var stylesheet = "div { width: 600px; } @media only screen and (max-width:620px) { div { width: 100% } } p { font-family: serif; }";

            var parser = new CssParser();

            parser.AddStyleSheet(stylesheet);

            Assert.AreEqual(2, parser.Styles.Count);

            Assert.IsTrue(parser.Styles.ContainsKey("div"));
            Assert.AreEqual("600px", parser.Styles["div"].Attributes["width"].Value);

            Assert.IsTrue(parser.Styles.ContainsKey("p"));
            Assert.AreEqual("serif", parser.Styles["p"].Attributes["font-family"].Value);
        }
示例#22
0
        public void AddStylesheet_ShouldKeepTheRightOrderOfCssAttributes()
        {
            var stylesheet1 = @"
				.my-div { background-color: blue; }
				.my-div { background: red; }
				.my-div { background-color: green; }
			"            ;
            var parser      = new CssParser();

            parser.AddStyleSheet(stylesheet1);

            Assert.Single(parser.Styles);

            var attributes = parser.Styles.First().Value.Attributes.ToArray();

            Assert.True(attributes[0] is { Key: "background", Value: { Value: "red" } });
示例#23
0
		public void AddStylesheet_ShouldSetStyleClassPositions()
		{
			var stylesheet1 = "#id .class1 element { color: #fff; } #id .class2 element { color: #aaa; }";
			var stylesheet2 = "#id .class3 element { color: #000; } #id .class2 element { color: #bbb; }";
			var parser = new CssParser();

			parser.AddStyleSheet(stylesheet1);
			parser.AddStyleSheet(stylesheet2);

			Assert.AreEqual(1, parser.Styles.Values[0].Position);
			Assert.AreEqual(4, parser.Styles.Values[1].Position);
			Assert.AreEqual(3, parser.Styles.Values[2].Position);
		}
        public void AddStylesheet_ContainsEncodedImage()
        {
            var stylesheet = @"#logo 
{ 
    content: url('data:image/jpeg; base64,R0lGODlhAQABAIAAAAUEBAAAACwAAAAAAQABAAACAkQBADs='); 
    max-width: 200px; 
    height: auto; 
}";
            var parser = new CssParser();
            parser.AddStyleSheet(stylesheet);
            var attributes = parser.Styles["#logo"].Attributes;
        }