summaryrefslogtreecommitdiffstats
path: root/js/src/tests/ecma_5/extensions/watch-inherited-property.js
blob: 1a0ad566bcfded7a501bd5953ce51f96b385d992 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
/*
 * Any copyright is dedicated to the Public Domain.
 * http://creativecommons.org/licenses/publicdomain/
 */

/* Create a prototype object with a setter property. */
var protoSetterCount;
var proto = ({ set x(v) { protoSetterCount++; } });

/* Put a watchpoint on that setter. */
var protoWatchCount;
proto.watch('x', function() { protoWatchCount++; });

/* Make an object with the above as its prototype. */
function C() { }
C.prototype = proto;
var o = new C();

/*
 * Set a watchpoint on the property in the inheriting object. We have
 * defined this to mean "duplicate the property, setter and all, in the
 * inheriting object." I don't think debugging observation mechanisms
 * should mutate the program being run, but that's what we've got.
 */
var oWatchCount;
o.watch('x', function() { oWatchCount++; });

/*
 * Assign to the property. This should trip the watchpoint on the inheriting object and
 * the setter.
 */
protoSetterCount = protoWatchCount = oWatchCount = 0;
o.x = 1;
assertEq(protoWatchCount, 0);
assertEq(oWatchCount, 1);
assertEq(protoSetterCount, 1);

reportCompare(true, true);