summaryrefslogtreecommitdiffstats
path: root/js/src/jit-test/tests/ion/object-prototype-tostring.js
diff options
context:
space:
mode:
Diffstat (limited to 'js/src/jit-test/tests/ion/object-prototype-tostring.js')
-rw-r--r--js/src/jit-test/tests/ion/object-prototype-tostring.js45
1 files changed, 45 insertions, 0 deletions
diff --git a/js/src/jit-test/tests/ion/object-prototype-tostring.js b/js/src/jit-test/tests/ion/object-prototype-tostring.js
new file mode 100644
index 0000000000..ad06dbde89
--- /dev/null
+++ b/js/src/jit-test/tests/ion/object-prototype-tostring.js
@@ -0,0 +1,45 @@
+var toString = Object.prototype.toString;
+var iter = 500;
+
+function testConstant() {
+ for (var i = 0; i < iter; i++) {
+ assertEq(({}).toString(), "[object Object]");
+ assertEq(toString.call([]), "[object Array]");
+ assertEq(toString.call(Math.abs), "[object Function]");
+ }
+}
+testConstant();
+
+function testOwnToStringTag() {
+ var stringify = o => toString.call(o);
+ var o = {};
+ for (var i = 0; i < iter; i++)
+ assertEq(stringify(o), "[object Object]");
+ o[Symbol.toStringTag] = "foo";
+ for (var i = 0; i < iter; i++)
+ assertEq(stringify(o), "[object foo]");
+}
+testOwnToStringTag();
+
+function testDynamic() {
+ var arr = [{}, [], new Date, /a/];
+ var expected = ["[object Object]", "[object Array]", "[object Date]", "[object RegExp]"];
+ for (var i = 0; i < iter; i++) {
+ for (var j = 0; j < arr.length; j++)
+ assertEq(toString.call(arr[j]), expected[j]);
+ }
+}
+testDynamic();
+
+function testToStringTagProto() {
+ var c = 0;
+ Object.defineProperty(Date.prototype, Symbol.toStringTag, {get() { c++; return "evil"; }});
+ var arr = [{}, [], new Date, /a/];
+ var expected = ["[object Object]", "[object Array]", "[object evil]", "[object RegExp]"];
+ for (var i = 0; i < iter; i++) {
+ for (var j = 0; j < arr.length; j++)
+ assertEq(toString.call(arr[j]), expected[j]);
+ }
+ assertEq(c, iter);
+}
+testToStringTagProto();