MIRROR: javascript for 馃悳's, a tiny runtime with big ambitions
1import { test, summary } from './helpers.js';
2
3console.log('Delete Operator Tests\n');
4
5const obj = { a: 1, b: 2, c: 3 };
6
7let result = delete obj.a;
8test('delete existing property returns true', result, true);
9test('property removed after delete', obj.a, undefined);
10test('has property after delete', 'a' in obj, false);
11test('other properties remain', obj.b, 2);
12
13result = delete obj.nonexistent;
14test('delete non-existent property returns true', result, true);
15
16const nested = { outer: { inner: 42 } };
17result = delete nested.outer.inner;
18test('delete nested property', result, true);
19test('nested property removed', nested.outer.inner, undefined);
20test('parent still exists', typeof nested.outer, 'object');
21
22const arr = [1, 2, 3, 4, 5];
23result = delete arr[2];
24test('delete array element returns true', result, true);
25test('array element becomes undefined', arr[2], undefined);
26test('array length unchanged', arr.length, 5);
27test('array has hole', 2 in arr, false);
28
29const withUndefined = { x: undefined };
30result = delete withUndefined.x;
31test('delete property set to undefined', result, true);
32test('property gone after delete', 'x' in withUndefined, false);
33
34const computed = { foo: 'bar', baz: 'qux' };
35const key = 'foo';
36result = delete computed[key];
37test('delete with computed key', result, true);
38test('computed key property removed', computed.foo, undefined);
39
40const proto = { inherited: true };
41const child = Object.create(proto);
42child.own = 'value';
43result = delete child.own;
44test('delete own property', result, true);
45test('own property removed', child.own, undefined);
46test('inherited property still accessible', child.inherited, true);
47result = delete child.inherited;
48test('delete inherited returns true but keeps it', result, true);
49test('inherited still accessible after delete', child.inherited, true);
50
51const symbolKey = Symbol('test');
52const withSymbol = { [symbolKey]: 'symbol value' };
53result = delete withSymbol[symbolKey];
54test('delete symbol property returns true', result, true);
55test('symbol property removed', withSymbol[symbolKey], undefined);
56
57summary();