Merge pull request #375 from bocoup/String.prototype.includes

Add tests for String.prototype.includes
This commit is contained in:
Brian Terlson 2015-07-23 16:20:39 -07:00
commit 2dfcde4698
20 changed files with 533 additions and 0 deletions

View File

@ -0,0 +1,39 @@
// Copyright (C) 2015 the V8 project authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
es6id: 21.1.3.7
description: >
Returns based on coerced values of position.
info: >
21.1.3.7 String.prototype.includes ( searchString [ , position ] )
...
9. Let pos be ToInteger(position). (If position is undefined, this step
produces the value 0).
10. ReturnIfAbrupt(pos).
11. Let len be the number of elements in S.
12. Let start be min(max(pos, 0), len).
13. Let searchLen be the number of elements in searchStr.
14. If there exists any integer k not smaller than start such that k +
searchLen is not greater than len, and for all nonnegative integers j less
than searchLen, the code unit at index k+j of S is the same as the code unit
at index j of searchStr, return true; but if there is no such integer k,
return false.
...
---*/
var str = 'The future is cool!';
assert(str.includes('The future', NaN), 'NaN coerced to 0');
assert(str.includes('The future', null), 'null coerced to 0');
assert(str.includes('The future', false), 'false coerced to 0');
assert(str.includes('The future', ''), '"" coerced to 0');
assert(str.includes('The future', '0'), '"0" coerced to 0');
assert(str.includes('The future', undefined), 'undefined coerced to 0');
assert(str.includes('The future', 0.4), '0.4 coerced to 0');
assert(str.includes('The future', -1));
assert.sameValue(str.includes('The future', true), false, 'true coerced to 1');
assert.sameValue(str.includes('The future', '1'), false, '"1" coerced to 1');
assert.sameValue(str.includes('The future', 1.4), false, '1.4 coerced to 1');

View File

@ -0,0 +1,22 @@
// Copyright (C) 2015 the V8 project authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
es6id: 21.1.3.7
description: >
Property type and descriptor.
info: >
21.1.3.7 String.prototype.includes ( searchString [ , position ] )
17 ECMAScript Standard Built-in Objects
includes: [propertyHelper.js]
---*/
assert.sameValue(
typeof String.prototype.includes,
'function',
'`typeof String.prototype.includes` is `function`'
);
verifyNotEnumerable(String.prototype, 'includes');
verifyWritable(String.prototype, 'includes');
verifyConfigurable(String.prototype, 'includes');

View File

@ -0,0 +1,22 @@
// Copyright (C) 2015 the V8 project authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
es6id: 21.1.3.7
description: >
String.prototype.includes.length value and descriptor.
info: >
21.1.3.7 String.prototype.includes ( searchString [ , position ] )
17 ECMAScript Standard Built-in Objects
includes: [propertyHelper.js]
---*/
assert.sameValue(
String.prototype.includes.length, 1,
'The value of `String.prototype.includes.length` is `1`'
);
verifyNotEnumerable(String.prototype.includes, 'length');
verifyNotWritable(String.prototype.includes, 'length');
verifyConfigurable(String.prototype.includes, 'length');

View File

@ -0,0 +1,22 @@
// Copyright (C) 2015 the V8 project authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
es6id: 21.1.3.7
description: >
String.prototype.includes.name value and descriptor.
info: >
21.1.3.7 String.prototype.includes ( searchString [ , position ] )
17 ECMAScript Standard Built-in Objects
includes: [propertyHelper.js]
---*/
assert.sameValue(
String.prototype.includes.name, 'includes',
'The value of `String.prototype.includes.name` is `"includes"`'
);
verifyNotEnumerable(String.prototype.includes, 'name');
verifyNotWritable(String.prototype.includes, 'name');
verifyConfigurable(String.prototype.includes, 'name');

View File

@ -0,0 +1,22 @@
// Copyright (C) 2015 the V8 project authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
es6id: 21.1.3.7
description: >
Returns abrupt from ToInteger(position) as a Symbol.
info: >
21.1.3.7 String.prototype.includes ( searchString [ , position ] )
...
9. Let pos be ToInteger(position). (If position is undefined, this step
produces the value 0).
10. ReturnIfAbrupt(pos).
...
features: [Symbol]
---*/
var position = Symbol();
assert.throws(TypeError, function() {
''.includes('', position);
});

View File

@ -0,0 +1,25 @@
// Copyright (C) 2015 the V8 project authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
es6id: 21.1.3.7
description: >
Returns abrupt from ToInteger(position).
info: >
21.1.3.7 String.prototype.includes ( searchString [ , position ] )
...
9. Let pos be ToInteger(position). (If position is undefined, this step
produces the value 0).
10. ReturnIfAbrupt(pos).
...
---*/
var position = {
valueOf: function() {
throw new Test262Error();
}
};
assert.throws(Test262Error, function() {
''.includes('', position);
});

View File

