Page MenuHomePhorge

localstorage.js
No OneTemporary

Size
3 KB
Referenced Files
None
Subscribers
None

localstorage.js

import { unlinkSync } from 'ant:fs';
import { test, testThrows, summary } from './helpers.js';
console.log('localStorage Tests\n');
test('localStorage exists', typeof localStorage, 'object');
test('setFile method exists', typeof localStorage.setFile, 'function');
testThrows('setItem throws without file', () => localStorage.setItem('x', 'y'));
testThrows('getItem throws without file', () => localStorage.getItem('x'));
testThrows('removeItem throws without file', () => localStorage.removeItem('x'));
testThrows('clear throws without file', () => localStorage.clear());
testThrows('key throws without file', () => localStorage.key(0));
localStorage.setFile('storage.json');
localStorage.setItem('key1', 'value1');
test('setItem/getItem basic', localStorage.getItem('key1'), 'value1');
localStorage.setItem('key1', 'newValue');
test('setItem overwrites', localStorage.getItem('key1'), 'newValue');
test('getItem non-existent', localStorage.getItem('nonExistent'), null);
localStorage.clear();
test('length after clear', localStorage.length, 0);
localStorage.setItem('a', '1');
test('length after 1 item', localStorage.length, 1);
localStorage.setItem('b', '2');
test('length after 2 items', localStorage.length, 2);
localStorage.setItem('c', '3');
test('length after 3 items', localStorage.length, 3);
let keys = [];
for (let i = 0; i < localStorage.length; i++) {
keys.push(localStorage.key(i));
}
test('key() returns keys', keys.length, 3);
test('key() includes a', keys.includes('a'), true);
test('key() includes b', keys.includes('b'), true);
test('key() includes c', keys.includes('c'), true);
test('key() out of bounds', localStorage.key(100), null);
test('key() negative index', localStorage.key(-1), null);
localStorage.removeItem('b');
test('removeItem decreases length', localStorage.length, 2);
test('removeItem removes key', localStorage.getItem('b'), null);
test('removeItem keeps others', localStorage.getItem('a'), '1');
localStorage.removeItem('nonExistent');
test('removeItem non-existent key', localStorage.length, 2);
localStorage.clear();
test('clear removes all', localStorage.length, 0);
test('clear removes a', localStorage.getItem('a'), null);
test('clear removes c', localStorage.getItem('c'), null);
localStorage.setItem('number', '42');
test('store number string', localStorage.getItem('number'), '42');
localStorage.setItem('bool', 'true');
test('store bool string', localStorage.getItem('bool'), 'true');
localStorage.setItem('empty', '');
test('store empty string', localStorage.getItem('empty'), '');
localStorage.setItem('key-with-dash', 'dash');
test('key with dash', localStorage.getItem('key-with-dash'), 'dash');
localStorage.setItem('key_with_underscore', 'underscore');
test('key with underscore', localStorage.getItem('key_with_underscore'), 'underscore');
localStorage.setItem('key.with.dot', 'dot');
test('key with dot', localStorage.getItem('key.with.dot'), 'dot');
localStorage.setItem('special', 'hello\nworld');
test('value with newline', localStorage.getItem('special'), 'hello\nworld');
localStorage.setItem('unicode', 'Hello');
test('value with unicode', localStorage.getItem('unicode'), 'Hello');
const obj = { name: 'John', age: 30 };
localStorage.setItem('user', JSON.stringify(obj));
const retrieved = JSON.parse(localStorage.getItem('user'));
test('JSON storage name', retrieved.name, 'John');
test('JSON storage age', retrieved.age, 30);
localStorage.clear();
unlinkSync('storage.json');
summary();

File Metadata

Mime Type
application/javascript
Expires
Fri, Mar 27, 9:57 AM (2 d)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
512574
Default Alt Text
localstorage.js (3 KB)

Event Timeline