using Svg.Css;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using System;
using Svg.ExCSS;
namespace Svg.UnitTests
{
///
///This is a test class for CssQueryTest and is intended
///to contain all CssQueryTest Unit Tests
///
[TestClass()]
public class CssQueryTest
{
private TestContext testContextInstance;
///
///Gets or sets the test context which provides
///information about and functionality for the current test run.
///
public TestContext TestContext
{
get
{
return testContextInstance;
}
set
{
testContextInstance = value;
}
}
#region Additional test attributes
//
//You can use the following additional attributes as you write your tests:
//
//Use ClassInitialize to run code before running the first test in the class
//[ClassInitialize()]
//public static void MyClassInitialize(TestContext testContext)
//{
//}
//
//Use ClassCleanup to run code after all tests in a class have run
//[ClassCleanup()]
//public static void MyClassCleanup()
//{
//}
//
//Use TestInitialize to run code before running each test
//[TestInitialize()]
//public void MyTestInitialize()
//{
//}
//
//Use TestCleanup to run code after each test has run
//[TestCleanup()]
//public void MyTestCleanup()
//{
//}
//
#endregion
private void TestSelectorSpecificity(string selector, int specificity)
{
var parser = new ExCSS.Parser();
var sheet = parser.Parse(selector + " {color:black}");
Assert.AreEqual(specificity, CssQuery.GetSpecificity(sheet.StyleRules[0].Selector));
}
///
///A test for GetSpecificity
///
///Lifted from http://www.smashingmagazine.com/2007/07/27/css-specificity-things-you-should-know/, and http://css-tricks.com/specifics-on-css-specificity/
[TestMethod()]
public void RunSpecificityTests()
{
TestSelectorSpecificity("*", 0x0);
TestSelectorSpecificity("li", 0x10);
TestSelectorSpecificity("li:first-line", 0x20);
TestSelectorSpecificity("ul li", 0x20);
TestSelectorSpecificity("ul ol+li", 0x30);
TestSelectorSpecificity("h1 + *[rel=up]", 0x110);
TestSelectorSpecificity("ul ol li.red", 0x130);
TestSelectorSpecificity("li.red.level", 0x210);
TestSelectorSpecificity("p", 0x010);
TestSelectorSpecificity("div p", 0x020);
TestSelectorSpecificity(".sith", 0x100);
TestSelectorSpecificity("div p.sith", 0x120);
TestSelectorSpecificity("#sith", 0x1000);
TestSelectorSpecificity("body #darkside .sith p", 0x1120);
TestSelectorSpecificity("body #content .data img:hover", 0x1220);
TestSelectorSpecificity("a#a-02", 0x1010);
TestSelectorSpecificity("a[id=\"a-02\"]", 0x0110);
TestSelectorSpecificity("ul#nav li.active a", 0x1130);
TestSelectorSpecificity("body.ie7 .col_3 h2 ~ h2", 0x0230);
TestSelectorSpecificity("#footer *:not(nav) li", 0x1020);
TestSelectorSpecificity("ul > li ul li ol li:first-letter", 0x0070);
}
}
}