diff options
Diffstat (limited to 'addons/web/static/test/rpc-misordered.js')
| -rw-r--r-- | addons/web/static/test/rpc-misordered.js | 126 |
1 files changed, 126 insertions, 0 deletions
diff --git a/addons/web/static/test/rpc-misordered.js b/addons/web/static/test/rpc-misordered.js new file mode 100644 index 00000000000..0f6067e97a6 --- /dev/null +++ b/addons/web/static/test/rpc-misordered.js @@ -0,0 +1,126 @@ +openerp.testing.section('misordered resolution managemeng', { + dependencies: ['web.data'] +}, function (test) { + test('Resolve all correctly ordered, sync', function (instance) { + var dm = new instance.web.DropMisordered(), flag = false; + + var d1 = $.Deferred(), d2 = $.Deferred(), + r1 = dm.add(d1), r2 = dm.add(d2); + + $.when(r1, r2).done(function () { + flag = true; + }); + d1.resolve(); + d2.resolve(); + + ok(flag); + }); + test("Don't resolve mis-ordered, sync", function (instance) { + var dm = new instance.web.DropMisordered(), + done1 = false, done2 = false, + fail1 = false, fail2 = false; + + var d1 = $.Deferred(), d2 = $.Deferred(); + dm.add(d1).done(function () { done1 = true; }) + .fail(function () { fail1 = true; }); + dm.add(d2).done(function () { done2 = true; }) + .fail(function () { fail2 = true; }); + + d2.resolve(); + d1.resolve(); + + // d1 is in limbo + ok(!done1); + ok(!fail1); + // d2 is resolved + ok(done2); + ok(!fail2); + }); + test('Fail mis-ordered flag, sync', function (instance) { + var dm = new instance.web.DropMisordered(true), + done1 = false, done2 = false, + fail1 = false, fail2 = false; + + var d1 = $.Deferred(), d2 = $.Deferred(); + dm.add(d1).done(function () { done1 = true; }) + .fail(function () { fail1 = true; }); + dm.add(d2).done(function () { done2 = true; }) + .fail(function () { fail2 = true; }); + + d2.resolve(); + d1.resolve(); + + // d1 is failed + ok(!done1); + ok(fail1); + // d2 is resolved + ok(done2); + ok(!fail2); + }); + + test('Resolve all correctly ordered, async', {asserts: 1}, function (instance) { + var dm = new instance.web.DropMisordered(); + + var d1 = $.Deferred(), d2 = $.Deferred(), + r1 = dm.add(d1), r2 = dm.add(d2); + + setTimeout(function () { d1.resolve(); }, 100); + setTimeout(function () { d2.resolve(); }, 200); + + return $.when(r1, r2).done(function () { + ok(true); + }); + }); + test("Don't resolve mis-ordered, async", {asserts: 4}, function (instance) { + var dm = new instance.web.DropMisordered(), + done1 = false, done2 = false, + fail1 = false, fail2 = false; + + var d1 = $.Deferred(), d2 = $.Deferred(); + dm.add(d1).done(function () { done1 = true; }) + .fail(function () { fail1 = true; }); + dm.add(d2).done(function () { done2 = true; }) + .fail(function () { fail2 = true; }); + + setTimeout(function () { d1.resolve(); }, 200); + setTimeout(function () { d2.resolve(); }, 100); + + var done = $.Deferred(); + setTimeout(function () { + // d1 is in limbo + ok(!done1); + ok(!fail1); + // d2 is resolved + ok(done2); + ok(!fail2); + done.resolve(); + }, 400); + return $.when(d1, d2, done); + }); + test('Fail mis-ordered flag, async', {asserts: 4}, function (instance) { + var dm = new instance.web.DropMisordered(true), + done1 = false, done2 = false, + fail1 = false, fail2 = false; + + var d1 = $.Deferred(), d2 = $.Deferred(); + dm.add(d1).done(function () { done1 = true; }) + .fail(function () { fail1 = true; }); + dm.add(d2).done(function () { done2 = true; }) + .fail(function () { fail2 = true; }); + + setTimeout(function () { d1.resolve(); }, 200); + setTimeout(function () { d2.resolve(); }, 100); + + var done = $.Deferred(); + setTimeout(function () { + // d1 is failed + ok(!done1); + ok(fail1); + // d2 is resolved + ok(done2); + ok(!fail2); + done.resolve(); + }, 400); + return $.when(d1, d2, done); + }); +}); |
