Commit 5aed61cc authored by dslomov's avatar dslomov Committed by Commit bot

Rename String.prototype.contains to 'includes'.

Per TC39 Nov 2014 decison.

R=arv@chromium.org,yangguo@chromium.org
LOG=Y

Committed: https://chromium.googlesource.com/v8/v8/+/b5379216e23ff0ec734e70361dd07057c2421c96

Review URL: https://codereview.chromium.org/742963002

Cr-Commit-Position: refs/heads/master@{#25448}
parent dc889623
...@@ -95,14 +95,14 @@ function StringEndsWith(searchString /* position */) { // length == 1 ...@@ -95,14 +95,14 @@ function StringEndsWith(searchString /* position */) { // length == 1
// ES6 draft 04-05-14, section 21.1.3.6 // ES6 draft 04-05-14, section 21.1.3.6
function StringContains(searchString /* position */) { // length == 1 function StringIncludes(searchString /* position */) { // length == 1
CHECK_OBJECT_COERCIBLE(this, "String.prototype.contains"); CHECK_OBJECT_COERCIBLE(this, "String.prototype.includes");
var s = TO_STRING_INLINE(this); var s = TO_STRING_INLINE(this);
if (IS_REGEXP(searchString)) { if (IS_REGEXP(searchString)) {
throw MakeTypeError("first_argument_not_regexp", throw MakeTypeError("first_argument_not_regexp",
["String.prototype.contains"]); ["String.prototype.includes"]);
} }
var ss = TO_STRING_INLINE(searchString); var ss = TO_STRING_INLINE(searchString);
...@@ -184,7 +184,7 @@ function ExtendStringPrototype() { ...@@ -184,7 +184,7 @@ function ExtendStringPrototype() {
// Set up the non-enumerable functions on the String prototype object. // Set up the non-enumerable functions on the String prototype object.
InstallFunctions($String.prototype, DONT_ENUM, $Array( InstallFunctions($String.prototype, DONT_ENUM, $Array(
"codePointAt", StringCodePointAt, "codePointAt", StringCodePointAt,
"contains", StringContains, "includes", StringIncludes,
"endsWith", StringEndsWith, "endsWith", StringEndsWith,
"repeat", StringRepeat, "repeat", StringRepeat,
"startsWith", StringStartsWith "startsWith", StringStartsWith
......
...@@ -9,8 +9,8 @@ new BenchmarkSuite('StringFunctions', [1000], [ ...@@ -9,8 +9,8 @@ new BenchmarkSuite('StringFunctions', [1000], [
StartsWith, WithSetup, WithTearDown), StartsWith, WithSetup, WithTearDown),
new Benchmark('StringEndsWith', false, false, 0, new Benchmark('StringEndsWith', false, false, 0,
EndsWith, WithSetup, WithTearDown), EndsWith, WithSetup, WithTearDown),
new Benchmark('StringContains', false, false, 0, new Benchmark('StringIncludes', false, false, 0,
Contains, ContainsSetup, WithTearDown), Includes, IncludesSetup, WithTearDown),
new Benchmark('StringFromCodePoint', false, false, 0, new Benchmark('StringFromCodePoint', false, false, 0,
FromCodePoint, FromCodePointSetup, FromCodePointTearDown), FromCodePoint, FromCodePointSetup, FromCodePointTearDown),
new Benchmark('StringCodePointAt', false, false, 0, new Benchmark('StringCodePointAt', false, false, 0,
...@@ -60,13 +60,13 @@ function EndsWith() { ...@@ -60,13 +60,13 @@ function EndsWith() {
result = str.endsWith(substr); result = str.endsWith(substr);
} }
function ContainsSetup() { function IncludesSetup() {
str = "def".repeat(100) + "abc".repeat(100) + "qqq".repeat(100); str = "def".repeat(100) + "abc".repeat(100) + "qqq".repeat(100);
substr = "abc".repeat(100); substr = "abc".repeat(100);
} }
function Contains() { function Includes() {
result = str.contains(substr); result = str.includes(substr);
} }
var MAX_CODE_POINT = 0xFFFFF; var MAX_CODE_POINT = 0xFFFFF;
......
...@@ -27,42 +27,42 @@ ...@@ -27,42 +27,42 @@
// Flags: --harmony-strings // Flags: --harmony-strings
assertEquals(1, String.prototype.contains.length); assertEquals(1, String.prototype.includes.length);
var reString = "asdf[a-z]+(asdf)?"; var reString = "asdf[a-z]+(asdf)?";
assertTrue(reString.contains("[a-z]+")); assertTrue(reString.includes("[a-z]+"));
assertTrue(reString.contains("(asdf)?")); assertTrue(reString.includes("(asdf)?"));
// Random greek letters // Random greek letters
var twoByteString = "\u039a\u0391\u03a3\u03a3\u0395"; var twoByteString = "\u039a\u0391\u03a3\u03a3\u0395";
// Test single char pattern // Test single char pattern
assertTrue(twoByteString.contains("\u039a"), "Lamda"); assertTrue(twoByteString.includes("\u039a"), "Lamda");
assertTrue(twoByteString.contains("\u0391"), "Alpha"); assertTrue(twoByteString.includes("\u0391"), "Alpha");
assertTrue(twoByteString.contains("\u03a3"), "First Sigma"); assertTrue(twoByteString.includes("\u03a3"), "First Sigma");
assertTrue(twoByteString.contains("\u03a3",3), "Second Sigma"); assertTrue(twoByteString.includes("\u03a3",3), "Second Sigma");
assertTrue(twoByteString.contains("\u0395"), "Epsilon"); assertTrue(twoByteString.includes("\u0395"), "Epsilon");
assertFalse(twoByteString.contains("\u0392"), "Not beta"); assertFalse(twoByteString.includes("\u0392"), "Not beta");
// Test multi-char pattern // Test multi-char pattern
assertTrue(twoByteString.contains("\u039a\u0391"), "lambda Alpha"); assertTrue(twoByteString.includes("\u039a\u0391"), "lambda Alpha");
assertTrue(twoByteString.contains("\u0391\u03a3"), "Alpha Sigma"); assertTrue(twoByteString.includes("\u0391\u03a3"), "Alpha Sigma");
assertTrue(twoByteString.contains("\u03a3\u03a3"), "Sigma Sigma"); assertTrue(twoByteString.includes("\u03a3\u03a3"), "Sigma Sigma");
assertTrue(twoByteString.contains("\u03a3\u0395"), "Sigma Epsilon"); assertTrue(twoByteString.includes("\u03a3\u0395"), "Sigma Epsilon");
assertFalse(twoByteString.contains("\u0391\u03a3\u0395"), assertFalse(twoByteString.includes("\u0391\u03a3\u0395"),
"Not Alpha Sigma Epsilon"); "Not Alpha Sigma Epsilon");
//single char pattern //single char pattern
assertTrue(twoByteString.contains("\u0395")); assertTrue(twoByteString.includes("\u0395"));
assertThrows("String.prototype.contains.call(null, 'test')", TypeError); assertThrows("String.prototype.includes.call(null, 'test')", TypeError);
assertThrows("String.prototype.contains.call(null, null)", TypeError); assertThrows("String.prototype.includes.call(null, null)", TypeError);
assertThrows("String.prototype.contains.call(undefined, undefined)", TypeError); assertThrows("String.prototype.includes.call(undefined, undefined)", TypeError);
assertThrows("String.prototype.contains.apply(null, ['test'])", TypeError); assertThrows("String.prototype.includes.apply(null, ['test'])", TypeError);
assertThrows("String.prototype.contains.apply(null, [null])", TypeError); assertThrows("String.prototype.includes.apply(null, [null])", TypeError);
assertThrows("String.prototype.contains.apply(undefined, [undefined])", TypeError); assertThrows("String.prototype.includes.apply(undefined, [undefined])", TypeError);
var TEST_INPUT = [{ var TEST_INPUT = [{
msg: "Empty string", val: "" msg: "Empty string", val: ""
...@@ -91,51 +91,51 @@ for (; i < l; i++) { ...@@ -91,51 +91,51 @@ for (; i < l; i++) {
var e = TEST_INPUT[i]; var e = TEST_INPUT[i];
var v = e.val; var v = e.val;
var s = String(v); var s = String(v);
assertTrue(s.contains(v), e.msg); assertTrue(s.includes(v), e.msg);
assertTrue(String.prototype.contains.call(v, v), e.msg); assertTrue(String.prototype.includes.call(v, v), e.msg);
assertTrue(String.prototype.contains.apply(v, [v]), e.msg); assertTrue(String.prototype.includes.apply(v, [v]), e.msg);
} }
// Test cases found in FF // Test cases found in FF
assertTrue("abc".contains("a")); assertTrue("abc".includes("a"));
assertTrue("abc".contains("b")); assertTrue("abc".includes("b"));
assertTrue("abc".contains("abc")); assertTrue("abc".includes("abc"));
assertTrue("abc".contains("bc")); assertTrue("abc".includes("bc"));
assertFalse("abc".contains("d")); assertFalse("abc".includes("d"));
assertFalse("abc".contains("abcd")); assertFalse("abc".includes("abcd"));
assertFalse("abc".contains("ac")); assertFalse("abc".includes("ac"));
assertTrue("abc".contains("abc", 0)); assertTrue("abc".includes("abc", 0));
assertTrue("abc".contains("bc", 0)); assertTrue("abc".includes("bc", 0));
assertFalse("abc".contains("de", 0)); assertFalse("abc".includes("de", 0));
assertTrue("abc".contains("bc", 1)); assertTrue("abc".includes("bc", 1));
assertTrue("abc".contains("c", 1)); assertTrue("abc".includes("c", 1));
assertFalse("abc".contains("a", 1)); assertFalse("abc".includes("a", 1));
assertFalse("abc".contains("abc", 1)); assertFalse("abc".includes("abc", 1));
assertTrue("abc".contains("c", 2)); assertTrue("abc".includes("c", 2));
assertFalse("abc".contains("d", 2)); assertFalse("abc".includes("d", 2));
assertFalse("abc".contains("dcd", 2)); assertFalse("abc".includes("dcd", 2));
assertFalse("abc".contains("a", 42)); assertFalse("abc".includes("a", 42));
assertFalse("abc".contains("a", Infinity)); assertFalse("abc".includes("a", Infinity));
assertTrue("abc".contains("ab", -43)); assertTrue("abc".includes("ab", -43));
assertFalse("abc".contains("cd", -42)); assertFalse("abc".includes("cd", -42));
assertTrue("abc".contains("ab", -Infinity)); assertTrue("abc".includes("ab", -Infinity));
assertFalse("abc".contains("cd", -Infinity)); assertFalse("abc".includes("cd", -Infinity));
assertTrue("abc".contains("ab", NaN)); assertTrue("abc".includes("ab", NaN));
assertFalse("abc".contains("cd", NaN)); assertFalse("abc".includes("cd", NaN));
assertFalse("xyzzy".contains("zy\0", 2)); assertFalse("xyzzy".includes("zy\0", 2));
var dots = Array(10000).join("."); var dots = Array(10000).join(".");
assertFalse(dots.contains("\x01", 10000)); assertFalse(dots.includes("\x01", 10000));
assertFalse(dots.contains("\0", 10000)); assertFalse(dots.includes("\0", 10000));
var myobj = { var myobj = {
toString: function () { toString: function () {
return "abc"; return "abc";
}, },
contains: String.prototype.contains includes: String.prototype.includes
}; };
assertTrue(myobj.contains("abc")); assertTrue(myobj.includes("abc"));
assertFalse(myobj.contains("cd")); assertFalse(myobj.includes("cd"));
var gotStr = false; var gotStr = false;
var gotPos = false; var gotPos = false;
...@@ -145,22 +145,22 @@ myobj = { ...@@ -145,22 +145,22 @@ myobj = {
gotStr = true; gotStr = true;
return "xyz"; return "xyz";
}, },
contains: String.prototype.contains includes: String.prototype.includes
}; };
assertEquals("foo[a-z]+(bar)?".contains("[a-z]+"), true); assertEquals("foo[a-z]+(bar)?".includes("[a-z]+"), true);
assertThrows("'foo[a-z]+(bar)?'.contains(/[a-z]+/)", TypeError); assertThrows("'foo[a-z]+(bar)?'.includes(/[a-z]+/)", TypeError);
assertThrows("'foo/[a-z]+/(bar)?'.contains(/[a-z]+/)", TypeError); assertThrows("'foo/[a-z]+/(bar)?'.includes(/[a-z]+/)", TypeError);
assertEquals("foo[a-z]+(bar)?".contains("(bar)?"), true); assertEquals("foo[a-z]+(bar)?".includes("(bar)?"), true);
assertThrows("'foo[a-z]+(bar)?'.contains(/(bar)?/)", TypeError); assertThrows("'foo[a-z]+(bar)?'.includes(/(bar)?/)", TypeError);
assertThrows("'foo[a-z]+/(bar)?/'.contains(/(bar)?/)", TypeError); assertThrows("'foo[a-z]+/(bar)?/'.includes(/(bar)?/)", TypeError);
assertThrows("String.prototype.contains.call({ 'toString': function() { " + assertThrows("String.prototype.includes.call({ 'toString': function() { " +
"throw RangeError(); } }, /./)", RangeError); "throw RangeError(); } }, /./)", RangeError);
assertThrows("String.prototype.contains.call({ 'toString': function() { " + assertThrows("String.prototype.includes.call({ 'toString': function() { " +
"return 'abc'; } }, /./)", TypeError); "return 'abc'; } }, /./)", TypeError);
assertThrows("String.prototype.contains.apply({ 'toString': function() { " + assertThrows("String.prototype.includes.apply({ 'toString': function() { " +
"throw RangeError(); } }, [/./])", RangeError); "throw RangeError(); } }, [/./])", RangeError);
assertThrows("String.prototype.contains.apply({ 'toString': function() { " + assertThrows("String.prototype.includes.apply({ 'toString': function() { " +
"return 'abc'; } }, [/./])", TypeError); "return 'abc'; } }, [/./])", TypeError);
...@@ -167,6 +167,15 @@ ...@@ -167,6 +167,15 @@
'15.2.3.14-1-2': [PASS, FAIL_OK], '15.2.3.14-1-2': [PASS, FAIL_OK],
'15.2.3.14-1-3': [PASS, FAIL_OK], '15.2.3.14-1-3': [PASS, FAIL_OK],
# String.prototype.contains renamed to 'S.p.includes'
'String.prototype.contains_FailBadLocation' : [FAIL_OK],
'String.prototype.contains_FailLocation' : [FAIL_OK],
'String.prototype.contains_FailMissingLetter' : [FAIL_OK],
'String.prototype.contains_lengthProp' : [FAIL_OK],
'String.prototype.contains_Success' : [FAIL_OK],
'String.prototype.contains_SuccessNoLocation' : [FAIL_OK],
############################ SKIPPED TESTS ############################# ############################ SKIPPED TESTS #############################
# These tests take a looong time to run in debug mode. # These tests take a looong time to run in debug mode.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment