1 | define([ |
---|
2 | "doh/main", |
---|
3 | "dojo/Deferred", |
---|
4 | "dojo/promise/all" |
---|
5 | ], function(doh, Deferred, all){ |
---|
6 | var tests = { |
---|
7 | "all() with array argument": function(t){ |
---|
8 | var obj1 = {}, obj2 = {}, obj3 = {}; |
---|
9 | var received; |
---|
10 | all([this.deferred, new Deferred().resolve(obj2), obj3]).then(function(result){ received = result; }); |
---|
11 | this.deferred.resolve(obj1); |
---|
12 | t.t(received[0] === obj1); |
---|
13 | t.t(received[1] === obj2); |
---|
14 | t.t(received[2] === obj3); |
---|
15 | }, |
---|
16 | |
---|
17 | "all() with object argument": function(t){ |
---|
18 | var obj1 = {}, obj2 = {}, obj3 = {}; |
---|
19 | var received; |
---|
20 | all({ a: this.deferred, b: new Deferred().resolve(obj2), c: obj3 }).then(function(result){ received = result; }); |
---|
21 | this.deferred.resolve(obj1); |
---|
22 | t.t(received.a === obj1); |
---|
23 | t.t(received.b === obj2); |
---|
24 | t.t(received.c === obj3); |
---|
25 | }, |
---|
26 | |
---|
27 | "all() without arguments": function(t){ |
---|
28 | var received; |
---|
29 | all().then(function(){ received = arguments; }); |
---|
30 | t.is(received.length, 1); |
---|
31 | t.t(typeof received[0] === "undefined"); |
---|
32 | }, |
---|
33 | |
---|
34 | "all() with single non-object argument": function(t){ |
---|
35 | var received; |
---|
36 | all(null).then(function(){ received = arguments; }); |
---|
37 | t.is(received.length, 1); |
---|
38 | t.t(typeof received[0] === "undefined"); |
---|
39 | }, |
---|
40 | |
---|
41 | "all() with empty array": function(t){ |
---|
42 | var received; |
---|
43 | all([]).then(function(result){ received = result; }); |
---|
44 | t.is(received, []); |
---|
45 | }, |
---|
46 | |
---|
47 | "all() with empty object": function(t){ |
---|
48 | var received; |
---|
49 | all({}).then(function(result){ received = result; }); |
---|
50 | t.is(received, {}); |
---|
51 | }, |
---|
52 | |
---|
53 | "all() with one rejected promise": function(t){ |
---|
54 | var obj = {}; |
---|
55 | var received; |
---|
56 | all([this.deferred, new Deferred().reject(obj), {}]).then(null, function(result){ received = result; }); |
---|
57 | t.t(received === obj); |
---|
58 | }, |
---|
59 | |
---|
60 | "all() with one promise rejected later": function(t){ |
---|
61 | var obj = {}; |
---|
62 | var received; |
---|
63 | all([this.deferred, new Deferred(), new Deferred()]).then(null, function(result){ received = result; }); |
---|
64 | this.deferred.reject(obj); |
---|
65 | t.t(received === obj); |
---|
66 | }, |
---|
67 | |
---|
68 | "all() with multiple promises rejected later": function(t){ |
---|
69 | var obj = {}; |
---|
70 | var deferred2 = new Deferred(); |
---|
71 | var received; |
---|
72 | all([this.deferred, deferred2, new Deferred()]).then(null, function(result){ received = result; }); |
---|
73 | this.deferred.reject(obj); |
---|
74 | deferred2.reject({}); |
---|
75 | t.t(received === obj); |
---|
76 | }, |
---|
77 | |
---|
78 | "all() cancel only affects returned promise, not those we're waiting for": function(t){ |
---|
79 | var obj = {}; |
---|
80 | var canceled = false; |
---|
81 | var deferred2 = new Deferred(function(){ canceled = true; }); |
---|
82 | var received; |
---|
83 | var promise = all([this.deferred, deferred2, new Deferred()]).then(null, function(result){ received = result; }); |
---|
84 | promise.cancel(obj); |
---|
85 | t.t(received === obj); |
---|
86 | t.f(canceled); |
---|
87 | } |
---|
88 | }; |
---|
89 | |
---|
90 | var wrapped = []; |
---|
91 | for(var name in tests){ |
---|
92 | wrapped.push({ |
---|
93 | name: name, |
---|
94 | setUp: setUp, |
---|
95 | runTest: tests[name] |
---|
96 | }); |
---|
97 | } |
---|
98 | |
---|
99 | function setUp(){ |
---|
100 | this.deferred = new Deferred; |
---|
101 | } |
---|
102 | |
---|
103 | doh.register("tests.promise.all", wrapped); |
---|
104 | }); |
---|