root/livinglogic.python.xist/test/test_xist_css.py @ 3241:b87e8fa740da

Revision 3241:b87e8fa740da, 6.3 KB (checked in by Walter Doerwald <walter@…>, 12 years ago)

Remove CSSWeight class, methods and tests. Use csstils specificity instead.

Line 
1#! /usr/bin/env/python
2# -*- coding: utf-8 -*-
3
4## Copyright 1999-2008 by LivingLogic AG, Bayreuth/Germany
5## Copyright 1999-2008 by Walter Dörwald
6##
7## All Rights Reserved
8##
9## See xist/__init__.py for the license
10
11
12from __future__ import with_statement
13
14from ll import url
15from ll.xist import xsc, css
16from ll.xist.ns import html, specials
17
18
19def test_css():
20    with html.div(id=1) as e:
21        with html.ul(id=2):
22            +html.li("foo")
23            +html.li()
24
25    assert list(e.walknode(css.selector("div"))) == [e]
26    assert list(e.walknode(css.selector("li"))) == [e[0][0], e[0][1]]
27    assert list(e.walknode(css.selector("div#1"))) == [e]
28    assert list(e.walknode(css.selector("#2"))) == [e[0]]
29    assert list(e.walknode(css.selector(":empty"))) == [e[0][1]]
30    assert list(e.walknode(css.selector("li:empty"))) == [e[0][1]]
31    assert list(e.walknode(css.selector("div :empty"))) == [e[0][1]]
32    assert list(e.walknode(css.selector("div>*:empty"))) == []
33    assert list(e.walknode(css.selector("div>:empty"))) == []
34    assert list(e.walknode(css.selector("*|li"))) == [e[0][0], e[0][1]]
35    assert list(e.walknode(css.selector("h|li", prefixes={"h": html}))) == [e[0][0], e[0][1]]
36    assert list(e.walknode(css.selector("h|li", prefixes={"h": specials}))) == []
37
38    with xsc.Frag() as e:
39        +html.div("foo")
40        +xsc.Text("filler")
41        +html.p("foo")
42        +xsc.Text("filler")
43        +html.ul(html.li("foo"))
44
45    assert list(e.walknode(css.selector("div + p"))) == [e[2]]
46    assert list(e.walknode(css.selector("div + ul"))) == []
47    assert list(e.walknode(css.selector("ul + p"))) == []
48    assert list(e.walknode(css.selector("div ~ p"))) == [e[2]]
49    assert list(e.walknode(css.selector("div ~ ul"))) == [e[4]]
50    assert list(e.walknode(css.selector("p ~ div"))) == []
51    assert list(e.walknode(css.selector("div:first-child + p"))) == [e[2]]
52    assert list(e.walknode(css.selector("*:first-child + p"))) == [e[2]]
53
54    with xsc.Frag() as e:
55        +html.span(html.b("hurz"), "gurk", html.em("hinz"), html.em("kunz"))
56        +html.em("hurz")
57        +html.em("hinz")
58        +xsc.Text("nix")
59        +html.i("kunz")
60
61    assert list(e.walknode(css.selector("*:only-of-type"))) == [e[0], e[0][0], e[4]]
62    assert list(e.walknode(css.selector("*:nth-child(1)"))) == [e[0], e[0][0]]
63    assert list(e.walknode(css.selector("*:nth-child(2)"))) == [e[0][2], e[1]]
64    assert list(e.walknode(css.selector("*:nth-last-child(1)"))) == [e[0][3], e[4]]
65    assert list(e.walknode(css.selector("*:nth-last-child(2)"))) == [e[0][2], e[2]]
66    assert list(e.walknode(css.selector("*:nth-of-type(1)"))) == [e[0], e[0][0], e[0][2], e[1], e[4]]
67    assert list(e.walknode(css.selector("*:nth-of-type(2)"))) == [e[0][3], e[2]]
68    assert list(e.walknode(css.selector("*:nth-last-of-type(1)"))) == [e[0], e[0][0], e[0][3], e[2], e[4]]
69    assert list(e.walknode(css.selector("*:nth-last-of-type(2)"))) == [e[0][2], e[1]]
70
71    e = xsc.Frag(html.span(html.b("hurz"), "gurk"))
72    assert list(e.walknode(css.selector("*:only-child"))) == [e[0], e[0][0]]
73
74    with xsc.Frag() as e:
75        +html.em(class_="gurk", lang="en")
76        +html.em(class_="gurk hurz", lang="en-us")
77        +html.em(class_="hurz", lang="de")
78
79    assert list(e.walknode(css.selector("em[class='gurk']"))) == [e[0]]
80    assert list(e.walknode(css.selector("em[class~='gurk']"))) == [e[0], e[1]]
81    assert list(e.walknode(css.selector("em[lang|='en']"))) == [e[0], e[1]]
82
83
84def test_applystylesheets1():
85    with html.html() as e:
86        with html.head():
87            +html.style("p {color: red;}", type="text/css")
88        with html.body():
89            +html.p("gurk")
90
91    css.applystylesheets(e)
92
93    assert str(e.walknode(html.p)[0].attrs.style) == "color: red;"
94    assert list(e.walknode(html.style)) == []
95
96
97def test_applystylesheets2():
98    with html.html() as e:
99        with html.head():
100            +html.style("p.dont {color: red;}", type="text/css")
101        with html.body():
102            +html.p("gurk")
103
104    css.applystylesheets(e)
105
106    assert str(e.walknode(html.p)[0].attrs.style) == ""
107    assert list(e.walknode(html.style)) == []
108
109
110def test_applystylesheets3():
111    with html.html() as e:
112        with html.head():
113            +html.style("p.do {color: red;}", type="text/css")
114        with html.body():
115            +html.p("gurk", class_="do")
116
117    css.applystylesheets(e)
118
119    assert str(e.walknode(html.p)[0].attrs.style) == "color: red;"
120    assert list(e.walknode(html.style)) == []
121
122
123def test_applystylesheets4():
124    with html.html() as e:
125        with html.head():
126            +html.style("#id42 {color: red;}", type="text/css")
127        with html.body():
128            +html.p("gurk", id="id42", style="color: blue;")
129
130    css.applystylesheets(e)
131
132    # style attribute wins
133    assert str(e.walknode(html.p)[0].attrs.style) == "color: blue;"
134    assert list(e.walknode(html.style)) == []
135
136
137def test_applystylesheets5():
138    with html.html() as e:
139        with html.head():
140            +html.style("p#id42 {color: red;}", type="text/css")
141        with html.body():
142            +html.p("gurk", id="id42", style="color: blue;")
143
144    css.applystylesheets(e)
145
146    # stylesheet always wins (at least in CSS 2.1 und 3)
147    assert str(e.walknode(html.p)[0].attrs.style) == "color: blue;"
148    assert list(e.walknode(html.style)) == []
149
150
151def test_applystylesheets_media():
152    # Check that media="screen" picks up the media stylesheet
153    with html.html() as e:
154        with html.head():
155            +html.style("p {color: red;}", type="text/css", media="screen")
156        with html.body():
157            +html.p("gurk")
158
159    css.applystylesheets(e, media="screen")
160
161    assert str(e.walknode(html.p)[0].attrs.style) == "color: red;"
162
163    # Check that media="screen" doesn't pick up the print stylesheet
164    with html.html() as e:
165        with html.head():
166            +html.style("p {color: red;}", type="text/css", media="screen")
167        with html.body():
168            +html.p("gurk")
169
170    css.applystylesheets(e, media="print")
171
172    assert str(e.walknode(html.p)[0].attrs.style) == ""
173
174    # Check that @media rules are treated properly
175    with html.html() as e:
176        with html.head():
177            +html.style("@media screen { p {color: red;}}", type="text/css")
178        with html.body():
179            +html.p("gurk")
180
181    css.applystylesheets(e, media="screen")
182
183    assert str(e.walknode(html.p)[0].attrs.style) == "color: red;"
184
185    with html.html() as e:
186        with html.head():
187            +html.style("@media screen { p {color: red;}}", type="text/css")
188        with html.body():
189            +html.p("gurk")
190
191    css.applystylesheets(e, media="print")
192
193    assert str(e.walknode(html.p)[0].attrs.style) == ""
194
195
196def test_parse():
197    s = css.parsestring("@charset 'utf-8'; div{background-image: url(gurk.gif);}")
198    urls = set(css.geturls(s))
199    assert urls == set([url.URL("gurk.gif")])
200
201    s = css.parsestring("@charset 'utf-8'; div{background-image: url(gurk.gif);}", base="root:")
202    urls = set(css.geturls(s))
203    assert urls == set([url.URL("root:gurk.gif")])
204
Note: See TracBrowser for help on using the browser.