Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(844)

Unified Diff: pkg/third_party/html5lib/test/dom_test.dart

Issue 224733003: Fix how document fragments are added on NodeList operations (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 6 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « pkg/third_party/html5lib/pubspec.yaml ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pkg/third_party/html5lib/test/dom_test.dart
diff --git a/pkg/third_party/html5lib/test/dom_test.dart b/pkg/third_party/html5lib/test/dom_test.dart
index 43a963732acb31c96c3ea03a1966dbde47aba2cb..99dfb0147696516314e36d6f32a6e2f3bda68d6f 100644
--- a/pkg/third_party/html5lib/test/dom_test.dart
+++ b/pkg/third_party/html5lib/test/dom_test.dart
@@ -20,6 +20,12 @@ main() {
expect(parse('<foo123>').body.querySelector('foo123'), isNotNull);
});
+ test('built from fragments', () {
+ var doc = parse('<body>');
+ doc.body.nodes.add(parseFragment('<x-foo>'));
+ expect(doc.body.querySelector('x-foo'), isNotNull);
+ });
+
test('123 - invalid', () {
var doc = parse('<123>');
expect(() => doc.body.querySelector('123'), throwsUnimplementedError);
@@ -30,4 +36,172 @@ main() {
expect(() => doc.body.querySelector('x\\ny'), throwsUnimplementedError);
});
});
+
+ group('Node.querySelectorAll type selectors', () {
+ test('x-foo', () {
+ expect(parse('<x-foo>').body.querySelectorAll('x-foo').length, 1);
+ });
+
+ test('-x-foo', () {
+ var doc = parse('<body><-x-foo>');
+ expect(doc.body.outerHtml, equals('<body>&lt;-x-foo&gt;</body>'));
+ expect(doc.body.querySelectorAll('-x-foo').length, 0);
+ });
+
+ test('foo123', () {
+ expect(parse('<foo123>').body.querySelectorAll('foo123').length, 1);
+ });
+
+ test('built from fragments', () {
+ var doc = parse('<body>');
+ doc.body.nodes.add(parseFragment('<x-foo></x-foo><x-foo>'));
+ expect(doc.body.querySelectorAll('x-foo').length, 2);
+ });
+
+ test('123 - invalid', () {
+ var doc = parse('<123>');
+ expect(() => doc.body.querySelectorAll('123'), throwsUnimplementedError);
+ });
+
+ test('x\\ny - not implemented', () {
+ var doc = parse('<x\\ny>');
+ expect(() => doc.body.querySelectorAll('x\\ny'),
+ throwsUnimplementedError);
+ });
+ });
+
+ 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);
+ });
+ });
}
« no previous file with comments | « pkg/third_party/html5lib/pubspec.yaml ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698