summaryrefslogtreecommitdiffstats
path: root/js/src/tests/ecma_5/strict/10.4.3.js
diff options
context:
space:
mode:
Diffstat (limited to 'js/src/tests/ecma_5/strict/10.4.3.js')
-rw-r--r--js/src/tests/ecma_5/strict/10.4.3.js58
1 files changed, 58 insertions, 0 deletions
diff --git a/js/src/tests/ecma_5/strict/10.4.3.js b/js/src/tests/ecma_5/strict/10.4.3.js
new file mode 100644
index 000000000..b70a6a0d7
--- /dev/null
+++ b/js/src/tests/ecma_5/strict/10.4.3.js
@@ -0,0 +1,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);