blob: 12f19d0846d0972ed5061a0c930a94ef6579ebb6 [file] [log] [blame]
// 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, '', '');
}