Skip to content
This repository was archived by the owner on Mar 22, 2022. It is now read-only.

Commit 842a3b5

Browse files
committed
Added test suite
1 parent df38c36 commit 842a3b5

File tree

6 files changed

+166
-6
lines changed

6 files changed

+166
-6
lines changed

.gitmodules

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
[submodule "assets/qunit"]
2+
path = assets/qunit
3+
url = https://github.com/jquery/qunit.git
4+
[submodule "assets/micro-selector"]
5+
path = assets/micro-selector
6+
url = https://github.com/fabiomcosta/micro-selector.git

assets/micro-selector

Submodule micro-selector added at cd7924f

assets/qunit

Submodule qunit added at 795a73b

src/zenjungle.js

+6-6
Original file line numberDiff line numberDiff line change
@@ -28,17 +28,17 @@ var zenjungle = (function() {
2828
// converts some patterns to properties
2929
var zen = function(string) {
3030
var replace = {
31-
'#([a-zA-Z][a-zA-Z0-9\\-_]*)': function(match) {
32-
return {'id': match[1]};
33-
},
34-
'\\.([a-zA-Z][a-zA-Z0-9\\-_]*)': function(match) {
35-
return {'class': match[1]};
36-
},
3731
'\\[([a-z\\-]+)=([^\\]]+)\\]': function(match) {
3832
var prop = {};
3933
prop[match[1]] = match[2].replace(/^["']/, '').replace(/["']$/, '');
4034

4135
return prop;
36+
},
37+
'#([a-zA-Z][a-zA-Z0-9\\-_]*)': function(match) {
38+
return {'id': match[1]};
39+
},
40+
'\\.([a-zA-Z][a-zA-Z0-9\\-_]*)': function(match) {
41+
return {'class': match[1]};
4242
}
4343
},
4444
props = {};

test/test.html

+17
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
<!DOCTYPE html>
2+
<html>
3+
<head>
4+
<meta charset="utf-8">
5+
<title>QUnit Example</title>
6+
<link rel="stylesheet" href="../assets/qunit/qunit/qunit.css">
7+
</head>
8+
<body>
9+
<div id="qunit"></div>
10+
<div id="qunit-fixture"></div>
11+
12+
<script src="../assets/qunit/qunit/qunit.js"></script>
13+
<script src="../assets/micro-selector/dist/uSelector.js"></script>
14+
<script src="../src/zenjungle.js"></script>
15+
<script src="test.js"></script>
16+
</body>
17+
</html>

test/test.js

+135
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,135 @@
1+
var fixture = $u('#qunit-fixture').pop();
2+
3+
module('non-zen');
4+
test('check basic append', function() {
5+
var element;
6+
7+
fixture.appendChild(zenjungle([
8+
['span', 'Lorem ipsum']
9+
]));
10+
11+
element = $u('span', fixture).pop();
12+
13+
equal('SPAN', element.tagName, 'element is span')
14+
equal('Lorem ipsum', element.innerHTML, 'element inner HTML equals "Lorem ipsum"');
15+
});
16+
17+
test('check append with properties', function() {
18+
var element;
19+
20+
fixture.appendChild(zenjungle([
21+
['div', {
22+
'class': 'test-class',
23+
'id': 'test-id'
24+
}]
25+
]))
26+
27+
element = $u('div', fixture).pop();
28+
29+
equal('test-class', element.className, 'element class equals "test-class"');
30+
equal('test-id', element.id, 'element id equals "test-id"');
31+
});
32+
33+
test('check nested elements', function() {
34+
35+
fixture.appendChild(zenjungle([
36+
['div', [
37+
['ul', [
38+
['li', 'test #1'],
39+
['li', 'test #2'],
40+
['li', {'class': 'test'}, 'test #3'],
41+
['li', 'test #4'],
42+
]],
43+
['span']
44+
]]
45+
]));
46+
47+
equal(true, $u('div > ul', fixture).length, 'UL is DIVs direct child');
48+
equal(true, $u('div > span', fixture).length, 'SPAN is DIVs direct child');
49+
equal(false, $u('div > li').length, 'LIs are not direct childs of DIV')
50+
equal(4, $u('div > ul > li', fixture).length, 'list has 4 elements');
51+
equal('test', $u('li', fixture)[2].className, 'third LI has class');
52+
});
53+
54+
test('DOM elements mixin', function() {
55+
56+
fixture.appendChild(zenjungle([
57+
['div', [
58+
document.createElement('span')
59+
]]
60+
]));
61+
62+
equal(1, $u('div > span', fixture).length);
63+
});
64+
65+
test('zenjungle mixins', function() {
66+
67+
fixture.appendChild(zenjungle([
68+
['div', [
69+
zenjungle([
70+
['span']
71+
])
72+
]]
73+
]));
74+
75+
equal(1, $u('div > span', fixture).length);
76+
});
77+
78+
module('zen');
79+
test('check element class', function() {
80+
81+
fixture.appendChild(zenjungle([
82+
['div.test']
83+
]));
84+
85+
equal('test', $u('div', fixture)[0].className);
86+
});
87+
88+
test('check element id', function() {
89+
90+
fixture.appendChild(zenjungle([
91+
['div#test']
92+
]));
93+
94+
equal('test', $u('div', fixture)[0].id);
95+
});
96+
97+
test('check attributes', function() {
98+
99+
fixture.appendChild(zenjungle([
100+
['a[href=#fragment][class=test]']
101+
]));
102+
103+
equal('fragment', $u('a', fixture)[0].href.split('#')[1]);
104+
equal('test', $u('a', fixture)[0].className);
105+
});
106+
107+
test('mixed properties #1', function() {
108+
var element;
109+
110+
fixture.appendChild(zenjungle([
111+
['input#id.class[type=text][value=some-text]']
112+
]));
113+
114+
element = $u('input', fixture)[0];
115+
116+
equal('class', element.className, 'class name equals "class"');
117+
equal('id', element.id, 'id equals "id"');
118+
equal('text', element.type, 'element type is "text"');
119+
equal('some-text', element.value, 'element value is "some-text"');
120+
})
121+
122+
test('mixed properties #2', function() {
123+
var element;
124+
125+
fixture.appendChild(zenjungle([
126+
['input.class[type=text]#id[value=some-text]']
127+
]));
128+
129+
element = $u('input', fixture)[0];
130+
131+
equal('class', element.className, 'class name equals "class"');
132+
equal('id', element.id, 'id equals "id"');
133+
equal('text', element.type, 'element type is "text"');
134+
equal('some-text', element.value, 'element value is "some-text"');
135+
})

0 commit comments

Comments
 (0)