forked from component/classes
/
test.js
139 lines (123 loc) · 3.36 KB
/
test.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
var test = require('tape')
var classes = require('./');
function getElement() {
var el = document.createElement('div');
el.classList = undefined;
return el
}
test('add(element, class)', function(t){
t.test('should add a class', function(t){
var el = getElement()
classes.add(el, 'foo');
t.equal('foo', el.className);
t.end()
});
t.test('should not add the same class twice', function(t){
var el = getElement()
classes.add(el, 'foo');
classes.add(el, 'foo');
classes.add(el, 'foo');
classes.add(el, 'bar');
t.equal('foo bar', el.className);
t.end()
});
});
test('remove(el, class)', function(t){
t.test('should remove a class from the beginning', function(t){
var el = getElement()
el.className = 'foo bar baz';
classes.remove(el, 'foo');
t.equal('bar baz', el.className);
t.end()
});
t.test('should remove a class from the middle', function(t){
var el = getElement()
el.className = 'foo bar baz';
classes.remove(el, 'bar');
t.equal('foo baz', el.className);
t.end()
});
t.test('should remove a class from the end', function(t){
var el = getElement()
el.className = 'foo bar baz';
classes.remove(el, 'baz');
t.equal('foo bar', el.className);
t.end()
});
});
test('remove(el, regexp)', function(t){
t.test('should remove matching classes', function(t){
var el = getElement()
el.className = 'foo item-1 item-2 bar';
classes.remove(el, /^item-/);
t.equal('foo bar', el.className);
t.end()
});
});
test('toggle(el, class)', function(t){
t.test('when present', function(t){
t.test('should remove the class', function(t){
var el = getElement()
el.className = 'foo bar hidden';
classes.toggle(el, 'hidden');
t.equal('foo bar', el.className);
t.end()
});
});
t.test('when not present', function(t){
t.test('should add the class', function(t){
var el = getElement()
el.className = 'foo bar';
classes.toggle(el, 'hidden');
t.equal('foo bar hidden', el.className);
t.end()
});
});
});
test('has(el, class)', function(t){
t.test('should check if the class is present', function(t){
var el = getElement()
el.className = 'hey there';
t.notOk(classes.has(el, 'foo'));
t.ok(classes.has(el, 'hey'));
t.ok(classes.has(el, 'there'));
t.end()
});
});
test('classes(el)', function(t){
t.test('should return an array of classes', function(t){
var el = getElement()
el.className = 'foo bar baz';
var ret = classes(el);
t.equal('foo', ret[0]);
t.equal('bar', ret[1]);
t.equal('baz', ret[2]);
t.end()
});
t.test('should return an empty array when no className is defined', function(t){
var el = getElement()
var ret = classes(el);
t.equal(0, ret.length);
t.end()
});
t.test('should ignore leading whitespace', function(t){
var el = getElement()
el.className = ' foo bar baz';
var ret = classes(el);
t.equal('foo', ret[0]);
t.equal('bar', ret[1]);
t.equal('baz', ret[2]);
t.equal(3, ret.length);
t.end()
});
t.test('should ignore trailing whitespace', function(t){
var el = getElement()
el.className = 'foo bar baz ';
var ret = classes(el);
t.equal('foo', ret[0]);
t.equal('bar', ret[1]);
t.equal('baz', ret[2]);
t.equal(3, ret.length);
t.end()
});
});