| 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:html/dom.dart'; | 5 import 'package:html/dom.dart'; |
| 6 import 'package:html/parser.dart'; | 6 import 'package:html/parser.dart'; |
| 7 | 7 |
| 8 main() { | 8 main() { |
| 9 group('Element', () { | 9 group('Element', () { |
| 10 test('classes', () { | 10 test('classes', () { |
| 11 final barBaz = new Element.html('<div class=" bar baz"></div>'); | 11 final barBaz = new Element.html('<div class=" bar baz"></div>'); |
| 12 final quxBaz = new Element.html('<div class="qux baz "></div>'); | 12 final quxBaz = new Element.html('<div class="qux baz "></div>'); |
| 13 expect(barBaz.className, ' bar baz'); | 13 expect(barBaz.className, ' bar baz'); |
| 14 expect(quxBaz.className, 'qux baz '); | 14 expect(quxBaz.className, 'qux baz '); |
| 15 expect(barBaz.classes, ['bar', 'baz']); | 15 expect(barBaz.classes, ['bar', 'baz']); |
| 16 expect(quxBaz.classes, ['qux', 'baz']); | 16 expect(quxBaz.classes, ['qux', 'baz']); |
| 17 }); | 17 }); |
| 18 }); | 18 }); |
| 19 | 19 |
| 20 group('Document', () { | 20 group('Document', () { |
| 21 final doc = parse('<div id=foo>' | 21 final doc = parse('<div id=foo>' |
| 22 '<div class=" bar baz"></div>' | 22 '<div class=" bar baz"></div>' |
| 23 '<div class="qux baz "></div>' | 23 '<div class="qux baz "></div>' |
| 24 '<div id=Foo>'); | 24 '<div id=Foo>'); |
| 25 | 25 |
| 26 test('getElementById', () { | 26 test('getElementById', () { |
| 27 var foo = doc.body.nodes[0]; | 27 var foo = doc.body.nodes[0]; |
| 28 var Foo = foo.nodes[2]; | 28 var Foo = foo.nodes[2]; |
| 29 expect(foo.id, 'foo'); | 29 expect((foo as Element).id, 'foo'); |
| 30 expect(Foo.id, 'Foo'); | 30 expect((Foo as Element).id, 'Foo'); |
| 31 expect(doc.getElementById('foo'), foo); | 31 expect(doc.getElementById('foo'), foo); |
| 32 expect(doc.getElementById('Foo'), Foo); | 32 expect(doc.getElementById('Foo'), Foo); |
| 33 }); | 33 }); |
| 34 | 34 |
| 35 test('getElementsByClassName', () { | 35 test('getElementsByClassName', () { |
| 36 var foo = doc.body.nodes[0]; | 36 var foo = doc.body.nodes[0]; |
| 37 var barBaz = foo.nodes[0]; | 37 var barBaz = foo.nodes[0]; |
| 38 var quxBaz = foo.nodes[1]; | 38 var quxBaz = foo.nodes[1]; |
| 39 expect(barBaz.className, ' bar baz'); | 39 expect((barBaz as Element).className, ' bar baz'); |
| 40 expect(quxBaz.className, 'qux baz '); | 40 expect((quxBaz as Element).className, 'qux baz '); |
| 41 expect(doc.getElementsByClassName('baz'), [barBaz, quxBaz]); | 41 expect(doc.getElementsByClassName('baz'), [barBaz, quxBaz]); |
| 42 expect(doc.getElementsByClassName('bar '), [barBaz]); | 42 expect(doc.getElementsByClassName('bar '), [barBaz]); |
| 43 expect(doc.getElementsByClassName(' qux'), [quxBaz]); | 43 expect(doc.getElementsByClassName(' qux'), [quxBaz]); |
| 44 expect(doc.getElementsByClassName(' baz qux'), [quxBaz]); | 44 expect(doc.getElementsByClassName(' baz qux'), [quxBaz]); |
| 45 }); | 45 }); |
| 46 | 46 |
| 47 test('getElementsByTagName', () { | 47 test('getElementsByTagName', () { |
| 48 var foo = doc.body.nodes[0]; | 48 var foo = doc.body.nodes[0]; |
| 49 var barBaz = foo.nodes[0]; | 49 var barBaz = foo.nodes[0]; |
| 50 var quxBaz = foo.nodes[1]; | 50 var quxBaz = foo.nodes[1]; |
| 51 var Foo = foo.nodes[2]; | 51 var Foo = foo.nodes[2]; |
| 52 expect(doc.getElementsByTagName('div'), [foo, barBaz, quxBaz, Foo]); | 52 expect(doc.getElementsByTagName('div'), [foo, barBaz, quxBaz, Foo]); |
| 53 }); | 53 }); |
| 54 }); | 54 }); |
| 55 | 55 |
| 56 group('fragments are flattened', () { | 56 group('fragments are flattened', () { |
| 57 test('add', () { | 57 test('add', () { |
| 58 var doc = parse('<body>'); | 58 var doc = parse('<body>'); |
| 59 doc.body.nodes.add(parseFragment('<x-foo>')); | 59 doc.body.nodes.add(parseFragment('<x-foo>')); |
| 60 expect(doc.body.nodes[0].localName, 'x-foo'); | 60 expect((doc.body.nodes[0] as Element).localName, 'x-foo'); |
| 61 doc.body.nodes.add(parseFragment('<x-bar>')); | 61 doc.body.nodes.add(parseFragment('<x-bar>')); |
| 62 expect(doc.body.nodes[1].localName, 'x-bar'); | 62 expect((doc.body.nodes[1] as Element).localName, 'x-bar'); |
| 63 }); | 63 }); |
| 64 | 64 |
| 65 test('addLast', () { | 65 test('addLast', () { |
| 66 var doc = parse('<body>'); | 66 var doc = parse('<body>'); |
| 67 doc.body.nodes.addLast(parseFragment('<x-foo>')); | 67 doc.body.nodes.addLast(parseFragment('<x-foo>')); |
| 68 expect(doc.body.nodes[0].localName, 'x-foo'); | 68 expect((doc.body.nodes[0] as Element).localName, 'x-foo'); |
| 69 doc.body.nodes.addLast(parseFragment('<x-bar>')); | 69 doc.body.nodes.addLast(parseFragment('<x-bar>')); |
| 70 expect(doc.body.nodes[1].localName, 'x-bar'); | 70 expect((doc.body.nodes[1] as Element).localName, 'x-bar'); |
| 71 }); | 71 }); |
| 72 | 72 |
| 73 test('addAll', () { | 73 test('addAll', () { |
| 74 var doc = parse('<body><x-a></x-a>'); | 74 var doc = parse('<body><x-a></x-a>'); |
| 75 doc.body.nodes.addAll([parseFragment('<x-b></x-b><x-c></x-c>')]); | 75 doc.body.nodes.addAll([parseFragment('<x-b></x-b><x-c></x-c>')]); |
| 76 expect(doc.body.nodes[0].localName, 'x-a'); | 76 expect((doc.body.nodes[0] as Element).localName, 'x-a'); |
| 77 expect(doc.body.nodes[1].localName, 'x-b'); | 77 expect((doc.body.nodes[1] as Element).localName, 'x-b'); |
| 78 expect(doc.body.nodes[2].localName, 'x-c'); | 78 expect((doc.body.nodes[2] as Element).localName, 'x-c'); |
| 79 }); | 79 }); |
| 80 | 80 |
| 81 test('insert', () { | 81 test('insert', () { |
| 82 var doc = parse('<body><x-a></x-a>'); | 82 var doc = parse('<body><x-a></x-a>'); |
| 83 doc.body.nodes.insert(0, parseFragment('<x-b></x-b><x-c></x-c>')); | 83 doc.body.nodes.insert(0, parseFragment('<x-b></x-b><x-c></x-c>')); |
| 84 expect(doc.body.nodes[0].localName, 'x-b'); | 84 expect((doc.body.nodes[0] as Element).localName, 'x-b'); |
| 85 expect(doc.body.nodes[1].localName, 'x-c'); | 85 expect((doc.body.nodes[1] as Element).localName, 'x-c'); |
| 86 expect(doc.body.nodes[2].localName, 'x-a'); | 86 expect((doc.body.nodes[2] as Element).localName, 'x-a'); |
| 87 | 87 |
| 88 doc = parse('<body><x-a></x-a>'); | 88 doc = parse('<body><x-a></x-a>'); |
| 89 doc.body.nodes.insert(1, parseFragment('<x-b></x-b><x-c></x-c>')); | 89 doc.body.nodes.insert(1, parseFragment('<x-b></x-b><x-c></x-c>')); |
| 90 expect(doc.body.nodes[0].localName, 'x-a'); | 90 expect((doc.body.nodes[0] as Element).localName, 'x-a'); |
| 91 expect(doc.body.nodes[1].localName, 'x-b'); | 91 expect((doc.body.nodes[1] as Element).localName, 'x-b'); |
| 92 expect(doc.body.nodes[2].localName, 'x-c'); | 92 expect((doc.body.nodes[2] as Element).localName, 'x-c'); |
| 93 | 93 |
| 94 doc = parse('<body><x-a></x-a>'); | 94 doc = parse('<body><x-a></x-a>'); |
| 95 doc.body.nodes.insert(0, parseFragment('<x-b></x-b>')); | 95 doc.body.nodes.insert(0, parseFragment('<x-b></x-b>')); |
| 96 doc.body.nodes.insert(1, parseFragment('<x-c></x-c>')); | 96 doc.body.nodes.insert(1, parseFragment('<x-c></x-c>')); |
| 97 expect(doc.body.nodes[0].localName, 'x-b'); | 97 expect((doc.body.nodes[0] as Element).localName, 'x-b'); |
| 98 expect(doc.body.nodes[1].localName, 'x-c'); | 98 expect((doc.body.nodes[1] as Element).localName, 'x-c'); |
| 99 expect(doc.body.nodes[2].localName, 'x-a'); | 99 expect((doc.body.nodes[2] as Element).localName, 'x-a'); |
| 100 }); | 100 }); |
| 101 | 101 |
| 102 test('insertAll', () { | 102 test('insertAll', () { |
| 103 var doc = parse('<body><x-a></x-a>'); | 103 var doc = parse('<body><x-a></x-a>'); |
| 104 doc.body.nodes.insertAll(0, [parseFragment('<x-b></x-b><x-c></x-c>')]); | 104 doc.body.nodes.insertAll(0, [parseFragment('<x-b></x-b><x-c></x-c>')]); |
| 105 expect(doc.body.nodes[0].localName, 'x-b'); | 105 expect((doc.body.nodes[0] as Element).localName, 'x-b'); |
| 106 expect(doc.body.nodes[1].localName, 'x-c'); | 106 expect((doc.body.nodes[1] as Element).localName, 'x-c'); |
| 107 expect(doc.body.nodes[2].localName, 'x-a'); | 107 expect((doc.body.nodes[2] as Element).localName, 'x-a'); |
| 108 expect(doc.body.nodes.length, 3); | 108 expect(doc.body.nodes.length, 3); |
| 109 | 109 |
| 110 doc = parse('<body><x-a></x-a>'); | 110 doc = parse('<body><x-a></x-a>'); |
| 111 doc.body.nodes.insertAll(1, [parseFragment('<x-b></x-b><x-c></x-c>')]); | 111 doc.body.nodes.insertAll(1, [parseFragment('<x-b></x-b><x-c></x-c>')]); |
| 112 expect(doc.body.nodes[0].localName, 'x-a'); | 112 expect((doc.body.nodes[0] as Element).localName, 'x-a'); |
| 113 expect(doc.body.nodes[1].localName, 'x-b'); | 113 expect((doc.body.nodes[1] as Element).localName, 'x-b'); |
| 114 expect(doc.body.nodes[2].localName, 'x-c'); | 114 expect((doc.body.nodes[2] as Element).localName, 'x-c'); |
| 115 | 115 |
| 116 doc = parse('<body><x-a></x-a>'); | 116 doc = parse('<body><x-a></x-a>'); |
| 117 doc.body.nodes.insertAll(0, [parseFragment('<x-b></x-b>')]); | 117 doc.body.nodes.insertAll(0, [parseFragment('<x-b></x-b>')]); |
| 118 doc.body.nodes.insertAll(1, [parseFragment('<x-c></x-c>')]); | 118 doc.body.nodes.insertAll(1, [parseFragment('<x-c></x-c>')]); |
| 119 expect(doc.body.nodes[0].localName, 'x-b'); | 119 expect((doc.body.nodes[0] as Element).localName, 'x-b'); |
| 120 expect(doc.body.nodes[1].localName, 'x-c'); | 120 expect((doc.body.nodes[1] as Element).localName, 'x-c'); |
| 121 expect(doc.body.nodes[2].localName, 'x-a'); | 121 expect((doc.body.nodes[2] as Element).localName, 'x-a'); |
| 122 }); | 122 }); |
| 123 | 123 |
| 124 test('operator []=', () { | 124 test('operator []=', () { |
| 125 var doc = parse('<body><x-a></x-a>'); | 125 var doc = parse('<body><x-a></x-a>'); |
| 126 doc.body.nodes[0] = parseFragment('<x-b></x-b><x-c></x-c>'); | 126 doc.body.nodes[0] = parseFragment('<x-b></x-b><x-c></x-c>'); |
| 127 expect(doc.body.nodes[0].localName, 'x-b'); | 127 expect((doc.body.nodes[0] as Element).localName, 'x-b'); |
| 128 expect(doc.body.nodes[1].localName, 'x-c'); | 128 expect((doc.body.nodes[1] as Element).localName, 'x-c'); |
| 129 expect(doc.body.nodes.length, 2); | 129 expect(doc.body.nodes.length, 2); |
| 130 | 130 |
| 131 doc = parse('<body><x-a></x-a><x-b></x-b><x-c></x-c>'); | 131 doc = parse('<body><x-a></x-a><x-b></x-b><x-c></x-c>'); |
| 132 doc.body.nodes[1] = parseFragment('<y-b></y-b><y-c></y-c>'); | 132 doc.body.nodes[1] = parseFragment('<y-b></y-b><y-c></y-c>'); |
| 133 expect(doc.body.nodes[0].localName, 'x-a'); | 133 expect((doc.body.nodes[0] as Element).localName, 'x-a'); |
| 134 expect(doc.body.nodes[1].localName, 'y-b'); | 134 expect((doc.body.nodes[1] as Element).localName, 'y-b'); |
| 135 expect(doc.body.nodes[2].localName, 'y-c'); | 135 expect((doc.body.nodes[2] as Element).localName, 'y-c'); |
| 136 expect(doc.body.nodes[3].localName, 'x-c'); | 136 expect((doc.body.nodes[3] as Element).localName, 'x-c'); |
| 137 expect(doc.body.nodes.length, 4); | 137 expect(doc.body.nodes.length, 4); |
| 138 }); | 138 }); |
| 139 | 139 |
| 140 test('setRange', () { | 140 test('setRange', () { |
| 141 var fragment = parseFragment('<y-b></y-b><y-c></y-c>'); | 141 var fragment = parseFragment('<y-b></y-b><y-c></y-c>'); |
| 142 var doc = parse('<body><x-a></x-a><x-b></x-b><x-c></x-c>'); | 142 var doc = parse('<body><x-a></x-a><x-b></x-b><x-c></x-c>'); |
| 143 doc.body.nodes.setRange(1, 2, fragment.nodes, 0); | 143 doc.body.nodes.setRange(1, 2, fragment.nodes, 0); |
| 144 expect(doc.body.nodes[0].localName, 'x-a'); | 144 expect((doc.body.nodes[0] as Element).localName, 'x-a'); |
| 145 expect(doc.body.nodes[1].localName, 'y-b'); | 145 expect((doc.body.nodes[1] as Element).localName, 'y-b'); |
| 146 expect(doc.body.nodes[2].localName, 'y-c'); | 146 expect((doc.body.nodes[2] as Element).localName, 'y-c'); |
| 147 expect(doc.body.nodes.length, 3); | 147 expect(doc.body.nodes.length, 3); |
| 148 | 148 |
| 149 fragment = parseFragment('<y-b></y-b><y-c></y-c>'); | 149 fragment = parseFragment('<y-b></y-b><y-c></y-c>'); |
| 150 doc = parse('<body><x-a></x-a><x-b></x-b><x-c></x-c>'); | 150 doc = parse('<body><x-a></x-a><x-b></x-b><x-c></x-c>'); |
| 151 doc.body.nodes.setRange(1, 1, [fragment], 0); | 151 doc.body.nodes.setRange(1, 1, [fragment], 0); |
| 152 expect(doc.body.nodes[0].localName, 'x-a'); | 152 expect((doc.body.nodes[0] as Element).localName, 'x-a'); |
| 153 expect(doc.body.nodes[1].localName, 'y-b'); | 153 expect((doc.body.nodes[1] as Element).localName, 'y-b'); |
| 154 expect(doc.body.nodes[2].localName, 'y-c'); | 154 expect((doc.body.nodes[2] as Element).localName, 'y-c'); |
| 155 expect(doc.body.nodes[3].localName, 'x-c'); | 155 expect((doc.body.nodes[3] as Element).localName, 'x-c'); |
| 156 expect(doc.body.nodes.length, 4); | 156 expect(doc.body.nodes.length, 4); |
| 157 }); | 157 }); |
| 158 | 158 |
| 159 test('replaceRange', () { | 159 test('replaceRange', () { |
| 160 var fragment = parseFragment('<y-b></y-b><y-c></y-c>'); | 160 var fragment = parseFragment('<y-b></y-b><y-c></y-c>'); |
| 161 var doc = parse('<body><x-a></x-a><x-b></x-b><x-c></x-c>'); | 161 var doc = parse('<body><x-a></x-a><x-b></x-b><x-c></x-c>'); |
| 162 doc.body.nodes.replaceRange(1, 2, fragment.nodes); | 162 doc.body.nodes.replaceRange(1, 2, fragment.nodes); |
| 163 expect(doc.body.nodes[0].localName, 'x-a'); | 163 expect((doc.body.nodes[0] as Element).localName, 'x-a'); |
| 164 expect(doc.body.nodes[1].localName, 'y-b'); | 164 expect((doc.body.nodes[1] as Element).localName, 'y-b'); |
| 165 expect(doc.body.nodes[2].localName, 'y-c'); | 165 expect((doc.body.nodes[2] as Element).localName, 'y-c'); |
| 166 expect(doc.body.nodes[3].localName, 'x-c'); | 166 expect((doc.body.nodes[3] as Element).localName, 'x-c'); |
| 167 expect(doc.body.nodes.length, 4); | 167 expect(doc.body.nodes.length, 4); |
| 168 | 168 |
| 169 fragment = parseFragment('<y-b></y-b><y-c></y-c>'); | 169 fragment = parseFragment('<y-b></y-b><y-c></y-c>'); |
| 170 doc = parse('<body><x-a></x-a><x-b></x-b><x-c></x-c>'); | 170 doc = parse('<body><x-a></x-a><x-b></x-b><x-c></x-c>'); |
| 171 doc.body.nodes.replaceRange(1, 2, [fragment]); | 171 doc.body.nodes.replaceRange(1, 2, [fragment]); |
| 172 expect(doc.body.nodes[0].localName, 'x-a'); | 172 expect((doc.body.nodes[0] as Element).localName, 'x-a'); |
| 173 expect(doc.body.nodes[1].localName, 'y-b'); | 173 expect((doc.body.nodes[1] as Element).localName, 'y-b'); |
| 174 expect(doc.body.nodes[2].localName, 'y-c'); | 174 expect((doc.body.nodes[2] as Element).localName, 'y-c'); |
| 175 expect(doc.body.nodes[3].localName, 'x-c'); | 175 expect((doc.body.nodes[3] as Element).localName, 'x-c'); |
| 176 expect(doc.body.nodes.length, 4); | 176 expect(doc.body.nodes.length, 4); |
| 177 }); | 177 }); |
| 178 | 178 |
| 179 test('replaceWith', () { | 179 test('replaceWith', () { |
| 180 var fragment = parseFragment('<y-b></y-b><y-c></y-c>'); | 180 var fragment = parseFragment('<y-b></y-b><y-c></y-c>'); |
| 181 var doc = parse('<body><x-a></x-a><x-b></x-b><x-c></x-c>'); | 181 var doc = parse('<body><x-a></x-a><x-b></x-b><x-c></x-c>'); |
| 182 doc.body.nodes[1].replaceWith(fragment); | 182 doc.body.nodes[1].replaceWith(fragment); |
| 183 expect(doc.body.nodes[0].localName, 'x-a'); | 183 expect((doc.body.nodes[0] as Element).localName, 'x-a'); |
| 184 expect(doc.body.nodes[1].localName, 'y-b'); | 184 expect((doc.body.nodes[1] as Element).localName, 'y-b'); |
| 185 expect(doc.body.nodes[2].localName, 'y-c'); | 185 expect((doc.body.nodes[2] as Element).localName, 'y-c'); |
| 186 expect(doc.body.nodes[3].localName, 'x-c'); | 186 expect((doc.body.nodes[3] as Element).localName, 'x-c'); |
| 187 expect(doc.body.nodes.length, 4); | 187 expect(doc.body.nodes.length, 4); |
| 188 }); | 188 }); |
| 189 }); | 189 }); |
| 190 } | 190 } |
| OLD | NEW |