Index: packages/html/test/dom_test.dart |
diff --git a/packages/html/test/dom_test.dart b/packages/html/test/dom_test.dart |
new file mode 100644 |
index 0000000000000000000000000000000000000000..d4e0809f2fb4289fa10779ab9d0804dfb7b3a6a1 |
--- /dev/null |
+++ b/packages/html/test/dom_test.dart |
@@ -0,0 +1,190 @@ |
+/// Additional feature tests that aren't based on test data. |
+library dom_test; |
+ |
+import 'package:unittest/unittest.dart'; |
+import 'package:html/dom.dart'; |
+import 'package:html/parser.dart'; |
+ |
+main() { |
+ group('Element', () { |
+ test('classes', () { |
+ final barBaz = new Element.html('<div class=" bar baz"></div>'); |
+ final quxBaz = new Element.html('<div class="qux baz "></div>'); |
+ expect(barBaz.className, ' bar baz'); |
+ expect(quxBaz.className, 'qux baz '); |
+ expect(barBaz.classes, ['bar', 'baz']); |
+ expect(quxBaz.classes, ['qux', 'baz']); |
+ }); |
+ }); |
+ |
+ group('Document', () { |
+ final doc = parse('<div id=foo>' |
+ '<div class=" bar baz"></div>' |
+ '<div class="qux baz "></div>' |
+ '<div id=Foo>'); |
+ |
+ test('getElementById', () { |
+ var foo = doc.body.nodes[0]; |
+ var Foo = foo.nodes[2]; |
+ expect(foo.id, 'foo'); |
+ expect(Foo.id, 'Foo'); |
+ expect(doc.getElementById('foo'), foo); |
+ expect(doc.getElementById('Foo'), Foo); |
+ }); |
+ |
+ test('getElementsByClassName', () { |
+ var foo = doc.body.nodes[0]; |
+ var barBaz = foo.nodes[0]; |
+ var quxBaz = foo.nodes[1]; |
+ expect(barBaz.className, ' bar baz'); |
+ expect(quxBaz.className, 'qux baz '); |
+ expect(doc.getElementsByClassName('baz'), [barBaz, quxBaz]); |
+ expect(doc.getElementsByClassName('bar '), [barBaz]); |
+ expect(doc.getElementsByClassName(' qux'), [quxBaz]); |
+ expect(doc.getElementsByClassName(' baz qux'), [quxBaz]); |
+ }); |
+ |
+ test('getElementsByTagName', () { |
+ var foo = doc.body.nodes[0]; |
+ var barBaz = foo.nodes[0]; |
+ var quxBaz = foo.nodes[1]; |
+ var Foo = foo.nodes[2]; |
+ expect(doc.getElementsByTagName('div'), [foo, barBaz, quxBaz, Foo]); |
+ }); |
+ }); |
+ |
+ group('fragments are flattened', () { |
+ test('add', () { |
+ var doc = parse('<body>'); |
+ doc.body.nodes.add(parseFragment('<x-foo>')); |
+ expect(doc.body.nodes[0].localName, 'x-foo'); |
+ doc.body.nodes.add(parseFragment('<x-bar>')); |
+ expect(doc.body.nodes[1].localName, 'x-bar'); |
+ }); |
+ |
+ test('addLast', () { |
+ var doc = parse('<body>'); |
+ doc.body.nodes.addLast(parseFragment('<x-foo>')); |
+ expect(doc.body.nodes[0].localName, 'x-foo'); |
+ doc.body.nodes.addLast(parseFragment('<x-bar>')); |
+ expect(doc.body.nodes[1].localName, 'x-bar'); |
+ }); |
+ |
+ test('addAll', () { |
+ var doc = parse('<body><x-a></x-a>'); |
+ doc.body.nodes.addAll([parseFragment('<x-b></x-b><x-c></x-c>')]); |
+ expect(doc.body.nodes[0].localName, 'x-a'); |
+ expect(doc.body.nodes[1].localName, 'x-b'); |
+ expect(doc.body.nodes[2].localName, 'x-c'); |
+ }); |
+ |
+ test('insert', () { |
+ var doc = parse('<body><x-a></x-a>'); |
+ doc.body.nodes.insert(0, parseFragment('<x-b></x-b><x-c></x-c>')); |
+ expect(doc.body.nodes[0].localName, 'x-b'); |
+ expect(doc.body.nodes[1].localName, 'x-c'); |
+ expect(doc.body.nodes[2].localName, 'x-a'); |
+ |
+ doc = parse('<body><x-a></x-a>'); |
+ doc.body.nodes.insert(1, parseFragment('<x-b></x-b><x-c></x-c>')); |
+ expect(doc.body.nodes[0].localName, 'x-a'); |
+ expect(doc.body.nodes[1].localName, 'x-b'); |
+ expect(doc.body.nodes[2].localName, 'x-c'); |
+ |
+ doc = parse('<body><x-a></x-a>'); |
+ doc.body.nodes.insert(0, parseFragment('<x-b></x-b>')); |
+ doc.body.nodes.insert(1, parseFragment('<x-c></x-c>')); |
+ expect(doc.body.nodes[0].localName, 'x-b'); |
+ expect(doc.body.nodes[1].localName, 'x-c'); |
+ expect(doc.body.nodes[2].localName, 'x-a'); |
+ }); |
+ |
+ test('insertAll', () { |
+ var doc = parse('<body><x-a></x-a>'); |
+ doc.body.nodes.insertAll(0, [parseFragment('<x-b></x-b><x-c></x-c>')]); |
+ expect(doc.body.nodes[0].localName, 'x-b'); |
+ expect(doc.body.nodes[1].localName, 'x-c'); |
+ expect(doc.body.nodes[2].localName, 'x-a'); |
+ expect(doc.body.nodes.length, 3); |
+ |
+ doc = parse('<body><x-a></x-a>'); |
+ doc.body.nodes.insertAll(1, [parseFragment('<x-b></x-b><x-c></x-c>')]); |
+ expect(doc.body.nodes[0].localName, 'x-a'); |
+ expect(doc.body.nodes[1].localName, 'x-b'); |
+ expect(doc.body.nodes[2].localName, 'x-c'); |
+ |
+ doc = parse('<body><x-a></x-a>'); |
+ doc.body.nodes.insertAll(0, [parseFragment('<x-b></x-b>')]); |
+ doc.body.nodes.insertAll(1, [parseFragment('<x-c></x-c>')]); |
+ expect(doc.body.nodes[0].localName, 'x-b'); |
+ expect(doc.body.nodes[1].localName, 'x-c'); |
+ expect(doc.body.nodes[2].localName, 'x-a'); |
+ }); |
+ |
+ test('operator []=', () { |
+ var doc = parse('<body><x-a></x-a>'); |
+ doc.body.nodes[0] = parseFragment('<x-b></x-b><x-c></x-c>'); |
+ expect(doc.body.nodes[0].localName, 'x-b'); |
+ expect(doc.body.nodes[1].localName, 'x-c'); |
+ expect(doc.body.nodes.length, 2); |
+ |
+ doc = parse('<body><x-a></x-a><x-b></x-b><x-c></x-c>'); |
+ doc.body.nodes[1] = parseFragment('<y-b></y-b><y-c></y-c>'); |
+ expect(doc.body.nodes[0].localName, 'x-a'); |
+ expect(doc.body.nodes[1].localName, 'y-b'); |
+ expect(doc.body.nodes[2].localName, 'y-c'); |
+ expect(doc.body.nodes[3].localName, 'x-c'); |
+ expect(doc.body.nodes.length, 4); |
+ }); |
+ |
+ test('setRange', () { |
+ var fragment = parseFragment('<y-b></y-b><y-c></y-c>'); |
+ var doc = parse('<body><x-a></x-a><x-b></x-b><x-c></x-c>'); |
+ doc.body.nodes.setRange(1, 2, fragment.nodes, 0); |
+ expect(doc.body.nodes[0].localName, 'x-a'); |
+ expect(doc.body.nodes[1].localName, 'y-b'); |
+ expect(doc.body.nodes[2].localName, 'y-c'); |
+ expect(doc.body.nodes.length, 3); |
+ |
+ fragment = parseFragment('<y-b></y-b><y-c></y-c>'); |
+ doc = parse('<body><x-a></x-a><x-b></x-b><x-c></x-c>'); |
+ doc.body.nodes.setRange(1, 1, [fragment], 0); |
+ expect(doc.body.nodes[0].localName, 'x-a'); |
+ expect(doc.body.nodes[1].localName, 'y-b'); |
+ expect(doc.body.nodes[2].localName, 'y-c'); |
+ expect(doc.body.nodes[3].localName, 'x-c'); |
+ expect(doc.body.nodes.length, 4); |
+ }); |
+ |
+ test('replaceRange', () { |
+ var fragment = parseFragment('<y-b></y-b><y-c></y-c>'); |
+ var doc = parse('<body><x-a></x-a><x-b></x-b><x-c></x-c>'); |
+ doc.body.nodes.replaceRange(1, 2, fragment.nodes); |
+ expect(doc.body.nodes[0].localName, 'x-a'); |
+ expect(doc.body.nodes[1].localName, 'y-b'); |
+ expect(doc.body.nodes[2].localName, 'y-c'); |
+ expect(doc.body.nodes[3].localName, 'x-c'); |
+ expect(doc.body.nodes.length, 4); |
+ |
+ fragment = parseFragment('<y-b></y-b><y-c></y-c>'); |
+ doc = parse('<body><x-a></x-a><x-b></x-b><x-c></x-c>'); |
+ doc.body.nodes.replaceRange(1, 2, [fragment]); |
+ expect(doc.body.nodes[0].localName, 'x-a'); |
+ expect(doc.body.nodes[1].localName, 'y-b'); |
+ expect(doc.body.nodes[2].localName, 'y-c'); |
+ expect(doc.body.nodes[3].localName, 'x-c'); |
+ expect(doc.body.nodes.length, 4); |
+ }); |
+ |
+ test('replaceWith', () { |
+ var fragment = parseFragment('<y-b></y-b><y-c></y-c>'); |
+ var doc = parse('<body><x-a></x-a><x-b></x-b><x-c></x-c>'); |
+ doc.body.nodes[1].replaceWith(fragment); |
+ expect(doc.body.nodes[0].localName, 'x-a'); |
+ expect(doc.body.nodes[1].localName, 'y-b'); |
+ expect(doc.body.nodes[2].localName, 'y-c'); |
+ expect(doc.body.nodes[3].localName, 'x-c'); |
+ expect(doc.body.nodes.length, 4); |
+ }); |
+ }); |
+} |