summaryrefslogtreecommitdiffstats
path: root/js/src/tests/ecma_5/String/defaultvalue.js
diff options
context:
space:
mode:
Diffstat (limited to 'js/src/tests/ecma_5/String/defaultvalue.js')
-rw-r--r--js/src/tests/ecma_5/String/defaultvalue.js169
1 files changed, 169 insertions, 0 deletions
diff --git a/js/src/tests/ecma_5/String/defaultvalue.js b/js/src/tests/ecma_5/String/defaultvalue.js
new file mode 100644
index 000000000..50b4fe00d
--- /dev/null
+++ b/js/src/tests/ecma_5/String/defaultvalue.js
@@ -0,0 +1,169 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+var BUGNUMBER = 645464;
+var summary =
+ "[[DefaultValue]] behavior wrong for String with overridden valueOf/toString";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+// equality
+
+var s = new String("c");
+assertEq(s == "c", true);
+
+var s2 = new String();
+s2.valueOf = function() { return "foo"; };
+assertEq(s2 == "foo", true);
+
+var s3 = new String();
+s3.toString = function() { return "bar"; };
+assertEq(s3 == "", true);
+
+function testEquality()
+{
+ var s = new String("c");
+ assertEq(s == "c", true);
+
+ var s2 = new String();
+ s2.valueOf = function() { return "foo"; };
+ assertEq(s2 == "foo", true);
+
+ var s3 = new String();
+ s3.toString = function() { return "bar"; };
+ assertEq(s3 == "", true);
+}
+testEquality();
+
+
+// addition of String to string
+
+var s = new String();
+assertEq(s + "", "");
+
+var s2 = new String();
+s2.toString = function() { return "bar"; };
+assertEq(s2 + "", "");
+
+var s3 = new String();
+s3.valueOf = function() { return "baz"; };
+assertEq(s3 + "", "baz");
+
+function testStringAddition()
+{
+ var s = new String();
+ assertEq(s + "", "");
+
+ var s2 = new String();
+ s2.toString = function() { return "bar"; };
+ assertEq(s2 + "", "");
+
+ var s3 = new String();
+ s3.valueOf = function() { return "baz"; };
+ assertEq(s3 + "", "baz");
+}
+testStringAddition();
+
+
+// addition of String to String
+
+var s = new String();
+assertEq(s + s, "");
+
+var s2 = new String();
+s2.toString = function() { return "baz"; };
+assertEq(s2 + s2, "");
+
+var s3 = new String();
+s3.valueOf = function() { return "quux"; };
+assertEq(s3 + s3, "quuxquux");
+
+function testNonStringAddition()
+{
+ var s = new String();
+ assertEq(s + s, "");
+
+ var s2 = new String();
+ s2.toString = function() { return "baz"; };
+ assertEq(s2 + s2, "");
+
+ var s3 = new String();
+ s3.valueOf = function() { return "quux"; };
+ assertEq(s3 + s3, "quuxquux");
+}
+testNonStringAddition();
+
+
+// String as bracketed property name
+
+var obj = { primitive: 17, valueOf: 42, toString: 8675309 };
+
+var s = new String("primitive");
+assertEq(obj[s], 17);
+
+var s2 = new String("primitive");
+s2.valueOf = function() { return "valueOf"; }
+assertEq(obj[s2], 17);
+
+var s3 = new String("primitive");
+s3.toString = function() { return "toString"; };
+assertEq(obj[s3], 8675309);
+
+function testPropertyNameToString()
+{
+ var obj = { primitive: 17, valueOf: 42, toString: 8675309 };
+
+ var s = new String("primitive");
+ assertEq(obj[s], 17);
+
+ var s2 = new String("primitive");
+ s2.valueOf = function() { return "valueOf"; }
+ assertEq(obj[s2], 17);
+
+ var s3 = new String("primitive");
+ s3.toString = function() { return "toString"; };
+ assertEq(obj[s3], 8675309);
+}
+testPropertyNameToString();
+
+
+// String as property name with |in| operator
+
+var s = new String();
+assertEq(s in { "": 5 }, true);
+
+var s2 = new String();
+s.toString = function() { return "baz"; };
+assertEq(s in { baz: 42 }, true);
+
+var s3 = new String();
+s3.valueOf = function() { return "quux"; };
+assertEq(s3 in { "": 17 }, true);
+
+function testInOperatorName()
+{
+ var s = new String();
+ assertEq(s in { "": 5 }, true);
+
+ var s2 = new String();
+ s.toString = function() { return "baz"; };
+ assertEq(s in { baz: 42 }, true);
+
+ var s3 = new String();
+ s3.valueOf = function() { return "quux"; };
+ assertEq(s3 in { "": 17 }, true);
+}
+testInOperatorName();
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("All tests passed!");