1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/js/src/tests/ecma_5/String/defaultvalue.js Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,169 @@ 1.4 +/* 1.5 + * Any copyright is dedicated to the Public Domain. 1.6 + * http://creativecommons.org/licenses/publicdomain/ 1.7 + */ 1.8 + 1.9 +var BUGNUMBER = 645464; 1.10 +var summary = 1.11 + "[[DefaultValue]] behavior wrong for String with overridden valueOf/toString"; 1.12 + 1.13 +print(BUGNUMBER + ": " + summary); 1.14 + 1.15 +/************** 1.16 + * BEGIN TEST * 1.17 + **************/ 1.18 + 1.19 +// equality 1.20 + 1.21 +var s = new String("c"); 1.22 +assertEq(s == "c", true); 1.23 + 1.24 +var s2 = new String(); 1.25 +s2.valueOf = function() { return "foo"; }; 1.26 +assertEq(s2 == "foo", true); 1.27 + 1.28 +var s3 = new String(); 1.29 +s3.toString = function() { return "bar"; }; 1.30 +assertEq(s3 == "", true); 1.31 + 1.32 +function testEquality() 1.33 +{ 1.34 + var s = new String("c"); 1.35 + assertEq(s == "c", true); 1.36 + 1.37 + var s2 = new String(); 1.38 + s2.valueOf = function() { return "foo"; }; 1.39 + assertEq(s2 == "foo", true); 1.40 + 1.41 + var s3 = new String(); 1.42 + s3.toString = function() { return "bar"; }; 1.43 + assertEq(s3 == "", true); 1.44 +} 1.45 +testEquality(); 1.46 + 1.47 + 1.48 +// addition of String to string 1.49 + 1.50 +var s = new String(); 1.51 +assertEq(s + "", ""); 1.52 + 1.53 +var s2 = new String(); 1.54 +s2.toString = function() { return "bar"; }; 1.55 +assertEq(s2 + "", ""); 1.56 + 1.57 +var s3 = new String(); 1.58 +s3.valueOf = function() { return "baz"; }; 1.59 +assertEq(s3 + "", "baz"); 1.60 + 1.61 +function testStringAddition() 1.62 +{ 1.63 + var s = new String(); 1.64 + assertEq(s + "", ""); 1.65 + 1.66 + var s2 = new String(); 1.67 + s2.toString = function() { return "bar"; }; 1.68 + assertEq(s2 + "", ""); 1.69 + 1.70 + var s3 = new String(); 1.71 + s3.valueOf = function() { return "baz"; }; 1.72 + assertEq(s3 + "", "baz"); 1.73 +} 1.74 +testStringAddition(); 1.75 + 1.76 + 1.77 +// addition of String to String 1.78 + 1.79 +var s = new String(); 1.80 +assertEq(s + s, ""); 1.81 + 1.82 +var s2 = new String(); 1.83 +s2.toString = function() { return "baz"; }; 1.84 +assertEq(s2 + s2, ""); 1.85 + 1.86 +var s3 = new String(); 1.87 +s3.valueOf = function() { return "quux"; }; 1.88 +assertEq(s3 + s3, "quuxquux"); 1.89 + 1.90 +function testNonStringAddition() 1.91 +{ 1.92 + var s = new String(); 1.93 + assertEq(s + s, ""); 1.94 + 1.95 + var s2 = new String(); 1.96 + s2.toString = function() { return "baz"; }; 1.97 + assertEq(s2 + s2, ""); 1.98 + 1.99 + var s3 = new String(); 1.100 + s3.valueOf = function() { return "quux"; }; 1.101 + assertEq(s3 + s3, "quuxquux"); 1.102 +} 1.103 +testNonStringAddition(); 1.104 + 1.105 + 1.106 +// String as bracketed property name 1.107 + 1.108 +var obj = { primitive: 17, valueOf: 42, toString: 8675309 }; 1.109 + 1.110 +var s = new String("primitive"); 1.111 +assertEq(obj[s], 17); 1.112 + 1.113 +var s2 = new String("primitive"); 1.114 +s2.valueOf = function() { return "valueOf"; } 1.115 +assertEq(obj[s2], 17); 1.116 + 1.117 +var s3 = new String("primitive"); 1.118 +s3.toString = function() { return "toString"; }; 1.119 +assertEq(obj[s3], 8675309); 1.120 + 1.121 +function testPropertyNameToString() 1.122 +{ 1.123 + var obj = { primitive: 17, valueOf: 42, toString: 8675309 }; 1.124 + 1.125 + var s = new String("primitive"); 1.126 + assertEq(obj[s], 17); 1.127 + 1.128 + var s2 = new String("primitive"); 1.129 + s2.valueOf = function() { return "valueOf"; } 1.130 + assertEq(obj[s2], 17); 1.131 + 1.132 + var s3 = new String("primitive"); 1.133 + s3.toString = function() { return "toString"; }; 1.134 + assertEq(obj[s3], 8675309); 1.135 +} 1.136 +testPropertyNameToString(); 1.137 + 1.138 + 1.139 +// String as property name with |in| operator 1.140 + 1.141 +var s = new String(); 1.142 +assertEq(s in { "": 5 }, true); 1.143 + 1.144 +var s2 = new String(); 1.145 +s.toString = function() { return "baz"; }; 1.146 +assertEq(s in { baz: 42 }, true); 1.147 + 1.148 +var s3 = new String(); 1.149 +s3.valueOf = function() { return "quux"; }; 1.150 +assertEq(s3 in { "": 17 }, true); 1.151 + 1.152 +function testInOperatorName() 1.153 +{ 1.154 + var s = new String(); 1.155 + assertEq(s in { "": 5 }, true); 1.156 + 1.157 + var s2 = new String(); 1.158 + s.toString = function() { return "baz"; }; 1.159 + assertEq(s in { baz: 42 }, true); 1.160 + 1.161 + var s3 = new String(); 1.162 + s3.valueOf = function() { return "quux"; }; 1.163 + assertEq(s3 in { "": 17 }, true); 1.164 +} 1.165 +testInOperatorName(); 1.166 + 1.167 +/******************************************************************************/ 1.168 + 1.169 +if (typeof reportCompare === "function") 1.170 + reportCompare(true, true); 1.171 + 1.172 +print("All tests passed!");