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

Unified Diff: test/codegen/lib/html/node_test.dart

Issue 1930043002: Add all dart:html tests from the sdk to test/codegen. (Closed) Base URL: git@github.com:dart-lang/dev_compiler.git@master
Patch Set: ptal Created 4 years, 8 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
Index: test/codegen/lib/html/node_test.dart
diff --git a/test/codegen/lib/html/node_test.dart b/test/codegen/lib/html/node_test.dart
new file mode 100644
index 0000000000000000000000000000000000000000..18f7f36dfff9eb9ef344db9382d456d7dad2f9b6
--- /dev/null
+++ b/test/codegen/lib/html/node_test.dart
@@ -0,0 +1,360 @@
+// Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+library NodeTest;
+import 'package:unittest/unittest.dart';
+import 'package:unittest/html_individual_config.dart';
+import 'dart:html';
+import 'dart:svg' as svg;
+
+Node makeNode() => new Element.tag('div');
+Node makeNodeWithChildren() =>
+ new Element.html("<div>Foo<br/><!--baz--></div>");
+
+void testUnsupported(String name, void f()) {
+ test(name, () {
+ expect(f, throwsUnsupportedError);
+ });
+}
+
+main() {
+ useHtmlIndividualConfiguration();
+
+ var isText = predicate((x) => x is Text, 'is a Text');
+ var isComment = predicate((x) => x is Comment, 'is a Comment');
+ var isBRElement = predicate((x) => x is BRElement, 'is a BRElement');
+ var isHRElement = predicate((x) => x is HRElement, 'is a HRElement');
+ var isNodeList = predicate((x) => x is List<Node>, 'is a List<Node>');
+ var isImageElement =
+ predicate((x) => x is ImageElement, 'is an ImageElement');
+ var isInputElement =
+ predicate((x) => x is InputElement, 'is an InputElement');
+
+ group('functional', () {
+ test('toString', () {
+ final nodes = makeNodeWithChildren();
+ // TODO(efortuna): Update this test when you have actual toString methods
+ // for the items in the node List as well.
+ expect(nodes.nodes.toString(), "[Foo, br, baz]");
+ final node = makeNode();
+ expect(node.nodes.toString(), '[]');
+ });
+
+ test('replaceWith', () {
+ final node = makeNodeWithChildren();
+ final subnode = node.nodes[1];
+ final out = subnode.replaceWith(new Text('Bar'));
+ expect(out, equals(subnode), reason: '#replaceWith should be chainable');
+ expect(node.nodes.length, 3);
+ expect(node.nodes[0], isText);
+ expect(node.nodes[0].text, 'Foo');
+ expect(node.nodes[1], isText);
+ expect(node.nodes[1].text, 'Bar');
+ expect(node.nodes[2], isComment);
+ });
+
+ test('append', () {
+ var node = makeNode();
+ node.append(new Element.tag('hr'));
+ expect(node.nodes.last, isHRElement);
+ });
+
+ test('remove', () {
+ final node = makeNodeWithChildren();
+ final subnode = node.nodes[1];
+ subnode.remove();
+ expect(node.nodes.length, 2);
+ expect(node.nodes[0], isText);
+ expect(node.nodes[1], isComment);
+ });
+
+ test('contains', () {
+ final Node node =
+ new Element.html("<div>Foo<span><div>Bar<div></span></div>");
+ // IE10 returns false for contains of nodes.
+ //expect(node.contains(node.nodes.first), isTrue);
+ expect(node.contains(node.nodes[1].nodes.first), isTrue);
+ expect(node.contains(new Text('Foo')), isFalse);
+ });
+
+ test('insertAllBefore', () {
+ var node = makeNodeWithChildren();
+ var b = new DivElement();
+ b.nodes.addAll([
+ new HRElement(),
+ new ImageElement(),
+ new InputElement()
+ ]);
+ node.insertAllBefore(b.nodes, node.nodes[1]);
+ expect(node.nodes[0], isText);
+ expect(node.nodes[1], isHRElement);
+ expect(node.nodes[2], isImageElement);
+ expect(node.nodes[3], isInputElement);
+ expect(node.nodes[4], isBRElement);
+ expect(node.nodes[5], isComment);
+
+ var nodes = [
+ new HRElement(),
+ new ImageElement(),
+ new InputElement()
+ ];
+ node.insertAllBefore(nodes, node.nodes[5]);
+
+ expect(node.nodes[0], isText);
+ expect(node.nodes[1], isHRElement);
+ expect(node.nodes[2], isImageElement);
+ expect(node.nodes[3], isInputElement);
+ expect(node.nodes[4], isBRElement);
+ expect(node.nodes[5], isHRElement);
+ expect(node.nodes[6], isImageElement);
+ expect(node.nodes[7], isInputElement);
+ expect(node.nodes[8], isComment);
+ });
+ });
+
+ group('nodes', () {
+ test('is a NodeList', () {
+ expect(makeNodeWithChildren().nodes, isNodeList);
+ });
+
+ test('indexer', () {
+ var node = new DivElement();
+ expect(() {
+ node.nodes[0];
+ }, throwsRangeError);
+
+ expect(() {
+ node.nodes[-1];
+ }, throwsRangeError);
+ });
+
+ test('first', () {
+ var node = makeNodeWithChildren();
+ expect(node.nodes.first, isText);
+
+ node = new DivElement();
+ expect(() {
+ node = node.nodes.first;
+ }, throwsStateError);
+ });
+
+ test('last', () {
+ var node = makeNodeWithChildren();
+ expect(node.nodes.last, isComment);
+ });
+
+ test('forEach', () {
+ var nodes = [];
+ var node = makeNodeWithChildren();
+ node.nodes.forEach((n) => nodes.add(n));
+ expect(nodes[0], isText);
+ expect(nodes[1], isBRElement);
+ expect(nodes[2], isComment);
+ });
+
+ test('where', () {
+ var filtered =
+ makeNodeWithChildren().nodes.where((n) => n is BRElement).toList();
+ expect(filtered.length, 1);
+ expect(filtered[0], isBRElement);
+ expect(filtered, isNodeList);
+ });
+
+ test('every', () {
+ var node = makeNodeWithChildren();
+ expect(node.nodes.every((n) => n is Node), isTrue);
+ expect(node.nodes.every((n) => n is Comment), isFalse);
+ });
+
+ test('any', () {
+ var node = makeNodeWithChildren();
+ expect(node.nodes.any((n) => n is Comment), isTrue);
+ expect(node.nodes.any((n) => n is svg.SvgElement), isFalse);
+ });
+
+ test('isEmpty', () {
+ expect(makeNode().nodes.isEmpty, isTrue);
+ expect(makeNodeWithChildren().nodes.isEmpty, isFalse);
+ });
+
+ test('length', () {
+ expect(makeNode().nodes.length, 0);
+ expect(makeNodeWithChildren().nodes.length, 3);
+ });
+
+ test('[]', () {
+ var node = makeNodeWithChildren();
+ expect(node.nodes[0], isText);
+ expect(node.nodes[1], isBRElement);
+ expect(node.nodes[2], isComment);
+ });
+
+ test('[]=', () {
+ var node = makeNodeWithChildren();
+ node.nodes[1] = new Element.tag('hr');
+ expect(node.nodes[0], isText);
+ expect(node.nodes[1], isHRElement);
+ expect(node.nodes[2], isComment);
+ });
+
+ test('add', () {
+ var node = makeNode();
+ node.nodes.add(new Element.tag('hr'));
+ expect(node.nodes.last, isHRElement);
+ });
+
+ test('iterator', () {
+ var nodes = [];
+ var node = makeNodeWithChildren();
+ for (var subnode in node.nodes) {
+ nodes.add(subnode);
+ }
+ expect(nodes[0], isText);
+ expect(nodes[1], isBRElement);
+ expect(nodes[2], isComment);
+ });
+
+ test('addAll', () {
+ var node = makeNodeWithChildren();
+ node.nodes.addAll([
+ new Element.tag('hr'),
+ new Element.tag('img'),
+ new Element.tag('input')
+ ]);
+ expect(node.nodes[0], isText);
+ expect(node.nodes[1], isBRElement);
+ expect(node.nodes[2], isComment);
+ expect(node.nodes[3], isHRElement);
+ expect(node.nodes[4], isImageElement);
+ expect(node.nodes[5], isInputElement);
+
+ var a = makeNodeWithChildren();
+ var b = makeNodeWithChildren();
+ var childrenLength = a.children.length + b.children.length;
+ var nodesLength = a.nodes.length + b.nodes.length;
+
+ a.children.addAll(b.children);
+ expect(b.children.length, 0);
+ expect(a.children.length, childrenLength);
+
+ b.nodes.addAll(a.children);
+ expect(a.children.length, 0);
+ expect(b.children.length, childrenLength);
+
+ a.nodes.addAll(b.nodes);
+ expect(b.nodes.length, 0);
+ expect(a.nodes.length, nodesLength);
+ });
+
+ test('insert', () {
+ var node = new DivElement();
+ node.nodes.insert(0, new BRElement());
+ expect(node.nodes[0], isBRElement);
+ node.nodes.insert(0, new HRElement());
+ expect(node.nodes[0], isHRElement);
+ node.nodes.insert(1, new ImageElement());
+ expect(node.nodes[1], isImageElement);
+ node.nodes.insert(node.nodes.length, new InputElement());
+ expect(node.nodes.last, isInputElement);
+ });
+
+ test('clear', () {
+ var node = makeNodeWithChildren();
+ node.nodes.clear();
+ expect(node.nodes, []);
+ });
+
+ test('removeLast', () {
+ var node = makeNodeWithChildren();
+ expect(node.nodes.removeLast(), isComment);
+ expect(node.nodes.length, 2);
+ expect(node.nodes.removeLast(), isBRElement);
+ expect(node.nodes.length, 1);
+ });
+
+ test('getRange', () {
+ var items = makeNodeWithChildren().nodes.getRange(0, 1);
+ expect(items.length, 1);
+ expect(items.first, isText);
+ });
+
+ test('sublist', () {
+ var node = makeNodeWithChildren();
+ expect(node.nodes.sublist(1, 3), isNodeList);
+ });
+
+ test('insertAll', () {
+ var node = makeNodeWithChildren();
+ var b = new DivElement();
+ b.nodes.addAll([
+ new HRElement(),
+ new ImageElement(),
+ new InputElement()
+ ]);
+ node.nodes.insertAll(1, b.nodes);
+ expect(node.nodes[0], isText);
+ expect(node.nodes[1], isHRElement);
+ expect(node.nodes[2], isImageElement);
+ expect(node.nodes[3], isInputElement);
+ expect(node.nodes[4], isBRElement);
+ expect(node.nodes[5], isComment);
+
+ var nodes = [
+ new HRElement(),
+ new ImageElement(),
+ new InputElement()
+ ];
+ node.nodes.insertAll(5, nodes);
+
+ expect(node.nodes[0], isText);
+ expect(node.nodes[1], isHRElement);
+ expect(node.nodes[2], isImageElement);
+ expect(node.nodes[3], isInputElement);
+ expect(node.nodes[4], isBRElement);
+ expect(node.nodes[5], isHRElement);
+ expect(node.nodes[6], isImageElement);
+ expect(node.nodes[7], isInputElement);
+ expect(node.nodes[8], isComment);
+
+ var d = new DivElement();
+ var ns = d.nodes;
+ // `insertAll` should work when positioned at end.
+ ns.insertAll(ns.length, [new HRElement()]);
+ expect(ns.length, 1);
+ expect(ns[0], isHRElement);
+ });
+
+ testUnsupported('removeRange', () {
+ makeNodeWithChildren().nodes.removeRange(0, 1);
+ });
+
+ testUnsupported('replaceRange', () {
+ makeNodeWithChildren().nodes.replaceRange(0, 1, [new InputElement()]);
+ });
+
+ testUnsupported('fillRange', () {
+ makeNodeWithChildren().nodes.fillRange(0, 1, null);
+ });
+
+ testUnsupported('setAll', () {
+ makeNodeWithChildren().nodes.setAll(0, [new InputElement()]);
+ });
+ });
+
+ group('iterating', () {
+ test('NodeIterator', () {
+ var root = makeNodeWithChildren();
+ var nodeIterator = new NodeIterator(root, NodeFilter.SHOW_COMMENT);
+ expect(nodeIterator.nextNode(), isComment);
+ expect(nodeIterator.nextNode(), isNull);
+ });
+
+ test('TreeWalker', () {
+ var root = makeNodeWithChildren();
+ var treeWalker = new TreeWalker(root, NodeFilter.SHOW_COMMENT);
+ expect(treeWalker.nextNode(), isComment);
+ expect(treeWalker.nextNode(), isNull);
+ });
+ });
+}

Powered by Google App Engine
This is Rietveld 408576698