diff options
Diffstat (limited to 'js/src/tests/non262/String/defaultvalue.js')
-rw-r--r-- | js/src/tests/non262/String/defaultvalue.js | 169 |
1 files changed, 169 insertions, 0 deletions
diff --git a/js/src/tests/non262/String/defaultvalue.js b/js/src/tests/non262/String/defaultvalue.js new file mode 100644 index 0000000000..50b4fe00df --- /dev/null +++ b/js/src/tests/non262/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!"); |