@ -0,0 +1,21 @@
// Copyright (C) 2015 the V8 project authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
es6id: 21.1.3.7
description: >
Returns abrupt from ToString(searchString) as a Symbol
info: >
21.1.3.7 String.prototype.includes ( searchString [ , position ] )
...
7. Let searchStr be ToString(searchString).
8. ReturnIfAbrupt(searchStr).
...
features: [Symbol]
---*/
var s = Symbol();
assert.throws(TypeError, function() {
''.includes(s);
});

View File

@ -0,0 +1,42 @@
// Copyright (C) 2015 the V8 project authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
es6id: 21.1.3.7
description: >
Returns abrupt from IsRegExp(searchString).
info: >
21.1.3.7 String.prototype.includes ( searchString [ , position ] )
...
4. Let isRegExp be IsRegExp(searchString).
5. ReturnIfAbrupt(isRegExp).
...
7.2.8 IsRegExp ( argument )
2. Let isRegExp be Get(argument, @@match).
3. ReturnIfAbrupt(isRegExp).
features: [Symbol.match]
---*/
var obj = {};
Object.defineProperty(obj, Symbol.match, {
get: function() {
throw new Test262Error();
}
});
assert.throws(Test262Error, function() {
''.includes(obj);
});
var regexp = /./;
Object.defineProperty(regexp, Symbol.match, {
get: function() {
throw new Test262Error();
}
});
assert.throws(Test262Error, function() {
''.includes(regexp);
});

View File

@ -0,0 +1,24 @@
// Copyright (C) 2015 the V8 project authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
es6id: 21.1.3.7
description: >
Returns abrupt from ToString(searchString)
info: >
21.1.3.7 String.prototype.includes ( searchString [ , position ] )
...
7. Let searchStr be ToString(searchString).
8. ReturnIfAbrupt(searchStr).
...
---*/
var obj = {
toString: function() {
throw new Test262Error();
}
};
assert.throws(Test262Error, function() {
''.includes(obj);
});

View File

@ -0,0 +1,20 @@
// Copyright (C) 2015 the V8 project authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
es6id: 21.1.3.7
description: >
Returns abrupt from ToString(this) where this is a Symbol
info: >
21.1.3.7 String.prototype.includes ( searchString [ , position ] )
1. Let O be RequireObjectCoercible(this value).
2. Let S be ToString(O).
3. ReturnIfAbrupt(S).
features: [Symbol]
---*/
var s = Symbol('');
assert.throws(TypeError, function() {
String.prototype.includes.call(s, '');
});

View File

@ -0,0 +1,23 @@
// Copyright (C) 2015 the V8 project authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
es6id: 21.1.3.7
description: >
Returns abrupt from ToString(this)
info: >
21.1.3.7 String.prototype.includes ( searchString [ , position ] )
1. Let O be RequireObjectCoercible(this value).
2. Let S be ToString(O).
3. ReturnIfAbrupt(S).
---*/
var o = {
toString: function() {
throw new Test262Error();
}
};
assert.throws(Test262Error, function() {
String.prototype.includes.call(o, '');
});

View File

@ -0,0 +1,42 @@
// Copyright (C) 2015 the V8 project authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
es6id: 21.1.3.7
description: >
Returns false if position is >= this.length and searchString.length > 0.
info: >
21.1.3.7 String.prototype.includes ( searchString [ , position ] )
...
11. Let len be the number of elements in S.
12. Let start be min(max(pos, 0), len).
13. Let searchLen be the number of elements in searchStr.
14. If there exists any integer k not smaller than start such that k +
searchLen is not greater than len, and for all nonnegative integers j less
than searchLen, the code unit at index k+j of S is the same as the code unit
at index j of searchStr, return true; but if there is no such integer k,
return false.
...
---*/
var str = 'The future is cool!';
assert.sameValue(
str.includes('!', str.length + 1), false,
'str.includes("!", str.length + 1) returns false'
);
assert.sameValue(
str.includes('!', 100), false,
'str.includes("!", 100) returns false'
);
assert.sameValue(
str.includes('!', Infinity), false,
'str.includes("!", Infinity) returns false'
);
assert.sameValue(
str.includes('!', str.length), false,
'str.includes("!", str.length) returns false'
);

View File

@ -0,0 +1,37 @@
// Copyright (C) 2015 the V8 project authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
es6id: 21.1.3.7
description: >
Returns true if searchString.length == 0.
info: >
21.1.3.7 String.prototype.includes ( searchString [ , position ] )
...
11. Let len be the number of elements in S.
12. Let start be min(max(pos, 0), len).
13. Let searchLen be the number of elements in searchStr.
14. If there exists any integer k not smaller than start such that k +
searchLen is not greater than len, and for all nonnegative integers j less
than searchLen, the code unit at index k+j of S is the same as the code unit
at index j of searchStr, return true; but if there is no such integer k,
return false.
...
---*/
var str = 'The future is cool!';
assert(
str.includes('', str.length),
'str.includes("", str.length) returns true'
);
assert(
str.includes(''),
'str.includes("") returns true'
);
assert(
str.includes('', Infinity),
'str.includes("", Infinity) returns true'
);

View File

