• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1<!DOCTYPE html>
2<html>
3<head>
4<!-- TODO(arv): Check in Closue unit tests and make this run as part of the
5     tests -->
6<script src="http://closure-library.googlecode.com/svn/trunk/closure/goog/base.js"></script>
7<script src="../cr.js"></script>
8<script src="promise.js"></script>
9<script>
10
11goog.require('goog.testing.jsunit');
12goog.require('goog.testing.MockClock');
13
14</script>
15</head>
16<body>
17<script>
18
19var mockClock;
20
21function setUp() {
22  mockClock = new goog.testing.MockClock();
23  mockClock.install();
24}
25
26function tearDown() {
27  mockClock.uninstall();
28}
29
30const Promise = cr.Promise;
31
32function testCallbacks() {
33  var calls1 = 0;
34  var calls2 = 0;
35  var V = {};
36  function f1(v) {
37    calls1++;
38    assertEquals(V, v);
39  }
40  function f2(v) {
41    calls2++;
42    assertEquals(V, v);
43  }
44  var p = new Promise;
45  p.addListener(f1);
46  p.addListener(f2);
47  p.value = V;
48  assertEquals(1, calls1);
49  assertEquals(1, calls2);
50}
51
52function testCallbacks2() {
53  var calls1 = 0;
54  var calls2 = 0;
55  var V = {};
56  function f1(v) {
57    calls1++;
58    assertEquals(V, v);
59  }
60  function f2(v) {
61    calls2++;
62    assertEquals(V, v);
63  }
64  var p = new Promise;
65  p.addListener(f1);
66  p.addListener(f2);
67  p.removeListener(f1);
68  p.value = V;
69  assertEquals(0, calls1);
70  assertEquals(1, calls2);
71}
72
73function testCallbacks3() {
74  var calls1 = 0;
75  var calls2 = 0;
76  var V = {};
77  function f1(v) {
78    calls1++;
79    assertEquals(V, v);
80  }
81  function f2(v) {
82    calls2++;
83    assertEquals(V, v);
84  }
85  var p = new Promise;
86  p.addListener(f1);
87  assertEquals(0, calls1);
88  assertEquals(0, calls2);
89  p.value = V;
90  assertEquals(1, calls1);
91  assertEquals(0, calls2);
92  p.addListener(f2);
93  assertEquals(1, calls1);
94  assertEquals(1, calls2);
95}
96
97function testCallbacks4() {
98  var calls1 = 0;
99  var calls2 = 0;
100  var V = {};
101  function f1(v) {
102    calls1++;
103    assertEquals(V, v);
104  }
105  function f2(v) {
106    calls2++;
107    assertEquals(V, v);
108  }
109  var p = new Promise(V);
110  p.addListener(f1);
111  p.addListener(f2);
112  assertEquals(1, calls1);
113  assertEquals(1, calls2);
114}
115
116function testThisInCallback() {
117  var calls = 0;
118  var V = {};
119  function f(v) {
120    calls++;
121    assertEquals(V, v);
122    assertNotEquals(p, this);
123  }
124  var p = new Promise;
125  p.addListener(f);
126  p.value = V;
127  assertEquals(1, calls);
128}
129
130function testPending() {
131  var p = new Promise;
132  assertEquals(undefined, p.value);
133  assertFalse(p.done);
134}
135
136function testValueCanBeUndefined() {
137  var p = new Promise;
138  p.value = undefined;
139  assertEquals(undefined, p.value);
140  assertTrue(p.done);
141}
142
143function testDone() {
144  var p = new Promise;
145  assertFalse(p.done);
146  p.value = 42;
147  assertTrue(p.done);
148}
149
150function testWhen() {
151  const V = {};
152  var calls = 0;
153  var p = new Promise;
154  p.value = V;
155  Promise.when(p, function(v) {
156    assertEquals(V, v);
157    calls++;
158  });
159  assertEquals(1, calls);
160}
161
162function testWhen2() {
163  const V = {};
164  var calls = 0;
165  var p = new Promise;
166  Promise.when(p, function(v) {
167    assertEquals(V, v);
168    calls++;
169  });
170  p.value = V;
171  assertEquals(1, calls);
172}
173
174function testWait() {
175  const S = {};
176  var p = Promise.wait(1000, S);
177  assertFalse(p.done);
178  mockClock.tick(500);
179  assertFalse(p.done);
180  mockClock.tick(500);
181  assertTrue(p.done);
182  assertEquals(S, p.value);
183}
184
185function testAny() {
186  var p1 = new Promise;
187  var p2 = new Promise;
188  var p3 = new Promise;
189
190  var any = Promise.any(p1, p2, p3);
191  p2.value = 2;
192  assertEquals(2, any.value);
193  p1.value = 1;
194  assertEquals(2, any.value);
195}
196
197function testAll() {
198  var p1 = new Promise;
199  var p2 = new Promise;
200  var p3 = new Promise;
201
202  var pAll = Promise.all(p1, p2, p3);
203  p1.value = 1;
204  p2.value = 2;
205  p3.value = 3;
206  assertArrayEquals([1, 2, 3], pAll.value);
207}
208
209function testAllEmpty() {
210  var pAll = Promise.all();
211  assertArrayEquals([], pAll.value);
212}
213
214function testAllAlreadyDone() {
215  var p1 = new Promise(1);
216  var p2 = new Promise(2);
217  var p3 = new Promise(3);
218
219  var pAll = Promise.all(p1, p2, p3);
220  assertArrayEquals([1, 2, 3], pAll.value);
221}
222
223function testEvent() {
224  var p = Promise.event(document.body, 'foo');
225  var e = new cr.Event('foo');
226  document.body.dispatchEvent(e);
227  assertEquals(e, p.value);
228}
229
230function testToString() {
231  var p1 = new Promise;
232  assertEquals('[object Promise]', String(p1));
233
234  var p2 = new Promise;
235  p2.value = 'Hello world';
236  assertEquals('Hello world', String(p2));
237}
238
239function testValueOf() {
240  var p = new Promise;
241  p.value = 42;
242
243  assertTrue(p < 43);
244  assertTrue(p > 41);
245  assertTrue(p == 42);
246}
247
248</script>
249</body>
250</html>
251