232 lines
8.0 KiB
JavaScript
232 lines
8.0 KiB
JavaScript
// 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.
|
|
|
|
/**
|
|
* @fileoverview Shared code for classes_test.html & classes_quirks_test.html.
|
|
*/
|
|
|
|
goog.provide('goog.dom.classes_test');
|
|
goog.setTestOnly('goog.dom.classes_test');
|
|
|
|
goog.require('goog.dom');
|
|
goog.require('goog.dom.classes');
|
|
goog.require('goog.testing.jsunit');
|
|
|
|
|
|
var classes = goog.dom.classes;
|
|
|
|
function testGet() {
|
|
var el = document.createElement('div');
|
|
assertArrayEquals([], goog.dom.classes.get(el));
|
|
el.className = 'C';
|
|
assertArrayEquals(['C'], goog.dom.classes.get(el));
|
|
el.className = 'C D';
|
|
assertArrayEquals(['C', 'D'], goog.dom.classes.get(el));
|
|
el.className = 'C\nD';
|
|
assertArrayEquals(['C', 'D'], goog.dom.classes.get(el));
|
|
el.className = ' C ';
|
|
assertArrayEquals(['C'], goog.dom.classes.get(el));
|
|
}
|
|
|
|
function testSetAddHasRemove() {
|
|
var el = goog.dom.getElement('p1');
|
|
classes.set(el, 'SOMECLASS');
|
|
assertTrue('Should have SOMECLASS', classes.has(el, 'SOMECLASS'));
|
|
|
|
classes.set(el, 'OTHERCLASS');
|
|
assertTrue('Should have OTHERCLASS', classes.has(el, 'OTHERCLASS'));
|
|
assertFalse('Should not have SOMECLASS', classes.has(el, 'SOMECLASS'));
|
|
|
|
classes.add(el, 'WOOCLASS');
|
|
assertTrue('Should have OTHERCLASS', classes.has(el, 'OTHERCLASS'));
|
|
assertTrue('Should have WOOCLASS', classes.has(el, 'WOOCLASS'));
|
|
|
|
classes.add(el, 'ACLASS', 'BCLASS', 'CCLASS');
|
|
assertTrue('Should have OTHERCLASS', classes.has(el, 'OTHERCLASS'));
|
|
assertTrue('Should have WOOCLASS', classes.has(el, 'WOOCLASS'));
|
|
assertTrue('Should have ACLASS', classes.has(el, 'ACLASS'));
|
|
assertTrue('Should have BCLASS', classes.has(el, 'BCLASS'));
|
|
assertTrue('Should have CCLASS', classes.has(el, 'CCLASS'));
|
|
|
|
classes.remove(el, 'CCLASS');
|
|
assertTrue('Should have OTHERCLASS', classes.has(el, 'OTHERCLASS'));
|
|
assertTrue('Should have WOOCLASS', classes.has(el, 'WOOCLASS'));
|
|
assertTrue('Should have ACLASS', classes.has(el, 'ACLASS'));
|
|
assertTrue('Should have BCLASS', classes.has(el, 'BCLASS'));
|
|
assertFalse('Should not have CCLASS', classes.has(el, 'CCLASS'));
|
|
|
|
classes.remove(el, 'ACLASS', 'BCLASS');
|
|
assertTrue('Should have OTHERCLASS', classes.has(el, 'OTHERCLASS'));
|
|
assertTrue('Should have WOOCLASS', classes.has(el, 'WOOCLASS'));
|
|
assertFalse('Should not have ACLASS', classes.has(el, 'ACLASS'));
|
|
assertFalse('Should not have BCLASS', classes.has(el, 'BCLASS'));
|
|
}
|
|
|
|
// While support for this isn't implied in the method documentation,
|
|
// this is a frequently used pattern.
|
|
function testAddWithSpacesInClassName() {
|
|
var el = goog.dom.getElement('p1');
|
|
classes.add(el, 'CLASS1 CLASS2', 'CLASS3 CLASS4');
|
|
assertTrue('Should have CLASS1', classes.has(el, 'CLASS1'));
|
|
assertTrue('Should have CLASS2', classes.has(el, 'CLASS2'));
|
|
assertTrue('Should have CLASS3', classes.has(el, 'CLASS3'));
|
|
assertTrue('Should have CLASS4', classes.has(el, 'CLASS4'));
|
|
}
|
|
|
|
function testSwap() {
|
|
var el = goog.dom.getElement('p1');
|
|
classes.set(el, 'SOMECLASS FIRST');
|
|
|
|
assertTrue('Should have FIRST class', classes.has(el, 'FIRST'));
|
|
assertTrue('Should have FIRST class', classes.has(el, 'SOMECLASS'));
|
|
assertFalse('Should not have second class', classes.has(el, 'second'));
|
|
|
|
classes.swap(el, 'FIRST', 'second');
|
|
|
|
assertFalse('Should not have FIRST class', classes.has(el, 'FIRST'));
|
|
assertTrue('Should have FIRST class', classes.has(el, 'SOMECLASS'));
|
|
assertTrue('Should have second class', classes.has(el, 'second'));
|
|
|
|
classes.swap(el, 'second', 'FIRST');
|
|
|
|
assertTrue('Should have FIRST class', classes.has(el, 'FIRST'));
|
|
assertTrue('Should have FIRST class', classes.has(el, 'SOMECLASS'));
|
|
assertFalse('Should not have second class', classes.has(el, 'second'));
|
|
}
|
|
|
|
function testEnable() {
|
|
var el = goog.dom.getElement('p1');
|
|
classes.set(el, 'SOMECLASS FIRST');
|
|
|
|
assertTrue('Should have FIRST class', classes.has(el, 'FIRST'));
|
|
assertTrue('Should have SOMECLASS class', classes.has(el, 'SOMECLASS'));
|
|
|
|
classes.enable(el, 'FIRST', false);
|
|
|
|
assertFalse('Should not have FIRST class', classes.has(el, 'FIRST'));
|
|
assertTrue('Should have SOMECLASS class', classes.has(el, 'SOMECLASS'));
|
|
|
|
classes.enable(el, 'FIRST', true);
|
|
|
|
assertTrue('Should have FIRST class', classes.has(el, 'FIRST'));
|
|
assertTrue('Should have SOMECLASS class', classes.has(el, 'SOMECLASS'));
|
|
}
|
|
|
|
function testToggle() {
|
|
var el = goog.dom.getElement('p1');
|
|
classes.set(el, 'SOMECLASS FIRST');
|
|
|
|
assertTrue('Should have FIRST class', classes.has(el, 'FIRST'));
|
|
assertTrue('Should have SOMECLASS class', classes.has(el, 'SOMECLASS'));
|
|
|
|
classes.toggle(el, 'FIRST');
|
|
|
|
assertFalse('Should not have FIRST class', classes.has(el, 'FIRST'));
|
|
assertTrue('Should have SOMECLASS class', classes.has(el, 'SOMECLASS'));
|
|
|
|
classes.toggle(el, 'FIRST');
|
|
|
|
assertTrue('Should have FIRST class', classes.has(el, 'FIRST'));
|
|
assertTrue('Should have SOMECLASS class', classes.has(el, 'SOMECLASS'));
|
|
}
|
|
|
|
function testAddNotAddingMultiples() {
|
|
var el = goog.dom.getElement('span6');
|
|
assertTrue(classes.add(el, 'A'));
|
|
assertEquals('A', el.className);
|
|
assertFalse(classes.add(el, 'A'));
|
|
assertEquals('A', el.className);
|
|
assertFalse(classes.add(el, 'B', 'B'));
|
|
assertEquals('A B', el.className);
|
|
}
|
|
|
|
function testAddRemoveString() {
|
|
var el = goog.dom.getElement('span6');
|
|
el.className = 'A';
|
|
|
|
goog.dom.classes.addRemove(el, 'A', 'B');
|
|
assertEquals('B', el.className);
|
|
|
|
goog.dom.classes.addRemove(el, null, 'C');
|
|
assertEquals('B C', el.className);
|
|
|
|
goog.dom.classes.addRemove(el, 'C', 'D');
|
|
assertEquals('B D', el.className);
|
|
|
|
goog.dom.classes.addRemove(el, 'D', null);
|
|
assertEquals('B', el.className);
|
|
}
|
|
|
|
function testAddRemoveArray() {
|
|
var el = goog.dom.getElement('span6');
|
|
el.className = 'A';
|
|
|
|
goog.dom.classes.addRemove(el, ['A'], ['B']);
|
|
assertEquals('B', el.className);
|
|
|
|
goog.dom.classes.addRemove(el, [], ['C']);
|
|
assertEquals('B C', el.className);
|
|
|
|
goog.dom.classes.addRemove(el, ['C'], ['D']);
|
|
assertEquals('B D', el.className);
|
|
|
|
goog.dom.classes.addRemove(el, ['D'], []);
|
|
assertEquals('B', el.className);
|
|
}
|
|
|
|
function testAddRemoveMultiple() {
|
|
var el = goog.dom.getElement('span6');
|
|
el.className = 'A';
|
|
|
|
goog.dom.classes.addRemove(el, ['A'], ['B', 'C', 'D']);
|
|
assertEquals('B C D', el.className);
|
|
|
|
goog.dom.classes.addRemove(el, [], ['E', 'F']);
|
|
assertEquals('B C D E F', el.className);
|
|
|
|
goog.dom.classes.addRemove(el, ['C', 'E'], []);
|
|
assertEquals('B D F', el.className);
|
|
|
|
goog.dom.classes.addRemove(el, ['B'], ['G']);
|
|
assertEquals('D F G', el.className);
|
|
}
|
|
|
|
// While support for this isn't implied in the method documentation,
|
|
// this is a frequently used pattern.
|
|
function testAddRemoveWithSpacesInClassName() {
|
|
var el = goog.dom.getElement('p1');
|
|
classes.addRemove(el, '', 'CLASS1 CLASS2');
|
|
assertTrue('Should have CLASS1', classes.has(el, 'CLASS1'));
|
|
assertTrue('Should have CLASS2', classes.has(el, 'CLASS2'));
|
|
}
|
|
|
|
function testHasWithNewlines() {
|
|
var el = goog.dom.getElement('p3');
|
|
assertTrue('Should have SOMECLASS', classes.has(el, 'SOMECLASS'));
|
|
assertTrue('Should also have OTHERCLASS', classes.has(el, 'OTHERCLASS'));
|
|
assertFalse('Should not have WEIRDCLASS', classes.has(el, 'WEIRDCLASS'));
|
|
}
|
|
|
|
function testEmptyClassNames() {
|
|
var el = goog.dom.getElement('span1');
|
|
// At the very least, make sure these do not error out.
|
|
assertFalse('Should not have an empty class', classes.has(el, ''));
|
|
classes.add(el, '');
|
|
classes.toggle(el, '');
|
|
assertFalse('Should not remove an empty class', classes.remove(el, ''));
|
|
classes.swap(el, '', 'OTHERCLASS');
|
|
classes.swap(el, 'TEST1', '');
|
|
classes.addRemove(el, '', '');
|
|
}
|