import {localStorageBoolObs, localStorageObs} from 'app/client/lib/localStorageObs'; import {assert} from 'chai'; import {setTmpMochaGlobals} from 'test/client/clientUtil'; describe('localStorageObs', function() { setTmpMochaGlobals(); before(() => typeof localStorage !== 'undefined' ? localStorage.clear() : null); it('should persist localStorageObs values', async function() { const foo = localStorageObs('localStorageObs-foo'); const bar = localStorageObs('localStorageObs-bar'); assert.strictEqual(foo.get(), null); foo.set("123"); bar.set("456"); assert.strictEqual(foo.get(), "123"); assert.strictEqual(bar.get(), "456"); // We can't really reload the window the way that the browser harness for test/client tests // works, so just test in the same process with a new instance of these observables. const foo2 = localStorageObs('localStorageObs-foo'); const bar2 = localStorageObs('localStorageObs-bar'); assert.strictEqual(foo2.get(), "123"); assert.strictEqual(bar2.get(), "456"); }); for (const defl of [false, true]) { it(`should support localStorageBoolObs with default of ${defl}`, async function() { const prefix = `localStorageBoolObs-${defl}`; const foo = localStorageBoolObs(`${prefix}-foo`, defl); const bar = localStorageBoolObs(`${prefix}-bar`, defl); assert.strictEqual(foo.get(), defl); assert.strictEqual(bar.get(), defl); foo.set(true); bar.set(false); assert.strictEqual(foo.get(), true); assert.strictEqual(bar.get(), false); assert.strictEqual(localStorageBoolObs(`${prefix}-foo`, defl).get(), true); assert.strictEqual(localStorageBoolObs(`${prefix}-bar`, defl).get(), false); // If created with the opposite default value, it's not very intuitive: if its value matched // the previous default value, then now it will be the opposite; if its value were flipped, // then now it would stay flipped. So it'll match the new default value in either case. assert.strictEqual(localStorageBoolObs(`${prefix}-foo`, !defl).get(), !defl); assert.strictEqual(localStorageBoolObs(`${prefix}-bar`, !defl).get(), !defl); }); } });