| 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);
|
| + });
|
| + });
|
| +}
|
|
|