2023-01-17 13:13:48 +03:00
|
|
|
/* global QUnit, $, TouchUtil, Util, testLog */
|
|
|
|
|
|
|
|
(function () {
|
|
|
|
var context, result=[], eName = "test", eventCounter = 0, finished = false;
|
|
|
|
|
|
|
|
function evaluateTest(e) {
|
|
|
|
if (finished) return;
|
|
|
|
finished = true;
|
|
|
|
e.assert.strictEqual(JSON.stringify(result), JSON.stringify(e.expected), e.message);
|
|
|
|
e.done();
|
|
|
|
}
|
|
|
|
|
2023-01-21 11:00:24 +03:00
|
|
|
function executor(i, ms) {
|
2023-01-17 13:13:48 +03:00
|
|
|
if (ms === undefined) return function (e) {
|
|
|
|
eventCounter++;
|
|
|
|
result.push(i);
|
2023-01-21 11:00:24 +03:00
|
|
|
if (eventCounter === context.numberOfHandlers(eName)) {
|
2023-01-17 13:13:48 +03:00
|
|
|
evaluateTest(e);
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
return function (e) {
|
|
|
|
return new Promise(function (resolve) {
|
|
|
|
setTimeout(function () {
|
|
|
|
eventCounter++;
|
|
|
|
result.push(i);
|
2023-01-21 11:00:24 +03:00
|
|
|
if (eventCounter === context.numberOfHandlers(eName)) {
|
2023-01-17 13:13:48 +03:00
|
|
|
evaluateTest(e);
|
|
|
|
}
|
|
|
|
resolve();
|
|
|
|
}, ms);
|
|
|
|
});
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2023-09-24 23:30:28 +03:00
|
|
|
function runTest(e, async=false) {
|
2023-01-17 13:13:48 +03:00
|
|
|
context.raiseEvent(eName, e);
|
|
|
|
}
|
|
|
|
|
2023-09-24 23:30:28 +03:00
|
|
|
function runTestAwaiting(e, async=false) {
|
|
|
|
context.raiseEventAwaiting(eName, e);
|
|
|
|
}
|
|
|
|
|
2023-01-17 13:13:48 +03:00
|
|
|
QUnit.module( 'EventSource', {
|
|
|
|
beforeEach: function () {
|
|
|
|
context = new OpenSeadragon.EventSource();
|
|
|
|
eventCounter = 0;
|
|
|
|
result = [];
|
|
|
|
finished = false;
|
|
|
|
}
|
|
|
|
} );
|
|
|
|
|
|
|
|
// ----------
|
|
|
|
QUnit.test('EventSource: no events', function(assert) {
|
|
|
|
context.addHandler(eName, evaluateTest);
|
|
|
|
runTest({
|
|
|
|
assert: assert,
|
|
|
|
done: assert.async(),
|
|
|
|
expected: [],
|
|
|
|
message: 'No handlers registered - arrays should be empty.'
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
QUnit.test('EventSource: simple callbacks order', function(assert) {
|
|
|
|
context.addHandler(eName, executor(1));
|
|
|
|
context.addHandler(eName, executor(2));
|
|
|
|
context.addHandler(eName, executor(3));
|
|
|
|
runTest({
|
|
|
|
assert: assert,
|
|
|
|
done: assert.async(),
|
|
|
|
expected: [1, 2, 3],
|
|
|
|
message: 'Simple callback order should follow [1,2,3].'
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
QUnit.test('EventSource: priority callbacks order', function(assert) {
|
|
|
|
context.addHandler(eName, executor(1), undefined, 20);
|
|
|
|
context.addHandler(eName, executor(2), undefined, 124);
|
|
|
|
context.addHandler(eName, executor(3), undefined, -5);
|
|
|
|
context.addHandler(eName, executor(4));
|
|
|
|
context.addHandler(eName, executor(5), undefined, -2);
|
|
|
|
runTest({
|
|
|
|
assert: assert,
|
|
|
|
done: assert.async(),
|
|
|
|
expected: [2, 1, 4, 5, 3],
|
|
|
|
message: 'Prioritized callback order should follow [2,1,4,5,3].'
|
|
|
|
});
|
|
|
|
});
|
2023-09-24 23:30:28 +03:00
|
|
|
|
|
|
|
QUnit.test('EventSource: async non-synchronized order', function(assert) {
|
|
|
|
context.addHandler(eName, executor(1, 5));
|
|
|
|
context.addHandler(eName, executor(2, 50));
|
|
|
|
context.addHandler(eName, executor(3));
|
|
|
|
context.addHandler(eName, executor(4));
|
|
|
|
runTest({
|
|
|
|
assert: assert,
|
|
|
|
done: assert.async(),
|
|
|
|
expected: [3, 4, 1, 2],
|
|
|
|
message: 'Async callback order should follow [3,4,1,2].'
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
QUnit.test('EventSource: async non-synchronized priority order', function(assert) {
|
|
|
|
context.addHandler(eName, executor(1, 5));
|
|
|
|
context.addHandler(eName, executor(2, 50), undefined, -100);
|
|
|
|
context.addHandler(eName, executor(3), undefined, -500);
|
|
|
|
context.addHandler(eName, executor(4), undefined, 675);
|
|
|
|
runTest({
|
|
|
|
assert: assert,
|
|
|
|
done: assert.async(),
|
|
|
|
expected: [4, 3, 1, 2],
|
|
|
|
message: 'Async callback order with priority should follow [4,3,1,2]. Async functions do not respect priority.'
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
QUnit.test('EventSource: async synchronized order', function(assert) {
|
|
|
|
context.addHandler(eName, executor(1, 5));
|
|
|
|
context.addHandler(eName, executor(2, 50));
|
|
|
|
context.addHandler(eName, executor(3));
|
|
|
|
context.addHandler(eName, executor(4));
|
|
|
|
runTestAwaiting({
|
|
|
|
waitForPromiseHandlers: true,
|
|
|
|
assert: assert,
|
|
|
|
done: assert.async(),
|
|
|
|
expected: [1, 2, 3, 4],
|
|
|
|
message: 'Async callback order should follow [1,2,3,4], since it is synchronized.'
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
QUnit.test('EventSource: async synchronized priority order', function(assert) {
|
|
|
|
context.addHandler(eName, executor(1, 5));
|
|
|
|
context.addHandler(eName, executor(2), undefined, -500);
|
|
|
|
context.addHandler(eName, executor(3, 50), undefined, -200);
|
|
|
|
context.addHandler(eName, executor(4), undefined, 675);
|
|
|
|
runTestAwaiting({
|
|
|
|
waitForPromiseHandlers: true,
|
|
|
|
assert: assert,
|
|
|
|
done: assert.async(),
|
|
|
|
expected: [4, 1, 3, 2],
|
|
|
|
message: 'Async callback order with priority should follow [4,1,3,2], since priority is respected when synchronized.'
|
|
|
|
});
|
|
|
|
});
|
2023-01-17 13:13:48 +03:00
|
|
|
} )();
|