| OLD | NEW |
| (Empty) |
| 1 // Copyright 2014 the V8 project authors. All rights reserved. | |
| 2 // Use of this source code is governed by a BSD-style license that can be | |
| 3 // found in the LICENSE file. | |
| 4 | |
| 5 // Flags: --harmony-templates | |
| 6 | |
| 7 (function testStringRawArity() { | |
| 8 assertEquals(1, String.raw.length); | |
| 9 })(); | |
| 10 | |
| 11 | |
| 12 (function testStringRawCallSiteToObject() { | |
| 13 assertThrows("String.raw()", TypeError); | |
| 14 })(); | |
| 15 | |
| 16 | |
| 17 (function testStringRawCallSiteRawToObject() { | |
| 18 assertThrows("String.raw([])", TypeError); | |
| 19 })(); | |
| 20 | |
| 21 | |
| 22 (function testStringRawUndefinedLength() { | |
| 23 var callSiteObj = []; | |
| 24 callSiteObj.raw = {}; | |
| 25 assertEquals("", String.raw(callSiteObj)); | |
| 26 | |
| 27 callSiteObj.raw = { lengt: 0 }; | |
| 28 assertEquals("", String.raw(callSiteObj)); | |
| 29 })(); | |
| 30 | |
| 31 | |
| 32 (function testStringRawZeroLength() { | |
| 33 var callSiteObj = []; | |
| 34 callSiteObj.raw = { length: 0 }; | |
| 35 assertEquals("", String.raw(callSiteObj)); | |
| 36 assertEquals("", String.raw(callSiteObj, "a", "b", "c")); | |
| 37 | |
| 38 callSiteObj.raw = []; | |
| 39 assertEquals("", String.raw(callSiteObj)); | |
| 40 assertEquals("", String.raw(callSiteObj, "a", "b", "c")); | |
| 41 })(); | |
| 42 | |
| 43 | |
| 44 (function testStringRawNegativeLength() { | |
| 45 var callSiteObj = []; | |
| 46 callSiteObj.raw = { length: -85 }; | |
| 47 assertEquals("", String.raw(callSiteObj)); | |
| 48 assertEquals("", String.raw(callSiteObj, "a", "b", "c")); | |
| 49 | |
| 50 callSiteObj.raw = []; | |
| 51 assertEquals("", String.raw(callSiteObj)); | |
| 52 assertEquals("", String.raw(callSiteObj, "a", "b", "c")); | |
| 53 })(); | |
| 54 | |
| 55 | |
| 56 (function testStringRawNaNLength() { | |
| 57 var callSiteObj = []; | |
| 58 callSiteObj.raw = { length: NaN }; | |
| 59 assertEquals("", String.raw(callSiteObj)); | |
| 60 assertEquals("", String.raw(callSiteObj, "a", "b", "c")); | |
| 61 | |
| 62 callSiteObj.raw = []; | |
| 63 assertEquals("", String.raw(callSiteObj)); | |
| 64 assertEquals("", String.raw(callSiteObj, "a", "b", "c")); | |
| 65 })(); | |
| 66 | |
| 67 | |
| 68 (function testStringRawBasic() { | |
| 69 var callSiteObj = []; | |
| 70 callSiteObj.raw = ["a"]; | |
| 71 assertEquals("a", String.raw(callSiteObj)); | |
| 72 })(); | |
| 73 | |
| 74 | |
| 75 (function testStringRawNoSubst() { | |
| 76 var callSiteObj = []; | |
| 77 callSiteObj.raw = ["a", "b"]; | |
| 78 assertEquals("ab", String.raw(callSiteObj)); | |
| 79 })(); | |
| 80 | |
| 81 | |
| 82 (function testStringRawSubst() { | |
| 83 var callSiteObj = []; | |
| 84 callSiteObj.raw = ["a", "b"]; | |
| 85 assertEquals("a!b", String.raw(callSiteObj, "!")); | |
| 86 | |
| 87 callSiteObj.raw = ["a", "b", "c"]; | |
| 88 assertEquals("abc", String.raw(callSiteObj)); | |
| 89 | |
| 90 callSiteObj.raw = ["a", "b", "c"]; | |
| 91 assertEquals("a!bc", String.raw(callSiteObj, "!")); | |
| 92 | |
| 93 callSiteObj.raw = ["a", "b", "c"]; | |
| 94 assertEquals("a!b?c", String.raw(callSiteObj, "!", "?")); | |
| 95 | |
| 96 callSiteObj.raw = ["\n", "\r\n", "\r"]; | |
| 97 assertEquals("\nx\r\ny\r", String.raw(callSiteObj, "x", "y")); | |
| 98 | |
| 99 callSiteObj.raw = ["\n", "\r\n", "\r"]; | |
| 100 assertEquals("\n\r\r\r\n\n\r", String.raw(callSiteObj, "\r\r", "\n")); | |
| 101 })(); | |
| 102 | |
| 103 | |
| 104 (function testStringRawArrayLikeSubst() { | |
| 105 var callSiteObj = []; | |
| 106 callSiteObj.raw = {"length": 2, "0": "a", "1": "b", "2": "c"}; | |
| 107 assertEquals("axb", String.raw(callSiteObj, "x", "y")); | |
| 108 | |
| 109 callSiteObj.raw = {"length": 4, "0": "a", "1": "b", "2": "c"}; | |
| 110 assertEquals("axbycundefined", String.raw(callSiteObj, "x", "y")); | |
| 111 })(); | |
| 112 | |
| 113 | |
| 114 (function testStringRawAccessors() { | |
| 115 var callSiteObj = {}; | |
| 116 callSiteObj.raw = {}; | |
| 117 Object.defineProperties(callSiteObj, { | |
| 118 "length": { | |
| 119 get: function() { assertUnreachable(); }, | |
| 120 set: function(v) { assertUnreachable(); } | |
| 121 }, | |
| 122 "0": { | |
| 123 get: function() { assertUnreachable(); }, | |
| 124 set: function(v) { assertUnreachable(); } | |
| 125 }, | |
| 126 "1": { | |
| 127 get: function() { assertUnreachable(); }, | |
| 128 set: function(v) { assertUnreachable(); } | |
| 129 } | |
| 130 }); | |
| 131 Object.defineProperties(callSiteObj.raw, { | |
| 132 "length": { | |
| 133 get: function() { return 2; }, | |
| 134 set: function(v) { assertUnreachable(); } | |
| 135 }, | |
| 136 "0": { | |
| 137 get: function() { return "getter values"; }, | |
| 138 set: function(v) { assertUnreachable(); } | |
| 139 }, | |
| 140 "1": { | |
| 141 get: function() { return "are nice"; }, | |
| 142 set: function(v) { assertUnreachable(); } | |
| 143 } | |
| 144 }); | |
| 145 assertEquals("getter values are nice", String.raw(callSiteObj, " ")); | |
| 146 })(); | |
| 147 | |
| 148 | |
| 149 (function testStringRawHoleyArray() { | |
| 150 var callSiteObj = []; | |
| 151 callSiteObj.raw = ["1."]; | |
| 152 callSiteObj.raw[2] = ".2"; | |
| 153 assertEquals("1.undefined.2", String.raw(callSiteObj)); | |
| 154 })(); | |
| 155 | |
| 156 | |
| 157 (function testStringRawAccessorThrows() { | |
| 158 var callSiteObj = []; | |
| 159 callSiteObj.raw = [1]; | |
| 160 function MyError() {} | |
| 161 Object.defineProperty(callSiteObj.raw, "0", { | |
| 162 get: function() { throw new MyError(); } | |
| 163 }); | |
| 164 assertThrows(function() { String.raw(callSiteObj); }, MyError); | |
| 165 })(); | |
| 166 | |
| 167 | |
| 168 (function testStringRawToStringSafe() { | |
| 169 var callSiteObj = []; | |
| 170 callSiteObj.raw = [null, undefined, 1, "str", true, false, NaN, Infinity, {}]; | |
| 171 assertEquals("nullundefined1strtruefalseNaNInfinity[object Object]", | |
| 172 String.raw(callSiteObj)); | |
| 173 | |
| 174 callSiteObj.raw = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"]; | |
| 175 assertEquals("0null1undefined213str4true5false6NaN7Infinity8[object Object]9", | |
| 176 String.raw(callSiteObj, null, void 0, 1, "str", true, false, | |
| 177 NaN, Infinity, {})); | |
| 178 })(); | |
| 179 | |
| 180 | |
| 181 (function testStringRawToStringSymbolThrows() { | |
| 182 var callSiteObj = []; | |
| 183 callSiteObj.raw = [Symbol("foo")]; | |
| 184 assertThrows(function() { | |
| 185 String.raw(callSiteObj); | |
| 186 }, TypeError); | |
| 187 | |
| 188 callSiteObj.raw = ["1", "2"]; | |
| 189 assertThrows(function() { | |
| 190 String.raw(callSiteObj, Symbol("foo")); | |
| 191 }, TypeError); | |
| 192 })(); | |
| 193 | |
| 194 | |
| 195 (function testStringRawToStringThrows() { | |
| 196 var callSiteObj = []; | |
| 197 var thrower = {}; | |
| 198 function MyError() {} | |
| 199 thrower.toString = function() { | |
| 200 throw new MyError(); | |
| 201 } | |
| 202 | |
| 203 callSiteObj.raw = [thrower]; | |
| 204 assertThrows(function() { | |
| 205 String.raw(callSiteObj); | |
| 206 }, MyError); | |
| 207 | |
| 208 callSiteObj.raw = ["1", "2"]; | |
| 209 assertThrows(function() { | |
| 210 String.raw(callSiteObj, thrower); | |
| 211 }, MyError); | |
| 212 })(); | |
| 213 | |
| 214 | |
| 215 (function testStringRawToStringValueOfThrows() { | |
| 216 var callSiteObj = []; | |
| 217 var thrower = {}; | |
| 218 function MyError() {} | |
| 219 thrower.toString = null; | |
| 220 thrower.valueOf = function() { | |
| 221 throw new MyError(); | |
| 222 } | |
| 223 | |
| 224 callSiteObj.raw = [thrower]; | |
| 225 assertThrows(function() { | |
| 226 String.raw(callSiteObj); | |
| 227 }, MyError); | |
| 228 | |
| 229 callSiteObj.raw = ["1", "2"]; | |
| 230 assertThrows(function() { | |
| 231 String.raw(callSiteObj, thrower); | |
| 232 }, MyError); | |
| 233 })(); | |
| 234 | |
| 235 | |
| 236 (function testStringRawOrder() { | |
| 237 var order = []; | |
| 238 var callSiteObj = []; | |
| 239 callSiteObj.raw = {}; | |
| 240 function arg(v) { | |
| 241 var result = {}; | |
| 242 result.toString = null; | |
| 243 result.valueOf = function() { order.push("arg" + v); return v; } | |
| 244 return result; | |
| 245 } | |
| 246 | |
| 247 Object.defineProperty(callSiteObj.raw, "length", { | |
| 248 get: function() { order.push("length"); return 3; } | |
| 249 }); | |
| 250 [1, 3, 5].forEach(function(v, i) { | |
| 251 Object.defineProperty(callSiteObj.raw, i, { | |
| 252 get: function() { order.push("raw" + v); return v; } | |
| 253 }); | |
| 254 }); | |
| 255 | |
| 256 assertEquals("12345", String.raw(callSiteObj, arg(2), arg(4), arg(6))); | |
| 257 assertEquals(["length", "raw1", "arg2", "raw3", "arg4", "raw5"], order); | |
| 258 })(); | |
| OLD | NEW |