| function assert(x) { |
| if (!x) |
| throw "FAIL"; |
| } |
| |
| (function() { |
| var trace = []; |
| |
| var foo = { |
| value: 5, |
| get bar() { |
| trace.push("get"); |
| return this.value; |
| }, |
| set bar(x) { |
| throw "Should not be reached"; |
| }, |
| set bar(x) { |
| trace.push("set2"); |
| this.value = x + 10000; |
| return this.value; |
| } |
| } |
| |
| assert(foo.value == 5); |
| assert(trace == ""); |
| assert(foo.bar == 5); |
| assert(trace == "get"); |
| |
| foo.bar = 20; |
| assert(trace == "get,set2"); |
| |
| assert(foo.value == 10020); |
| assert(trace == "get,set2"); |
| assert(foo.bar == 10020); |
| assert(trace == "get,set2,get"); |
| })(); |
| |
| (function() { |
| var trace = []; |
| |
| var foo = { |
| value: 5, |
| set bar(x) { |
| trace.push("set"); |
| this.value = x; |
| return this.value; |
| }, |
| get bar() { |
| throw "Should not be reached"; |
| }, |
| get bar() { |
| trace.push("get2"); |
| this.value += 10000; |
| return this.value; |
| }, |
| } |
| |
| assert(foo.value == 5); |
| assert(trace == ""); |
| assert(foo.bar == 10005); |
| assert(trace == "get2"); |
| |
| foo.bar = 20; |
| assert(trace == "get2,set"); |
| |
| assert(foo.value == 20); |
| assert(trace == "get2,set"); |
| assert(foo.bar == 10020); |
| assert(trace == "get2,set,get2"); |
| })(); |