Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Download
81169 views
1
var assert = require("assert");
2
var makeAccessor = require("../private").makeAccessor;
3
var acc1 = makeAccessor();
4
var obj = {};
5
var hasOwn = obj.hasOwnProperty;
6
7
acc1(obj).foo = 42;
8
assert.deepEqual(obj, {});
9
assert.deepEqual(acc1(obj), { foo: 42 });
10
assert.deepEqual(acc1(acc1(obj)), {});
11
assert.deepEqual(acc1(obj), { foo: 42 });
12
assert.deepEqual(Object.keys(acc1(obj)), ["foo"]);
13
assert.strictEqual(Object.getOwnPropertyNames(acc1(obj)).length, 1);
14
assert.strictEqual(Object.getOwnPropertyNames(acc1(acc1(obj))).length, 0);
15
acc1(obj).bar = "baz";
16
assert.deepEqual(acc1(obj), { foo: 42, bar: "baz" });
17
delete acc1(obj).foo;
18
assert.deepEqual(acc1(obj), { bar: "baz" });
19
20
try {
21
acc1(42);
22
throw new Error("threw wrong error");
23
} catch (err) {
24
assert.ok(err);
25
}
26
27
var acc2 = makeAccessor();
28
assert.notStrictEqual(acc1, acc2);
29
assert.notStrictEqual(acc1(obj), acc2(obj));
30
assert.deepEqual(acc2(obj), {});
31
assert.strictEqual(Object.getOwnPropertyNames(obj).length, 0);
32
assert.strictEqual(Object.keys(obj).length, 0);
33
acc2(obj).bar = "asdf";
34
assert.deepEqual(acc2(obj), { bar: "asdf" });
35
36
acc2.forget(obj);
37
acc2(obj).bar = "asdf";
38
var oldSecret = acc2(obj);
39
assert.strictEqual(oldSecret.bar, "asdf");
40
acc2.forget(obj);
41
var newSecret = acc2(obj);
42
assert.notStrictEqual(oldSecret, newSecret);
43
assert.ok(hasOwn.call(oldSecret, "bar"));
44
assert.ok(!hasOwn.call(newSecret, "bar"));
45
newSecret.bar = "zxcv";
46
assert.strictEqual(oldSecret.bar, "asdf");
47
assert.strictEqual(acc2(obj).bar, "zxcv");
48
49
function creatorFn(object) {
50
return { self: object };
51
}
52
53
var acc3 = makeAccessor(creatorFn);
54
55
acc3(obj).xxx = "yyy";
56
assert.deepEqual(acc3(obj), {
57
self: obj,
58
xxx: "yyy"
59
});
60
61
acc3.forget(obj);
62
assert.deepEqual(acc3(obj), {
63
self: obj
64
});
65
66
var green = "\033[32m";
67
var reset = "\033[0m";
68
console.log(green + "ALL PASS" + reset);
69
70