Daniel@0: "use strict"; Daniel@0: Daniel@0: describe("StorageModule", function() { Daniel@0: Daniel@0: var dummyModule = null; Daniel@0: Daniel@0: beforeAll(function() { Daniel@0: jasmine.helpers.dumpStorage(); Daniel@0: jasmine.helpers.clearStorage(); Daniel@0: dummyModule = App.module("DummyModule"); Daniel@0: }); Daniel@0: Daniel@0: beforeEach(function() { Daniel@0: jasmine.helpers.clearStorage(); Daniel@0: }); Daniel@0: Daniel@0: afterAll(function() { Daniel@0: jasmine.helpers.restoreStorageFromDump(); Daniel@0: }); Daniel@0: Daniel@0: it("works with strings: writes and reads", function() { Daniel@0: var testVars = [ Daniel@0: ["MyString", "42"], Daniel@0: ["MyString2", "test"], Daniel@0: ]; Daniel@0: var faultyVars = [ Daniel@0: ["MyString", 42], Daniel@0: ["MyString2", {}], Daniel@0: ["MyString3", [1,2,3]] Daniel@0: ["MyString4", null] Daniel@0: ]; Daniel@0: Daniel@0: for (var i = 0; i < testVars.length; i++) { Daniel@0: var testVar = testVars[i]; Daniel@0: expect(localStorage.length).toEqual(0); Daniel@0: expect(App.DataModule.Storage.setStrCache(dummyModule, testVar[0], testVar[1])).toEqual(true); Daniel@0: expect(localStorage.getItem("dml.DummyModule." + testVar[0])).toEqual(testVar[1]); Daniel@0: expect(localStorage.length).toEqual(1); Daniel@0: Daniel@0: expect(App.DataModule.Storage.setStrCache(dummyModule, testVar[0], undefined)).toEqual(true); Daniel@0: expect(App.DataModule.Storage.getStrCache(dummyModule, testVar[0])).toEqual(undefined); Daniel@0: expect(localStorage.getItem("dml.DummyModule." + testVar[0])).toEqual(null); Daniel@0: expect(localStorage.length).toEqual(0); Daniel@0: } Daniel@0: Daniel@0: for (var i = 0; i < faultyVars.length; i++) { Daniel@0: var faultyVar = faultyVars[i]; Daniel@0: expect(function() { Daniel@0: App.DataModule.Storage.setStrCache(dummyModule, faultyVar[0], faultyVar[1]); Daniel@0: }).toThrow(); Daniel@0: Daniel@0: expect(localStorage.length).toEqual(0); Daniel@0: } Daniel@0: }); Daniel@0: Daniel@0: it("works with strings: returns false when storage is full", function() { Daniel@0: var storageBecameFull = false; Daniel@0: var strToWrite = _.str.repeat("x", 100000); Daniel@0: for (var i = 0; i < 1000; i++) { Daniel@0: var result = App.DataModule.Storage.setStrCache(dummyModule, "test" + i, strToWrite); Daniel@0: if (result === true) { Daniel@0: expect(localStorage.getItem("dml.DummyModule." + "test" + i)).toEqual(strToWrite); Daniel@0: } else { Daniel@0: storageBecameFull = true; Daniel@0: expect(function() { Daniel@0: localStorage.setItem("dml.DummyModule." + "test" + i, strToWrite); Daniel@0: }).toThrow(); Daniel@0: break; Daniel@0: } Daniel@0: } Daniel@0: expect(storageBecameFull).toBe(true); Daniel@0: }); Daniel@0: Daniel@0: Daniel@0: it("works with objects: writes and reads", function() { Daniel@0: var testVars = [ Daniel@0: ["MyString", {}], Daniel@0: ["MyString", []], Daniel@0: ["MyString2", null], Daniel@0: ["MyString3", {x: 2, y: null, z: undefined, a: "string", b: ["array"], c: {object: true}}], Daniel@0: ["MyString2", [10, 20, 30]] Daniel@0: ]; Daniel@0: var faultyVars = [ Daniel@0: ["MyString", 42], Daniel@0: ["MyString3", "test"], Daniel@0: ["MyString3", "[1, 2, 3"], Daniel@0: ["MyString3", "{x: 10"], Daniel@0: ]; Daniel@0: Daniel@0: for (var i = 0; i < testVars.length; i++) { Daniel@0: var testVar = testVars[i]; Daniel@0: expect(localStorage.length).toEqual(0); Daniel@0: expect(App.DataModule.Storage.setObjCache(dummyModule, testVar[0], testVar[1])).toEqual(true); Daniel@0: expect(localStorage.getItem("dml.DummyModule." + testVar[0])).toEqual(JSON.stringify(testVar[1])); Daniel@0: expect(localStorage.length).toEqual(1); Daniel@0: Daniel@0: expect(App.DataModule.Storage.setObjCache(dummyModule, testVar[0], undefined)).toEqual(true); Daniel@0: expect(App.DataModule.Storage.getObjCache(dummyModule, testVar[0])).toEqual(undefined); Daniel@0: expect(localStorage.getItem("dml.DummyModule." + testVar[0])).toEqual(null); Daniel@0: expect(localStorage.length).toEqual(0); Daniel@0: } Daniel@0: for (var i = 0; i < faultyVars.length; i++) { Daniel@0: var faultyVar = faultyVars[i]; Daniel@0: expect(function() { Daniel@0: App.DataModule.Storage.setObjCache(dummyModule, faultyVar[0], faultyVar[1]); Daniel@0: }).toThrow(); Daniel@0: Daniel@0: expect(localStorage.length).toEqual(0); Daniel@0: Daniel@0: if (_.isString(faultyVar[1])) { Daniel@0: App.DataModule.Storage.setStrCache(dummyModule, faultyVar[0], faultyVar[1]); Daniel@0: expect(App.DataModule.Storage.getObjCache(dummyModule, faultyVar[0])).toEqual(null); Daniel@0: App.DataModule.Storage.setStrCache(dummyModule, faultyVar[0], undefined); Daniel@0: } Daniel@0: Daniel@0: expect(localStorage.length).toEqual(0); Daniel@0: } Daniel@0: Daniel@0: }); Daniel@0: Daniel@0: Daniel@0: });