MIRROR: javascript for 馃悳's, a tiny runtime with big ambitions
1import { test, summary } from './helpers.js';
2
3console.log('sessionStorage Tests\n');
4
5test('sessionStorage exists', typeof sessionStorage, 'object');
6
7sessionStorage.setItem('key1', 'value1');
8test('setItem/getItem basic', sessionStorage.getItem('key1'), 'value1');
9
10sessionStorage.setItem('key1', 'newValue');
11test('setItem overwrites', sessionStorage.getItem('key1'), 'newValue');
12
13test('getItem non-existent', sessionStorage.getItem('nonExistent'), null);
14
15sessionStorage.clear();
16test('length after clear', sessionStorage.length, 0);
17
18sessionStorage.setItem('a', '1');
19test('length after 1 item', sessionStorage.length, 1);
20
21sessionStorage.setItem('b', '2');
22test('length after 2 items', sessionStorage.length, 2);
23
24sessionStorage.setItem('c', '3');
25test('length after 3 items', sessionStorage.length, 3);
26
27let keys = [];
28for (let i = 0; i < sessionStorage.length; i++) {
29 keys.push(sessionStorage.key(i));
30}
31test('key() returns keys', keys.length, 3);
32test('key() includes a', keys.includes('a'), true);
33test('key() includes b', keys.includes('b'), true);
34test('key() includes c', keys.includes('c'), true);
35
36test('key() out of bounds', sessionStorage.key(100), null);
37test('key() negative index', sessionStorage.key(-1), null);
38
39sessionStorage.removeItem('b');
40test('removeItem decreases length', sessionStorage.length, 2);
41test('removeItem removes key', sessionStorage.getItem('b'), null);
42test('removeItem keeps others', sessionStorage.getItem('a'), '1');
43
44sessionStorage.removeItem('nonExistent');
45test('removeItem non-existent key', sessionStorage.length, 2);
46
47sessionStorage.clear();
48test('clear removes all', sessionStorage.length, 0);
49test('clear removes a', sessionStorage.getItem('a'), null);
50test('clear removes c', sessionStorage.getItem('c'), null);
51
52sessionStorage.setItem('number', '42');
53test('store number string', sessionStorage.getItem('number'), '42');
54
55sessionStorage.setItem('bool', 'true');
56test('store bool string', sessionStorage.getItem('bool'), 'true');
57
58sessionStorage.setItem('empty', '');
59test('store empty string', sessionStorage.getItem('empty'), '');
60
61sessionStorage.setItem('key-with-dash', 'dash');
62test('key with dash', sessionStorage.getItem('key-with-dash'), 'dash');
63
64sessionStorage.setItem('key_with_underscore', 'underscore');
65test('key with underscore', sessionStorage.getItem('key_with_underscore'), 'underscore');
66
67sessionStorage.setItem('key.with.dot', 'dot');
68test('key with dot', sessionStorage.getItem('key.with.dot'), 'dot');
69
70sessionStorage.setItem('special', 'hello\nworld');
71test('value with newline', sessionStorage.getItem('special'), 'hello\nworld');
72
73sessionStorage.setItem('unicode', 'Hello');
74test('value with unicode', sessionStorage.getItem('unicode'), 'Hello');
75
76const obj = { name: 'John', age: 30 };
77sessionStorage.setItem('user', JSON.stringify(obj));
78const retrieved = JSON.parse(sessionStorage.getItem('user'));
79test('JSON storage name', retrieved.name, 'John');
80test('JSON storage age', retrieved.age, 30);
81
82sessionStorage.clear();
83
84summary();