/// Additional feature tests that aren't based on test data. library; import 'package:html/dom.dart'; import 'package:html/parser.dart'; import 'package:test/test.dart'; void main() { group('Element', () { test('classes', () { final barBaz = Element.html('
'); final quxBaz = Element.html('
'); 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('
' '
' '
' '
'); test('getElementById', () { final foo = doc.body!.nodes[0]; final fooVar = foo.nodes[2]; expect((foo as Element).id, 'foo'); expect((fooVar as Element).id, 'Foo'); expect(doc.getElementById('foo'), foo); expect(doc.getElementById('Foo'), fooVar); }); test('getElementsByClassName', () { final foo = doc.body!.nodes[0]; final barBaz = foo.nodes[0]; final quxBaz = foo.nodes[1]; expect((barBaz as Element).className, ' bar baz'); expect((quxBaz as Element).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', () { final foo = doc.body!.nodes[0]; final barBaz = foo.nodes[0]; final quxBaz = foo.nodes[1]; final fooVar = foo.nodes[2]; expect(doc.getElementsByTagName('div'), [foo, barBaz, quxBaz, fooVar]); }); }); group('fragments are flattened', () { test('add', () { final doc = parse(''); doc.body!.nodes.add(parseFragment('')); expect((doc.body!.nodes[0] as Element).localName, 'x-foo'); doc.body!.nodes.add(parseFragment('')); expect((doc.body!.nodes[1] as Element).localName, 'x-bar'); }); test('addLast', () { final doc = parse(''); doc.body!.nodes.addLast(parseFragment('')); expect((doc.body!.nodes[0] as Element).localName, 'x-foo'); doc.body!.nodes.addLast(parseFragment('')); expect((doc.body!.nodes[1] as Element).localName, 'x-bar'); }); test('addAll', () { final doc = parse(''); doc.body!.nodes.addAll([parseFragment('')]); expect((doc.body!.nodes[0] as Element).localName, 'x-a'); expect((doc.body!.nodes[1] as Element).localName, 'x-b'); expect((doc.body!.nodes[2] as Element).localName, 'x-c'); }); test('insert', () { var doc = parse(''); doc.body!.nodes.insert(0, parseFragment('')); expect((doc.body!.nodes[0] as Element).localName, 'x-b'); expect((doc.body!.nodes[1] as Element).localName, 'x-c'); expect((doc.body!.nodes[2] as Element).localName, 'x-a'); doc = parse(''); doc.body!.nodes.insert(1, parseFragment('')); expect((doc.body!.nodes[0] as Element).localName, 'x-a'); expect((doc.body!.nodes[1] as Element).localName, 'x-b'); expect((doc.body!.nodes[2] as Element).localName, 'x-c'); doc = parse(''); doc.body!.nodes.insert(0, parseFragment('')); doc.body!.nodes.insert(1, parseFragment('')); expect((doc.body!.nodes[0] as Element).localName, 'x-b'); expect((doc.body!.nodes[1] as Element).localName, 'x-c'); expect((doc.body!.nodes[2] as Element).localName, 'x-a'); }); test('insertAll', () { var doc = parse(''); doc.body!.nodes.insertAll(0, [parseFragment('')]); expect((doc.body!.nodes[0] as Element).localName, 'x-b'); expect((doc.body!.nodes[1] as Element).localName, 'x-c'); expect((doc.body!.nodes[2] as Element).localName, 'x-a'); expect(doc.body!.nodes.length, 3); doc = parse(''); doc.body!.nodes.insertAll(1, [parseFragment('')]); expect((doc.body!.nodes[0] as Element).localName, 'x-a'); expect((doc.body!.nodes[1] as Element).localName, 'x-b'); expect((doc.body!.nodes[2] as Element).localName, 'x-c'); doc = parse(''); doc.body!.nodes.insertAll(0, [parseFragment('')]); doc.body!.nodes.insertAll(1, [parseFragment('')]); expect((doc.body!.nodes[0] as Element).localName, 'x-b'); expect((doc.body!.nodes[1] as Element).localName, 'x-c'); expect((doc.body!.nodes[2] as Element).localName, 'x-a'); }); test('operator []=', () { var doc = parse(''); doc.body!.nodes[0] = parseFragment(''); expect((doc.body!.nodes[0] as Element).localName, 'x-b'); expect((doc.body!.nodes[1] as Element).localName, 'x-c'); expect(doc.body!.nodes.length, 2); doc = parse(''); doc.body!.nodes[1] = parseFragment(''); expect((doc.body!.nodes[0] as Element).localName, 'x-a'); expect((doc.body!.nodes[1] as Element).localName, 'y-b'); expect((doc.body!.nodes[2] as Element).localName, 'y-c'); expect((doc.body!.nodes[3] as Element).localName, 'x-c'); expect(doc.body!.nodes.length, 4); }); test('setRange', () { var fragment = parseFragment(''); var doc = parse(''); doc.body!.nodes.setRange(1, 2, fragment.nodes, 0); expect((doc.body!.nodes[0] as Element).localName, 'x-a'); expect((doc.body!.nodes[1] as Element).localName, 'y-b'); expect((doc.body!.nodes[2] as Element).localName, 'y-c'); expect(doc.body!.nodes.length, 3); fragment = parseFragment(''); doc = parse(''); doc.body!.nodes.setRange(1, 1, [fragment], 0); expect((doc.body!.nodes[0] as Element).localName, 'x-a'); expect((doc.body!.nodes[1] as Element).localName, 'y-b'); expect((doc.body!.nodes[2] as Element).localName, 'y-c'); expect((doc.body!.nodes[3] as Element).localName, 'x-c'); expect(doc.body!.nodes.length, 4); }); test('replaceRange', () { var fragment = parseFragment(''); var doc = parse(''); doc.body!.nodes.replaceRange(1, 2, fragment.nodes); expect((doc.body!.nodes[0] as Element).localName, 'x-a'); expect((doc.body!.nodes[1] as Element).localName, 'y-b'); expect((doc.body!.nodes[2] as Element).localName, 'y-c'); expect((doc.body!.nodes[3] as Element).localName, 'x-c'); expect(doc.body!.nodes.length, 4); fragment = parseFragment(''); doc = parse(''); doc.body!.nodes.replaceRange(1, 2, [fragment]); expect((doc.body!.nodes[0] as Element).localName, 'x-a'); expect((doc.body!.nodes[1] as Element).localName, 'y-b'); expect((doc.body!.nodes[2] as Element).localName, 'y-c'); expect((doc.body!.nodes[3] as Element).localName, 'x-c'); expect(doc.body!.nodes.length, 4); }); test('replaceWith', () { final fragment = parseFragment(''); final doc = parse(''); doc.body!.nodes[1].replaceWith(fragment); expect((doc.body!.nodes[0] as Element).localName, 'x-a'); expect((doc.body!.nodes[1] as Element).localName, 'y-b'); expect((doc.body!.nodes[2] as Element).localName, 'y-c'); expect((doc.body!.nodes[3] as Element).localName, 'x-c'); expect(doc.body!.nodes.length, 4); }); }); }