(function () { "use strict"; var assert = require('assert') , fs = require('fs') , Storage = require('../') , dbPath = './db.json' ; function runTest(storage) { // should not return prototype properties assert.strictEqual(null, storage.getItem('key')); assert.strictEqual(0, Object.keys(storage).length); assert.strictEqual(0, storage.length); // can't make assuptions about key positioning storage.setItem('a', 1); assert.strictEqual(storage.key(0), 'a'); storage.setItem('b', '2'); assert.strictEqual(storage.getItem('a'), 1); assert.strictEqual(storage.getItem('b'), '2'); assert.strictEqual(storage.length, 2); assert.strictEqual(storage['c'], undefined); assert.strictEqual(storage.getItem('c'), null); storage.setItem('c'); assert.strictEqual(storage.getItem('c'), null); assert.strictEqual(storage.length, 3); storage.removeItem('c'); assert.strictEqual(storage.getItem('c'), null); assert.strictEqual(storage.length, 2); storage.clear(); assert.strictEqual(storage.getItem('a'), null); assert.strictEqual(storage.getItem('b'), null); assert.strictEqual(storage.length, 0); } function runAll() { var localStorage = new Storage(dbPath, { strict: false, ws: ' ' }) , sessionStorage = new Storage(null, { strict: false }) ; runTest(sessionStorage); runTest(localStorage); localStorage.setItem('a', 1); setTimeout(function () { assert.deepEqual({ a: 1 }, JSON.parse(fs.readFileSync(dbPath))); console.log('All tests passed'); }, 100); } fs.unlink(dbPath, runAll); }());