/* * 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);