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/parser.dart'; | 5 import 'package:html5lib/parser.dart'; |
6 | 6 |
7 main() { | 7 main() { |
8 group('Node.querySelector type selectors', () { | 8 group('Node.querySelector type selectors', () { |
9 test('x-foo', () { | 9 test('x-foo', () { |
10 expect(parse('<x-foo>').body.querySelector('x-foo'), isNotNull); | 10 expect(parse('<x-foo>').body.querySelector('x-foo'), isNotNull); |
11 }); | 11 }); |
12 | 12 |
13 test('-x-foo', () { | 13 test('-x-foo', () { |
14 var doc = parse('<body><-x-foo>'); | 14 var doc = parse('<body><-x-foo>'); |
15 expect(doc.body.outerHtml, equals('<body><-x-foo></body>')); | 15 expect(doc.body.outerHtml, equals('<body><-x-foo></body>')); |
16 expect(doc.body.querySelector('-x-foo'), isNull); | 16 expect(doc.body.querySelector('-x-foo'), isNull); |
17 }); | 17 }); |
18 | 18 |
19 test('foo123', () { | 19 test('foo123', () { |
20 expect(parse('<foo123>').body.querySelector('foo123'), isNotNull); | 20 expect(parse('<foo123>').body.querySelector('foo123'), isNotNull); |
21 }); | 21 }); |
22 | 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 |
23 test('123 - invalid', () { | 29 test('123 - invalid', () { |
24 var doc = parse('<123>'); | 30 var doc = parse('<123>'); |
25 expect(() => doc.body.querySelector('123'), throwsUnimplementedError); | 31 expect(() => doc.body.querySelector('123'), throwsUnimplementedError); |
26 }); | 32 }); |
27 | 33 |
28 test('x\\ny - not implemented', () { | 34 test('x\\ny - not implemented', () { |
29 var doc = parse('<x\\ny>'); | 35 var doc = parse('<x\\ny>'); |
30 expect(() => doc.body.querySelector('x\\ny'), throwsUnimplementedError); | 36 expect(() => doc.body.querySelector('x\\ny'), throwsUnimplementedError); |
31 }); | 37 }); |
32 }); | 38 }); |
| 39 |
| 40 group('Node.querySelectorAll type selectors', () { |
| 41 test('x-foo', () { |
| 42 expect(parse('<x-foo>').body.querySelectorAll('x-foo').length, 1); |
| 43 }); |
| 44 |
| 45 test('-x-foo', () { |
| 46 var doc = parse('<body><-x-foo>'); |
| 47 expect(doc.body.outerHtml, equals('<body><-x-foo></body>')); |
| 48 expect(doc.body.querySelectorAll('-x-foo').length, 0); |
| 49 }); |
| 50 |
| 51 test('foo123', () { |
| 52 expect(parse('<foo123>').body.querySelectorAll('foo123').length, 1); |
| 53 }); |
| 54 |
| 55 test('built from fragments', () { |
| 56 var doc = parse('<body>'); |
| 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 }); |
| 71 }); |
| 72 |
| 73 group('fragments are flattened', () { |
| 74 test('add', () { |
| 75 var doc = parse('<body>'); |
| 76 doc.body.nodes.add(parseFragment('<x-foo>')); |
| 77 expect(doc.body.nodes[0].localName, 'x-foo'); |
| 78 doc.body.nodes.add(parseFragment('<x-bar>')); |
| 79 expect(doc.body.nodes[1].localName, 'x-bar'); |
| 80 }); |
| 81 |
| 82 test('addLast', () { |
| 83 var doc = parse('<body>'); |
| 84 doc.body.nodes.addLast(parseFragment('<x-foo>')); |
| 85 expect(doc.body.nodes[0].localName, 'x-foo'); |
| 86 doc.body.nodes.addLast(parseFragment('<x-bar>')); |
| 87 expect(doc.body.nodes[1].localName, 'x-bar'); |
| 88 }); |
| 89 |
| 90 test('addAll', () { |
| 91 var doc = parse('<body><x-a></x-a>'); |
| 92 doc.body.nodes.addAll([parseFragment('<x-b></x-b><x-c></x-c>')]); |
| 93 expect(doc.body.nodes[0].localName, 'x-a'); |
| 94 expect(doc.body.nodes[1].localName, 'x-b'); |
| 95 expect(doc.body.nodes[2].localName, 'x-c'); |
| 96 }); |
| 97 |
| 98 test('insert', () { |
| 99 var doc = parse('<body><x-a></x-a>'); |
| 100 doc.body.nodes.insert(0, parseFragment('<x-b></x-b><x-c></x-c>')); |
| 101 expect(doc.body.nodes[0].localName, 'x-b'); |
| 102 expect(doc.body.nodes[1].localName, 'x-c'); |
| 103 expect(doc.body.nodes[2].localName, 'x-a'); |
| 104 |
| 105 doc = parse('<body><x-a></x-a>'); |
| 106 doc.body.nodes.insert(1, parseFragment('<x-b></x-b><x-c></x-c>')); |
| 107 expect(doc.body.nodes[0].localName, 'x-a'); |
| 108 expect(doc.body.nodes[1].localName, 'x-b'); |
| 109 expect(doc.body.nodes[2].localName, 'x-c'); |
| 110 |
| 111 doc = parse('<body><x-a></x-a>'); |
| 112 doc.body.nodes.insert(0, parseFragment('<x-b></x-b>')); |
| 113 doc.body.nodes.insert(1, parseFragment('<x-c></x-c>')); |
| 114 expect(doc.body.nodes[0].localName, 'x-b'); |
| 115 expect(doc.body.nodes[1].localName, 'x-c'); |
| 116 expect(doc.body.nodes[2].localName, 'x-a'); |
| 117 }); |
| 118 |
| 119 test('insertAll', () { |
| 120 var doc = parse('<body><x-a></x-a>'); |
| 121 doc.body.nodes.insertAll(0, [parseFragment('<x-b></x-b><x-c></x-c>')]); |
| 122 expect(doc.body.nodes[0].localName, 'x-b'); |
| 123 expect(doc.body.nodes[1].localName, 'x-c'); |
| 124 expect(doc.body.nodes[2].localName, 'x-a'); |
| 125 expect(doc.body.nodes.length, 3); |
| 126 |
| 127 doc = parse('<body><x-a></x-a>'); |
| 128 doc.body.nodes.insertAll(1, [parseFragment('<x-b></x-b><x-c></x-c>')]); |
| 129 expect(doc.body.nodes[0].localName, 'x-a'); |
| 130 expect(doc.body.nodes[1].localName, 'x-b'); |
| 131 expect(doc.body.nodes[2].localName, 'x-c'); |
| 132 |
| 133 doc = parse('<body><x-a></x-a>'); |
| 134 doc.body.nodes.insertAll(0, [parseFragment('<x-b></x-b>')]); |
| 135 doc.body.nodes.insertAll(1, [parseFragment('<x-c></x-c>')]); |
| 136 expect(doc.body.nodes[0].localName, 'x-b'); |
| 137 expect(doc.body.nodes[1].localName, 'x-c'); |
| 138 expect(doc.body.nodes[2].localName, 'x-a'); |
| 139 }); |
| 140 |
| 141 test('operator []=', () { |
| 142 var doc = parse('<body><x-a></x-a>'); |
| 143 doc.body.nodes[0] = parseFragment('<x-b></x-b><x-c></x-c>'); |
| 144 expect(doc.body.nodes[0].localName, 'x-b'); |
| 145 expect(doc.body.nodes[1].localName, 'x-c'); |
| 146 expect(doc.body.nodes.length, 2); |
| 147 |
| 148 doc = parse('<body><x-a></x-a><x-b></x-b><x-c></x-c>'); |
| 149 doc.body.nodes[1] = parseFragment('<y-b></y-b><y-c></y-c>'); |
| 150 expect(doc.body.nodes[0].localName, 'x-a'); |
| 151 expect(doc.body.nodes[1].localName, 'y-b'); |
| 152 expect(doc.body.nodes[2].localName, 'y-c'); |
| 153 expect(doc.body.nodes[3].localName, 'x-c'); |
| 154 expect(doc.body.nodes.length, 4); |
| 155 }); |
| 156 |
| 157 test('setRange', () { |
| 158 var fragment = parseFragment('<y-b></y-b><y-c></y-c>'); |
| 159 var doc = parse('<body><x-a></x-a><x-b></x-b><x-c></x-c>'); |
| 160 doc.body.nodes.setRange(1, 2, fragment.nodes, 0); |
| 161 expect(doc.body.nodes[0].localName, 'x-a'); |
| 162 expect(doc.body.nodes[1].localName, 'y-b'); |
| 163 expect(doc.body.nodes[2].localName, 'y-c'); |
| 164 expect(doc.body.nodes.length, 3); |
| 165 |
| 166 fragment = parseFragment('<y-b></y-b><y-c></y-c>'); |
| 167 doc = parse('<body><x-a></x-a><x-b></x-b><x-c></x-c>'); |
| 168 doc.body.nodes.setRange(1, 1, [fragment], 0); |
| 169 expect(doc.body.nodes[0].localName, 'x-a'); |
| 170 expect(doc.body.nodes[1].localName, 'y-b'); |
| 171 expect(doc.body.nodes[2].localName, 'y-c'); |
| 172 expect(doc.body.nodes[3].localName, 'x-c'); |
| 173 expect(doc.body.nodes.length, 4); |
| 174 }); |
| 175 |
| 176 test('replaceRange', () { |
| 177 var fragment = parseFragment('<y-b></y-b><y-c></y-c>'); |
| 178 var doc = parse('<body><x-a></x-a><x-b></x-b><x-c></x-c>'); |
| 179 doc.body.nodes.replaceRange(1, 2, fragment.nodes); |
| 180 expect(doc.body.nodes[0].localName, 'x-a'); |
| 181 expect(doc.body.nodes[1].localName, 'y-b'); |
| 182 expect(doc.body.nodes[2].localName, 'y-c'); |
| 183 expect(doc.body.nodes[3].localName, 'x-c'); |
| 184 expect(doc.body.nodes.length, 4); |
| 185 |
| 186 fragment = parseFragment('<y-b></y-b><y-c></y-c>'); |
| 187 doc = parse('<body><x-a></x-a><x-b></x-b><x-c></x-c>'); |
| 188 doc.body.nodes.replaceRange(1, 2, [fragment]); |
| 189 expect(doc.body.nodes[0].localName, 'x-a'); |
| 190 expect(doc.body.nodes[1].localName, 'y-b'); |
| 191 expect(doc.body.nodes[2].localName, 'y-c'); |
| 192 expect(doc.body.nodes[3].localName, 'x-c'); |
| 193 expect(doc.body.nodes.length, 4); |
| 194 }); |
| 195 |
| 196 test('replaceWith', () { |
| 197 var fragment = parseFragment('<y-b></y-b><y-c></y-c>'); |
| 198 var doc = parse('<body><x-a></x-a><x-b></x-b><x-c></x-c>'); |
| 199 doc.body.nodes[1].replaceWith(fragment); |
| 200 expect(doc.body.nodes[0].localName, 'x-a'); |
| 201 expect(doc.body.nodes[1].localName, 'y-b'); |
| 202 expect(doc.body.nodes[2].localName, 'y-c'); |
| 203 expect(doc.body.nodes[3].localName, 'x-c'); |
| 204 expect(doc.body.nodes.length, 4); |
| 205 }); |
| 206 }); |
33 } | 207 } |
OLD | NEW |