[FIX] deferred.pipe -> deferred.then
[odoo/odoo.git] / addons / web / static / test / rpc.js
1 openerp.testing.section('misordered resolution managemeng', {
2     dependencies: ['web.data']
3 }, function (test) {
4     test('Resolve all correctly ordered, sync', function (instance) {
5         var dm = new instance.web.DropMisordered(), flag = false;
6
7         var d1 = $.Deferred(), d2 = $.Deferred(),
8             r1 = dm.add(d1), r2 = dm.add(d2);
9
10         $.when(r1, r2).done(function () {
11             flag = true;
12         });
13         d1.resolve();
14         d2.resolve();
15
16         ok(flag);
17     });
18     test("Don't resolve mis-ordered, sync", function (instance) {
19         var dm = new instance.web.DropMisordered(),
20             done1 = false, done2 = false,
21             fail1 = false, fail2 = false;
22
23         var d1 = $.Deferred(), d2 = $.Deferred();
24         dm.add(d1).done(function () { done1 = true; })
25                   .fail(function () { fail1 = true; });
26         dm.add(d2).done(function () { done2 = true; })
27                   .fail(function () { fail2 = true; });
28
29         d2.resolve();
30         d1.resolve();
31
32         // d1 is in limbo
33         ok(!done1);
34         ok(!fail1);
35         // d2 is resolved
36         ok(done2);
37         ok(!fail2);
38     });
39     test('Fail mis-ordered flag, sync', function (instance) {
40         var dm = new instance.web.DropMisordered(true),
41             done1 = false, done2 = false,
42             fail1 = false, fail2 = false;
43
44         var d1 = $.Deferred(), d2 = $.Deferred();
45         dm.add(d1).done(function () { done1 = true; })
46                   .fail(function () { fail1 = true; });
47         dm.add(d2).done(function () { done2 = true; })
48                   .fail(function () { fail2 = true; });
49
50         d2.resolve();
51         d1.resolve();
52
53         // d1 is failed
54         ok(!done1);
55         ok(fail1);
56         // d2 is resolved
57         ok(done2);
58         ok(!fail2);
59     });
60
61     test('Resolve all correctly ordered, async', {asserts: 1}, function (instance) {
62         var dm = new instance.web.DropMisordered();
63
64         var d1 = $.Deferred(), d2 = $.Deferred(),
65             r1 = dm.add(d1), r2 = dm.add(d2);
66
67         setTimeout(function () { d1.resolve(); }, 100);
68         setTimeout(function () { d2.resolve(); }, 200);
69
70         return $.when(r1, r2).done(function () {
71             ok(true);
72         });
73     });
74     test("Don't resolve mis-ordered, async", {asserts: 4}, function (instance) {
75         var dm = new instance.web.DropMisordered(),
76             done1 = false, done2 = false,
77             fail1 = false, fail2 = false;
78
79         var d1 = $.Deferred(), d2 = $.Deferred();
80         dm.add(d1).done(function () { done1 = true; })
81                   .fail(function () { fail1 = true; });
82         dm.add(d2).done(function () { done2 = true; })
83                   .fail(function () { fail2 = true; });
84
85         setTimeout(function () { d1.resolve(); }, 200);
86         setTimeout(function () { d2.resolve(); }, 100);
87
88         var done = $.Deferred();
89         setTimeout(function () {
90             // d1 is in limbo
91             ok(!done1);
92             ok(!fail1);
93             // d2 is resolved
94             ok(done2);
95             ok(!fail2);
96             done.resolve();
97         }, 400);
98         return $.when(d1, d2, done);
99     });
100     test('Fail mis-ordered flag, async', {asserts: 4}, function (instance) {
101         var dm = new instance.web.DropMisordered(true),
102             done1 = false, done2 = false,
103             fail1 = false, fail2 = false;
104
105         var d1 = $.Deferred(), d2 = $.Deferred();
106         dm.add(d1).done(function () { done1 = true; })
107                   .fail(function () { fail1 = true; });
108         dm.add(d2).done(function () { done2 = true; })
109                   .fail(function () { fail2 = true; });
110
111         setTimeout(function () { d1.resolve(); }, 200);
112         setTimeout(function () { d2.resolve(); }, 100);
113
114         var done = $.Deferred();
115         setTimeout(function () {
116             start();
117             // d1 is failed
118             ok(!done1);
119             ok(fail1);
120             // d2 is resolved
121             ok(done2);
122             ok(!fail2);
123             done.resolve();
124         }, 400);
125         return $.when(d1, d2, done)
126     });
127 });