initial commit
This commit is contained in:
110
server/node_modules/lru-memoizer/test/lru-memoizer.queumaxage.test.js
generated
vendored
Normal file
110
server/node_modules/lru-memoizer/test/lru-memoizer.queumaxage.test.js
generated
vendored
Normal file
@@ -0,0 +1,110 @@
|
||||
var memoizer = require('./..');
|
||||
var assert = require('chai').assert;
|
||||
|
||||
describe('lru-memoizer (queueMaxAge)', function () {
|
||||
var loadTimes = 0, memoized;
|
||||
|
||||
beforeEach(function () {
|
||||
loadTimes = 0;
|
||||
});
|
||||
|
||||
function observer() {
|
||||
const listeners = [];
|
||||
return {
|
||||
listen(listener) {
|
||||
listeners.push(listener);
|
||||
},
|
||||
trigger() {
|
||||
listeners.forEach(listener => listener());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
it('should create a new queue once expired', function (done) {
|
||||
memoized = memoizer({
|
||||
load: function (a, b, onResolve, callback) {
|
||||
loadTimes++;
|
||||
onResolve(() => callback(null, a + b));
|
||||
},
|
||||
queueMaxAge: 10,
|
||||
hash: function (a, b) {
|
||||
return a + '-' + b;
|
||||
}
|
||||
});
|
||||
|
||||
const observer1 = observer();
|
||||
const observer2 = observer();
|
||||
const observer3 = observer();
|
||||
const resolved = [];
|
||||
|
||||
memoized(1, 2, observer1.listen, function (err, result) {
|
||||
assert.isNull(err);
|
||||
assert.strictEqual(result, 3);
|
||||
resolved.push('A');
|
||||
});
|
||||
|
||||
assert.strictEqual(loadTimes, 1);
|
||||
|
||||
memoized(1, 2, assert.fail, function (err, result) {
|
||||
assert.isNull(err);
|
||||
assert.strictEqual(result, 3);
|
||||
resolved.push('B');
|
||||
});
|
||||
|
||||
assert.strictEqual(loadTimes, 1);
|
||||
|
||||
setTimeout(() => {
|
||||
// previous queue expired, this calls will be added to a new queue.
|
||||
memoized(1, 2, observer2.listen, function (err, result) {
|
||||
assert.isNull(err);
|
||||
assert.strictEqual(result, 3);
|
||||
resolved.push('C');
|
||||
});
|
||||
|
||||
memoized(1, 2, assert.fail, function (err, result) {
|
||||
assert.isNull(err);
|
||||
assert.strictEqual(result, 3);
|
||||
resolved.push('D');
|
||||
});
|
||||
|
||||
// only one new invocation to load
|
||||
assert.strictEqual(loadTimes, 2);
|
||||
|
||||
setTimeout(() => {
|
||||
// second queue expired, this calls will be added to a third queue.
|
||||
memoized(1, 2, observer3.listen, function (err, result) {
|
||||
assert.isNull(err);
|
||||
assert.strictEqual(result, 3);
|
||||
resolved.push('E');
|
||||
});
|
||||
|
||||
memoized(1, 2, assert.fail.listen, function (err, result) {
|
||||
assert.isNull(err);
|
||||
assert.strictEqual(result, 3);
|
||||
resolved.push('F');
|
||||
});
|
||||
|
||||
assert.strictEqual(loadTimes, 3);
|
||||
|
||||
observer1.trigger();
|
||||
setImmediate(() => {
|
||||
// first queue was resolved
|
||||
assert.deepEqual(['A', 'B'], resolved);
|
||||
|
||||
observer3.trigger();
|
||||
setImmediate(() => {
|
||||
// third queue was resolved
|
||||
assert.deepEqual(['A', 'B', 'E', 'F'], resolved);
|
||||
|
||||
observer2.trigger();
|
||||
setImmediate(() => {
|
||||
// second queue was resolved
|
||||
assert.deepEqual(['A', 'B', 'E', 'F', 'C', 'D'], resolved);
|
||||
done();
|
||||
});
|
||||
});
|
||||
});
|
||||
}, 100);
|
||||
}, 100);
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user