diff options
| author | niv-openerp <nicolas.vanhoren@openerp.com> | 2013-08-06 14:07:24 +0200 |
|---|---|---|
| committer | niv-openerp <nicolas.vanhoren@openerp.com> | 2013-08-06 14:07:24 +0200 |
| commit | 392e9d260bb692e4fa404848e70c6dc7ea61c36a (patch) | |
| tree | d3d65a03e90c29deb73cf72a7a5b758d303dd647 /addons/web/static/test/rpc-misordered.js | |
| parent | 122f0aa9b39f0ed26dc26d09e4afffd949730cd1 (diff) | |
| parent | cb55e11c700efa298a74da781a108185682325da (diff) | |
[IMP] Mostly improvements of openerpframework.js . Moved a lot of necessary features to it (jsonrpc, models, translations,...). Added tests. Also some other style improvements.
bzr revid: nicolas.vanhoren@openerp.com-20130806120724-55nsh8ay9qiac72r
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); + }); +}); |
