Initial commit
[yaffs-website] / node_modules / node-sass / src / libsass / test / test_superselector.cpp
1 #include "../ast.hpp"
2 #include "../context.hpp"
3 #include "../parser.hpp"
4 #include <string>
5
6 using namespace Sass;
7
8 Context ctx = Context(Context::Data());
9
10 Compound_Selector* compound_selector(std::string src)
11 { return Parser::from_c_str(src.c_str(), ctx, "", Position()).parse_compound_selector(); }
12
13 Complex_Selector* complex_selector(std::string src)
14 { return Parser::from_c_str(src.c_str(), ctx, "", Position()).parse_complex_selector(false); }
15
16 void check_compound(std::string s1, std::string s2)
17 {
18   std::cout << "Is "
19        << s1
20        << " a superselector of "
21        << s2
22        << "?\t"
23        << compound_selector(s1 + ";")->is_superselector_of(compound_selector(s2 + ";"))
24        << std::endl;
25 }
26
27 void check_complex(std::string s1, std::string s2)
28 {
29   std::cout << "Is "
30        << s1
31        << " a superselector of "
32        << s2
33        << "?\t"
34        << complex_selector(s1 + ";")->is_superselector_of(complex_selector(s2 + ";"))
35        << std::endl;
36 }
37
38 int main()
39 {
40   check_compound(".foo", ".foo.bar");
41   check_compound(".foo.bar", ".foo");
42   check_compound(".foo.bar", "div.foo");
43   check_compound(".foo", "div.foo");
44   check_compound("div.foo", ".foo");
45   check_compound("div.foo", "div.bar.foo");
46   check_compound("p.foo", "div.bar.foo");
47   check_compound(".hux", ".mumble");
48
49   std::cout << std::endl;
50
51   check_complex(".foo ~ .bar", ".foo + .bar");
52   check_complex(".foo .bar", ".foo + .bar");
53   check_complex(".foo .bar", ".foo > .bar");
54   check_complex(".foo .bar > .hux", ".foo.a .bar.b > .hux");
55   check_complex(".foo ~ .bar .hux", ".foo.a + .bar.b > .hux");
56   check_complex(".foo", ".bar .foo");
57   check_complex(".foo", ".foo.a");
58   check_complex(".foo.bar", ".foo");
59   check_complex(".foo .bar .hux", ".bar .hux");
60   check_complex(".foo ~ .bar .hux.x", ".foo.a + .bar.b > .hux.y");
61   check_complex(".foo ~ .bar .hux", ".foo.a + .bar.b > .mumble");
62   check_complex(".foo + .bar", ".foo ~ .bar");
63   check_complex("a c e", "a b c d e");
64   check_complex("c a e", "a b c d e");
65
66   return 0;
67 }
68
69