| Index: test/mjsunit/harmony/string-raw.js
|
| diff --git a/test/mjsunit/harmony/string-raw.js b/test/mjsunit/harmony/string-raw.js
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..28e2af916415d1d90d843df73959290947f0e40b
|
| --- /dev/null
|
| +++ b/test/mjsunit/harmony/string-raw.js
|
| @@ -0,0 +1,258 @@
|
| +// Copyright 2014 the V8 project authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +// Flags: --harmony-templates
|
| +
|
| +(function testStringRawArity() {
|
| + assertEquals(1, String.raw.length);
|
| +})();
|
| +
|
| +
|
| +(function testStringRawCallSiteToObject() {
|
| + assertThrows("String.raw()", TypeError);
|
| +})();
|
| +
|
| +
|
| +(function testStringRawCallSiteRawToObject() {
|
| + assertThrows("String.raw([])", TypeError);
|
| +})();
|
| +
|
| +
|
| +(function testStringRawUndefinedLength() {
|
| + var callSiteObj = [];
|
| + callSiteObj.raw = {};
|
| + assertEquals("", String.raw(callSiteObj));
|
| +
|
| + callSiteObj.raw = { lengt: 0 };
|
| + assertEquals("", String.raw(callSiteObj));
|
| +})();
|
| +
|
| +
|
| +(function testStringRawZeroLength() {
|
| + var callSiteObj = [];
|
| + callSiteObj.raw = { length: 0 };
|
| + assertEquals("", String.raw(callSiteObj));
|
| + assertEquals("", String.raw(callSiteObj, "a", "b", "c"));
|
| +
|
| + callSiteObj.raw = [];
|
| + assertEquals("", String.raw(callSiteObj));
|
| + assertEquals("", String.raw(callSiteObj, "a", "b", "c"));
|
| +})();
|
| +
|
| +
|
| +(function testStringRawNegativeLength() {
|
| + var callSiteObj = [];
|
| + callSiteObj.raw = { length: -85 };
|
| + assertEquals("", String.raw(callSiteObj));
|
| + assertEquals("", String.raw(callSiteObj, "a", "b", "c"));
|
| +
|
| + callSiteObj.raw = [];
|
| + assertEquals("", String.raw(callSiteObj));
|
| + assertEquals("", String.raw(callSiteObj, "a", "b", "c"));
|
| +})();
|
| +
|
| +
|
| +(function testStringRawNaNLength() {
|
| + var callSiteObj = [];
|
| + callSiteObj.raw = { length: NaN };
|
| + assertEquals("", String.raw(callSiteObj));
|
| + assertEquals("", String.raw(callSiteObj, "a", "b", "c"));
|
| +
|
| + callSiteObj.raw = [];
|
| + assertEquals("", String.raw(callSiteObj));
|
| + assertEquals("", String.raw(callSiteObj, "a", "b", "c"));
|
| +})();
|
| +
|
| +
|
| +(function testStringRawBasic() {
|
| + var callSiteObj = [];
|
| + callSiteObj.raw = ["a"];
|
| + assertEquals("a", String.raw(callSiteObj));
|
| +})();
|
| +
|
| +
|
| +(function testStringRawNoSubst() {
|
| + var callSiteObj = [];
|
| + callSiteObj.raw = ["a", "b"];
|
| + assertEquals("ab", String.raw(callSiteObj));
|
| +})();
|
| +
|
| +
|
| +(function testStringRawSubst() {
|
| + var callSiteObj = [];
|
| + callSiteObj.raw = ["a", "b"];
|
| + assertEquals("a!b", String.raw(callSiteObj, "!"));
|
| +
|
| + callSiteObj.raw = ["a", "b", "c"];
|
| + assertEquals("abc", String.raw(callSiteObj));
|
| +
|
| + callSiteObj.raw = ["a", "b", "c"];
|
| + assertEquals("a!bc", String.raw(callSiteObj, "!"));
|
| +
|
| + callSiteObj.raw = ["a", "b", "c"];
|
| + assertEquals("a!b?c", String.raw(callSiteObj, "!", "?"));
|
| +
|
| + callSiteObj.raw = ["\n", "\r\n", "\r"];
|
| + assertEquals("\nx\r\ny\r", String.raw(callSiteObj, "x", "y"));
|
| +
|
| + callSiteObj.raw = ["\n", "\r\n", "\r"];
|
| + assertEquals("\n\r\r\r\n\n\r", String.raw(callSiteObj, "\r\r", "\n"));
|
| +})();
|
| +
|
| +
|
| +(function testStringRawArrayLikeSubst() {
|
| + var callSiteObj = [];
|
| + callSiteObj.raw = {"length": 2, "0": "a", "1": "b", "2": "c"};
|
| + assertEquals("axb", String.raw(callSiteObj, "x", "y"));
|
| +
|
| + callSiteObj.raw = {"length": 4, "0": "a", "1": "b", "2": "c"};
|
| + assertEquals("axbycundefined", String.raw(callSiteObj, "x", "y"));
|
| +})();
|
| +
|
| +
|
| +(function testStringRawAccessors() {
|
| + var callSiteObj = {};
|
| + callSiteObj.raw = {};
|
| + Object.defineProperties(callSiteObj, {
|
| + "length": {
|
| + get: function() { assertUnreachable(); },
|
| + set: function(v) { assertUnreachable(); }
|
| + },
|
| + "0": {
|
| + get: function() { assertUnreachable(); },
|
| + set: function(v) { assertUnreachable(); }
|
| + },
|
| + "1": {
|
| + get: function() { assertUnreachable(); },
|
| + set: function(v) { assertUnreachable(); }
|
| + }
|
| + });
|
| + Object.defineProperties(callSiteObj.raw, {
|
| + "length": {
|
| + get: function() { return 2; },
|
| + set: function(v) { assertUnreachable(); }
|
| + },
|
| + "0": {
|
| + get: function() { return "getter values"; },
|
| + set: function(v) { assertUnreachable(); }
|
| + },
|
| + "1": {
|
| + get: function() { return "are nice"; },
|
| + set: function(v) { assertUnreachable(); }
|
| + }
|
| + });
|
| + assertEquals("getter values are nice", String.raw(callSiteObj, " "));
|
| +})();
|
| +
|
| +
|
| +(function testStringRawHoleyArray() {
|
| + var callSiteObj = [];
|
| + callSiteObj.raw = ["1."];
|
| + callSiteObj.raw[2] = ".2";
|
| + assertEquals("1.undefined.2", String.raw(callSiteObj));
|
| +})();
|
| +
|
| +
|
| +(function testStringRawAccessorThrows() {
|
| + var callSiteObj = [];
|
| + callSiteObj.raw = [1];
|
| + function MyError() {}
|
| + Object.defineProperty(callSiteObj.raw, "0", {
|
| + get: function() { throw new MyError(); }
|
| + });
|
| + assertThrows(function() { String.raw(callSiteObj); }, MyError);
|
| +})();
|
| +
|
| +
|
| +(function testStringRawToStringSafe() {
|
| + var callSiteObj = [];
|
| + callSiteObj.raw = [null, undefined, 1, "str", true, false, NaN, Infinity, {}];
|
| + assertEquals("nullundefined1strtruefalseNaNInfinity[object Object]",
|
| + String.raw(callSiteObj));
|
| +
|
| + callSiteObj.raw = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"];
|
| + assertEquals("0null1undefined213str4true5false6NaN7Infinity8[object Object]9",
|
| + String.raw(callSiteObj, null, void 0, 1, "str", true, false,
|
| + NaN, Infinity, {}));
|
| +})();
|
| +
|
| +
|
| +(function testStringRawToStringSymbolThrows() {
|
| + var callSiteObj = [];
|
| + callSiteObj.raw = [Symbol("foo")];
|
| + assertThrows(function() {
|
| + String.raw(callSiteObj);
|
| + }, TypeError);
|
| +
|
| + callSiteObj.raw = ["1", "2"];
|
| + assertThrows(function() {
|
| + String.raw(callSiteObj, Symbol("foo"));
|
| + }, TypeError);
|
| +})();
|
| +
|
| +
|
| +(function testStringRawToStringThrows() {
|
| + var callSiteObj = [];
|
| + var thrower = {};
|
| + function MyError() {}
|
| + thrower.toString = function() {
|
| + throw new MyError();
|
| + }
|
| +
|
| + callSiteObj.raw = [thrower];
|
| + assertThrows(function() {
|
| + String.raw(callSiteObj);
|
| + }, MyError);
|
| +
|
| + callSiteObj.raw = ["1", "2"];
|
| + assertThrows(function() {
|
| + String.raw(callSiteObj, thrower);
|
| + }, MyError);
|
| +})();
|
| +
|
| +
|
| +(function testStringRawToStringValueOfThrows() {
|
| + var callSiteObj = [];
|
| + var thrower = {};
|
| + function MyError() {}
|
| + thrower.toString = null;
|
| + thrower.valueOf = function() {
|
| + throw new MyError();
|
| + }
|
| +
|
| + callSiteObj.raw = [thrower];
|
| + assertThrows(function() {
|
| + String.raw(callSiteObj);
|
| + }, MyError);
|
| +
|
| + callSiteObj.raw = ["1", "2"];
|
| + assertThrows(function() {
|
| + String.raw(callSiteObj, thrower);
|
| + }, MyError);
|
| +})();
|
| +
|
| +
|
| +(function testStringRawOrder() {
|
| + var order = [];
|
| + var callSiteObj = [];
|
| + callSiteObj.raw = {};
|
| + function arg(v) {
|
| + var result = {};
|
| + result.toString = null;
|
| + result.valueOf = function() { order.push("arg" + v); return v; }
|
| + return result;
|
| + }
|
| +
|
| + Object.defineProperty(callSiteObj.raw, "length", {
|
| + get: function() { order.push("length"); return 3; }
|
| + });
|
| + [1, 3, 5].forEach(function(v, i) {
|
| + Object.defineProperty(callSiteObj.raw, i, {
|
| + get: function() { order.push("raw" + v); return v; }
|
| + });
|
| + });
|
| +
|
| + assertEquals("12345", String.raw(callSiteObj, arg(2), arg(4), arg(6)));
|
| + assertEquals(["length", "raw1", "arg2", "raw3", "arg4", "raw5"], order);
|
| +})();
|
|
|