MIRROR: javascript for 馃悳's, a tiny runtime with big ambitions
1import { test, summary } from './helpers.js';
2
3console.log('Proxy Tests\n');
4
5const target = { a: 1, b: 2 };
6const handler = {
7 get(obj, prop) {
8 return prop in obj ? obj[prop] : 'default';
9 }
10};
11const proxy = new Proxy(target, handler);
12
13test('proxy get existing', proxy.a, 1);
14test('proxy get missing', proxy.c, 'default');
15
16const setHandler = {
17 set(obj, prop, value) {
18 obj[prop] = value * 2;
19 return true;
20 }
21};
22const setProxy = new Proxy({}, setHandler);
23setProxy.x = 5;
24test('proxy set', setProxy.x, 10);
25
26const hasHandler = {
27 has(obj, prop) {
28 return prop.startsWith('_') ? false : prop in obj;
29 }
30};
31const hasProxy = new Proxy({ _private: 1, public: 2 }, hasHandler);
32test('proxy has public', 'public' in hasProxy, true);
33test('proxy has private', '_private' in hasProxy, false);
34
35const deleteHandler = {
36 deleteProperty(obj, prop) {
37 if (prop.startsWith('_')) return false;
38 delete obj[prop];
39 return true;
40 }
41};
42const delProxy = new Proxy({ _keep: 1, remove: 2 }, deleteHandler);
43delete delProxy.remove;
44delete delProxy._keep;
45test('proxy delete allowed', delProxy.remove, undefined);
46test('proxy delete blocked', delProxy._keep, 1);
47
48const revocable = Proxy.revocable({ x: 1 }, {});
49test('revocable proxy get', revocable.proxy.x, 1);
50revocable.revoke();
51
52summary();