diff options
| author | Vincent Schippefilt <vsc@odoo.com> | 2019-03-06 14:02:32 +0100 |
|---|---|---|
| committer | Aaron Bohy <aab@odoo.com> | 2019-03-06 20:07:17 +0100 |
| commit | ab56e637b7f97ddcdbcc9baea99ae097e342409c (patch) | |
| tree | 4cb47da9f7ef89b19d18429220a7507470ec12a9 /addons/web/static/tests/core/concurrency_tests.js | |
| parent | eeed894fd50e477135e1ac9a82f6e98ce063ab90 (diff) | |
[REF] web: adapt code after jQuery update
Part of task 1896658
Co-authored-by: Aaron Bohy <aab@odoo.com>
Co-authored-by: Christophe Matthieu <chm@odoo.com>
Co-authored-by: Mathieu Duckerts-Antoine <dam@odoo.com>
Co-authored-by: David Monjoie <dmo@odoo.com>
Co-authored-by: Martin Geubelle <mge@odoo.com>
Co-authored-by: svs-odoo <svs@odoo.com>
Co-authored-by: Vincent Schippefilt <vsc@odoo.com>
Diffstat (limited to 'addons/web/static/tests/core/concurrency_tests.js')
| -rw-r--r-- | addons/web/static/tests/core/concurrency_tests.js | 533 |
1 files changed, 289 insertions, 244 deletions
diff --git a/addons/web/static/tests/core/concurrency_tests.js b/addons/web/static/tests/core/concurrency_tests.js index 516ce6a1b8f..1e195fde67d 100644 --- a/addons/web/static/tests/core/concurrency_tests.js +++ b/addons/web/static/tests/core/concurrency_tests.js @@ -2,166 +2,197 @@ odoo.define('web.concurrency_tests', function (require) { "use strict"; var concurrency = require('web.concurrency'); +var testUtils = require('web.test_utils'); + +var makeTestPromise = testUtils.makeTestPromise; +var makeTestPromiseWithAssert = testUtils.makeTestPromiseWithAssert; QUnit.module('core', {}, function () { QUnit.module('concurrency'); + QUnit.test('mutex: simple scheduling', async function (assert) { + assert.expect(5); + var mutex = new concurrency.Mutex(); - QUnit.test('mutex: simple scheduling', function (assert) { - assert.expect(6); + var prom1 = makeTestPromiseWithAssert(assert, 'prom1'); + var prom2 = makeTestPromiseWithAssert(assert, 'prom2'); - var m = new concurrency.Mutex(); + mutex.exec(function () { return prom1; }); + mutex.exec(function () { return prom2; }); - var def1 = $.Deferred(), - def2 = $.Deferred(); + assert.verifySteps([]); - var p1 = m.exec(function () { return def1; }); - var p2 = m.exec(function () { return def2; }); + await prom1.resolve(); - assert.strictEqual(p1.state(), "pending"); - assert.strictEqual(p2.state(), "pending"); + assert.verifySteps(['ok prom1']); - def1.resolve(); - assert.strictEqual(p1.state(), "resolved"); - assert.strictEqual(p2.state(), "pending"); + await prom2.resolve(); - def2.resolve(); - assert.strictEqual(p1.state(), "resolved"); - assert.strictEqual(p2.state(), "resolved"); + assert.verifySteps(['ok prom2']); }); - QUnit.test('mutex: simpleScheduling2', function (assert) { - assert.expect(6); + QUnit.test('mutex: simpleScheduling2', async function (assert) { + assert.expect(5); + var mutex = new concurrency.Mutex(); + + var prom1 = makeTestPromiseWithAssert(assert, 'prom1'); + var prom2 = makeTestPromiseWithAssert(assert, 'prom2'); - var m = new concurrency.Mutex(); + mutex.exec(function () { return prom1; }); + mutex.exec(function () { return prom2; }); - var def1 = $.Deferred(), - def2 = $.Deferred(); + assert.verifySteps([]); - var p1 = m.exec(function() { return def1; }); - var p2 = m.exec(function() { return def2; }); + await prom2.resolve(); - assert.strictEqual(p1.state(), "pending"); - assert.strictEqual(p2.state(), "pending"); - def2.resolve(); + assert.verifySteps(['ok prom2']); - assert.strictEqual(p1.state(), "pending"); - assert.strictEqual(p2.state(), "pending"); + await prom1.resolve(); - def1.resolve(); - assert.strictEqual(p1.state(), "resolved"); - assert.strictEqual(p2.state(), "resolved"); + assert.verifySteps(['ok prom1']); }); - QUnit.test('mutex: reject', function (assert) { - assert.expect(12); + QUnit.test('mutex: reject', async function (assert) { + assert.expect(7); + var mutex = new concurrency.Mutex(); - var m = new concurrency.Mutex(); + var prom1 = makeTestPromiseWithAssert(assert, 'prom1'); + var prom2 = makeTestPromiseWithAssert(assert, 'prom2'); + var prom3 = makeTestPromiseWithAssert(assert, 'prom3'); - var def1 = $.Deferred(), - def2 = $.Deferred(), - def3 = $.Deferred(); + mutex.exec(function () { return prom1; }).catch(function () {}); + mutex.exec(function () { return prom2; }).catch(function () {}); + mutex.exec(function () { return prom3; }).catch(function () {}); - var p1 = m.exec(function() {return def1;}); - var p2 = m.exec(function() {return def2;}); - var p3 = m.exec(function() {return def3;}); + assert.verifySteps([]); - assert.strictEqual(p1.state(), "pending"); - assert.strictEqual(p2.state(), "pending"); - assert.strictEqual(p3.state(), "pending"); + prom1.resolve(); + await testUtils.nextMicrotaskTick(); - def1.resolve(); - assert.strictEqual(p1.state(), "resolved"); - assert.strictEqual(p2.state(), "pending"); - assert.strictEqual(p3.state(), "pending"); + assert.verifySteps(['ok prom1']); - def2.reject(); - assert.strictEqual(p1.state(), "resolved"); - assert.strictEqual(p2.state(), "rejected"); - assert.strictEqual(p3.state(), "pending"); + prom2.catch(function () { + assert.verifySteps(['ko prom2']); + }); + prom2.reject({name: "sdkjfmqsjdfmsjkdfkljsdq"}); + await testUtils.nextMicrotaskTick(); + + prom3.resolve(); + await testUtils.nextMicrotaskTick(); - def3.resolve(); - assert.strictEqual(p1.state(), "resolved"); - assert.strictEqual(p2.state(), "rejected"); - assert.strictEqual(p3.state(), "resolved"); + assert.verifySteps(['ok prom3']); }); - QUnit.test('mutex: getUnlockedDef checks', function (assert) { - assert.expect(5); + QUnit.test('mutex: getUnlockedDef checks', async function (assert) { + assert.expect(9); + + var mutex = new concurrency.Mutex(); - var m = new concurrency.Mutex(); + var prom1 = makeTestPromiseWithAssert(assert, 'prom1'); + var prom2 = makeTestPromiseWithAssert(assert, 'prom2'); - var def1 = $.Deferred(); - var def2 = $.Deferred(); + mutex.getUnlockedDef().then(function () { + assert.step('mutex unlocked (1)'); + }); + + await testUtils.nextMicrotaskTick(); - assert.strictEqual(m.getUnlockedDef().state(), "resolved"); + assert.verifySteps(['mutex unlocked (1)']); - m.exec(function() { return def1; }); + mutex.exec(function () { return prom1; }); + await testUtils.nextMicrotaskTick(); - var unlockedDef = m.getUnlockedDef(); + mutex.getUnlockedDef().then(function () { + assert.step('mutex unlocked (2)'); + }); - assert.strictEqual(unlockedDef.state(), "pending"); + assert.verifySteps([]); - m.exec(function() { return def2; }); + mutex.exec(function () { return prom2; }); + await testUtils.nextMicrotaskTick(); - assert.strictEqual(unlockedDef.state(), "pending"); + assert.verifySteps([]); - def1.resolve(); + await prom1.resolve(); - assert.strictEqual(unlockedDef.state(), "pending"); + assert.verifySteps(['ok prom1']); - def2.resolve(); + prom2.resolve(); + await testUtils.nextTick(); - assert.strictEqual(unlockedDef.state(), "resolved"); + assert.verifySteps(['ok prom2', 'mutex unlocked (2)']); }); - QUnit.test('DropPrevious: basic usecase', function (assert) { - assert.expect(5); + QUnit.test('DropPrevious: basic usecase', async function (assert) { + assert.expect(4); + + var dp = new concurrency.DropPrevious(); + + var prom1 = makeTestPromise(assert, 'prom1'); + var prom2 = makeTestPromise(assert, 'prom2'); + + dp.add(prom1).then(() => assert.step('should not go here')) + .catch(()=> assert.step("rejected dp1")); + dp.add(prom2).then(() => assert.step("ok dp2")); + + await testUtils.nextMicrotaskTick(); + assert.verifySteps(['rejected dp1']); + + prom2.resolve(); + await testUtils.nextMicrotaskTick(); + + assert.verifySteps(['ok dp2']); + }); + + QUnit.test('DropPrevious: resolve first before last', async function (assert) { + assert.expect(4); var dp = new concurrency.DropPrevious(); - var def1 = $.Deferred(); - var def2 = $.Deferred(); + var prom1 = makeTestPromise(assert, 'prom1'); + var prom2 = makeTestPromise(assert, 'prom2'); - var r1 = dp.add(def1); + dp.add(prom1).then(() => assert.step('should not go here')) + .catch(()=> assert.step("rejected dp1")); + dp.add(prom2).then(() => assert.step("ok dp2")); - assert.strictEqual(r1.state(), "pending"); - var r2 = dp.add(def2); + await testUtils.nextMicrotaskTick(); - assert.strictEqual(r1.state(), "rejected"); - assert.strictEqual(r2.state(), "pending"); + assert.verifySteps(['rejected dp1']); - def2.resolve(); + prom1.resolve(); + prom2.resolve(); + await testUtils.nextMicrotaskTick(); - assert.strictEqual(r1.state(), "rejected"); - assert.strictEqual(r2.state(), "resolved"); + assert.verifySteps(['ok dp2']); }); - QUnit.test('DropMisordered: resolve all correctly ordered, sync', function (assert) { + QUnit.test('DropMisordered: resolve all correctly ordered, sync', async function (assert) { assert.expect(1); var dm = new concurrency.DropMisordered(), flag = false; - var d1 = $.Deferred(), - d2 = $.Deferred(); + var d1 = makeTestPromise(); + var d2 = makeTestPromise(); var r1 = dm.add(d1), r2 = dm.add(d2); - $.when(r1, r2).done(function () { + Promise.all([r1, r2]).then(function () { flag = true; }); d1.resolve(); d2.resolve(); + await testUtils.nextTick(); assert.ok(flag); }); - QUnit.test("DropMisordered: don't resolve mis-ordered, sync", function (assert) { + QUnit.test("DropMisordered: don't resolve mis-ordered, sync", async function (assert) { assert.expect(4); var dm = new concurrency.DropMisordered(), @@ -170,45 +201,47 @@ QUnit.module('core', {}, function () { fail1 = false, fail2 = false; - var d1 = $.Deferred(), - d2 = $.Deferred(); + var d1 = makeTestPromise(); + var d2 = makeTestPromise(); - dm.add(d1).done(function () { done1 = true; }) - .fail(function () { fail1 = true; }); - dm.add(d2).done(function () { done2 = true; }) - .fail(function () { fail2 = true; }); + dm.add(d1).then(function () { done1 = true; }) + .catch(function () { fail1 = true; }); + dm.add(d2).then(function () { done2 = true; }) + .catch(function () { fail2 = true; }); d2.resolve(); d1.resolve(); + await testUtils.nextMicrotaskTick(); // d1 is in limbo assert.ok(!done1); assert.ok(!fail1); - // d2 is resolved + // d2 is fulfilled assert.ok(done2); assert.ok(!fail2); }); - QUnit.test('DropMisordered: fail mis-ordered flag, sync', function (assert) { + QUnit.test('DropMisordered: fail mis-ordered flag, sync', async function (assert) { assert.expect(4); - var dm = new concurrency.DropMisordered(true), + var dm = new concurrency.DropMisordered(true/* failMisordered */), done1 = false, done2 = false, fail1 = false, fail2 = false; - var d1 = $.Deferred(), - d2 = $.Deferred(); + var d1 = makeTestPromise(); + var d2 = makeTestPromise(); - dm.add(d1).done(function () { done1 = true; }) - .fail(function () { fail1 = true; }); - dm.add(d2).done(function () { done2 = true; }) - .fail(function () { fail2 = true; }); + dm.add(d1).then(function () { done1 = true; }) + .catch(function () { fail1 = true; }); + dm.add(d2).then(function () { done2 = true; }) + .catch(function () { fail2 = true; }); d2.resolve(); d1.resolve(); + await testUtils.nextMicrotaskTick(); // d1 is in limbo assert.ok(!done1); @@ -225,8 +258,8 @@ QUnit.module('core', {}, function () { var dm = new concurrency.DropMisordered(); - var d1 = $.Deferred(), - d2 = $.Deferred(); + var d1 = makeTestPromise(); + var d2 = makeTestPromise(); var r1 = dm.add(d1), r2 = dm.add(d2); @@ -234,7 +267,7 @@ QUnit.module('core', {}, function () { setTimeout(function () { d1.resolve(); }, 10); setTimeout(function () { d2.resolve(); }, 20); - $.when(r1, r2).done(function () { + Promise.all([r1, r2]).then(function () { assert.ok(true); done(); }); @@ -248,13 +281,13 @@ QUnit.module('core', {}, function () { done1 = false, done2 = false, fail1 = false, fail2 = false; - var d1 = $.Deferred(), - d2 = $.Deferred(); + var d1 = makeTestPromise(); + var d2 = makeTestPromise(); - dm.add(d1).done(function () { done1 = true; }) - .fail(function () { fail1 = true; }); - dm.add(d2).done(function () { done2 = true; }) - .fail(function () { fail2 = true; }); + dm.add(d1).then(function () { done1 = true; }) + .catch(function () { fail1 = true; }); + dm.add(d2).then(function () { done2 = true; }) + .catch(function () { fail2 = true; }); setTimeout(function () { d1.resolve(); }, 20); setTimeout(function () { d2.resolve(); }, 10); @@ -279,13 +312,13 @@ QUnit.module('core', {}, function () { done1 = false, done2 = false, fail1 = false, fail2 = false; - var d1 = $.Deferred(), - d2 = $.Deferred(); + var d1 = makeTestPromise(); + var d2 = makeTestPromise(); - dm.add(d1).done(function () { done1 = true; }) - .fail(function () { fail1 = true; }); - dm.add(d2).done(function () { done2 = true; }) - .fail(function () { fail2 = true; }); + dm.add(d1).then(function () { done1 = true; }) + .catch(function () { fail1 = true; }); + dm.add(d2).then(function () { done2 = true; }) + .catch(function () { fail2 = true; }); setTimeout(function () { d1.resolve(); }, 20); setTimeout(function () { d2.resolve(); }, 10); @@ -302,230 +335,242 @@ QUnit.module('core', {}, function () { }, 30); }); - QUnit.test('MutexedDropPrevious: simple', function (assert) { - assert.expect(3); + QUnit.test('MutexedDropPrevious: simple', async function (assert) { + assert.expect(5); var m = new concurrency.MutexedDropPrevious(); + var d1 = makeTestPromise(); - var d1 = $.Deferred(); - var p1 = m.exec(function () { return d1; }).then(function (result) { + d1.then(function () { + assert.step("d1 resolved"); + }); + m.exec(function () { return d1; }).then(function (result) { + assert.step("p1 done"); assert.strictEqual(result, 'd1'); }); - assert.strictEqual(p1.state(), "pending"); - + assert.verifySteps([]); d1.resolve('d1'); - assert.strictEqual(p1.state(), "resolved"); + await testUtils.nextMicrotaskTick(); + + assert.verifySteps(["d1 resolved","p1 done"]); }); - QUnit.test('MutexedDropPrevious: 2 arrives after 1 resolution', function (assert) { - assert.expect(6); + QUnit.test('MutexedDropPrevious: d2 arrives after d1 resolution', async function (assert) { + assert.expect(8); var m = new concurrency.MutexedDropPrevious(); + var d1 = makeTestPromiseWithAssert(assert, 'd1'); - var d1 = $.Deferred(); - var p1 = m.exec(function () { return d1; }).then(function (result) { - assert.strictEqual(result, 'd1'); + m.exec(function () { return d1; }).then(function () { + assert.step("p1 resolved"); }); - assert.strictEqual(p1.state(), "pending"); - + assert.verifySteps([]); d1.resolve('d1'); - assert.strictEqual(p1.state(), "resolved"); + await testUtils.nextMicrotaskTick(); - var d2 = $.Deferred(); - var p2 = m.exec(function () { return d2; }).then(function (result) { - assert.strictEqual(result, 'd2'); - }); + assert.verifySteps(['ok d1','p1 resolved']); - assert.strictEqual(p2.state(), "pending"); + var d2 = makeTestPromiseWithAssert(assert, 'd2'); + m.exec(function () { return d2; }).then(function () { + assert.step("p2 resolved"); + }); + assert.verifySteps([]); d2.resolve('d2'); - assert.strictEqual(p2.state(), "resolved"); + await testUtils.nextMicrotaskTick(); + + assert.verifySteps(['ok d2','p2 resolved']); }); - QUnit.test('MutexedDropPrevious: 1 does not return a deferred', function (assert) { - assert.expect(5); + QUnit.test('MutexedDropPrevious: p1 does not return a deferred', async function (assert) { + assert.expect(7); var m = new concurrency.MutexedDropPrevious(); - var p1 = m.exec(function () { return 42; }).then(function (result) { - assert.strictEqual(result, 42); + m.exec(function () { return 42; }).then(function () { + assert.step("p1 resolved"); }); - assert.strictEqual(p1.state(), "resolved"); + assert.verifySteps([]); + await testUtils.nextMicrotaskTick(); - var d2 = $.Deferred(); - var p2 = m.exec(function () { return d2; }).then(function (result) { - assert.strictEqual(result, 'd2'); - }); + assert.verifySteps(['p1 resolved']); - assert.strictEqual(p2.state(), "pending"); + var d2 = makeTestPromiseWithAssert(assert, 'd2'); + m.exec(function () { return d2; }).then(function () { + assert.step("p2 resolved"); + }); + assert.verifySteps([]); d2.resolve('d2'); - assert.strictEqual(p2.state(), "resolved"); + await testUtils.nextMicrotaskTick(); + assert.verifySteps(['ok d2','p2 resolved']); }); - QUnit.test('MutexedDropPrevious: 2 arrives before 1 resolution', function (assert) { - assert.expect(13); + QUnit.test('MutexedDropPrevious: p2 arrives before p1 resolution', async function (assert) { + assert.expect(8); var m = new concurrency.MutexedDropPrevious(); + var d1 = makeTestPromiseWithAssert(assert, 'd1'); - var d1 = $.Deferred(); - var d2 = $.Deferred(); - - var p1 = m.exec(function () { - assert.step('p1'); - return d1; + m.exec(function () { return d1; }).catch(function () { + assert.step("p1 rejected"); }); - assert.strictEqual(p1.state(), "pending"); + assert.verifySteps([]); - var p2 = m.exec(function () { - assert.step('p2'); - return d2; - }).then(function (result) { - assert.strictEqual(result, 'd2'); + var d2 = makeTestPromiseWithAssert(assert, 'd2'); + m.exec(function () { return d2; }).then(function () { + assert.step("p2 resolved"); }); - assert.strictEqual(p1.state(), "rejected"); - assert.strictEqual(p2.state(), "pending"); - - assert.step('d1 resolved'); + assert.verifySteps([]); d1.resolve('d1'); - assert.strictEqual(p1.state(), "rejected"); - assert.strictEqual(p2.state(), "pending"); + await testUtils.nextMicrotaskTick(); + assert.verifySteps(['p1 rejected', 'ok d1']); - assert.step('d2 resolved'); d2.resolve('d2'); - assert.strictEqual(p1.state(), "rejected"); - assert.strictEqual(p2.state(), "resolved"); - - assert.verifySteps(['p1', 'd1 resolved', 'p2', 'd2 resolved']); + await testUtils.nextMicrotaskTick(); + assert.verifySteps(['ok d2', 'p2 resolved']); }); - QUnit.test('MutexedDropPrevious: 3 arrives before 2 initialization', function (assert) { - assert.expect(13); - + QUnit.test('MutexedDropPrevious: 3 arrives before 2 initialization', async function (assert) { + assert.expect(10); var m = new concurrency.MutexedDropPrevious(); - var d1 = $.Deferred(); - var d2 = $.Deferred(); - var d3 = $.Deferred(); + var d1 = makeTestPromiseWithAssert(assert, 'd1'); + var d3 = makeTestPromiseWithAssert(assert, 'd3'); - var p1 = m.exec(function () { return d1; }); - assert.strictEqual(p1.state(), "pending"); + m.exec(function () { return d1; }).catch(function () { + assert.step('p1 rejected'); + }); - var p2 = m.exec(function () { + m.exec(function () { assert.ok(false, "should not execute this function"); - return d2; + }).catch(function () { + assert.step('p2 rejected'); }); - assert.strictEqual(p1.state(), "rejected"); - assert.strictEqual(p2.state(), "pending"); - var p3 = m.exec(function () { return d3; }).then(function (result) { + m.exec(function () { return d3; }).then(function (result) { assert.strictEqual(result, 'd3'); + assert.step('p3 resolved'); }); - assert.strictEqual(p1.state(), "rejected"); - assert.strictEqual(p2.state(), "rejected"); - assert.strictEqual(p3.state(), "pending"); + + assert.verifySteps([]); + + await testUtils.nextMicrotaskTick(); + + assert.verifySteps(['p1 rejected', 'p2 rejected']); d1.resolve('d1'); - assert.strictEqual(p1.state(), "rejected"); - assert.strictEqual(p2.state(), "rejected"); - assert.strictEqual(p3.state(), "pending"); + await testUtils.nextMicrotaskTick(); + + assert.verifySteps(['ok d1']); d3.resolve('d3'); - assert.strictEqual(p1.state(), "rejected"); - assert.strictEqual(p2.state(), "rejected"); - assert.strictEqual(p3.state(), "resolved"); - }); + await testUtils.nextTick(); - QUnit.test('MutexedDropPrevious: 3 arrives after 2 initialization', function (assert) { - assert.expect(19); + assert.verifySteps(['ok d3','p3 resolved']); + }); + + QUnit.test('MutexedDropPrevious: 3 arrives after 2 initialization', async function (assert) { + assert.expect(15); var m = new concurrency.MutexedDropPrevious(); - var d1 = $.Deferred(); - var d2 = $.Deferred(); - var d3 = $.Deferred(); + var d1 = makeTestPromiseWithAssert(assert, 'd1'); + var d2 = makeTestPromiseWithAssert(assert, 'd2'); + var d3 = makeTestPromiseWithAssert(assert, 'd3'); - var p1 = m.exec(function () { - assert.step('p1'); + m.exec(function () { + assert.step('execute d1'); return d1; + }).catch(function () { + assert.step('p1 rejected'); }); - assert.strictEqual(p1.state(), "pending"); - var p2 = m.exec(function () { - assert.step('p2'); + m.exec(function () { + assert.step('execute d2'); return d2; + }).catch(function () { + assert.step('p2 rejected'); }); - assert.strictEqual(p1.state(), "rejected"); - assert.strictEqual(p2.state(), "pending"); + assert.verifySteps(['execute d1']); + + await testUtils.nextMicrotaskTick(); + assert.verifySteps(['p1 rejected']); - assert.step('d1 resolved'); d1.resolve('d1'); - assert.strictEqual(p1.state(), "rejected"); - assert.strictEqual(p2.state(), "pending"); + await testUtils.nextMicrotaskTick(); + + assert.verifySteps(['ok d1', 'execute d2']); - var p3 = m.exec(function () { - assert.step('p3'); + m.exec(function () { + assert.step('execute d3'); return d3; - }).then(function (result) { - assert.strictEqual(result, 'd3'); + }).then(function () { + assert.step('p3 resolved'); }); + await testUtils.nextMicrotaskTick(); + assert.verifySteps(['p2 rejected']); - assert.step('d2 resolved'); - d2.resolve('d2'); - assert.strictEqual(p1.state(), "rejected"); - assert.strictEqual(p2.state(), "rejected"); - assert.strictEqual(p3.state(), "pending"); + d2.resolve(); + await testUtils.nextMicrotaskTick(); + assert.verifySteps(['ok d2', 'execute d3']); - assert.step('d3 resolved'); - d3.resolve('d3'); - assert.strictEqual(p1.state(), "rejected"); - assert.strictEqual(p2.state(), "rejected"); - assert.strictEqual(p3.state(), "resolved"); + d3.resolve(); + await testUtils.nextTick(); + assert.verifySteps(['ok d3', 'p3 resolved']); - assert.verifySteps(['p1', 'd1 resolved', 'p2', 'd2 resolved', 'p3', 'd3 resolved']); - }); + }); - QUnit.test('MutexedDropPrevious: 2 in then of 1 with 3', function (assert) { - assert.expect(6); + QUnit.test('MutexedDropPrevious: 2 in then of 1 with 3', async function (assert) { + assert.expect(9); var m = new concurrency.MutexedDropPrevious(); - var d1 = $.Deferred(); - var d2 = $.Deferred(); - var d3 = $.Deferred(); + var d1 = makeTestPromiseWithAssert(assert, 'd1'); + var d2 = makeTestPromiseWithAssert(assert, 'd2'); + var d3 = makeTestPromiseWithAssert(assert, 'd3'); var p3; - var p1 = m.exec(function () { return d1; }) - .always(function () { + m.exec(function () { return d1; }) + .catch(function () { + assert.step('p1 rejected'); p3 = m.exec(function () { return d3; - }).then(function (result) { - assert.strictEqual(result, 'd3'); + }).then(function () { + assert.step('p3 resolved'); }); return p3; }); - assert.strictEqual(p1.state(), "pending"); + await testUtils.nextTick(); + assert.verifySteps([]); - var p2 = m.exec(function () { - assert.ok(false, "should not execute this function"); + m.exec(function () { + assert.ok(false, 'should not execute this function'); return d2; + }).catch(function () { + assert.step('p2 rejected'); }); - assert.strictEqual(p1.state(), "rejected"); - assert.strictEqual(p2.state(), "rejected"); + + await testUtils.nextTick(); + assert.verifySteps(['p1 rejected', 'p2 rejected']); d1.resolve('d1'); - assert.strictEqual(p3.state(), "pending"); + await testUtils.nextTick(); + + assert.verifySteps(['ok d1']); d3.resolve('d3'); - assert.strictEqual(p3.state(), "resolved"); + await testUtils.nextTick(); + + assert.verifySteps(['ok d3', 'p3 resolved']); }); }); -});
\ No newline at end of file +}); |
