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
// ES6 draft 04-05-14, section 21.1.3.6
function StringContains(searchString /* position */) { // length == 1
CHECK_OBJECT_COERCIBLE(this, "String.prototype.contains");
function StringIncludes(searchString /* position */) { // length == 1
CHECK_OBJECT_COERCIBLE(this, "String.prototype.includes");
var s = TO_STRING_INLINE(this);
if (IS_REGEXP(searchString)) {
throw MakeTypeError("first_argument_not_regexp",
["String.prototype.contains"]);
["String.prototype.includes"]);
}
var ss = TO_STRING_INLINE(searchString);
......@@ -184,7 +184,7 @@ function ExtendStringPrototype() {
// Set up the non-enumerable functions on the String prototype object.
InstallFunctions($String.prototype, DONT_ENUM, $Array(
"codePointAt", StringCodePointAt,
"contains", StringContains,
"includes", StringIncludes,
"endsWith", StringEndsWith,
"repeat", StringRepeat,
"startsWith", StringStartsWith
......
......@@ -9,8 +9,8 @@ new BenchmarkSuite('StringFunctions', [1000], [
StartsWith, WithSetup, WithTearDown),
new Benchmark('StringEndsWith', false, false, 0,
EndsWith, WithSetup, WithTearDown),
new Benchmark('StringContains', false, false, 0,
Contains, ContainsSetup, WithTearDown),
new Benchmark('StringIncludes', false, false, 0,
Includes, IncludesSetup, WithTearDown),
new Benchmark('StringFromCodePoint', false, false, 0,
FromCodePoint, FromCodePointSetup, FromCodePointTearDown),
new Benchmark('StringCodePointAt', false, false, 0,
......@@ -60,13 +60,13 @@ function EndsWith() {
result = str.endsWith(substr);
}
function ContainsSetup() {
function IncludesSetup() {
str = "def".repeat(100) + "abc".repeat(100) + "qqq".repeat(100);
substr = "abc".repeat(100);
}
function Contains() {
result = str.contains(substr);
function Includes() {
result = str.includes(substr);
}
var MAX_CODE_POINT = 0xFFFFF;
......
......@@ -27,42 +27,42 @@
// Flags: --harmony-strings
assertEquals(1, String.prototype.contains.length);
assertEquals(1, String.prototype.includes.length);
var reString = "asdf[a-z]+(asdf)?";
assertTrue(reString.contains("[a-z]+"));
assertTrue(reString.contains("(asdf)?"));
assertTrue(reString.includes("[a-z]+"));
assertTrue(reString.includes("(asdf)?"));
// Random greek letters
var twoByteString = "\u039a\u0391\u03a3\u03a3\u0395";
// Test single char pattern
assertTrue(twoByteString.contains("\u039a"), "Lamda");
assertTrue(twoByteString.contains("\u0391"), "Alpha");
assertTrue(twoByteString.contains("\u03a3"), "First Sigma");
assertTrue(twoByteString.contains("\u03a3",3), "Second Sigma");
assertTrue(twoByteString.contains("\u0395"), "Epsilon");
assertFalse(twoByteString.contains("\u0392"), "Not beta");
assertTrue(twoByteString.includes("\u039a"), "Lamda");
assertTrue(twoByteString.includes("\u0391"), "Alpha");
assertTrue(twoByteString.includes("\u03a3"), "First Sigma");
assertTrue(twoByteString.includes("\u03a3",3), "Second Sigma");
assertTrue(twoByteString.includes("\u0395"), "Epsilon");
assertFalse(twoByteString.includes("\u0392"), "Not beta");
// Test multi-char pattern
assertTrue(twoByteString.contains("\u039a\u0391"), "lambda Alpha");
assertTrue(twoByteString.contains("\u0391\u03a3"), "Alpha Sigma");
assertTrue(twoByteString.contains("\u03a3\u03a3"), "Sigma Sigma");
assertTrue(twoByteString.contains("\u03a3\u0395"), "Sigma Epsilon");
assertTrue(twoByteString.includes("\u039a\u0391"), "lambda Alpha");
assertTrue(twoByteString.includes("\u0391\u03a3"), "Alpha Sigma");
assertTrue(twoByteString.includes("\u03a3\u03a3"), "Sigma Sigma");
assertTrue(twoByteString.includes("\u03a3\u0395"), "Sigma Epsilon");
assertFalse(twoByteString.contains("\u0391\u03a3\u0395"),
assertFalse(twoByteString.includes("\u0391\u03a3\u0395"),
"Not Alpha Sigma Epsilon");
//single char pattern
assertTrue(twoByteString.contains("\u0395"));
assertTrue(twoByteString.includes("\u0395"));
assertThrows("String.prototype.contains.call(null, 'test')", TypeError);
assertThrows("String.prototype.contains.call(null, null)", TypeError);
assertThrows("String.prototype.contains.call(undefined, undefined)", TypeError);
assertThrows("String.prototype.includes.call(null, 'test')", TypeError);
assertThrows("String.prototype.includes.call(null, null)", TypeError);
assertThrows("String.prototype.includes.call(undefined, undefined)", TypeError);
assertThrows("String.prototype.contains.apply(null, ['test'])", TypeError);
assertThrows("String.prototype.contains.apply(null, [null])", TypeError);
assertThrows("String.prototype.contains.apply(undefined, [undefined])", TypeError);
assertThrows("String.prototype.includes.apply(null, ['test'])", TypeError);
assertThrows("String.prototype.includes.apply(null, [null])", TypeError);
assertThrows("String.prototype.includes.apply(undefined, [undefined])", TypeError);
var TEST_INPUT = [{
msg: "Empty string", val: ""
......@@ -91,51 +91,51 @@ for (; i < l; i++) {
var e = TEST_INPUT[i];
var v = e.val;
var s = String(v);
assertTrue(s.contains(v), e.msg);
assertTrue(String.prototype.contains.call(v, v), e.msg);
assertTrue(String.prototype.contains.apply(v, [v]), e.msg);
assertTrue(s.includes(v), e.msg);
assertTrue(String.prototype.includes.call(v, v), e.msg);
assertTrue(String.prototype.includes.apply(v, [v]), e.msg);
}
// Test cases found in FF
assertTrue("abc".contains("a"));
assertTrue("abc".contains("b"));
assertTrue("abc".contains("abc"));
assertTrue("abc".contains("bc"));
assertFalse("abc".contains("d"));
assertFalse("abc".contains("abcd"));
assertFalse("abc".contains("ac"));
assertTrue("abc".contains("abc", 0));
assertTrue("abc".contains("bc", 0));
assertFalse("abc".contains("de", 0));
assertTrue("abc".contains("bc", 1));
assertTrue("abc".contains("c", 1));
assertFalse("abc".contains("a", 1));
assertFalse("abc".contains("abc", 1));
assertTrue("abc".contains("c", 2));
assertFalse("abc".contains("d", 2));
assertFalse("abc".contains("dcd", 2));
assertFalse("abc".contains("a", 42));
assertFalse("abc".contains("a", Infinity));
assertTrue("abc".contains("ab", -43));
assertFalse("abc".contains("cd", -42));
assertTrue("abc".contains("ab", -Infinity));
assertFalse("abc".contains("cd", -Infinity));
assertTrue("abc".contains("ab", NaN));
assertFalse("abc".contains("cd", NaN));
assertFalse("xyzzy".contains("zy\0", 2));
assertTrue("abc".includes("a"));
assertTrue("abc".includes("b"));
assertTrue("abc".includes("abc"));
assertTrue("abc".includes("bc"));
assertFalse("abc".includes("d"));
assertFalse("abc".includes("abcd"));
assertFalse("abc".includes("ac"));
assertTrue("abc".includes("abc", 0));
assertTrue("abc".includes("bc", 0));
assertFalse("abc".includes("de", 0));
assertTrue("abc".includes("bc", 1));
assertTrue("abc".includes("c", 1));
assertFalse("abc".includes("a", 1));
assertFalse("abc".includes("abc", 1));
assertTrue("abc".includes("c", 2));
assertFalse("abc".includes("d", 2));
assertFalse("abc".includes("dcd", 2));
assertFalse("abc".includes("a", 42));
assertFalse("abc".includes("a", Infinity));
assertTrue("abc".includes("ab", -43));
assertFalse("abc".includes("cd", -42));
assertTrue("abc".includes("ab", -Infinity));
assertFalse("abc".includes("cd", -Infinity));
assertTrue("abc".includes("ab", NaN));
assertFalse("abc".includes("cd", NaN));
assertFalse("xyzzy".includes("zy\0", 2));
var dots = Array(10000).join(".");
assertFalse(dots.contains("\x01", 10000));
assertFalse(dots.contains("\0", 10000));
assertFalse(dots.includes("\x01", 10000));
assertFalse(dots.includes("\0", 10000));
var myobj = {
toString: function () {
return "abc";
},
contains: String.prototype.contains
includes: String.prototype.includes
};
assertTrue(myobj.contains("abc"));
assertFalse(myobj.contains("cd"));
assertTrue(myobj.includes("abc"));
assertFalse(myobj.includes("cd"));
var gotStr = false;
var gotPos = false;
......@@ -145,22 +145,22 @@ myobj = {
gotStr = true;
return "xyz";
},
contains: String.prototype.contains
includes: String.prototype.includes
};
assertEquals("foo[a-z]+(bar)?".contains("[a-z]+"), true);
assertThrows("'foo[a-z]+(bar)?'.contains(/[a-z]+/)", TypeError);
assertThrows("'foo/[a-z]+/(bar)?'.contains(/[a-z]+/)", TypeError);
assertEquals("foo[a-z]+(bar)?".contains("(bar)?"), true);
assertThrows("'foo[a-z]+(bar)?'.contains(/(bar)?/)", TypeError);
assertThrows("'foo[a-z]+/(bar)?/'.contains(/(bar)?/)", TypeError);
assertEquals("foo[a-z]+(bar)?".includes("[a-z]+"), true);
assertThrows("'foo[a-z]+(bar)?'.includes(/[a-z]+/)", TypeError);
assertThrows("'foo/[a-z]+/(bar)?'.includes(/[a-z]+/)", TypeError);
assertEquals("foo[a-z]+(bar)?".includes("(bar)?"), true);
assertThrows("'foo[a-z]+(bar)?'.includes(/(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);
assertThrows("String.prototype.contains.call({ 'toString': function() { " +
assertThrows("String.prototype.includes.call({ 'toString': function() { " +
"return 'abc'; } }, /./)", TypeError);
assertThrows("String.prototype.contains.apply({ 'toString': function() { " +
assertThrows("String.prototype.includes.apply({ 'toString': function() { " +
"throw RangeError(); } }, [/./])", RangeError);
assertThrows("String.prototype.contains.apply({ 'toString': function() { " +
assertThrows("String.prototype.includes.apply({ 'toString': function() { " +
"return 'abc'; } }, [/./])", TypeError);
......@@ -167,6 +167,15 @@
'15.2.3.14-1-2': [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 #############################
# 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