blob: 003a49acbe8dfa3eefdaa57f5ec124886ab053f2 [file] [log] [blame]
commit-queue@webkit.org38980282015-11-25 01:43:14 +00001function test() {
2 var steps = [];
3 var backingStore = {};
4
5 function storeProperty(name, value) {
6 steps.push(`store: ${name} = ${value}`);
7 backingStore[name] = value;
8 }
9
10 function computeName(name) {
11 steps.push(`compute: ${name}`);
12 return name;
13 }
14
15 function loadValue(name, value) {
16 steps.push(`load: ${name} > ${value}`);
17 return value;
18 }
19
20 var out = {
21 get a() { return backingStore.a; },
22 set a(v) { storeProperty("a", v); },
23 get b() { return backingStore.b; },
24 set b(v) { storeProperty("b", v); },
25 get c() { return backingStore.c; },
26 set c(v) { storeProperty("c", v); },
27 get d() { return backingStore.d; },
28 set d(v) { storeProperty("d", v); }
29 };
30 ({
31 [computeName("propA")]: out.a,
32 [computeName("propB")]: out.b,
33 [computeName("propC")]: [...out["c"]],
34 [computeName("propD")]: out.d = "default"
35 } = {
36 get propA() { return loadValue("propA", "hello"); },
37 get propB() { return loadValue("propB", "world"); },
38 get propC() { return loadValue("propC", [1, 2, 3]); },
39 get propD() { return loadValue("propD"); }
40 });
41
42 var expectedSteps = [
43 "compute: propA",
44 "load: propA > hello",
45 "store: a = hello",
46
47 "compute: propB",
48 "load: propB > world",
49 "store: b = world",
50
51 "compute: propC",
52 "load: propC > 1,2,3",
53 "store: c = 1,2,3",
54
55 "compute: propD",
56 "load: propD > undefined",
57 "store: d = default"
58 ];
59
60 if (expectedSteps.length !== steps.length)
61 return false;
62 for (var i = 0; i < expectedSteps.length; ++i)
63 if (expectedSteps[i] !== steps[i])
64 return false;
65 if (`${backingStore.a} ${backingStore.b} ${backingStore.c.join(":")}` !== "hello world 1:2:3")
66 return false;
67
68 return true;
69}
70
71if (!test())
72 throw new Error("Test failed");