Skip to content

Commit bc26447

Browse files
committed
Add YUI Tests
1 parent d21e31f commit bc26447

File tree

2 files changed

+209
-0
lines changed

2 files changed

+209
-0
lines changed

tests/assets/firefox-tests.js

+181
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,181 @@
1+
YUI.add('task-tests', function (Y) {
2+
var Promise = function (fn) {
3+
var deferred = new task.Deferred();
4+
fn(function (value) {
5+
deferred.resolve(value);
6+
}, function (reason) {
7+
deferred.reject(reason);
8+
});
9+
return deferred.promise;
10+
};
11+
var spawn = task.spawn;
12+
var Assert = Y.Assert;
13+
14+
Promise.resolve = function (value) {
15+
var deferred = new task.Deferred();
16+
deferred.resolve(value);
17+
return deferred.promise;
18+
};
19+
Promise.reject = function (reason) {
20+
var deferred = new task.Deferred();
21+
deferred.reject(reason);
22+
return deferred.promise;
23+
};
24+
Y.Test.Case.prototype.next = function (fn) {
25+
var test = this;
26+
27+
return function () {
28+
var args = arguments;
29+
30+
test.resume(function () {
31+
fn.apply(test, args);
32+
});
33+
};
34+
};
35+
36+
var suite = new Y.Test.Suite({
37+
name: 'Task tests'
38+
});
39+
40+
suite.add(new Y.Test.Case({
41+
name: 'spawn',
42+
43+
'should return a new Task': function () {
44+
Assert.isInstanceOf(task.Task, spawn(function() {}));
45+
}
46+
}));
47+
48+
suite.add(new Y.Test.Case({
49+
name: 'yield',
50+
51+
'should retrieve a promise\'s value': function (done) {
52+
var test = this;
53+
var expected = 'hello world';
54+
55+
spawn(function () {
56+
var actual = yield Promise.resolve(expected);
57+
58+
test.resume(function () {
59+
Assert.areSame(expected, actual);
60+
});
61+
});
62+
63+
test.wait();
64+
},
65+
'should wait for promises to resolve': function (done) {
66+
var test = this;
67+
var expected = 'hello world';
68+
69+
spawn(function () {
70+
var actual = yield new Promise(function (resolve) {
71+
setTimeout(function () {
72+
resolve(expected);
73+
}, 50);
74+
});
75+
76+
test.resume(function () {
77+
Assert.areSame(expected, actual);
78+
});
79+
});
80+
81+
test.wait();
82+
},
83+
'should allow for catching rejected promises': function (done) {
84+
var test = this;
85+
var expected = new Error('failed');
86+
87+
spawn(function () {
88+
try {
89+
yield Promise.reject(expected);
90+
} catch (error) {
91+
test.resume(function () {
92+
Assert.areEqual(expected, error);
93+
});
94+
}
95+
});
96+
97+
test.wait();
98+
},
99+
'should wait for multiple yields': function (done) {
100+
spawn(function () {
101+
var count = yield Promise.resolve(1);
102+
count = yield Promise.resolve(count + 2);
103+
count = yield Promise.resolve(count + 3);
104+
test.resume(function () {
105+
Assert.areSame(6, count);
106+
});
107+
});
108+
}
109+
}));
110+
111+
suite.add(new Y.Test.Case({
112+
name: 'Task as a promise',
113+
114+
'should be a promise': function () {
115+
Assert.isFunction(spawn(function () {}).then);
116+
},
117+
'should resolve to undefined': function (done) {
118+
var test = this;
119+
120+
spawn(function () {
121+
yield Promise.resolve(5);
122+
}).then(test.next(function (value) {
123+
Assert.isUndefined(value);
124+
}));
125+
126+
test.wait();
127+
},
128+
'should be rejected when a non-generator function is passed': function (done) {
129+
var test = this;
130+
131+
spawn(function () {}).then(null, test.next(function (error) {
132+
Assert.isInstanceOf(Error, error);
133+
}));
134+
135+
test.wait();
136+
},
137+
'should throw when passed non-generator function that throws': function () {
138+
var expected = new Error('failed');
139+
140+
try {
141+
spawn(function () {
142+
throw expected;
143+
});
144+
} catch (error) {
145+
Assert.areSame(expected, error);
146+
}
147+
},
148+
'should be rejected when an error is thrown in the generator function': function (done) {
149+
var test = this;
150+
var expected = new Error('failed');
151+
152+
spawn(function () {
153+
var foo = yield Promise.resolve(5);
154+
throw expected;
155+
}).then(null, test.next(function (error) {
156+
Assert.areSame(expected, error);
157+
}));
158+
159+
test.wait();
160+
},
161+
'should be rejected when a yielded rejected promise is uncaught': function (done) {
162+
var test = this;
163+
var expected = new Error('failed');
164+
165+
spawn(function () {
166+
yield Promise.reject(expected);
167+
}).then(null, test.next(function (error) {
168+
Assert.areSame(expected, error);
169+
}));
170+
171+
test.wait();
172+
}
173+
}));
174+
175+
Y.Test.Runner.add(suite);
176+
177+
}, '0.0.1', {
178+
requires: [
179+
'test'
180+
]
181+
});

tests/index.html

+28
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
<!DOCTYPE html>
2+
<html>
3+
<head>
4+
<meta charset="utf-8">
5+
<title>Task.js tests</title>
6+
</head>
7+
<body class="yui3-skin-sam">
8+
<div id="logger"></div>
9+
<script src="../lib/task.js"></script>
10+
<script src="http://yui.yahooapis.com/3.10.1/build/yui/yui-min.js"></script>
11+
<script src="assets/firefox-tests.js" type="application/javascript;version=1.8"></script>
12+
<script>
13+
YUI({
14+
filter: (window.location.search.match(/[?&]filter=([^&]+)/) || [])[1] || 'raw'
15+
}).use('test-console', 'task-tests', function (Y) {
16+
17+
(new Y.Test.Console({
18+
height: 500,
19+
filters: {
20+
pass: true
21+
}
22+
})).render('#log');
23+
Y.Test.Runner.setName('Task');
24+
Y.Test.Runner.run();
25+
});
26+
</script>
27+
</body>
28+
</html>

0 commit comments

Comments
 (0)