blob: f345c8f544225cc7c5af7afbfb2729fc11cb543c [file] [log] [blame]
Ben Murdochb8a8cc12014-11-26 15:28:44 +00001// Copyright 2013 the V8 project authors. All rights reserved.
2// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
3//
4// Redistribution and use in source and binary forms, with or without
5// modification, are permitted provided that the following conditions
6// are met:
7// 1. Redistributions of source code must retain the above copyright
8// notice, this list of conditions and the following disclaimer.
9// 2. Redistributions in binary form must reproduce the above copyright
10// notice, this list of conditions and the following disclaimer in the
11// documentation and/or other materials provided with the distribution.
12//
13// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
14// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
15// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
16// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
17// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
18// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
19// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
20// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
21// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
22// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23
24description("Test for bug 31689: RegExp#exec's returned Array-like object behaves differently from regular Arrays");
25
26var tests = [
27 [ /(a)(_)?.+(c)(_)?.+(e)(_)?.+/, 'abcdef', '["abcdef", "a", undefined, "c", undefined, "e", undefined]' ],
28 [ /(a)(_)?/, 'abcdef', '["a", "a", undefined]' ],
29 [ /(_)?.+(a)/, 'xabcdef', '["xa", undefined, "a"]' ],
30 [ /(_)?.+(a)(_)?/, 'xabcdef', '["xa", undefined, "a", undefined]' ],
31];
32
33function testRegExpMatchesArray(i)
34{
35 return tests[i][0].exec(tests[i][1]);
36}
37
38function testInOperator(i)
39{
40 var re = tests[i][0],
41 str = tests[i][1],
42 inArray = [],
43 matches = re.exec(str);
44
45 for (var j = 0; j < matches.length; j++) {
46 if (j in matches) {
47 inArray.push(matches[j]);
48 }
49 }
50 return inArray;
51}
52
53function testForEachFunction(i)
54{
55 var re = tests[i][0],
56 str = tests[i][1],
57 inArray = [],
58 matches = re.exec(str);
59
60 matches.forEach(function(m) {
61 inArray.push(m);
62 });
63 return inArray;
64
65}
66
67for (var i in tests) {
68 shouldBe('testRegExpMatchesArray(' + i + ')', tests[i][2]);
69 shouldBe('testInOperator(' + i + ')', tests[i][2]);
70 shouldBe('testForEachFunction(' + i + ')', tests[i][2]);
71}