OLD | NEW |
1 /// Additional feature tests that aren't based on test data. | 1 /// Additional feature tests that aren't based on test data. |
2 library dom_test; | 2 library dom_test; |
3 | 3 |
4 import 'package:unittest/unittest.dart'; | 4 import 'package:unittest/unittest.dart'; |
| 5 import 'package:html5lib/dom.dart'; |
5 import 'package:html5lib/parser.dart'; | 6 import 'package:html5lib/parser.dart'; |
6 | 7 |
7 main() { | 8 main() { |
8 group('Node.querySelector type selectors', () { | |
9 test('x-foo', () { | |
10 expect(parse('<x-foo>').body.querySelector('x-foo'), isNotNull); | |
11 }); | |
12 | 9 |
13 test('-x-foo', () { | 10 group('Element', () { |
14 var doc = parse('<body><-x-foo>'); | 11 test('classes', () { |
15 expect(doc.body.outerHtml, equals('<body><-x-foo></body>')); | 12 final barBaz = new Element.html('<div class=" bar baz"></div>'); |
16 expect(doc.body.querySelector('-x-foo'), isNull); | 13 final quxBaz = new Element.html('<div class="qux baz "></div>'); |
17 }); | 14 expect(barBaz.className, ' bar baz'); |
18 | 15 expect(quxBaz.className, 'qux baz '); |
19 test('foo123', () { | 16 expect(barBaz.classes, ['bar', 'baz']); |
20 expect(parse('<foo123>').body.querySelector('foo123'), isNotNull); | 17 expect(quxBaz.classes, ['qux', 'baz']); |
21 }); | |
22 | |
23 test('built from fragments', () { | |
24 var doc = parse('<body>'); | |
25 doc.body.nodes.add(parseFragment('<x-foo>')); | |
26 expect(doc.body.querySelector('x-foo'), isNotNull); | |
27 }); | |
28 | |
29 test('123 - invalid', () { | |
30 var doc = parse('<123>'); | |
31 expect(() => doc.body.querySelector('123'), throwsUnimplementedError); | |
32 }); | |
33 | |
34 test('x\\ny - not implemented', () { | |
35 var doc = parse('<x\\ny>'); | |
36 expect(() => doc.body.querySelector('x\\ny'), throwsUnimplementedError); | |
37 }); | 18 }); |
38 }); | 19 }); |
39 | 20 |
40 group('Node.querySelectorAll type selectors', () { | 21 group('Document', () { |
41 test('x-foo', () { | 22 final doc = parse('<div id=foo>' |
42 expect(parse('<x-foo>').body.querySelectorAll('x-foo').length, 1); | 23 '<div class=" bar baz"></div>' |
| 24 '<div class="qux baz "></div>' |
| 25 '<div id=Foo>'); |
| 26 |
| 27 test('getElementById', () { |
| 28 var foo = doc.body.nodes[0]; |
| 29 var Foo = foo.nodes[2]; |
| 30 expect(foo.id, 'foo'); |
| 31 expect(Foo.id, 'Foo'); |
| 32 expect(doc.getElementById('foo'), foo); |
| 33 expect(doc.getElementById('Foo'), Foo); |
43 }); | 34 }); |
44 | 35 |
45 test('-x-foo', () { | 36 test('getElementsByClassName', () { |
46 var doc = parse('<body><-x-foo>'); | 37 var foo = doc.body.nodes[0]; |
47 expect(doc.body.outerHtml, equals('<body><-x-foo></body>')); | 38 var barBaz = foo.nodes[0]; |
48 expect(doc.body.querySelectorAll('-x-foo').length, 0); | 39 var quxBaz = foo.nodes[1]; |
| 40 expect(barBaz.className, ' bar baz'); |
| 41 expect(quxBaz.className, 'qux baz '); |
| 42 expect(doc.getElementsByClassName('baz'), [barBaz, quxBaz]); |
| 43 expect(doc.getElementsByClassName('bar '), [barBaz]); |
| 44 expect(doc.getElementsByClassName(' qux'), [quxBaz]); |
| 45 expect(doc.getElementsByClassName(' baz qux'), [quxBaz]); |
49 }); | 46 }); |
50 | 47 |
51 test('foo123', () { | 48 test('getElementsByTagName', () { |
52 expect(parse('<foo123>').body.querySelectorAll('foo123').length, 1); | 49 var foo = doc.body.nodes[0]; |
53 }); | 50 var barBaz = foo.nodes[0]; |
54 | 51 var quxBaz = foo.nodes[1]; |
55 test('built from fragments', () { | 52 var Foo = foo.nodes[2]; |
56 var doc = parse('<body>'); | 53 expect(doc.getElementsByTagName('div'), [foo, barBaz, quxBaz, Foo]); |
57 doc.body.nodes.add(parseFragment('<x-foo></x-foo><x-foo>')); | |
58 expect(doc.body.querySelectorAll('x-foo').length, 2); | |
59 }); | |
60 | |
61 test('123 - invalid', () { | |
62 var doc = parse('<123>'); | |
63 expect(() => doc.body.querySelectorAll('123'), throwsUnimplementedError); | |
64 }); | |
65 | |
66 test('x\\ny - not implemented', () { | |
67 var doc = parse('<x\\ny>'); | |
68 expect(() => doc.body.querySelectorAll('x\\ny'), | |
69 throwsUnimplementedError); | |
70 }); | 54 }); |
71 }); | 55 }); |
72 | 56 |
73 group('fragments are flattened', () { | 57 group('fragments are flattened', () { |
74 test('add', () { | 58 test('add', () { |
75 var doc = parse('<body>'); | 59 var doc = parse('<body>'); |
76 doc.body.nodes.add(parseFragment('<x-foo>')); | 60 doc.body.nodes.add(parseFragment('<x-foo>')); |
77 expect(doc.body.nodes[0].localName, 'x-foo'); | 61 expect(doc.body.nodes[0].localName, 'x-foo'); |
78 doc.body.nodes.add(parseFragment('<x-bar>')); | 62 doc.body.nodes.add(parseFragment('<x-bar>')); |
79 expect(doc.body.nodes[1].localName, 'x-bar'); | 63 expect(doc.body.nodes[1].localName, 'x-bar'); |
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
198 var doc = parse('<body><x-a></x-a><x-b></x-b><x-c></x-c>'); | 182 var doc = parse('<body><x-a></x-a><x-b></x-b><x-c></x-c>'); |
199 doc.body.nodes[1].replaceWith(fragment); | 183 doc.body.nodes[1].replaceWith(fragment); |
200 expect(doc.body.nodes[0].localName, 'x-a'); | 184 expect(doc.body.nodes[0].localName, 'x-a'); |
201 expect(doc.body.nodes[1].localName, 'y-b'); | 185 expect(doc.body.nodes[1].localName, 'y-b'); |
202 expect(doc.body.nodes[2].localName, 'y-c'); | 186 expect(doc.body.nodes[2].localName, 'y-c'); |
203 expect(doc.body.nodes[3].localName, 'x-c'); | 187 expect(doc.body.nodes[3].localName, 'x-c'); |
204 expect(doc.body.nodes.length, 4); | 188 expect(doc.body.nodes.length, 4); |
205 }); | 189 }); |
206 }); | 190 }); |
207 } | 191 } |
OLD | NEW |