Home | History | Annotate | Download | only in RegExp
      1 /**
      2  *  File Name:          RegExp/exec-002.js
      3  *  ECMA Section:       15.7.5.3
      4  *  Description:        Based on ECMA 2 Draft 7 February 1999
      5  *
      6  *  Test cases provided by rogerl (at) netscape.com
      7  *
      8  *  Author:             christine (at) netscape.com
      9  *  Date:               19 February 1999
     10  */
     11     var SECTION = "RegExp/exec-002";
     12     var VERSION = "ECMA_2";
     13     var TITLE   = "RegExp.prototype.exec(string)";
     14 
     15     startTest();
     16 
     17     /*
     18      * for each test case, verify:
     19      * - type of object returned
     20      * - length of the returned array
     21      * - value of lastIndex
     22      * - value of index
     23      * - value of input
     24      * - value of the array indices
     25      */
     26 
     27     AddRegExpCases(
     28         /(a|d|q|)x/i,
     29         "bcaDxqy",
     30         3,
     31         ["Dx", "D"] );
     32 
     33     AddRegExpCases(
     34         /(a|(e|q))(x|y)/,
     35         "bcaddxqy",
     36         6,
     37         ["qy","q","q","y"] );
     38 
     39 
     40     AddRegExpCases(
     41         /a+b+d/,
     42         "aabbeeaabbs",
     43         0,
     44         null );
     45 
     46     AddRegExpCases(
     47         /a*b/,
     48         "aaadaabaaa",
     49         4,
     50         ["aab"] );
     51 
     52     AddRegExpCases(
     53         /a*b/,
     54         "dddb",
     55         3,
     56         ["b"] );
     57 
     58     AddRegExpCases(
     59         /a*b/,
     60         "xxx",
     61         0,
     62         null );
     63 
     64     AddRegExpCases(
     65         /x\d\dy/,
     66         "abcx45ysss235",
     67         3,
     68         ["x45y"] );
     69 
     70     AddRegExpCases(
     71         /[^abc]def[abc]+/,
     72         "abxdefbb",
     73         2,
     74         ["xdefbb"] );
     75 
     76     AddRegExpCases(
     77         /(a*)baa/,
     78         "ccdaaabaxaabaa",
     79         9,
     80         ["aabaa", "aa"] );
     81 
     82     AddRegExpCases(
     83         /(a*)baa/,
     84         "aabaa",
     85         0,
     86         ["aabaa", "aa"] );
     87 
     88     AddRegExpCases(
     89         /q(a|b)*q/,
     90         "xxqababqyy",
     91         2,
     92         ["qababq", "b"] );
     93 
     94     AddRegExpCases(
     95         /(a(.|[^d])c)*/,
     96         "adcaxc",
     97         0,
     98         ["adcaxc", "axc", "x"] );
     99 
    100     AddRegExpCases(
    101         /(a*)b\1/,
    102         "abaaaxaabaayy",
    103         0,
    104         ["aba", "a"] );
    105 
    106     AddRegExpCases(
    107         /(a*)b\1/,
    108         "abaaaxaabaayy",
    109         0,
    110         ["aba", "a"] );
    111 
    112     AddRegExpCases(
    113         /(a*)b\1/,
    114         "cccdaaabaxaabaayy",
    115         6,
    116         ["aba", "a"] );
    117 
    118     AddRegExpCases(
    119         /(a*)b\1/,
    120         "cccdaaabqxaabaayy",
    121         7,
    122         ["b", ""] );
    123 
    124     AddRegExpCases(
    125         /"(.|[^"\\\\])*"/,
    126         'xx\"makudonarudo\"yy',
    127         2,
    128         ["\"makudonarudo\"", "o"] );
    129 
    130     AddRegExpCases(
    131         /"(.|[^"\\\\])*"/,
    132         "xx\"ma\"yy",
    133         2,
    134         ["\"ma\"", "a"] );
    135 
    136     test();
    137 
    138 function AddRegExpCases(
    139     regexp, pattern, index, matches_array ) {
    140 
    141     // prevent a runtime error
    142 
    143     if ( regexp.exec(pattern) == null || matches_array == null ) {
    144         AddTestCase(
    145             regexp + ".exec(" + pattern +")",
    146             matches_array,
    147             regexp.exec(pattern) );
    148 
    149         return;
    150     }
    151     AddTestCase(
    152         regexp + ".exec(" + pattern +").length",
    153         matches_array.length,
    154         regexp.exec(pattern).length );
    155 
    156     AddTestCase(
    157         regexp + ".exec(" + pattern +").index",
    158         index,
    159         regexp.exec(pattern).index );
    160 
    161     AddTestCase(
    162         regexp + ".exec(" + pattern +").input",
    163         pattern,
    164         regexp.exec(pattern).input );
    165 
    166     AddTestCase(
    167         regexp + ".exec(" + pattern +").toString()",
    168         matches_array.toString(),
    169         regexp.exec(pattern).toString() );
    170 /*
    171     var limit = matches_array.length > regexp.exec(pattern).length
    172                 ? matches_array.length
    173                 : regexp.exec(pattern).length;
    174 
    175     for ( var matches = 0; matches < limit; matches++ ) {
    176         AddTestCase(
    177             regexp + ".exec(" + pattern +")[" + matches +"]",
    178             matches_array[matches],
    179             regexp.exec(pattern)[matches] );
    180     }
    181 */
    182 }
    183