summaryrefslogtreecommitdiffstats
path: root/js/src/tests/ecma_5/extensions/watch-array-length.js
blob: e9b356efa51413881d1fa9475862606f3d7ceec5 (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
39
40
41
/*
 * 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");