/* * Any copyright is dedicated to the Public Domain. * http://creativecommons.org/licenses/publicdomain/ */ var hitCount; function watcher(p,o,n) { hitCount++; return n; } var a = [1]; a.watch('length', watcher); hitCount = 0; a.length = 0; reportCompare(1, hitCount, "lenient; configurable: watchpoint hit"); var b = Object.defineProperty([1],'0',{configurable:false}); b.watch('length', watcher); hitCount = 0; var result; try { b.length = 0; result = "no error"; } catch (x) { result = x.toString(); } reportCompare(1, hitCount, "lenient; non-configurable: watchpoint hit"); reportCompare(1, b.length, "lenient; non-configurable: length unchanged"); reportCompare("no error", result, "lenient; non-configurable: no error thrown"); var c = Object.defineProperty([1],'0',{configurable:false}); c.watch('length', watcher); hitCount = 0; var threwTypeError; try { (function(){'use strict'; c.length = 0;})(); threwTypeError = false; } catch (x) { threwTypeError = x instanceof TypeError; } reportCompare(1, hitCount, "strict; non-configurable: watchpoint hit"); reportCompare(1, c.length, "strict; non-configurable: length unchanged"); reportCompare(true, threwTypeError, "strict; non-configurable: TypeError thrown");