@ -0,0 +1,30 @@
// Copyright (C) 2015 the V8 project authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
es6id: 21.1.3.7
description: >
Returns true if searchString appears as a substring of the given string with a
given position.
info: >
21.1.3.7 String.prototype.includes ( searchString [ , position ] )
...
11. Let len be the number of elements in S.
12. Let start be min(max(pos, 0), len).
13. Let searchLen be the number of elements in searchStr.
14. If there exists any integer k not smaller than start such that k +
searchLen is not greater than len, and for all nonnegative integers j less
than searchLen, the code unit at index k+j of S is the same as the code unit
at index j of searchStr, return true; but if there is no such integer k,
return false.
...
---*/
var str = 'The future is cool!';
assert(
str.includes('The future', 0),
'Returns true for str.includes("The future", 0)'
);
assert(str.includes(' is ', 1), 'Returns true for str.includes(" is ", 1)');
assert(str.includes('cool!', 10), 'Returns true for str.includes("cool!", 10)');

View File

@ -0,0 +1,29 @@
// Copyright (C) 2015 the V8 project authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
es6id: 21.1.3.7
description: >
Returns true if searchString appears as a substring of the given string.
info: >
21.1.3.7 String.prototype.includes ( searchString [ , position ] )
...
11. Let len be the number of elements in S.
12. Let start be min(max(pos, 0), len).
13. Let searchLen be the number of elements in searchStr.
14. If there exists any integer k not smaller than start such that k +
searchLen is not greater than len, and for all nonnegative integers j less
than searchLen, the code unit at index k+j of S is the same as the code unit
at index j of searchStr, return true; but if there is no such integer k,
return false.
...
---*/
var str = 'The future is cool!';
assert(
str.includes('The future'),
'Returns true for str.includes("The future")'
);
assert(str.includes('is cool!'), 'Returns true for str.includes("is cool!")');
assert(str.includes(str), 'Returns true for str.includes(str)');

View File

@ -0,0 +1,21 @@
// Copyright (C) 2015 the V8 project authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
es6id: 21.1.3.7
description: >
Throws a TypeError if searchString is a RegExp.
info: >
21.1.3.7 String.prototype.includes ( searchString [ , position ] )
...
4. Let isRegExp be IsRegExp(searchString).
5. ReturnIfAbrupt(isRegExp).
6. If isRegExp is true, throw a TypeError exception.
...
---*/
var searchString = /./;
assert.throws(TypeError, function() {
''.includes(searchString);
});

View File

@ -0,0 +1,32 @@
// Copyright (C) 2015 the V8 project authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
es6id: 21.1.3.7
description: >
Returns false if searchString is not found with a given position.
info: >
21.1.3.7 String.prototype.includes ( searchString [ , position ] )
...
11. Let len be the number of elements in S.
12. Let start be min(max(pos, 0), len).
13. Let searchLen be the number of elements in searchStr.
14. If there exists any integer k not smaller than start such that k +
searchLen is not greater than len, and for all nonnegative integers j less
than searchLen, the code unit at index k+j of S is the same as the code unit
at index j of searchStr, return true; but if there is no such integer k,
return false.
...
---*/
var str = 'The future is cool!';
assert.sameValue(
str.includes('The future', 1), false,
'Returns false on str.includes("The future", 1)'
);
assert.sameValue(
str.includes(str, 1), false,
'Returns false on str.includes(str, 1)'
);

View File

@ -0,0 +1,28 @@
// Copyright (C) 2015 the V8 project authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
es6id: 21.1.3.7
description: >
Returns false if searchString is not found.
info: >
21.1.3.7 String.prototype.includes ( searchString [ , position ] )
...
11. Let len be the number of elements in S.
12. Let start be min(max(pos, 0), len).
13. Let searchLen be the number of elements in searchStr.
14. If there exists any integer k not smaller than start such that k +
searchLen is not greater than len, and for all nonnegative integers j less
than searchLen, the code unit at index k+j of S is the same as the code unit
at index j of searchStr, return true; but if there is no such integer k,
return false.
...
---*/
var str = 'The future is cool!';
assert.sameValue(
str.includes('Flash'), false,
'Flash if not included'
);
assert.sameValue(str.includes('FUTURE'), false, 'includes is case sensitive');

View File

@ -0,0 +1,16 @@
// Copyright (C) 2015 the V8 project authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
es6id: 21.1.3.7
description: >
Throws TypeError when `this` is null
info: >
21.1.3.7 String.prototype.includes ( searchString [ , position ] )
1. Let O be RequireObjectCoercible(this value).
2. Let S be ToString(O).
---*/
assert.throws(TypeError, function() {
String.prototype.includes.call(null, '');
});

View File

@ -0,0 +1,16 @@
// Copyright (C) 2015 the V8 project authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
es6id: 21.1.3.7
description: >
Throws TypeError when `this` is undefined
info: >
21.1.3.7 String.prototype.includes ( searchString [ , position ] )
1. Let O be RequireObjectCoercible(this value).
2. Let S be ToString(O).
---*/
assert.throws(TypeError, function() {
String.prototype.includes.call(undefined, '');
});