| Index: test/webkit/regexp-in-and-foreach-handling.js
|
| diff --git a/test/webkit/concat-while-having-a-bad-time.js b/test/webkit/regexp-in-and-foreach-handling.js
|
| similarity index 53%
|
| copy from test/webkit/concat-while-having-a-bad-time.js
|
| copy to test/webkit/regexp-in-and-foreach-handling.js
|
| index dfda1e08a0b36194b787a44ee12a9693acd8aeaf..a2430db7ba5e0a16e4a88d50004f1acaa7f817e2 100644
|
| --- a/test/webkit/concat-while-having-a-bad-time.js
|
| +++ b/test/webkit/regexp-in-and-foreach-handling.js
|
| @@ -21,11 +21,52 @@
|
| // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
| // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
|
| -description(
|
| -"Tests the behavior of Array.prototype.concat while the array is having a bad time due to one of the elements we are concatenating."
|
| -);
|
| +description("Test for bug 31689: RegExp#exec's returned Array-like object behaves differently from regular Arrays");
|
|
|
| -Object.defineProperty(Array.prototype, 0, { writable: false });
|
| -shouldBe("[42].concat()", "[42]");
|
| +var tests = [
|
| + [ /(a)(_)?.+(c)(_)?.+(e)(_)?.+/, 'abcdef', '["abcdef", "a", undefined, "c", undefined, "e", undefined]' ],
|
| + [ /(a)(_)?/, 'abcdef', '["a", "a", undefined]' ],
|
| + [ /(_)?.+(a)/, 'xabcdef', '["xa", undefined, "a"]' ],
|
| + [ /(_)?.+(a)(_)?/, 'xabcdef', '["xa", undefined, "a", undefined]' ],
|
| +];
|
|
|
| +function testRegExpMatchesArray(i)
|
| +{
|
| + return tests[i][0].exec(tests[i][1]);
|
| +}
|
| +
|
| +function testInOperator(i)
|
| +{
|
| + var re = tests[i][0],
|
| + str = tests[i][1],
|
| + inArray = [],
|
| + matches = re.exec(str);
|
| +
|
| + for (var j = 0; j < matches.length; j++) {
|
| + if (j in matches) {
|
| + inArray.push(matches[j]);
|
| + }
|
| + }
|
| + return inArray;
|
| +}
|
| +
|
| +function testForEachFunction(i)
|
| +{
|
| + var re = tests[i][0],
|
| + str = tests[i][1],
|
| + inArray = [],
|
| + matches = re.exec(str);
|
| +
|
| + matches.forEach(function(m) {
|
| + inArray.push(m);
|
| + });
|
| + return inArray;
|
| +
|
| +}
|
| +
|
| +for (var i in tests) {
|
| + shouldBe('testRegExpMatchesArray(' + i + ')', tests[i][2]);
|
| + shouldBe('testInOperator(' + i + ')', tests[i][2]);
|
| + shouldBe('testForEachFunction(' + i + ')', tests[i][2]);
|
| +}
|
|
|
|
|