UNPKG

dojo

Version:

Dojo core is a powerful, lightweight library that makes common tasks quicker and easier. Animate elements, manipulate the DOM, and query with easy CSS syntax, all without sacrificing performance.

793 lines (534 loc) 29 kB
define([ 'intern!object', 'intern/chai!assert', '../../dom-class', 'dojo/dom-construct', 'dojo/sniff' ], function (registerSuite, assert, domClass, domConstruct) { var cssClass = 'test-css-class'; var moreCssClass = 'test-adding-css-class'; var multipleCss = 'existing-css-class'; var value = 'the value'; var node; var nodeIdIndex = 1; function generateId() { return 'nodeid_' + nodeIdIndex++; } registerSuite({ name: 'dojo/dom-class', '.contains': { beforeEach: function () { node = domConstruct.toDom('<div class="' + cssClass + '""></div>'); domConstruct.place(node, document.body); }, afterEach: function () { domConstruct.destroy(node); }, 'node + class': function () { // when a node and class are passed, then true is returned assert.isTrue(domClass.contains(node, cssClass)); }, 'string + class': function () { // when a node and class are passed, then true is returned var nodeId = generateId(); node.setAttribute('id', nodeId); assert.isTrue(domClass.contains(nodeId, cssClass)); }, 'node + unknown class': function () { // when a node and unknown class are passed, then false is returned assert.isFalse(domClass.contains(node, 'unknown-css-class')); }, 'string + unknown class': function () { // when a node id and unknown class are passed, then false is returned var nodeId = generateId(); node.setAttribute('id', nodeId); assert.isFalse(domClass.contains(nodeId, 'unknown-css-class')); }, 'node w/ multiple classes + class': function () { // when a node and class are passed, then true is returned node.setAttribute('class', cssClass + ' ' + multipleCss); assert.isTrue(domClass.contains(node, cssClass)); assert.isTrue(domClass.contains(node, multipleCss)); }, 'string w/ multiple classes + class': function () { // when a node id and class are passed, then true is returned var nodeId = generateId(); node.setAttribute('id', nodeId); node.setAttribute('class', cssClass + ' ' + multipleCss); assert.isTrue(domClass.contains(node, cssClass)); assert.isTrue(domClass.contains(node, multipleCss)); }, 'node w/ multiple classes + unknown class': function () { // when a node and unknown class are passed, then false is returned node.setAttribute('class', cssClass + ' ' + multipleCss); assert.isFalse(domClass.contains(node, 'unknown-css-class')); }, 'string w/ multiple classes + unknown class': function () { // when a node id and unknown class are passed, then false is returned var nodeId = generateId(); node.setAttribute('id', nodeId); node.setAttribute('class', cssClass + ' ' + multipleCss); assert.isFalse(domClass.contains(nodeId, 'unknown-css-class')); }, 'document + class': function () { //contains on document should not throw error assert.isFalse(domClass.contains(document, 'unknown-css-class')); } }, '.add': { beforeEach: function () { node = domConstruct.toDom('<div></div>'); domConstruct.place(node, document.body); }, afterEach: function () { domConstruct.destroy(node); }, 'node + class': function () { // when a node and class are passed, then the class is added domClass.add(node, cssClass); assert.equal(node.getAttribute('class'), cssClass); }, 'string + class': function () { // when a node id and class are passed, then the class is added var nodeId = generateId(); node.setAttribute('id', nodeId); domClass.add(nodeId, cssClass); assert.equal(node.getAttribute('class'), cssClass); }, 'node + array': function () { // when a node and classes are passed, then the classes are added domClass.add(node, [cssClass, moreCssClass]); assert.equal(node.getAttribute('class'), [cssClass, moreCssClass].join(' ')); }, 'string + array': function () { // when a node id and classes are passed, then the classes are added var nodeId = generateId(); node.setAttribute('id', nodeId); domClass.add(nodeId, [cssClass, moreCssClass]); assert.equal(node.getAttribute('class'), [cssClass, moreCssClass].join(' ')); } }, '.remove': { beforeEach: function () { node = domConstruct.toDom('<div class="' + cssClass + '"></div>'); domConstruct.place(node, document.body); }, afterEach: function () { domConstruct.destroy(node); }, 'node + undefined': function () { // when a node and undefined are passed, then all classes are removed domClass.remove(node, undefined); assert.equal(node.getAttribute('class'), ''); }, 'string + undefined': function () { // when a node id and undefined are passed, then all classes are removed var nodeId = generateId(); node.setAttribute('id', nodeId); domClass.remove(nodeId, undefined); assert.equal(node.getAttribute('class'), ''); }, 'node + class': function () { // when a node and class are passed, then the class is added domClass.remove(node, cssClass); assert.equal(node.getAttribute('class'), ''); }, 'string + class': function () { // when a node id and class are passed, then the class is added var nodeId = generateId(); node.setAttribute('id', nodeId); domClass.remove(nodeId, cssClass); assert.equal(node.getAttribute('class'), ''); }, 'node + classes': function () { // when a node and class are passed, then the class is added node.setAttribute('class', cssClass + ' ' + moreCssClass); domClass.remove(node, cssClass + ' ' + moreCssClass); assert.equal(node.getAttribute('class'), ''); }, 'string + classes': function () { // when a node id and class are passed, then the class is added var nodeId = generateId(); node.setAttribute('id', nodeId); node.setAttribute('class', cssClass + ' ' + moreCssClass); domClass.remove(nodeId, cssClass + ' ' + moreCssClass); assert.equal(node.getAttribute('class'), ''); }, 'node + array': function () { // when a node and classes are passed, then the classes are added node.setAttribute('class', cssClass + ' ' + moreCssClass); domClass.remove(node, [cssClass, moreCssClass]); assert.equal(node.getAttribute('class'), ''); }, 'string + array': function () { // when a node id and classes are passed, then the classes are added var nodeId = generateId(); node.setAttribute('id', nodeId); node.setAttribute('class', cssClass + ' ' + moreCssClass); domClass.remove(nodeId, [cssClass, moreCssClass]); assert.equal(node.getAttribute('class'), ''); }, 'node w/ multiple + class': function () { // when a node and class are passed, then the class is added node.setAttribute('class', cssClass + ' ' + multipleCss); domClass.remove(node, cssClass); assert.equal(node.getAttribute('class'), multipleCss); }, 'string w/ multiple + class': function () { // when a node id and class are passed, then the class is added var nodeId = generateId(); node.setAttribute('id', nodeId); node.setAttribute('class', cssClass + ' ' + multipleCss); domClass.remove(nodeId, cssClass); assert.equal(node.getAttribute('class'), multipleCss); }, 'node w/ multiple + array': function () { // when a node and classes are passed, then the classes are added node.setAttribute('class', cssClass + ' ' + multipleCss + ' ' + moreCssClass); domClass.remove(node, [cssClass, moreCssClass]); assert.equal(node.getAttribute('class'), multipleCss); }, 'string w/ multiple + array': function () { // when a node id and classes are passed, then the classes are added var nodeId = generateId(); node.setAttribute('id', nodeId); node.setAttribute('class', cssClass + ' ' + multipleCss + ' ' + moreCssClass); domClass.remove(nodeId, [cssClass, moreCssClass]); assert.equal(node.getAttribute('class'), multipleCss); } }, '.replace': { beforeEach: function () { node = domConstruct.toDom('<div class="' + cssClass + '"></div>'); domConstruct.place(node, document.body); }, afterEach: function () { domConstruct.destroy(node); }, 'node + add': function () { // when a node and add class is passed, the class is added. domClass.replace(node, moreCssClass); assert.equal(node.getAttribute('class'), moreCssClass); }, 'string + add': function () { // when a node id and add class is passed, the class is added. var nodeId = generateId(); node.setAttribute('id', nodeId); domClass.replace(nodeId, moreCssClass); assert.equal(node.getAttribute('class'), moreCssClass); }, 'node + null add': function () { // when a node and remove class is passed, the class is removed. domClass.replace(node, null, cssClass); assert.equal(node.getAttribute('class'), ''); }, 'string + null add': function () { // when a node id and remove class is passed, the class is removed. var nodeId = generateId(); node.setAttribute('id', nodeId); domClass.replace(nodeId, null, cssClass); assert.equal(node.getAttribute('class'), ''); }, 'node + null remove': function () { // when a node and add class is passed, the class is added domClass.replace(node, moreCssClass, null); assert.equal(node.getAttribute('class'), cssClass + ' ' + moreCssClass); }, 'string + null remove': function () { // when a node id and add class is passed, the class is added var nodeId = generateId(); node.setAttribute('id', nodeId); domClass.replace(nodeId, moreCssClass, null); assert.equal(node.getAttribute('class'), cssClass + ' ' + moreCssClass); }, 'node + class': function () { // when a node and add and remove class is passed, the classes are added and removed domClass.replace(node, moreCssClass, cssClass); assert.equal(node.getAttribute('class'), moreCssClass); }, 'string + class': function () { // when a node id and add and remove class is passed, the classes are added and removed var nodeId = generateId(); node.setAttribute('id', nodeId); domClass.replace(nodeId, moreCssClass, cssClass); assert.equal(node.getAttribute('class'), moreCssClass); }, 'node + classes as string - removing': function () { // when a node and multiple classes are passed separated by a space, the classes are removed node.setAttribute('class', cssClass + ' ' + moreCssClass); domClass.replace(node, null, moreCssClass + ' ' + cssClass); assert.equal(node.getAttribute('class'), ''); }, 'string + classes as string - removing': function () { // when a node id and multiple classes are passed separated by a space, the classes are removed var nodeId = generateId(); node.setAttribute('id', nodeId); node.setAttribute('class', cssClass + ' ' + moreCssClass); domClass.replace(nodeId, null, moreCssClass + ' ' + cssClass); assert.equal(node.getAttribute('class'), ''); }, 'node + classes as string - adding': function () { // when a node and multiple classes are passed separated by a space, the classes are added node.setAttribute('class', ''); domClass.replace(node, moreCssClass + ' ' + cssClass); assert.equal(node.getAttribute('class'), moreCssClass + ' ' + cssClass); }, 'string + classes as string - adding': function () { // when a node id and multiple classes are passed separated by a space, the classes are added var nodeId = generateId(); node.setAttribute('id', nodeId); node.setAttribute('class', ''); domClass.replace(nodeId, moreCssClass + ' ' + cssClass); assert.equal(node.getAttribute('class'), moreCssClass + ' ' + cssClass); }, 'node + classes as array - removing': function () { // when a node and multiple classes are passed as an array, the classes are removed node.setAttribute('class', cssClass + ' ' + moreCssClass); domClass.replace(node, null, [moreCssClass, cssClass]); assert.equal(node.getAttribute('class'), ''); }, 'string + classes as array - removing': function () { // when a node id and multiple classes are passed as an array, the classes are removed var nodeId = generateId(); node.setAttribute('id', nodeId); node.setAttribute('class', cssClass + ' ' + moreCssClass); domClass.replace(nodeId, null, [moreCssClass, cssClass]); assert.equal(node.getAttribute('class'), ''); }, 'node + classes as array - adding': function () { // when a node and multiple classes are passed as an array, the classes are added node.setAttribute('class', ''); domClass.replace(node, [moreCssClass, cssClass]); assert.equal(node.getAttribute('class'), moreCssClass + ' ' + cssClass); }, 'string + classes as array - adding': function () { // when a node id and multiple classes are passed as an array, the classes are added var nodeId = generateId(); node.setAttribute('id', nodeId); node.setAttribute('class', ''); domClass.replace(nodeId, [moreCssClass, cssClass]); assert.equal(node.getAttribute('class'), moreCssClass + ' ' + cssClass); }, 'node + classes as string - replacing': function () { // when a node and multiple classes are passed separated by a space, the classes are added domClass.replace(node, moreCssClass + ' ' + multipleCss, cssClass); assert.equal(node.getAttribute('class'), moreCssClass + ' ' + multipleCss); }, 'string + classes as string - replacing': function () { // when a node and multiple classes are passed separated by a space, the classes are added var nodeId = generateId(); node.setAttribute('id', nodeId); domClass.replace(nodeId, moreCssClass + ' ' + multipleCss, cssClass); assert.equal(node.getAttribute('class'), moreCssClass + ' ' + multipleCss); }, 'node + classes as array - replacing': function () { // when a node and multiple classes are passed as an array, the classes are removed node.setAttribute('class', cssClass + ' ' + moreCssClass); domClass.replace(node, [multipleCss], [moreCssClass, cssClass]); assert.equal(node.getAttribute('class'), multipleCss); }, 'string + classes as array - replacing': function () { // when a node id and multiple classes are passed as an array, the classes are removed var nodeId = generateId(); node.setAttribute('id', nodeId); node.setAttribute('class', cssClass + ' ' + moreCssClass); domClass.replace(nodeId, [multipleCss], [moreCssClass, cssClass]); assert.equal(node.getAttribute('class'), multipleCss); } }, '.toggle': { beforeEach: function () { node = domConstruct.toDom('<div class="' + cssClass + '"></div>'); domConstruct.place(node, document.body); }, afterEach: function () { domConstruct.destroy(node); }, 'node + class': function () { // when you pass a node and class, the class is removed domClass.toggle(node, cssClass); assert.equal(node.getAttribute('class'), ''); }, 'string + class': function () { // when you pass a node id and class, the class is removed var nodeId = generateId(); node.setAttribute('id', nodeId); domClass.toggle(nodeId, cssClass); assert.equal(node.getAttribute('class'), ''); }, 'node + class + true': function () { // when you pass a node and class and a true condition, the class is added domClass.toggle(node, cssClass, true); assert.equal(node.getAttribute('class'), cssClass); }, 'string + class + true': function () { // when you pass a node id and class and a true condition, the class is added var nodeId = generateId(); node.setAttribute('id', nodeId); domClass.toggle(nodeId, cssClass, true); assert.equal(node.getAttribute('class'), cssClass); }, 'node + class + false': function () { // when you pass a node and class and a false condition, the class is removed domClass.toggle(node, cssClass, false); assert.equal(node.getAttribute('class'), ''); }, 'string + class + false': function () { // when you pass a node id and class and a false condition, the class is removed var nodeId = generateId(); node.setAttribute('id', nodeId); domClass.toggle(nodeId, cssClass, false); assert.equal(node.getAttribute('class'), ''); }, 'node + new class': function () { // when you pass a node and new class, the class is added domClass.toggle(node, multipleCss); assert.equal(node.getAttribute('class'), cssClass + ' ' + multipleCss); }, 'string + new class': function () { // when you pass a node id and new class, the class is added var nodeId = generateId(); node.setAttribute('id', nodeId); domClass.toggle(nodeId, multipleCss); assert.equal(node.getAttribute('class'), cssClass + ' ' + multipleCss); }, 'node + array': function () { // when you pass a node and array, the classes are toggled domClass.toggle(node, [cssClass, multipleCss]); assert.equal(node.getAttribute('class'), multipleCss); }, 'string + array': function () { // when you pass a node id and array, the classes are toggled var nodeId = generateId(); node.setAttribute('id', nodeId); domClass.toggle(nodeId, [cssClass, multipleCss]); assert.equal(node.getAttribute('class'), multipleCss); }, 'node + array + true': function () { // when you pass a node and array + true, the classes are added domClass.toggle(node, [cssClass, multipleCss], true); assert.equal(node.getAttribute('class'), cssClass + ' ' + multipleCss); }, 'string + array + true': function () { // when you pass a node id and array + true, the classes are added var nodeId = generateId(); node.setAttribute('id', nodeId); domClass.toggle(nodeId, [cssClass, multipleCss], true); assert.equal( node.getAttribute('class'), cssClass + ' ' + multipleCss); }, 'node + classes': function () { // when you pass a node and multples classes, the classes are toggled domClass.toggle(node, cssClass + ' ' + multipleCss); assert.equal(node.getAttribute('class'), multipleCss); }, 'string + classes': function () { // when you pass a node id and multples classes, the classes are toggled var nodeId = generateId(); node.setAttribute('id', nodeId); domClass.toggle(nodeId, cssClass + ' ' + multipleCss); assert.equal(node.getAttribute('class'), multipleCss); }, 'node + classes + false': function () { // when you pass a node and multples classes + false, the classes are removed domClass.toggle(node, cssClass + ' ' + multipleCss, false); assert.equal(node.getAttribute('class'), ''); }, 'string + classes + false': function () { // when you pass a node id and multples classes + false, the classes are removed var nodeId = generateId(); node.setAttribute('id', nodeId); domClass.toggle(nodeId, cssClass + ' ' + multipleCss, false); assert.equal(node.getAttribute('class'), ''); } }, 'validation tests': { beforeEach: function () { node = domConstruct.toDom('<div></div>'); domConstruct.place(node, document.body); }, afterEach: function () { domConstruct.destroy(node); }, 'testClassFunctions': function () { domClass.remove(node); domClass.add(node, 'a'); assert.equal(node.className, 'a', 'class is a'); domClass.remove(node, 'c'); assert.equal(node.className, 'a', 'class is still a'); assert.isTrue(domClass.contains(node, 'a'), 'class is a, test for a'); assert.isFalse(domClass.contains(node, 'b'), 'class is a, test for b'); domClass.add(node, 'b'); assert.equal(node.className, 'a b', 'class is a b'); assert.isTrue(domClass.contains(node, 'a'), 'class is a b, test for a'); assert.isTrue(domClass.contains(node, 'b'), 'class is a b, test for b'); domClass.remove(node, 'a'); assert.equal(node.className, 'b', 'class is b'); assert.isFalse(domClass.contains(node, 'a'), 'class is b, test for a'); assert.isTrue(domClass.contains(node, 'b'), 'class is b, test for b'); domClass.toggle(node, 'a'); assert.equal(node.className, 'b a', 'class is b a'); assert.isTrue(domClass.contains(node, 'a'), 'class is b a, test for a'); assert.isTrue(domClass.contains(node, 'b'), 'class is b a, test for b'); domClass.toggle(node, 'a'); assert.equal(node.className, 'b', 'class is b (again)'); assert.isFalse(domClass.contains(node, 'a'), 'class is b (again), test for a'); assert.isTrue(domClass.contains(node, 'b'), 'class is b (again), test for b'); domClass.toggle(node, 'b'); assert.equal(node.className, '', 'class is blank'); assert.isFalse(domClass.contains(node, 'a'), 'class is blank, test for a'); assert.isFalse(domClass.contains(node, 'b'), 'class is blank, test for b'); domClass.remove(node, 'c'); assert.isTrue(!node.className, 'no class'); var acuWorked = true; try{ domClass.add(node); }catch(e){ acuWorked = false; } assert.equal(acuWorked, true, 'addClass handles undefined class'); domClass.add(node, 'a'); domClass.replace(node, 'b', 'a'); assert.isTrue(domClass.contains(node, 'b'), 'class is b after replacing a, test for b'); assert.isFalse(domClass.contains(node, 'a'), 'class is b after replacing a, test for not a'); domClass.replace(node, '', 'b'); assert.isFalse(domClass.contains(node, 'b'), 'class b should be removed, with no class added'); assert.equal(node.className, '', 'The className is empty'); domClass.add(node, 'b a'); domClass.replace(node, 'c', ''); assert.equal(node.className,'b a c', 'The className is is "b a c" after using an empty string in replaceClass'); assert.isFalse(domClass.contains(document, 'ab'), 'hasClass on document should not throw error'); }, 'testAddRemoveClassMultiple': function () { domClass.remove(node); domClass.add(node, 'a'); assert.equal(node.className, 'a', 'class is a'); domClass.add(node, 'a b'); assert.equal(node.className, 'a b', 'class is a b'); domClass.add(node, 'b a'); assert.equal(node.className, 'a b', 'class is still a b'); domClass.add(node, ['a', 'c']); assert.equal(node.className, 'a b c', 'class is a b c'); domClass.remove(node, 'c a'); assert.equal(node.className, 'b', 'class is b'); domClass.remove(node); assert.equal(node.className, '', 'empty class'); domClass.add(node, ' c b a '); assert.equal(node.className, 'c b a', 'class is c b a'); domClass.remove(node, ' c b '); assert.equal(node.className, 'a', 'class is a'); domClass.remove(node, ['a', 'c']); assert.equal(node.className, '', 'empty class'); domClass.add(node, 'a b'); domClass.replace(node, 'c', 'a b'); assert.equal(node.className, 'c', 'class is c'); domClass.replace(node, ''); assert.equal(node.className, '', 'empty class'); } } }); });