blob: b9e2f9accf2ffa014677ddeff7ecb65866666d3d [file] [log] [blame]
/*
* Copyright (c) 2014, 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.
*/
/**
* @description This test checks the basic functionality of TreeWalker.
*/
import "dart:html";
import "../../../../Utils/expect.dart";
//import "../../../testcommon.dart";
import "../../../resources/testharness.dart";
main() {
createSampleDOM()
{
// Tree structure:
// #a
// |
// +----+----+
// | |
// "b" #c
// |
// +----+----+
// | |
// #d <!--j-->
// |
// +----+----+
// | | |
// "e" #f "i"
// |
// +--+--+
// | |
// "g" <!--h-->
var div = document.createElement('div');
div.id = 'a';
div.innerHtml = 'b<div id="c"><div id="d">e<span id="f">g<!--h--></span>i</div><!--j--></div>';
return div;
}
test(() {
var root = createSampleDOM();
var walker = new TreeWalker(root, 0xFFFFFFFF);
assert_true(walker is TreeWalker);
assert_equals(walker.root, root);
assert_equals(walker.whatToShow, 0xFFFFFFFF);
assert_equals(walker.filter, null);
assert_equals(walker.currentNode, root);
//assert_readonly(walker, 'root');
//assert_readonly(walker, 'whatToShow');
//assert_readonly(walker, 'filter');
assert_idl_attribute(walker.parentNode);
assert_idl_attribute(walker.firstChild);
assert_idl_attribute(walker.lastChild);
assert_idl_attribute(walker.previousSibling);
assert_idl_attribute(walker.nextSibling);
assert_idl_attribute(walker.previousNode);
assert_idl_attribute(walker.nextNode);
}, 'Construct a TreeWalker by new TreeWalker().');
test(() {
assert_throws(() { new TreeWalker(); });
assert_throws(() { new TreeWalker(null); });
assert_throws(() { new TreeWalker(new Object()); });
assert_throws(() { new TreeWalker(1); });
}, 'Give an invalid root node to new TreeWalker().');
// |expected| should be an object indicating the expected type of node.
assert_node(actual, expected)
{
// have to use more strict type assertions for dart,
// since type checking is with runtimeType,
// ex. DivElement instead of Element
assert_equals(actual.runtimeType, expected['type']);
if (expected.containsKey('id'))
assert_equals(actual.id, expected['id']);
if (expected.containsKey('nodeValue'))
assert_equals(actual.nodeValue, expected['nodeValue']);
}
test(() {
var root = createSampleDOM();
var walker = new TreeWalker(root, 0xFFFFFFFF);
var f = root.lastChild.firstChild.childNodes[1]; // An element node: div#f.
var body = document.body; // An element outside |root|.
assert_node(walker.currentNode, { 'type': DivElement, 'id': 'a' });
assert_equals(walker.parentNode(), null);
assert_node(walker.currentNode, { 'type': DivElement, 'id': 'a' });
assert_node(walker.firstChild(), { 'type': Text, 'nodeValue': 'b' });
assert_node(walker.currentNode, { 'type': Text, 'nodeValue': 'b' });
assert_node(walker.nextSibling(), { 'type': DivElement, 'id': 'c' });
assert_node(walker.currentNode, { 'type': DivElement, 'id': 'c' });
assert_node(walker.lastChild(), { 'type': Comment, 'nodeValue': 'j' });
assert_node(walker.currentNode, { 'type': Comment, 'nodeValue': 'j' });
assert_node(walker.previousSibling(), { 'type': DivElement, 'id': 'd' });
assert_node(walker.currentNode, { 'type': DivElement, 'id': 'd' });
assert_node(walker.nextNode(), { 'type': Text, 'nodeValue': 'e' });
assert_node(walker.currentNode, { 'type': Text, 'nodeValue': 'e' });
assert_node(walker.parentNode(), { 'type': DivElement, 'id': 'd' });
assert_node(walker.currentNode, { 'type': DivElement, 'id': 'd' });
assert_node(walker.previousNode(), { 'type': DivElement, 'id': 'c' });
assert_node(walker.currentNode, { 'type': DivElement, 'id': 'c' });
assert_equals(walker.nextSibling(), null);
assert_node(walker.currentNode, { 'type': DivElement, 'id': 'c' });
walker.currentNode = f;
assert_equals(walker.currentNode, f);
}, 'Walk over nodes.');
}