Files
odoo_source/addons/mail/static/tests/models/timer_tests.js
T
Vincent Schippefilt 6cbfdbce2d [FIX] mail: Timer(s) tests nondeterministic behavior
Timer test relies on setTimeout(..., 0) for its execution and its
verification. However it seems that in the browser there is *not always*
a guarantee that 2 setTimeout(...,0) will execute in a specific order.

Delaying the verification by 1 ms : setTimeout(..., 1) should force the
order of execution.

closes odoo/odoo#41732

Signed-off-by: VincentSchippefilt <VincentSchippefilt@users.noreply.github.com>
2019-12-12 13:22:20 +00:00

80 lines
1.7 KiB
JavaScript

odoo.define('mail.model.TimerTests', function (require) {
"use strict";
var testUtils = require("web.test_utils");
var Timer = require('mail.model.Timer');
var concurrency = require('web.concurrency');
QUnit.module('mail', {}, function () {
QUnit.module('model', {}, function () {
QUnit.module('Timer');
QUnit.test('start()', async function (assert) {
assert.expect(2);
var prom = testUtils.makeTestPromise();
var t = new Timer({
duration: 0,
onTimeout: prom.resolve,
});
assert.verifySteps([], "should not have called the function");
t.start();
await prom;
assert.ok(true, "should have called the function");
});
QUnit.test('clear()', function (assert) {
var done = assert.async();
assert.expect(1);
var func = function () {
assert.step('function_called');
};
var t = new Timer({
duration: 0,
onTimeout: func,
});
t.start();
t.clear();
// Called after timer timeout
setTimeout(function () {
assert.verifySteps([], "should not have called the function");
done();
}, 1);
});
QUnit.test('reset()', async function (assert) {
assert.expect(4);
var i = 0;
var func = function () {
++i;
assert.step('function_called ' + i);
};
var t = new Timer({
duration: 0,
onTimeout: func,
});
t.start();
// Called after 1st timer timeout
await concurrency.delay(1);
assert.verifySteps(['function_called 1'], "should have called the function once");
t.reset();
// Called after 2nd timer timeout
await concurrency.delay(1);
assert.verifySteps(['function_called 2'],
"should have called the function twice (2nd time from reset)");
});
});
});
});