18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/**
28e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *  File Name:          RegExp/exec-002.js
38e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *  ECMA Section:       15.7.5.3
48e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *  Description:        Based on ECMA 2 Draft 7 February 1999
58e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
68e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *  Test cases provided by rogerl@netscape.com
78e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
88e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *  Author:             christine@netscape.com
98e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *  Date:               19 February 1999
108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */
118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    var SECTION = "RegExp/exec-002";
128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    var VERSION = "ECMA_2";
138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    var TITLE   = "RegExp.prototype.exec(string)";
148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    startTest();
168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    /*
188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project     * for each test case, verify:
198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project     * - type of object returned
208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project     * - length of the returned array
218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project     * - value of lastIndex
228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project     * - value of index
238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project     * - value of input
248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project     * - value of the array indices
258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project     */
268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    AddRegExpCases(
288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        /(a|d|q|)x/i,
298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        "bcaDxqy",
308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        3,
318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        ["Dx", "D"] );
328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    AddRegExpCases(
348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        /(a|(e|q))(x|y)/,
358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        "bcaddxqy",
368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        6,
378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        ["qy","q","q","y"] );
388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    AddRegExpCases(
418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        /a+b+d/,
428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        "aabbeeaabbs",
438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        0,
448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        null );
458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    AddRegExpCases(
478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        /a*b/,
488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        "aaadaabaaa",
498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        4,
508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        ["aab"] );
518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    AddRegExpCases(
538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        /a*b/,
548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        "dddb",
558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        3,
568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        ["b"] );
578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    AddRegExpCases(
598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        /a*b/,
608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        "xxx",
618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        0,
628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        null );
638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    AddRegExpCases(
658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        /x\d\dy/,
668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        "abcx45ysss235",
678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        3,
688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        ["x45y"] );
698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    AddRegExpCases(
718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        /[^abc]def[abc]+/,
728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        "abxdefbb",
738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        2,
748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        ["xdefbb"] );
758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    AddRegExpCases(
778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        /(a*)baa/,
788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        "ccdaaabaxaabaa",
798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        9,
808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        ["aabaa", "aa"] );
818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    AddRegExpCases(
838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        /(a*)baa/,
848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        "aabaa",
858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        0,
868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        ["aabaa", "aa"] );
878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    AddRegExpCases(
898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        /q(a|b)*q/,
908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        "xxqababqyy",
918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        2,
928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        ["qababq", "b"] );
938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    AddRegExpCases(
958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        /(a(.|[^d])c)*/,
968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        "adcaxc",
978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        0,
988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        ["adcaxc", "axc", "x"] );
998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    AddRegExpCases(
1018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        /(a*)b\1/,
1028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        "abaaaxaabaayy",
1038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        0,
1048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        ["aba", "a"] );
1058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    AddRegExpCases(
1078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        /(a*)b\1/,
1088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        "abaaaxaabaayy",
1098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        0,
1108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        ["aba", "a"] );
1118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    AddRegExpCases(
1138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        /(a*)b\1/,
1148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        "cccdaaabaxaabaayy",
1158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        6,
1168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        ["aba", "a"] );
1178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    AddRegExpCases(
1198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        /(a*)b\1/,
1208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        "cccdaaabqxaabaayy",
1218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        7,
1228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        ["b", ""] );
1238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    AddRegExpCases(
1258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        /"(.|[^"\\\\])*"/,
1268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        'xx\"makudonarudo\"yy',
1278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        2,
1288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        ["\"makudonarudo\"", "o"] );
1298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    AddRegExpCases(
1318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        /"(.|[^"\\\\])*"/,
1328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        "xx\"ma\"yy",
1338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        2,
1348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        ["\"ma\"", "a"] );
1358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    test();
1378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectfunction AddRegExpCases(
1398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    regexp, pattern, index, matches_array ) {
1408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    // prevent a runtime error
1428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if ( regexp.exec(pattern) == null || matches_array == null ) {
1448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        AddTestCase(
1458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            regexp + ".exec(" + pattern +")",
1468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            matches_array,
1478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            regexp.exec(pattern) );
1488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        return;
1508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
1518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    AddTestCase(
1528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        regexp + ".exec(" + pattern +").length",
1538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        matches_array.length,
1548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        regexp.exec(pattern).length );
1558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    AddTestCase(
1578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        regexp + ".exec(" + pattern +").index",
1588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        index,
1598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        regexp.exec(pattern).index );
1608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    AddTestCase(
1628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        regexp + ".exec(" + pattern +").input",
1638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        pattern,
1648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        regexp.exec(pattern).input );
1658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    AddTestCase(
1678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        regexp + ".exec(" + pattern +").toString()",
1688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        matches_array.toString(),
1698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        regexp.exec(pattern).toString() );
1708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*
1718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    var limit = matches_array.length > regexp.exec(pattern).length
1728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                ? matches_array.length
1738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                : regexp.exec(pattern).length;
1748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    for ( var matches = 0; matches < limit; matches++ ) {
1768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        AddTestCase(
1778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            regexp + ".exec(" + pattern +")[" + matches +"]",
1788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            matches_array[matches],
1798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            regexp.exec(pattern)[matches] );
1808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
1818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
1828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
183