Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1144)

Unified Diff: test/mjsunit/harmony/string-raw.js

Issue 731573004: Implement ES6 String.raw behind --harmony-templates (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Nits Created 6 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/harmony-templates.js ('k') | test/mjsunit/harmony/templates.js » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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);
+})();
« no previous file with comments | « src/harmony-templates.js ('k') | test/mjsunit/harmony/templates.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698