123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239 |
- // Copyright 2008 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.
- goog.provide('goog.dom.ControlRangeTest');
- goog.setTestOnly('goog.dom.ControlRangeTest');
- goog.require('goog.dom');
- goog.require('goog.dom.ControlRange');
- goog.require('goog.dom.RangeType');
- goog.require('goog.dom.TagName');
- goog.require('goog.dom.TextRange');
- goog.require('goog.testing.dom');
- goog.require('goog.testing.jsunit');
- goog.require('goog.userAgent');
- var logo;
- var table;
- function setUpPage() {
- logo = goog.dom.getElement('logo');
- table = goog.dom.getElement('table');
- }
- function testCreateFromElement() {
- if (!goog.userAgent.IE) {
- return;
- }
- assertNotNull(
- 'Control range object can be created for element',
- goog.dom.ControlRange.createFromElements(logo));
- }
- function testCreateFromRange() {
- if (!goog.userAgent.IE) {
- return;
- }
- var range = document.body.createControlRange();
- range.addElement(table);
- assertNotNull(
- 'Control range object can be created for element',
- goog.dom.ControlRange.createFromBrowserRange(range));
- }
- function testSelect() {
- if (!goog.userAgent.IE || goog.userAgent.isVersionOrHigher('11')) {
- return;
- }
- var range = goog.dom.ControlRange.createFromElements(table);
- range.select();
- assertEquals(
- 'Control range should be selected', 'Control', document.selection.type);
- assertEquals(
- 'Control range should have length 1', 1,
- document.selection.createRange().length);
- assertEquals(
- 'Control range should select table', table,
- document.selection.createRange().item(0));
- }
- function testControlRangeIterator() {
- if (!goog.userAgent.IE) {
- return;
- }
- var range = goog.dom.ControlRange.createFromElements(logo, table);
- // Each node is included twice - once as a start tag, once as an end.
- goog.testing.dom.assertNodesMatch(range, [
- '#logo', '#logo', '#table', '#tbody', '#tr1', '#td11', 'a', '#td11',
- '#td12', 'b', '#td12', '#tr1', '#tr2', '#td21', 'c', '#td21',
- '#td22', 'd', '#td22', '#tr2', '#tbody', '#table'
- ]);
- }
- function testBounds() {
- if (!goog.userAgent.IE) {
- return;
- }
- // Initialize in both orders.
- helpTestBounds(goog.dom.ControlRange.createFromElements(logo, table));
- helpTestBounds(goog.dom.ControlRange.createFromElements(table, logo));
- }
- function helpTestBounds(range) {
- assertEquals('Start node is logo', logo, range.getStartNode());
- assertEquals('Start offset is 0', 0, range.getStartOffset());
- assertEquals('End node is table', table, range.getEndNode());
- assertEquals('End offset is 1', 1, range.getEndOffset());
- }
- function testCollapse() {
- if (!goog.userAgent.IE) {
- return;
- }
- var range = goog.dom.ControlRange.createFromElements(logo, table);
- assertFalse('Not initially collapsed', range.isCollapsed());
- range.collapse();
- assertTrue('Successfully collapsed', range.isCollapsed());
- }
- function testGetContainer() {
- if (!goog.userAgent.IE) {
- return;
- }
- var range = goog.dom.ControlRange.createFromElements(logo);
- assertEquals(
- 'Single element range is contained by itself', logo,
- range.getContainer());
- range = goog.dom.ControlRange.createFromElements(logo, table);
- assertEquals(
- 'Two element range is contained by body', document.body,
- range.getContainer());
- }
- function testSave() {
- if (!goog.userAgent.IE) {
- return;
- }
- var range = goog.dom.ControlRange.createFromElements(logo, table);
- var savedRange = range.saveUsingDom();
- range.collapse();
- assertTrue('Successfully collapsed', range.isCollapsed());
- range = savedRange.restore();
- assertEquals(
- 'Restored a control range', goog.dom.RangeType.CONTROL, range.getType());
- assertFalse('Not collapsed after restore', range.isCollapsed());
- helpTestBounds(range);
- }
- function testRemoveContents() {
- if (!goog.userAgent.IE) {
- return;
- }
- var img = goog.dom.createDom(goog.dom.TagName.IMG);
- img.src = logo.src;
- var div = goog.dom.getElement('test1');
- goog.dom.removeChildren(div);
- div.appendChild(img);
- assertEquals('Div has 1 child', 1, div.childNodes.length);
- var range = goog.dom.ControlRange.createFromElements(img);
- range.removeContents();
- assertEquals('Div has 0 children', 0, div.childNodes.length);
- assertTrue('Range is collapsed', range.isCollapsed());
- }
- function testReplaceContents() {
- // Test a control range.
- if (!goog.userAgent.IE) {
- return;
- }
- var outer = goog.dom.getElement('test1');
- outer.innerHTML = '<div contentEditable="true">' +
- 'Hello <input type="text" value="World">' +
- '</div>';
- range = goog.dom.ControlRange.createFromElements(
- goog.dom.getElementsByTagName(goog.dom.TagName.INPUT, outer)[0]);
- goog.dom.ControlRange.createFromElements(table);
- range.replaceContentsWithNode(goog.dom.createTextNode('World'));
- assertEquals('Hello World', outer.firstChild.innerHTML);
- }
- function testContainsRange() {
- if (!goog.userAgent.IE) {
- return;
- }
- var table2 = goog.dom.getElement('table2');
- var table2td = goog.dom.getElement('table2td');
- var logo2 = goog.dom.getElement('logo2');
- var range = goog.dom.ControlRange.createFromElements(logo, table);
- var range2 = goog.dom.ControlRange.createFromElements(logo);
- assertTrue(
- 'Control range contains the other control range',
- range.containsRange(range2));
- assertTrue(
- 'Control range partially contains the other control range',
- range2.containsRange(range, true));
- range2 = goog.dom.ControlRange.createFromElements(table2);
- assertFalse(
- 'Control range does not contain the other control range',
- range.containsRange(range2));
- range = goog.dom.ControlRange.createFromElements(table2);
- range2 = goog.dom.TextRange.createFromNodeContents(table2td);
- assertTrue('Control range contains text range', range.containsRange(range2));
- range2 = goog.dom.TextRange.createFromNodeContents(table);
- assertFalse(
- 'Control range does not contain text range', range.containsRange(range2));
- range = goog.dom.ControlRange.createFromElements(logo2);
- range2 = goog.dom.TextRange.createFromNodeContents(table2);
- assertFalse(
- 'Control range does not fully contain text range',
- range.containsRange(range2, false));
- range2 = goog.dom.ControlRange.createFromElements(table2);
- assertTrue(
- 'Control range contains the other control range (2)',
- range2.containsRange(range));
- }
- function testCloneRange() {
- if (!goog.userAgent.IE) {
- return;
- }
- var range = goog.dom.ControlRange.createFromElements(logo);
- assertNotNull('Control range object created for element', range);
- var cloneRange = range.clone();
- assertNotNull('Cloned control range object', cloneRange);
- assertArrayEquals(
- 'Control range and clone have same elements', range.getElements(),
- cloneRange.getElements());
- }
|