asynctest(
'browser.tinymce.core.dom.TreeWalkerTest',
[
'ephox.agar.api.Pipeline',
'ephox.mcagar.api.LegacyUnit',
'tinymce.core.dom.TreeWalker',
'tinymce.core.test.ViewBlock'
],
function (Pipeline, LegacyUnit, TreeWalker, ViewBlock) {
var success = arguments[arguments.length - 2];
var failure = arguments[arguments.length - 1];
var suite = LegacyUnit.createSuite();
var viewBlock = ViewBlock();
var nodes;
var setup = function () {
var all = function (node) {
var list = [node];
if (node.hasChildNodes()) {
for (var i = 0; i < node.childNodes.length; i++) {
list = list.concat(all(node.childNodes[i]));
}
}
return list;
};
viewBlock.update(
'1' +
'<ul>' +
'<li>' +
'2' +
'<ul>' +
'<li>3</li>' +
'<li>4</li>' +
'</ul>' +
'</li>' +
'<li>' +
'5' +
'<ul>' +
'<li>6</li>' +
'<li>7</li>' +
'</ul>' +
'</li>' +
'</ul>' +
'8'
);
nodes = all(viewBlock.get()).slice(1);
};
var compareNodeLists = function (expectedNodes, actutalNodes) {
if (expectedNodes.length !== actutalNodes.length) {
return false;
}
for (var i = 0; i < expectedNodes.length; i++) {
if (expectedNodes[i] !== actutalNodes[i]) {
return false;
}
}
return true;
};
suite.test('next', function () {
var walker = new TreeWalker(nodes[0], viewBlock.get());
var actualNodes;
actualNodes = [walker.current()];
while ((walker.next())) {
actualNodes.push(walker.current());
}
LegacyUnit.equal(compareNodeLists(nodes, actualNodes), true, 'Should be the same');
});
suite.test('prev2', function () {
var walker = new TreeWalker(nodes[nodes.length - 1], viewBlock.get());
var actualNodes;
actualNodes = [walker.current()];
while ((walker.prev2())) {
actualNodes.push(walker.current());
}
actualNodes = actualNodes.reverse();
LegacyUnit.equal(compareNodeLists(nodes, actualNodes), true, 'Should be the same');
});
suite.test('prev2(shallow:true)', function () {
var walker = new TreeWalker(nodes[nodes.length - 1], viewBlock.get());
var actualNodes;
actualNodes = [walker.current()];
while ((walker.prev2(true))) {
actualNodes.push(walker.current());
}
actualNodes = actualNodes.reverse();
LegacyUnit.equal(compareNodeLists(viewBlock.get().childNodes, actualNodes), true, 'Should be the same');
});
viewBlock.attach();
setup();
Pipeline.async({}, suite.toSteps({}), function () {
viewBlock.detach();
success();
}, failure);
}
);
|