summaryrefslogtreecommitdiffstats
path: root/js/src/tests/ecma_5/strict/10.4.3.js
blob: b70a6a0d77ab0697e7691edea8424f19725ec345 (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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */

/*
 * Any copyright is dedicated to the Public Domain.
 * http://creativecommons.org/licenses/publicdomain/
 */

var obj = {}

function strict() { "use strict"; return this; }
assertEq(strict.call(""), "");
assertEq(strict.call(true), true);
assertEq(strict.call(42), 42);
assertEq(strict.call(null), null);
assertEq(strict.call(undefined), undefined);
assertEq(strict.call(obj), obj);
assertEq(new strict() instanceof Object, true);

/* 
 * The compiler internally converts x['foo'] to x.foo. Writing x[s] where
 * s='foo' is enough to throw it off the scent for now.
 */
var strictString = 'strict';

Boolean.prototype.strict = strict;
assertEq(true.strict(), true);
assertEq(true[strictString](), true);

Number.prototype.strict = strict;
assertEq((42).strict(), 42);
assertEq(42[strictString](), 42);

String.prototype.strict = strict;
assertEq("".strict(), "");
assertEq(""[strictString](), "");

function lenient() { return this; }
assertEq(lenient.call("") instanceof String, true);
assertEq(lenient.call(true) instanceof Boolean, true);
assertEq(lenient.call(42) instanceof Number, true);
assertEq(lenient.call(null), this);
assertEq(lenient.call(undefined), this);
assertEq(lenient.call(obj), obj);
assertEq(new lenient() instanceof Object, true);

var lenientString = 'lenient';

Boolean.prototype.lenient = lenient;
assertEq(true.lenient() instanceof Boolean, true);
assertEq(true[lenientString]() instanceof Boolean, true);

Number.prototype.lenient = lenient;
assertEq(42[lenientString]() instanceof Number, true);

String.prototype.lenient = lenient;
assertEq(""[lenientString]() instanceof String, true);

reportCompare(true, true);