mirror of
https://github.com/FoggedLens/iD.git
synced 2026-02-13 09:12:52 +00:00
sinon.useFakeTimers mocks setInterval, setTimeout, etc, but not requestAnimationFrame, which d3 transitions rely on.
90 lines
2.4 KiB
JavaScript
90 lines
2.4 KiB
JavaScript
describe('iD.utilSessionMutex', function() {
|
|
var a, b;
|
|
|
|
afterEach(function() {
|
|
if (a) a.unlock();
|
|
if (b) b.unlock();
|
|
});
|
|
|
|
describe('#lock', function() {
|
|
it('returns true when it gets a lock', function() {
|
|
a = iD.utilSessionMutex('name');
|
|
expect(a.lock()).to.equal(true);
|
|
});
|
|
|
|
it('returns true when already locked', function() {
|
|
a = iD.utilSessionMutex('name');
|
|
a.lock();
|
|
expect(a.lock()).to.equal(true);
|
|
});
|
|
|
|
it('returns false when the lock is held by another session', function() {
|
|
a = iD.utilSessionMutex('name');
|
|
a.lock();
|
|
|
|
b = iD.utilSessionMutex('name');
|
|
expect(b.lock()).to.equal(false);
|
|
});
|
|
});
|
|
|
|
describe('#locked', function() {
|
|
it('returns false by default', function() {
|
|
a = iD.utilSessionMutex('name');
|
|
expect(a.locked()).to.equal(false);
|
|
});
|
|
|
|
it('returns true when locked', function() {
|
|
a = iD.utilSessionMutex('name');
|
|
a.lock();
|
|
expect(a.locked()).to.equal(true);
|
|
});
|
|
|
|
it('returns false when unlocked', function() {
|
|
a = iD.utilSessionMutex('name');
|
|
a.lock();
|
|
a.unlock();
|
|
expect(a.locked()).to.equal(false);
|
|
});
|
|
});
|
|
|
|
describe('#unlock', function() {
|
|
it('unlocks the mutex', function() {
|
|
a = iD.utilSessionMutex('name');
|
|
a.lock();
|
|
a.unlock();
|
|
|
|
b = iD.utilSessionMutex('name');
|
|
expect(b.lock()).to.equal(true);
|
|
});
|
|
|
|
it('does nothing when the lock is held by another session', function() {
|
|
a = iD.utilSessionMutex('name');
|
|
a.lock();
|
|
|
|
b = iD.utilSessionMutex('name');
|
|
b.unlock();
|
|
|
|
expect(a.locked()).to.equal(true);
|
|
});
|
|
|
|
it('does nothing when not locked', function() {
|
|
a = iD.utilSessionMutex('name');
|
|
a.unlock();
|
|
expect(a.locked()).to.equal(false);
|
|
});
|
|
});
|
|
|
|
it('namespaces locks', function() {
|
|
a = iD.utilSessionMutex('a');
|
|
a.lock();
|
|
|
|
b = iD.utilSessionMutex('b');
|
|
expect(b.locked()).to.equal(false);
|
|
expect(b.lock()).to.equal(true);
|
|
});
|
|
|
|
it('automatically unlocks when a session crashes', function() {
|
|
// Tested manually.
|
|
});
|
|
});
|