aboutsummaryrefslogtreecommitdiff
path: root/contexts/data/lib/closure-library/closure/goog/dom/dom_test.js
diff options
context:
space:
mode:
Diffstat (limited to 'contexts/data/lib/closure-library/closure/goog/dom/dom_test.js')
-rw-r--r--contexts/data/lib/closure-library/closure/goog/dom/dom_test.js1385
1 files changed, 0 insertions, 1385 deletions
diff --git a/contexts/data/lib/closure-library/closure/goog/dom/dom_test.js b/contexts/data/lib/closure-library/closure/goog/dom/dom_test.js
deleted file mode 100644
index 0150862..0000000
--- a/contexts/data/lib/closure-library/closure/goog/dom/dom_test.js
+++ /dev/null
@@ -1,1385 +0,0 @@
-// Copyright 2009 The Closure Library Authors. All Rights Reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS-IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-/**
- * @fileoverview Shared code for dom_test.html and dom_quirks_test.html.
- */
-
-goog.provide('goog.dom.dom_test');
-
-goog.require('goog.dom');
-goog.require('goog.dom.DomHelper');
-goog.require('goog.dom.NodeType');
-goog.require('goog.dom.TagName');
-goog.require('goog.object');
-goog.require('goog.testing.asserts');
-goog.require('goog.userAgent');
-goog.require('goog.userAgent.product');
-goog.require('goog.userAgent.product.isVersion');
-
-goog.setTestOnly('dom_test');
-
-var $ = goog.dom.getElement;
-
-var divForTestingScrolling;
-var myIframe;
-var myIframeDoc;
-
-function setUpPage() {
- divForTestingScrolling = document.createElement('div');
- divForTestingScrolling.style.width = '5000px';
- divForTestingScrolling.style.height = '5000px';
- document.body.appendChild(divForTestingScrolling);
-
- // Setup for the iframe
- myIframe = $('myIframe');
- myIframeDoc = goog.dom.getFrameContentDocument(
- /** @type {HTMLIFrameElement} */ (myIframe));
-
- // Set up document for iframe: total height of elements in document is 65
- // If the elements are not create like below, IE will get a wrong height for
- // the document.
- myIframeDoc.open();
- // Make sure we progate the compat mode
- myIframeDoc.write((goog.dom.isCss1CompatMode() ? '<!DOCTYPE html>' : '') +
- '<style>body{margin:0;padding:0}</style>' +
- '<div style="height:42px;font-size:1px;line-height:0;">' +
- 'hello world</div>' +
- '<div style="height:23px;font-size:1px;line-height:0;">' +
- 'hello world</div>');
- myIframeDoc.close();
-}
-
-function tearDownPage() {
- document.body.removeChild(divForTestingScrolling);
-}
-
-function tearDown() {
- window.scrollTo(0, 0);
-}
-
-function testDom() {
- assert('Dom library exists', typeof goog.dom != 'undefined');
-}
-
-function testGetElement() {
- var el = $('testEl');
- assertEquals('Should be able to get id', el.id, 'testEl');
-
- assertEquals($, goog.dom.getElement);
- assertEquals(goog.dom.$, goog.dom.getElement);
-}
-
-function testGetElementsByTagNameAndClass() {
- assertEquals('Should get 6 spans',
- goog.dom.getElementsByTagNameAndClass('span').length, 6);
- assertEquals('Should get 6 spans',
- goog.dom.getElementsByTagNameAndClass('SPAN').length, 6);
- assertEquals('Should get 3 spans',
- goog.dom.getElementsByTagNameAndClass('span', 'test1').length, 3);
- assertEquals('Should get 1 span',
- goog.dom.getElementsByTagNameAndClass('span', 'test2').length, 1);
- assertEquals('Should get 1 span',
- goog.dom.getElementsByTagNameAndClass('SPAN', 'test2').length, 1);
- assertEquals('Should get lots of elements',
- goog.dom.getElementsByTagNameAndClass().length,
- document.getElementsByTagName('*').length);
-
- assertEquals('Should get 1 span',
- goog.dom.getElementsByTagNameAndClass('span', null, $('testEl')).length,
- 1);
-
- // '*' as the tag name should be equivalent to all tags
- var container = goog.dom.getElement('span-container');
- assertEquals(5,
- goog.dom.getElementsByTagNameAndClass('*', undefined, container).length);
- assertEquals(3,
- goog.dom.getElementsByTagNameAndClass('*', 'test1', container).length);
- assertEquals(1,
- goog.dom.getElementsByTagNameAndClass('*', 'test2', container).length);
-
- // Some version of WebKit have problems with mixed-case class names
- assertEquals(1,
- goog.dom.getElementsByTagNameAndClass(
- undefined, 'mixedCaseClass').length);
-
- // Make sure that out of bounds indices are OK
- assertUndefined(
- goog.dom.getElementsByTagNameAndClass(undefined, 'noSuchClass')[0]);
-
- assertEquals(goog.dom.getElementsByTagNameAndClass,
- goog.dom.getElementsByTagNameAndClass);
-}
-
-function testGetElementsByClass() {
- assertEquals(3, goog.dom.getElementsByClass('test1').length);
- assertEquals(1, goog.dom.getElementsByClass('test2').length);
- assertEquals(0, goog.dom.getElementsByClass('nonexistant').length);
-
- var container = goog.dom.getElement('span-container');
- assertEquals(3, goog.dom.getElementsByClass('test1', container).length);
-}
-
-function testGetElementByClass() {
- assertNotNull(goog.dom.getElementByClass('test1'));
- assertNotNull(goog.dom.getElementByClass('test2'));
- // assertNull(goog.dom.getElementByClass('nonexistant'));
-
- var container = goog.dom.getElement('span-container');
- assertNotNull(goog.dom.getElementByClass('test1', container));
-}
-
-function testSetProperties() {
- var attrs = {'name': 'test3', 'title': 'A title', 'random': 'woop'};
- var el = $('testEl');
-
- var res = goog.dom.setProperties(el, attrs);
- assertEquals('Should be equal', el.name, 'test3');
- assertEquals('Should be equal', el.title, 'A title');
- assertEquals('Should be equal', el.random, 'woop');
-}
-
-function testSetPropertiesDirectAttributeMap() {
- var attrs = {'usemap': '#myMap'};
- var el = goog.dom.createDom('img');
-
- var res = goog.dom.setProperties(el, attrs);
- assertEquals('Should be equal', '#myMap', el.getAttribute('usemap'));
-}
-
-function testSetPropertiesAria() {
- var attrs = {
- 'aria-hidden': 'true',
- 'aria-label': 'This is a label',
- 'role': 'presentation'
- };
- var el = goog.dom.createDom('div');
-
- goog.dom.setProperties(el, attrs);
- assertEquals('Should be equal', 'true', el.getAttribute('aria-hidden'));
- assertEquals('Should be equal',
- 'This is a label', el.getAttribute('aria-label'));
- assertEquals('Should be equal', 'presentation', el.getAttribute('role'));
-}
-
-function testSetPropertiesData() {
- var attrs = {
- 'data-tooltip': 'This is a tooltip',
- 'data-tooltip-delay': '100'
- };
- var el = goog.dom.createDom('div');
-
- goog.dom.setProperties(el, attrs);
- assertEquals('Should be equal', 'This is a tooltip',
- el.getAttribute('data-tooltip'));
- assertEquals('Should be equal', '100',
- el.getAttribute('data-tooltip-delay'));
-}
-
-function testSetTableProperties() {
- var attrs = {
- 'style': 'padding-left: 10px;',
- 'class': 'mytestclass',
- 'height': '101',
- 'cellpadding': '15'
- };
- var el = $('testTable1');
-
- var res = goog.dom.setProperties(el, attrs);
- assertEquals('Should be equal', el.style.paddingLeft, '10px');
- assertEquals('Should be equal', el.className, 'mytestclass');
- assertEquals('Should be equal', el.getAttribute('height'), '101');
- assertEquals('Should be equal', el.cellPadding, '15');
-}
-
-function testGetViewportSize() {
- // TODO: This is failing in the test runner now, fix later.
- //var dims = getViewportSize();
- //assertNotUndefined('Should be defined at least', dims.width);
- //assertNotUndefined('Should be defined at least', dims.height);
-}
-
-function testGetViewportSizeInIframe() {
- var iframe = /** @type {HTMLIFrameElement} */ (goog.dom.getElement('iframe'));
- var contentDoc = goog.dom.getFrameContentDocument(iframe);
- contentDoc.write('<body></body>');
-
- var outerSize = goog.dom.getViewportSize();
- var innerSize = (new goog.dom.DomHelper(contentDoc)).getViewportSize();
- assert('Viewport sizes must not match',
- innerSize.width != outerSize.width);
-}
-
-function testGetDocumentHeightInIframe() {
- var doc = goog.dom.getDomHelper(myIframeDoc).getDocument();
- var height = goog.dom.getDomHelper(myIframeDoc).getDocumentHeight();
-
- // Broken in webkit quirks mode and in IE8+
- if ((goog.dom.isCss1CompatMode_(doc) || !goog.userAgent.WEBKIT) &&
- !isIE8OrHigher()) {
- assertEquals('height should be 65', 42 + 23, height);
- }
-}
-
-function testCreateDom() {
- var el = goog.dom.$dom('div',
- {
- style: 'border: 1px solid black; width: 50%; background-color: #EEE;',
- onclick: "alert('woo')"
- },
- goog.dom.$dom('p', {style: 'font: normal 12px arial; color: red; '},
- 'Para 1'),
- goog.dom.$dom('p', {style: 'font: bold 18px garamond; color: blue; '},
- 'Para 2'),
- goog.dom.$dom('p', {style: 'font: normal 24px monospace; color: green'},
- 'Para 3 ',
- goog.dom.$dom('a', {
- name: 'link', href: 'http://bbc.co.uk'
- },
- 'has a link'),
- ', how cool is this?'));
-
- assertEquals('Tagname should be a DIV', 'DIV', el.tagName);
- assertEquals('Style width should be 50%', '50%', el.style.width);
- assertEquals('first child is a P tag', 'P', el.childNodes[0].tagName);
- assertEquals('second child .innerHTML', 'Para 2',
- el.childNodes[1].innerHTML);
-
- assertEquals(goog.dom.$dom, goog.dom.createDom);
-}
-
-function testCreateDomNoChildren() {
- var el;
-
- // Test unspecified children.
- el = goog.dom.$dom('div');
- assertNull('firstChild should be null', el.firstChild);
-
- // Test null children.
- el = goog.dom.$dom('div', null, null);
- assertNull('firstChild should be null', el.firstChild);
-
- // Test empty array of children.
- el = goog.dom.$dom('div', null, []);
- assertNull('firstChild should be null', el.firstChild);
-}
-
-function testCreateDomAcceptsArray() {
- var items = [
- goog.dom.$dom('li', {}, 'Item 1'),
- goog.dom.$dom('li', {}, 'Item 2')
- ];
- var ul = goog.dom.$dom('ul', {}, items);
- assertEquals('List should have two children', 2, ul.childNodes.length);
- assertEquals('First child should be an LI tag',
- 'LI', ul.firstChild.tagName);
- assertEquals('Item 1', ul.childNodes[0].innerHTML);
- assertEquals('Item 2', ul.childNodes[1].innerHTML);
-}
-
-function testCreateDomStringArg() {
- var el;
-
- // Test string arg.
- el = goog.dom.$dom('div', null, 'Hello');
- assertEquals('firstChild should be a text node', goog.dom.NodeType.TEXT,
- el.firstChild.nodeType);
- assertEquals('firstChild should have node value "Hello"', 'Hello',
- el.firstChild.nodeValue);
-
- // Test text node arg.
- el = goog.dom.$dom('div', null, goog.dom.createTextNode('World'));
- assertEquals('firstChild should be a text node', goog.dom.NodeType.TEXT,
- el.firstChild.nodeType);
- assertEquals('firstChild should have node value "World"', 'World',
- el.firstChild.nodeValue);
-}
-
-function testCreateDomNodeListArg() {
- var el;
- var emptyElem = goog.dom.$dom('div');
- var simpleElem = goog.dom.$dom('div', null, 'Hello, world!');
- var complexElem = goog.dom.$dom('div', null, 'Hello, ',
- goog.dom.$dom('b', null, 'world'),
- goog.dom.createTextNode('!'));
-
- // Test empty node list.
- el = goog.dom.$dom('div', null, emptyElem.childNodes);
- assertNull('emptyElem.firstChild should be null', emptyElem.firstChild);
- assertNull('firstChild should be null', el.firstChild);
-
- // Test simple node list.
- el = goog.dom.$dom('div', null, simpleElem.childNodes);
- assertNull('simpleElem.firstChild should be null', simpleElem.firstChild);
- assertEquals('firstChild should be a text node with value "Hello, world!"',
- 'Hello, world!', el.firstChild.nodeValue);
-
- // Test complex node list.
- el = goog.dom.$dom('div', null, complexElem.childNodes);
- assertNull('complexElem.firstChild should be null', complexElem.firstChild);
- assertEquals('Element should have 3 child nodes', 3, el.childNodes.length);
- assertEquals('childNodes[0] should be a text node with value "Hello, "',
- 'Hello, ', el.childNodes[0].nodeValue);
- assertEquals('childNodes[1] should be an element node with tagName "B"',
- 'B', el.childNodes[1].tagName);
- assertEquals('childNodes[2] should be a text node with value "!"', '!',
- el.childNodes[2].nodeValue);
-}
-
-function testCreateDomWithTypeAttribute() {
- var el = goog.dom.createDom('button', {'type': 'reset', 'id': 'cool-button'},
- 'Cool button');
- assertNotNull('Button with type attribute was created successfully', el);
- assertEquals('Button has correct type attribute', 'reset', el.type);
- assertEquals('Button has correct id', 'cool-button', el.id);
-}
-
-function testCreateDomWithClassList() {
- var el = goog.dom.createDom('div', ['foo', 'bar']);
- assertEquals('foo bar', el.className);
-
- el = goog.dom.createDom('div', ['foo', 'foo']);
- assertEquals('foo', el.className);
-}
-
-function testContains() {
- assertTrue('HTML should contain BODY', goog.dom.contains(
- document.documentElement, document.body));
- assertTrue('Document should contain BODY', goog.dom.contains(
- document, document.body));
-
- var d = goog.dom.$dom('p', null, 'A paragraph');
- var t = d.firstChild;
- assertTrue('Same element', goog.dom.contains(d, d));
- assertTrue('Same text', goog.dom.contains(t, t));
- assertTrue('Nested text', goog.dom.contains(d, t));
- assertFalse('Nested text, reversed', goog.dom.contains(t, d));
- assertFalse('Disconnected element', goog.dom.contains(
- document, d));
- goog.dom.appendChild(document.body, d);
- assertTrue('Connected element', goog.dom.contains(
- document, d));
- goog.dom.removeNode(d);
-}
-
-function testCreateDomWithClassName() {
- var el = goog.dom.$dom('div', 'cls');
- assertNull('firstChild should be null', el.firstChild);
- assertEquals('Tagname should be a DIV', 'DIV', el.tagName);
- assertEquals('ClassName should be cls', 'cls', el.className);
-
- el = goog.dom.$dom('div', '');
- assertEquals('ClassName should be empty', '', el.className);
-}
-
-function testCompareNodeOrder() {
- var b1 = $('b1');
- var b2 = $('b2');
- var p2 = $('p2');
-
- assertEquals('equal nodes should compare to 0', 0,
- goog.dom.compareNodeOrder(b1, b1));
-
- assertTrue('parent should come before child',
- goog.dom.compareNodeOrder(p2, b1) < 0);
- assertTrue('child should come after parent',
- goog.dom.compareNodeOrder(b1, p2) > 0);
-
- assertTrue('parent should come before text child',
- goog.dom.compareNodeOrder(b1, b1.firstChild) < 0);
- assertTrue('text child should come after parent', goog.dom.compareNodeOrder(
- b1.firstChild, b1) > 0);
-
- assertTrue('first sibling should come before second',
- goog.dom.compareNodeOrder(b1, b2) < 0);
- assertTrue('second sibling should come after first',
- goog.dom.compareNodeOrder(b2, b1) > 0);
-
- assertTrue('text node after cousin element returns correct value',
- goog.dom.compareNodeOrder(b1.nextSibling, b1) > 0);
- assertTrue('text node before cousin element returns correct value',
- goog.dom.compareNodeOrder(b1, b1.nextSibling) < 0);
-
- assertTrue('text node is before once removed cousin element',
- goog.dom.compareNodeOrder(b1.firstChild, b2) < 0);
- assertTrue('once removed cousin element is before text node',
- goog.dom.compareNodeOrder(b2, b1.firstChild) > 0);
-
- assertTrue('text node is after once removed cousin text node',
- goog.dom.compareNodeOrder(b1.nextSibling, b1.firstChild) > 0);
- assertTrue('once removed cousin text node is before text node',
- goog.dom.compareNodeOrder(b1.firstChild, b1.nextSibling) < 0);
-
- assertTrue('first text node is before second text node',
- goog.dom.compareNodeOrder(b1.previousSibling, b1.nextSibling) < 0);
- assertTrue('second text node is after first text node',
- goog.dom.compareNodeOrder(b1.nextSibling, b1.previousSibling) > 0);
-
- assertTrue('grandchild is after grandparent',
- goog.dom.compareNodeOrder(b1.firstChild, b1.parentNode) > 0);
- assertTrue('grandparent is after grandchild',
- goog.dom.compareNodeOrder(b1.parentNode, b1.firstChild) < 0);
-
- assertTrue('grandchild is after grandparent',
- goog.dom.compareNodeOrder(b1.firstChild, b1.parentNode) > 0);
- assertTrue('grandparent is after grandchild',
- goog.dom.compareNodeOrder(b1.parentNode, b1.firstChild) < 0);
-
- assertTrue('second cousins compare correctly',
- goog.dom.compareNodeOrder(b1.firstChild, b2.firstChild) < 0);
- assertTrue('second cousins compare correctly in reverse',
- goog.dom.compareNodeOrder(b2.firstChild, b1.firstChild) > 0);
-
- assertTrue('testEl2 is after testEl',
- goog.dom.compareNodeOrder($('testEl2'), $('testEl')) > 0);
- assertTrue('testEl is before testEl2',
- goog.dom.compareNodeOrder($('testEl'), $('testEl2')) < 0);
-
- var p = $('order-test');
- var text1 = document.createTextNode('1');
- p.appendChild(text1);
- var text2 = document.createTextNode('1');
- p.appendChild(text2);
-
- assertEquals('Equal text nodes should compare to 0', 0,
- goog.dom.compareNodeOrder(text1, text1));
- assertTrue('First text node is before second',
- goog.dom.compareNodeOrder(text1, text2) < 0);
- assertTrue('Second text node is after first',
- goog.dom.compareNodeOrder(text2, text1) > 0);
- assertTrue('Late text node is after b1',
- goog.dom.compareNodeOrder(text1, $('b1')) > 0);
-
- assertTrue('Document node is before non-document node',
- goog.dom.compareNodeOrder(document, b1) < 0);
- assertTrue('Non-document node is after document node',
- goog.dom.compareNodeOrder(b1, document) > 0);
-}
-
-function testFindCommonAncestor() {
- var b1 = $('b1');
- var b2 = $('b2');
- var p1 = $('p1');
- var p2 = $('p2');
- var testEl2 = $('testEl2');
-
- assertNull('findCommonAncestor() = null', goog.dom.findCommonAncestor());
- assertEquals('findCommonAncestor(b1) = b1', b1,
- goog.dom.findCommonAncestor(b1));
- assertEquals('findCommonAncestor(b1, b1) = b1', b1,
- goog.dom.findCommonAncestor(b1, b1));
- assertEquals('findCommonAncestor(b1, b2) = p2', p2,
- goog.dom.findCommonAncestor(b1, b2));
- assertEquals('findCommonAncestor(p1, b2) = body', document.body,
- goog.dom.findCommonAncestor(p1, b2));
- assertEquals('findCommonAncestor(testEl2, b1, b2, p1, p2) = body',
- document.body, goog.dom.findCommonAncestor(testEl2, b1, b2, p1, p2));
-
- var outOfDoc = document.createElement('div');
- assertNull('findCommonAncestor(outOfDoc, b1) = null',
- goog.dom.findCommonAncestor(outOfDoc, b1));
-}
-
-function testRemoveNode() {
- var b = document.createElement('b');
- var el = $('p1');
- el.appendChild(b);
- goog.dom.removeNode(b);
- assertTrue('b should have been removed', el.lastChild != b);
-}
-
-function testReplaceNode() {
- var n = $('toReplace');
- var previousSibling = n.previousSibling;
- var goodNode = goog.dom.createDom('div', {'id': 'goodReplaceNode'});
- goog.dom.replaceNode(goodNode, n);
-
- assertEquals('n should have been replaced', previousSibling.nextSibling,
- goodNode);
- assertNull('n should no longer be in the DOM tree', $('toReplace'));
-
- var badNode = goog.dom.createDom('div', {'id': 'badReplaceNode'});
- goog.dom.replaceNode(badNode, n);
- assertNull('badNode should not be in the DOM tree', $('badReplaceNode'));
-}
-
-function testAppendChildAt() {
- var parent = $('p2');
- var origNumChildren = parent.childNodes.length;
-
- var child1 = document.createElement('div');
- goog.dom.insertChildAt(parent, child1, origNumChildren);
- assertEquals(origNumChildren + 1, parent.childNodes.length);
-
- var child2 = document.createElement('div');
- goog.dom.insertChildAt(parent, child2, origNumChildren + 42);
- assertEquals(origNumChildren + 2, parent.childNodes.length);
-
- var child3 = document.createElement('div');
- goog.dom.insertChildAt(parent, child3, 0);
- assertEquals(origNumChildren + 3, parent.childNodes.length);
-
- var child4 = document.createElement('div');
- goog.dom.insertChildAt(parent, child3, 2);
- assertEquals(origNumChildren + 3, parent.childNodes.length);
-
- parent.removeChild(child1);
- parent.removeChild(child2);
- parent.removeChild(child3);
-
- var emptyParentNotInDocument = document.createElement('div');
- goog.dom.insertChildAt(emptyParentNotInDocument, child1, 0);
- assertEquals(1, emptyParentNotInDocument.childNodes.length);
-}
-
-function testFlattenElement() {
- var text = document.createTextNode('Text');
- var br = document.createElement('br');
- var span = goog.dom.createDom('span', null, text, br);
- assertEquals('span should have 2 children', 2, span.childNodes.length);
-
- var el = $('p1');
- el.appendChild(span);
-
- var ret = goog.dom.flattenElement(span);
-
- assertTrue('span should have been removed', el.lastChild != span);
- assertFalse('span should have no parent', !!span.parentNode &&
- span.parentNode.nodeType != goog.dom.NodeType.DOCUMENT_FRAGMENT);
- assertEquals('span should have no children', 0, span.childNodes.length);
- assertEquals('Last child of p should be br', br, el.lastChild);
- assertEquals('Previous sibling of br should be text', text,
- br.previousSibling);
-
- var outOfDoc = goog.dom.createDom('span', null, '1 child');
- // Should do nothing.
- goog.dom.flattenElement(outOfDoc);
- assertEquals('outOfDoc should still have 1 child', 1,
- outOfDoc.childNodes.length);
-}
-
-function testIsNodeLike() {
- assertTrue('document should be node like', goog.dom.isNodeLike(document));
- assertTrue('document.body should be node like',
- goog.dom.isNodeLike(document.body));
- assertTrue('a text node should be node like', goog.dom.isNodeLike(
- document.createTextNode('')));
-
- assertFalse('null should not be node like', goog.dom.isNodeLike(null));
- assertFalse('a string should not be node like', goog.dom.isNodeLike('abcd'));
-
- assertTrue('custom object should be node like',
- goog.dom.isNodeLike({nodeType: 1}));
-}
-
-function testIsElement() {
- assertFalse('document is not an element', goog.dom.isElement(document));
- assertTrue('document.body is an element',
- goog.dom.isElement(document.body));
- assertFalse('a text node is not an element', goog.dom.isElement(
- document.createTextNode('')));
- assertTrue('an element created with createElement() is an element',
- goog.dom.isElement(document.createElement('a')));
-
- assertFalse('null is not an element', goog.dom.isElement(null));
- assertFalse('a string is not an element', goog.dom.isElement('abcd'));
-
- assertTrue('custom object is an element',
- goog.dom.isElement({nodeType: 1}));
- assertFalse('custom non-element object is a not an element',
- goog.dom.isElement({someProperty: 'somevalue'}));
-}
-
-function testIsWindow() {
- var global = goog.global;
- var frame = window.frames['frame'];
- var otherWindow = window.open('', 'blank');
- var object = {window: goog.global};
- var nullVar = null;
- var notDefined;
-
- try {
- // Use try/finally to ensure that we clean up the window we open, even if an
- // assertion fails or something else goes wrong.
- assertTrue('global object in HTML context should be a window',
- goog.dom.isWindow(goog.global));
- assertTrue('iframe window should be a window', goog.dom.isWindow(frame));
- if (otherWindow) {
- assertTrue('other window should be a window',
- goog.dom.isWindow(otherWindow));
- }
- assertFalse('object should not be a window', goog.dom.isWindow(object));
- assertFalse('null should not be a window', goog.dom.isWindow(nullVar));
- assertFalse('undefined should not be a window',
- goog.dom.isWindow(notDefined));
- } finally {
- if (otherWindow) {
- otherWindow.close();
- }
- }
-}
-
-function testGetOwnerDocument() {
- assertEquals(goog.dom.getOwnerDocument($('p1')), document);
- assertEquals(goog.dom.getOwnerDocument(document.body), document);
- assertEquals(goog.dom.getOwnerDocument(document.documentElement), document);
-}
-
-function testDomHelper() {
- var x = new goog.dom.DomHelper(window.frames['frame'].document);
- assertTrue('Should have some HTML',
- x.getDocument().body.innerHTML.length > 0);
-}
-
-function testGetFirstElementChild() {
- var p2 = $('p2');
- var b1 = goog.dom.getFirstElementChild(p2);
- assertNotNull('First element child of p2 should not be null', b1);
- assertEquals('First element child is b1', 'b1', b1.id);
-
- var c = goog.dom.getFirstElementChild(b1);
- assertNull('First element child of b1 should be null', c);
-
- // Test with an undefined firstElementChild attribute.
- var b2 = $('b2');
- var mockP2 = {
- childNodes: [b1, b2],
- firstChild: b1,
- firstElementChild: undefined
- };
-
- b1 = goog.dom.getFirstElementChild(mockP2);
- assertNotNull('First element child of mockP2 should not be null', b1);
- assertEquals('First element child is b1', 'b1', b1.id);
-}
-
-function testGetLastElementChild() {
- var p2 = $('p2');
- var b2 = goog.dom.getLastElementChild(p2);
- assertNotNull('Last element child of p2 should not be null', b2);
- assertEquals('Last element child is b2', 'b2', b2.id);
-
- var c = goog.dom.getLastElementChild(b2);
- assertNull('Last element child of b2 should be null', c);
-
- // Test with an undefined lastElementChild attribute.
- var b1 = $('b1');
- var mockP2 = {
- childNodes: [b1, b2],
- lastChild: b2,
- lastElementChild: undefined
- };
-
- b2 = goog.dom.getLastElementChild(mockP2);
- assertNotNull('Last element child of mockP2 should not be null', b2);
- assertEquals('Last element child is b2', 'b2', b2.id);
-}
-
-function testGetNextElementSibling() {
- var b1 = $('b1');
- var b2 = goog.dom.getNextElementSibling(b1);
- assertNotNull('Next element sibling of b1 should not be null', b1);
- assertEquals('Next element sibling is b2', 'b2', b2.id);
-
- var c = goog.dom.getNextElementSibling(b2);
- assertNull('Next element sibling of b2 should be null', c);
-
- // Test with an undefined nextElementSibling attribute.
- var mockB1 = {
- nextSibling: b2,
- nextElementSibling: undefined
- };
-
- b2 = goog.dom.getNextElementSibling(mockB1);
- assertNotNull('Next element sibling of mockB1 should not be null', b1);
- assertEquals('Next element sibling is b2', 'b2', b2.id);
-}
-
-function testGetPreviousElementSibling() {
- var b2 = $('b2');
- var b1 = goog.dom.getPreviousElementSibling(b2);
- assertNotNull('Previous element sibling of b2 should not be null', b1);
- assertEquals('Previous element sibling is b1', 'b1', b1.id);
-
- var c = goog.dom.getPreviousElementSibling(b1);
- assertNull('Previous element sibling of b1 should be null', c);
-
- // Test with an undefined previousElementSibling attribute.
- var mockB2 = {
- previousSibling: b1,
- previousElementSibling: undefined
- };
-
- b1 = goog.dom.getPreviousElementSibling(mockB2);
- assertNotNull('Previous element sibling of mockB2 should not be null', b1);
- assertEquals('Previous element sibling is b1', 'b1', b1.id);
-}
-
-function testGetChildren() {
- var p2 = $('p2');
- var children = goog.dom.getChildren(p2);
- assertNotNull('Elements array should not be null', children);
- assertEquals('List of element children should be length two.', 2,
- children.length);
-
- var b1 = $('b1');
- var b2 = $('b2');
- assertObjectEquals('First element child should be b1.', b1, children[0]);
- assertObjectEquals('Second element child should be b2.', b2, children[1]);
-
- var noChildren = goog.dom.getChildren(b1);
- assertNotNull('Element children array should not be null', noChildren);
- assertEquals('List of element children should be length zero.', 0,
- noChildren.length);
-
- // Test with an undefined children attribute.
- var mockP2 = {
- childNodes: [b1, b2],
- children: undefined
- };
-
- children = goog.dom.getChildren(mockP2);
- assertNotNull('Elements array should not be null', children);
- assertEquals('List of element children should be length two.', 2,
- children.length);
-
- assertObjectEquals('First element child should be b1.', b1, children[0]);
- assertObjectEquals('Second element child should be b2.', b2, children[1]);
-}
-
-function testGetNextNode() {
- var tree = goog.dom.htmlToDocumentFragment(
- '<div>' +
- '<p>Some text</p>' +
- '<blockquote>Some <i>special</i> <b>text</b></blockquote>' +
- '<address><!-- comment -->Foo</address>' +
- '</div>');
-
- assertNull(goog.dom.getNextNode(null));
-
- var node = tree;
- var next = function() {
- return node = goog.dom.getNextNode(node);
- };
-
- assertEquals('P', next().tagName);
- assertEquals('Some text', next().nodeValue);
- assertEquals('BLOCKQUOTE', next().tagName);
- assertEquals('Some ', next().nodeValue);
- assertEquals('I', next().tagName);
- assertEquals('special', next().nodeValue);
- assertEquals(' ', next().nodeValue);
- assertEquals('B', next().tagName);
- assertEquals('text', next().nodeValue);
- assertEquals('ADDRESS', next().tagName);
- assertEquals(goog.dom.NodeType.COMMENT, next().nodeType);
- assertEquals('Foo', next().nodeValue);
-
- assertNull(next());
-}
-
-function testGetPreviousNode() {
- var tree = goog.dom.htmlToDocumentFragment(
- '<div>' +
- '<p>Some text</p>' +
- '<blockquote>Some <i>special</i> <b>text</b></blockquote>' +
- '<address><!-- comment -->Foo</address>' +
- '</div>');
-
- assertNull(goog.dom.getPreviousNode(null));
-
- var node = tree.lastChild.lastChild;
- var previous = function() {
- return node = goog.dom.getPreviousNode(node);
- };
-
- assertEquals(goog.dom.NodeType.COMMENT, previous().nodeType);
- assertEquals('ADDRESS', previous().tagName);
- assertEquals('text', previous().nodeValue);
- assertEquals('B', previous().tagName);
- assertEquals(' ', previous().nodeValue);
- assertEquals('special', previous().nodeValue);
- assertEquals('I', previous().tagName);
- assertEquals('Some ', previous().nodeValue);
- assertEquals('BLOCKQUOTE', previous().tagName);
- assertEquals('Some text', previous().nodeValue);
- assertEquals('P', previous().tagName);
- assertEquals('DIV', previous().tagName);
-
- if (!goog.userAgent.IE) {
- // Internet Explorer maintains a parentNode for Elements after they are
- // removed from the hierarchy. Everyone else agrees on a null parentNode.
- assertNull(previous());
- }
-}
-
-function testSetTextContent() {
- var p1 = $('p1');
- var s = 'hello world';
- goog.dom.setTextContent(p1, s);
- assertEquals('We should have one childNode after setTextContent', 1,
- p1.childNodes.length);
- assertEquals(s, p1.firstChild.data);
- assertEquals(s, p1.innerHTML);
-
- s = 'four elefants < five ants';
- var sHtml = 'four elefants &lt; five ants';
- goog.dom.setTextContent(p1, s);
- assertEquals('We should have one childNode after setTextContent', 1,
- p1.childNodes.length);
- assertEquals(s, p1.firstChild.data);
- assertEquals(sHtml, p1.innerHTML);
-
- // ensure that we remove existing children
- p1.innerHTML = 'a<b>b</b>c';
- s = 'hello world';
- goog.dom.setTextContent(p1, s);
- assertEquals('We should have one childNode after setTextContent', 1,
- p1.childNodes.length);
- assertEquals(s, p1.firstChild.data);
-
- // same but start with an element
- p1.innerHTML = '<b>a</b>b<i>c</i>';
- s = 'hello world';
- goog.dom.setTextContent(p1, s);
- assertEquals('We should have one childNode after setTextContent', 1,
- p1.childNodes.length);
- assertEquals(s, p1.firstChild.data);
-
- // clean up
- p1.innerHTML = '';
-}
-
-function testFindNode() {
- var expected = document.body;
- var result = goog.dom.findNode(document, function(n) {
- return n.nodeType == goog.dom.NodeType.ELEMENT && n.tagName == 'BODY';
- });
- assertEquals(expected, result);
-
- expected = document.getElementsByTagName('P')[0];
- result = goog.dom.findNode(document, function(n) {
- return n.nodeType == goog.dom.NodeType.ELEMENT && n.tagName == 'P';
- });
- assertEquals(expected, result);
-
- result = goog.dom.findNode(document, function(n) {
- return false;
- });
- assertUndefined(result);
-}
-
-function testFindNodes() {
- var expected = document.getElementsByTagName('P');
- var result = goog.dom.findNodes(document, function(n) {
- return n.nodeType == goog.dom.NodeType.ELEMENT && n.tagName == 'P';
- });
- assertEquals(expected.length, result.length);
- assertEquals(expected[0], result[0]);
- assertEquals(expected[1], result[1]);
-
- result = goog.dom.findNodes(document, function(n) {
- return false;
- }).length;
- assertEquals(0, result);
-}
-
-function createTestDom(txt) {
- var dom = goog.dom.createDom('div');
- dom.innerHTML = txt;
- return dom;
-}
-
-function testIsFocusableTabIndex() {
- assertFalse('isFocusableTabIndex() must be false for no tab index',
- goog.dom.isFocusableTabIndex(goog.dom.getElement('noTabIndex')));
- assertFalse('isFocusableTabIndex() must be false for tab index -2',
- goog.dom.isFocusableTabIndex(goog.dom.getElement('tabIndexNegative2')));
- assertFalse('isFocusableTabIndex() must be false for tab index -1',
- goog.dom.isFocusableTabIndex(goog.dom.getElement('tabIndexNegative1')));
-
- // WebKit on Mac doesn't support focusable DIVs until version 526 and later.
- if (!goog.userAgent.WEBKIT || !goog.userAgent.MAC ||
- goog.userAgent.isVersion('526')) {
- assertTrue('isFocusableTabIndex() must be true for tab index 0',
- goog.dom.isFocusableTabIndex(goog.dom.getElement('tabIndex0')));
- assertTrue('isFocusableTabIndex() must be true for tab index 1',
- goog.dom.isFocusableTabIndex(goog.dom.getElement('tabIndex1')));
- assertTrue('isFocusableTabIndex() must be true for tab index 2',
- goog.dom.isFocusableTabIndex(goog.dom.getElement('tabIndex2')));
- }
-}
-
-function testSetFocusableTabIndex() {
- // WebKit on Mac doesn't support focusable DIVs until version 526 and later.
- if (!goog.userAgent.WEBKIT || !goog.userAgent.MAC ||
- goog.userAgent.isVersion('526')) {
- // Test enabling focusable tab index.
- goog.dom.setFocusableTabIndex(goog.dom.getElement('noTabIndex'), true);
- assertTrue('isFocusableTabIndex() must be true after enabling tab index',
- goog.dom.isFocusableTabIndex(goog.dom.getElement('noTabIndex')));
-
- // Test disabling focusable tab index that was added programmatically.
- goog.dom.setFocusableTabIndex(goog.dom.getElement('noTabIndex'), false);
- assertFalse('isFocusableTabIndex() must be false after disabling tab ' +
- 'index that was programmatically added',
- goog.dom.isFocusableTabIndex(goog.dom.getElement('noTabIndex')));
-
- // Test disabling focusable tab index that was specified in markup.
- goog.dom.setFocusableTabIndex(goog.dom.getElement('tabIndex0'), false);
- assertFalse('isFocusableTabIndex() must be false after disabling tab ' +
- 'index that was specified in markup',
- goog.dom.isFocusableTabIndex(goog.dom.getElement('tabIndex0')));
-
- // Test re-enabling focusable tab index.
- goog.dom.setFocusableTabIndex(goog.dom.getElement('tabIndex0'), true);
- assertTrue('isFocusableTabIndex() must be true after reenabling tabindex',
- goog.dom.isFocusableTabIndex(goog.dom.getElement('tabIndex0')));
- }
-}
-
-function testGetTextContent() {
- function t(inp, out) {
- assertEquals(out.replace(/ /g, '_'),
- goog.dom.getTextContent(
- createTestDom(inp)).replace(/ /g, '_'));
- }
-
- t('abcde', 'abcde');
- t('a<b>bcd</b>efgh', 'abcdefgh');
- t('a<script type="text/javascript' + '">var a=1;<' + '/script>h', 'ah');
- t('<html><head><style type="text/css">' +
- 'p{margin:100%;padding:5px}\n.class{background-color:red;}</style>' +
- '</head><body><h1>Hello</h1>\n<p>One two three</p>\n<table><tr><td>a' +
- '<td>b</table><' + 'script>var a = \'foo\';' +
- '</scrip' + 't></body></html>', 'HelloOne two threeab');
- t('abc<br>def', 'abc\ndef');
- t('abc<br>\ndef', 'abc\ndef');
- t('abc<br>\n\ndef', 'abc\ndef');
- t('abc<br><br>\ndef', 'abc\n\ndef');
- t(' <b>abcde </b> ', 'abcde ');
- t(' <b>abcde </b> hi ', 'abcde hi ');
- t(' \n<b>abcde </b> ', 'abcde ');
- t(' \n<b>abcde </b> \n\n\n', 'abcde ');
- t('<p>abcde</p>\nfg', 'abcdefg');
- t('\n <div> <b>abcde </b> ', 'abcde ');
- t(' \n&shy;<b>abcde &shy; </b> \n\n\n&shy;', 'abcde ');
- t(' \n&shy;\n\n&shy;\na ', 'a ');
- t(' \n<wbr></wbr><b>abcde <wbr></wbr> </b> \n\n\n<wbr></wbr>', 'abcde ');
- t('a&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;b',
- goog.dom.BrowserFeature.CAN_USE_INNER_TEXT ?
- 'a b' : 'a\xA0\xA0\xA0\xA0\xA0b');
-}
-
-function testGetNodeTextLength() {
-
- assertEquals(6, goog.dom.getNodeTextLength(createTestDom('abcdef')));
- assertEquals(8, goog.dom.getNodeTextLength(
- createTestDom('a<b>bcd</b>efgh')));
- assertEquals(2, goog.dom.getNodeTextLength(createTestDom(
- 'a<script type="text/javascript' + '">var a = 1234;<' + '/script>h')));
- assertEquals(4, goog.dom.getNodeTextLength(createTestDom(
- 'a<br>\n<!-- some comments -->\nfo')));
- assertEquals(20, goog.dom.getNodeTextLength(createTestDom(
- '<html><head><style type="text/css">' +
- 'p{margin:100%;padding:5px}\n.class{background-color:red;}</style>' +
- '</head><body><h1>Hello</h1><p>One two three</p><table><tr><td>a<td>b' +
- '</table><' + 'script>var a = \'foo\';</scrip' +
- 't></body></html>')));
- assertEquals(10, goog.dom.getNodeTextLength(createTestDom(
- 'a<b>bcd</b><br />efghi')));
-}
-
-function testGetNodeTextOffset() {
- assertEquals(4, goog.dom.getNodeTextOffset($('offsetTest1'),
- $('offsetParent1')));
- assertEquals(12, goog.dom.getNodeTextOffset($('offsetTest1')));
-}
-
-function testGetNodeAtOffset() {
- var html = '<div id=a>123<b id=b>45</b><span id=c>67<b id=d>89<i id=e>01' +
- '</i>23<i id=f>45</i>67</b>890<i id=g>123</i><b id=h>456</b>' +
- '</span></div><div id=i>7890<i id=j>123</i></div>';
- var node = document.createElement('div');
- node.innerHTML = html;
- var rv = {};
-
- goog.dom.getNodeAtOffset(node, 2, rv);
- assertEquals('123', rv.node.nodeValue);
- assertEquals('a', rv.node.parentNode.id);
- assertEquals(1, rv.remainder);
-
- goog.dom.getNodeAtOffset(node, 3, rv);
- assertEquals('123', rv.node.nodeValue);
- assertEquals('a', rv.node.parentNode.id);
- assertEquals(2, rv.remainder);
-
- goog.dom.getNodeAtOffset(node, 5, rv);
- assertEquals('45', rv.node.nodeValue);
- assertEquals('b', rv.node.parentNode.id);
- assertEquals(1, rv.remainder);
-
- goog.dom.getNodeAtOffset(node, 6, rv);
- assertEquals('67', rv.node.nodeValue);
- assertEquals('c', rv.node.parentNode.id);
- assertEquals(0, rv.remainder);
-
- goog.dom.getNodeAtOffset(node, 23, rv);
- assertEquals('123', rv.node.nodeValue);
- assertEquals('g', rv.node.parentNode.id);
- assertEquals(2, rv.remainder);
-
- goog.dom.getNodeAtOffset(node, 30, rv);
- assertEquals('7890', rv.node.nodeValue);
- assertEquals('i', rv.node.parentNode.id);
- assertEquals(3, rv.remainder);
-
-}
-
-// IE inserts line breaks and capitalizes nodenames.
-function assertEqualsCaseAndLeadingWhitespaceInsensitive(value1, value2) {
- value1 = value1.replace(/^\s+|\s+$/g, '').toLowerCase();
- value2 = value2.replace(/^\s+|\s+$/g, '').toLowerCase();
- assertEquals(value1, value2);
-}
-
-function testGetOuterHtml() {
- var contents = '<b>foo</b>';
- var node = document.createElement('div');
- node.setAttribute('foo', 'bar');
- node.innerHTML = contents;
- assertEqualsCaseAndLeadingWhitespaceInsensitive(
- goog.dom.getOuterHtml(node), '<div foo="bar">' + contents + '</div>');
-
- var imgNode = document.createElement('img');
- imgNode.setAttribute('foo', 'bar');
- assertEqualsCaseAndLeadingWhitespaceInsensitive(
- goog.dom.getOuterHtml(imgNode), '<img foo="bar">');
-}
-
-
-function testGetWindowFrame() {
- var frameWindow = window.frames['frame'];
- var frameDocument = frameWindow.document;
- var frameDomHelper = new goog.dom.DomHelper(frameDocument);
-
- // Cannot use assertEquals since IE fails on ===
- assertTrue(frameWindow == frameDomHelper.getWindow());
-}
-
-function testGetWindow() {
- var domHelper = new goog.dom.DomHelper();
- // Cannot use assertEquals since IE fails on ===
- assertTrue(window == domHelper.getWindow());
-}
-
-function testGetWindowStatic() {
- // Cannot use assertEquals since IE fails on ===
- assertTrue(window == goog.dom.getWindow());
-}
-
-function testIsNodeList() {
- var elem = document.getElementById('p2');
- var text = document.getElementById('b2').firstChild;
-
- assertTrue('NodeList should be a node list',
- goog.dom.isNodeList(elem.childNodes));
- assertFalse('TextNode should not be a node list',
- goog.dom.isNodeList(text));
- assertFalse('Array of nodes should not be a node list',
- goog.dom.isNodeList([elem.firstChild, elem.lastChild]));
-}
-
-function testGetFrameContentDocument() {
- var iframe = document.getElementsByTagName('iframe')[0];
- var name = iframe.name;
- var iframeDoc = goog.dom.getFrameContentDocument(iframe);
- assertEquals(window.frames[name].document, iframeDoc);
-}
-
-function testGetFrameContentWindow() {
- var iframe = document.getElementsByTagName('iframe')[0];
- var name = iframe.name;
- var iframeWin = goog.dom.getFrameContentWindow(iframe);
- assertEquals(window.frames[name], iframeWin);
-}
-
-function testCanHaveChildren() {
- var EMPTY_ELEMENTS = goog.object.createSet(
- goog.dom.TagName.APPLET,
- goog.dom.TagName.AREA,
- goog.dom.TagName.BASE,
- goog.dom.TagName.BR,
- goog.dom.TagName.COL,
- goog.dom.TagName.COMMAND,
- goog.dom.TagName.EMBED,
- goog.dom.TagName.FRAME,
- goog.dom.TagName.HR,
- goog.dom.TagName.IMG,
- goog.dom.TagName.INPUT,
- goog.dom.TagName.IFRAME,
- goog.dom.TagName.ISINDEX,
- goog.dom.TagName.KEYGEN,
- goog.dom.TagName.LINK,
- goog.dom.TagName.NOFRAMES,
- goog.dom.TagName.NOSCRIPT,
- goog.dom.TagName.META,
- goog.dom.TagName.OBJECT,
- goog.dom.TagName.PARAM,
- goog.dom.TagName.SCRIPT,
- goog.dom.TagName.SOURCE,
- goog.dom.TagName.STYLE,
- goog.dom.TagName.TRACK,
- goog.dom.TagName.WBR);
-
- // IE opens a dialog warning about using Java content if an EMBED is created.
- var IE_ILLEGAL_ELEMENTS = goog.object.createSet(goog.dom.TagName.EMBED);
-
- for (var tag in goog.dom.TagName) {
- if (goog.userAgent.IE && tag in IE_ILLEGAL_ELEMENTS) {
- continue;
- }
-
- var expected = !(tag in EMPTY_ELEMENTS);
- var node = goog.dom.createElement(tag);
- assertEquals(tag + ' should ' + (expected ? '' : 'not ') +
- 'have children', expected, goog.dom.canHaveChildren(node));
-
- // Make sure we can _actually_ add a child if we identify the node as
- // allowing children.
- if (goog.dom.canHaveChildren(node)) {
- node.appendChild(goog.dom.createDom('div', null, 'foo'));
- }
- }
-}
-
-function testGetAncestorNoMatch() {
- var elem = goog.dom.getElement('nestedElement');
- assertNull(goog.dom.getAncestor(elem, function() {return false;}));
-}
-
-function testGetAncestorMatchSelf() {
- var elem = goog.dom.getElement('nestedElement');
- var matched = goog.dom.getAncestor(elem, function() {return true;}, true);
- assertEquals(elem, matched);
-}
-
-function testGetAncestorNoMatchSelf() {
- var elem = goog.dom.getElement('nestedElement');
- var matched = goog.dom.getAncestor(elem, function() {return true;});
- assertEquals(elem.parentNode, matched);
-}
-
-function testGetAncestorWithMaxSearchStepsMatchSelf() {
- var elem = goog.dom.getElement('nestedElement');
- var matched = goog.dom.getAncestor(
- elem, function() {return true;}, true, 2);
- assertEquals(elem, matched);
-}
-
-function testGetAncestorWithMaxSearchStepsMatch() {
- var elem = goog.dom.getElement('nestedElement');
- var searchEl = elem.parentNode.parentNode;
- var matched = goog.dom.getAncestor(
- elem, function(el) {return el == searchEl;}, false, 1);
- assertEquals(searchEl, matched);
-}
-
-function testGetAncestorWithMaxSearchStepsNoMatch() {
- var elem = goog.dom.getElement('nestedElement');
- var searchEl = elem.parentNode.parentNode;
- var matched = goog.dom.getAncestor(
- elem, function(el) {return el == searchEl;}, false, 0);
- assertNull(matched);
-}
-
-function testGetAncestorByTagNameNoMatch() {
- var elem = goog.dom.getElement('nestedElement');
- assertNull(
- goog.dom.getAncestorByTagNameAndClass(elem, goog.dom.TagName.IMG));
-}
-
-function testGetAncestorByTagNameOnly() {
- var elem = goog.dom.getElement('nestedElement');
- var expected = goog.dom.getElement('testAncestorDiv');
- assertEquals(expected,
- goog.dom.getAncestorByTagNameAndClass(elem, goog.dom.TagName.DIV));
- assertEquals(expected,
- goog.dom.getAncestorByTagNameAndClass(elem, 'div'));
-}
-
-function testGetAncestorByClassNameNoMatch() {
- var elem = goog.dom.getElement('nestedElement');
- assertNull(
- goog.dom.getAncestorByClass(elem, 'bogusClassName'));
-}
-
-function testGetAncestorByClassName() {
- var elem = goog.dom.getElement('nestedElement');
- var expected = goog.dom.getElement('testAncestorP');
- assertEquals(expected,
- goog.dom.getAncestorByClass(elem, 'testAncestor'));
-}
-
-function testGetAncestorByTagNameAndClass() {
- var elem = goog.dom.getElement('nestedElement');
- var expected = goog.dom.getElement('testAncestorDiv');
- assertEquals(expected,
- goog.dom.getAncestorByTagNameAndClass(elem, goog.dom.TagName.DIV,
- 'testAncestor'));
- assertNull(
- 'Should return null if no search criteria are given',
- goog.dom.getAncestorByTagNameAndClass(elem));
-}
-
-function testCreateTable() {
- var table = goog.dom.createTable(2, 3, true);
- assertEquals(2, table.getElementsByTagName(goog.dom.TagName.TR).length);
- assertEquals(3,
- table.getElementsByTagName(goog.dom.TagName.TR)[0].childNodes.length);
- assertEquals(6, table.getElementsByTagName(goog.dom.TagName.TD).length);
- assertEquals(goog.string.Unicode.NBSP,
- table.getElementsByTagName(goog.dom.TagName.TD)[0].firstChild.nodeValue);
-
- table = goog.dom.createTable(2, 3, false);
- assertEquals(2, table.getElementsByTagName(goog.dom.TagName.TR).length);
- assertEquals(3,
- table.getElementsByTagName(goog.dom.TagName.TR)[0].childNodes.length);
- assertEquals(6, table.getElementsByTagName(goog.dom.TagName.TD).length);
- assertEquals(0,
- table.getElementsByTagName(goog.dom.TagName.TD)[0].childNodes.length);
-}
-
-function testHtmlToDocumentFragment() {
- var docFragment = goog.dom.htmlToDocumentFragment('<a>1</a><b>2</b>');
- assertNull(docFragment.parentNode);
- assertEquals(2, docFragment.childNodes.length);
-
- var div = goog.dom.htmlToDocumentFragment('<div>3</div>');
- assertEquals('DIV', div.tagName);
-
- var script = goog.dom.htmlToDocumentFragment('<script></script>');
- assertEquals('SCRIPT', script.tagName);
-
- if (goog.userAgent.IE && !goog.userAgent.isDocumentMode(9)) {
- // Removing an Element from a DOM tree in IE sets its parentNode to a new
- // DocumentFragment. Bizarre!
- assertEquals(goog.dom.NodeType.DOCUMENT_FRAGMENT,
- goog.dom.removeNode(div).parentNode.nodeType);
- } else {
- assertNull(div.parentNode);
- }
-}
-
-function testAppend() {
- var div = document.createElement('div');
- var b = document.createElement('b');
- var c = document.createTextNode('c');
- goog.dom.append(div, 'a', b, c);
- assertEqualsCaseAndLeadingWhitespaceInsensitive('a<b></b>c', div.innerHTML);
-}
-
-function testAppend2() {
- var div = myIframeDoc.createElement('div');
- var b = myIframeDoc.createElement('b');
- var c = myIframeDoc.createTextNode('c');
- goog.dom.append(div, 'a', b, c);
- assertEqualsCaseAndLeadingWhitespaceInsensitive('a<b></b>c', div.innerHTML);
-}
-
-function testAppend3() {
- var div = document.createElement('div');
- var b = document.createElement('b');
- var c = document.createTextNode('c');
- goog.dom.append(div, ['a', b, c]);
- assertEqualsCaseAndLeadingWhitespaceInsensitive('a<b></b>c', div.innerHTML);
-}
-
-function testAppend4() {
- var div = document.createElement('div');
- var div2 = document.createElement('div');
- div2.innerHTML = 'a<b></b>c';
- goog.dom.append(div, div2.childNodes);
- assertEqualsCaseAndLeadingWhitespaceInsensitive('a<b></b>c', div.innerHTML);
- assertFalse(div2.hasChildNodes());
-}
-
-function testGetDocumentScroll() {
- // setUpPage added divForTestingScrolling to the DOM. It's not init'd here so
- // it can be shared amonst other tests.
- window.scrollTo(100, 100);
-
- assertEquals(100, goog.dom.getDocumentScroll().x);
- assertEquals(100, goog.dom.getDocumentScroll().y);
-}
-
-function testGetDocumentScrollOfFixedViewport() {
- // iOS and perhaps other environments don't actually support scrolling.
- // Instead, you view the document's fixed layout through a screen viewport.
- // We need getDocumentScroll to handle this case though.
- var fakeDocumentScrollElement = {scrollLeft: 0, scrollTop: 0};
- var fakeDocument = {
- defaultView: {pageXOffset: 100, pageYOffset: 100},
- documentElement: fakeDocumentScrollElement,
- body: fakeDocumentScrollElement
- };
- var dh = goog.dom.getDomHelper(document);
- dh.setDocument(fakeDocument);
- assertEquals(100, dh.getDocumentScroll().x);
- assertEquals(100, dh.getDocumentScroll().y);
-}
-
-function testActiveElementIE() {
- if (!goog.userAgent.IE) {
- return;
- }
-
- var link = goog.dom.getElement('link');
- link.focus();
-
- assertEquals(link.tagName, goog.dom.getActiveElement(document).tagName);
- assertEquals(link, goog.dom.getActiveElement(document));
-}
-
-function testParentElement() {
- var testEl = $('testEl');
- var bodyEl = goog.dom.getParentElement(testEl);
- assertNotNull(bodyEl);
- var htmlEl = goog.dom.getParentElement(bodyEl);
- assertNotNull(htmlEl);
- var documentNotAnElement = goog.dom.getParentElement(htmlEl);
- assertNull(documentNotAnElement);
-
- var tree = goog.dom.htmlToDocumentFragment(
- '<div>' +
- '<p>Some text</p>' +
- '<blockquote>Some <i>special</i> <b>text</b></blockquote>' +
- '<address><!-- comment -->Foo</address>' +
- '</div>');
- assertNull(goog.dom.getParentElement(tree));
- pEl = goog.dom.getNextNode(tree);
- var fragmentRootEl = goog.dom.getParentElement(pEl);
- assertEquals(tree, fragmentRootEl);
-
- var detachedEl = goog.dom.createDom('div');
- var detachedHasNoParent = goog.dom.getParentElement(detachedEl);
- assertNull(detachedHasNoParent);
-}
-
-/**
- * @return {boolean} Returns true if the userAgent is IE8 or higher.
- */
-function isIE8OrHigher() {
- return goog.userAgent.IE && goog.userAgent.product.isVersion('8');
-}