blob: 87da7b1f4439fd4d3d600bd122818ea8c35b97e8 [file] [log] [blame]
var assert = require('assert'),
html = require('../../lib/common/html'),
FormattingElementList = require('../../lib/tree_construction/formatting_element_list'),
TestUtils = require('../test_utils');
//Aliases
var $ = html.TAG_NAMES,
NS = html.NAMESPACES;
TestUtils.generateTestsForEachTreeAdapter(module.exports, function (_test, treeAdapter) {
_test['Insert marker'] = function () {
var list = new FormattingElementList(treeAdapter);
list.insertMarker();
assert.strictEqual(list.length, 1);
assert.strictEqual(list.entries[0].type, FormattingElementList.MARKER_ENTRY);
list.insertMarker();
assert.strictEqual(list.length, 2);
assert.strictEqual(list.entries[1].type, FormattingElementList.MARKER_ENTRY);
};
_test['Push element'] = function () {
var list = new FormattingElementList(treeAdapter),
element1Token = 'token1',
element2Token = 'token2',
element1 = treeAdapter.createElement($.DIV, NS.HTML, []),
element2 = treeAdapter.createElement($.P, NS.HTML, []);
list.pushElement(element1, element1Token);
assert.strictEqual(list.length, 1);
assert.strictEqual(list.entries[0].type, FormattingElementList.ELEMENT_ENTRY);
assert.strictEqual(list.entries[0].element, element1);
assert.strictEqual(list.entries[0].token, element1Token);
list.pushElement(element2, element2Token);
assert.strictEqual(list.length, 2);
assert.strictEqual(list.entries[1].type, FormattingElementList.ELEMENT_ENTRY);
assert.strictEqual(list.entries[1].element, element2);
assert.strictEqual(list.entries[1].token, element2Token);
};
_test['Insert element after bookmark'] = function () {
var list = new FormattingElementList(treeAdapter),
token = 'token1',
element1 = treeAdapter.createElement($.DIV, NS.HTML, []),
element2 = treeAdapter.createElement($.P, NS.HTML, []),
element3 = treeAdapter.createElement($.SPAN, NS.HTML, []),
element4 = treeAdapter.createElement($.TITLE, NS.HTML, []);
list.pushElement(element1, token);
list.bookmark = list.entries[0];
list.pushElement(element2, token);
list.pushElement(element3, token);
list.insertElementAfterBookmark(element4, token);
assert.strictEqual(list.length, 4);
assert.strictEqual(list.entries[1].element, element4);
};
_test['Push element - Noah Ark condition'] = function () {
var list = new FormattingElementList(treeAdapter),
token1 = 'token1',
token2 = 'token2',
token3 = 'token3',
token4 = 'token4',
token5 = 'token5',
token6 = 'token6',
element1 = treeAdapter.createElement($.DIV, NS.HTML, [
{name: 'attr1', value: 'val1'},
{name: 'attr2', value: 'val2'}
]),
element2 = treeAdapter.createElement($.DIV, NS.HTML, [
{name: 'attr1', value: 'val1'},
{name: 'attr2', value: 'someOtherValue'}
]);
list.pushElement(element1, token1);
list.pushElement(element1, token2);
list.pushElement(element2, token3);
list.pushElement(element1, token4);
assert.strictEqual(list.length, 4);
assert.strictEqual(list.entries[0].token, token1);
assert.strictEqual(list.entries[1].token, token2);
assert.strictEqual(list.entries[2].token, token3);
assert.strictEqual(list.entries[3].token, token4);
list.pushElement(element1, token5);
assert.strictEqual(list.length, 4);
assert.strictEqual(list.entries[0].token, token2);
assert.strictEqual(list.entries[1].token, token3);
assert.strictEqual(list.entries[2].token, token4);
assert.strictEqual(list.entries[3].token, token5);
list.insertMarker();
list.pushElement(element1, token6);
assert.strictEqual(list.length, 6);
assert.strictEqual(list.entries[0].token, token2);
assert.strictEqual(list.entries[1].token, token3);
assert.strictEqual(list.entries[2].token, token4);
assert.strictEqual(list.entries[3].token, token5);
assert.strictEqual(list.entries[4].type, FormattingElementList.MARKER_ENTRY);
assert.strictEqual(list.entries[5].token, token6);
};
_test['Clear to the last marker'] = function () {
var list = new FormattingElementList(treeAdapter),
token = 'token',
element1 = treeAdapter.createElement($.DIV, NS.HTML, [
{name: 'attr1', value: 'val1'},
{name: 'attr2', value: 'val2'}
]),
element2 = treeAdapter.createElement($.DIV, NS.HTML, [
{name: 'attr1', value: 'val1'},
{name: 'attr2', value: 'someOtherValue'}
]);
list.pushElement(element1, token);
list.pushElement(element2, token);
list.insertMarker();
list.pushElement(element1, token);
list.pushElement(element1, token);
list.pushElement(element2, token);
list.clearToLastMarker();
assert.strictEqual(list.length, 2);
};
_test['Remove entry'] = function () {
var list = new FormattingElementList(treeAdapter),
token = 'token',
element1 = treeAdapter.createElement($.DIV, NS.HTML, [
{name: 'attr1', value: 'val1'},
{name: 'attr2', value: 'val2'}
]),
element2 = treeAdapter.createElement($.DIV, NS.HTML, [
{name: 'attr1', value: 'val1'},
{name: 'attr2', value: 'someOtherValue'}
]);
list.pushElement(element1, token);
list.pushElement(element2, token);
list.pushElement(element2, token);
list.removeEntry(list.entries[0]);
assert.strictEqual(list.length, 2);
for (var i = list.length - 1; i >= 0; i--)
assert.notStrictEqual(list.entries[i].element, element1);
};
_test['Get entry in scope with given tag name'] = function () {
var list = new FormattingElementList(treeAdapter),
token = 'token',
element = treeAdapter.createElement($.DIV, NS.HTML, []);
assert.ok(!list.getElementEntryInScopeWithTagName($.DIV));
list.pushElement(element, token);
list.pushElement(element, token);
assert.strictEqual(list.getElementEntryInScopeWithTagName($.DIV), list.entries[1]);
list.insertMarker();
assert.ok(!list.getElementEntryInScopeWithTagName($.DIV));
list.pushElement(element, token);
assert.strictEqual(list.getElementEntryInScopeWithTagName($.DIV), list.entries[3]);
};
_test['Get element entry'] = function () {
var list = new FormattingElementList(treeAdapter),
token = 'token',
element1 = treeAdapter.createElement($.DIV, NS.HTML, []),
element2 = treeAdapter.createElement($.A, NS.HTML, []);
list.pushElement(element2, token);
list.pushElement(element1, token);
list.pushElement(element2, token);
list.insertMarker();
var entry = list.getElementEntry(element1);
assert.strictEqual(entry.type, FormattingElementList.ELEMENT_ENTRY);
assert.strictEqual(entry.token, token);
assert.strictEqual(entry.element, element1);
};
});