Home | History | Annotate | Download | only in RegExp
      1 /* ***** BEGIN LICENSE BLOCK *****
      2 * Version: NPL 1.1/GPL 2.0/LGPL 2.1
      3 *
      4 * The contents of this file are subject to the Netscape Public License
      5 * Version 1.1 (the "License"); you may not use this file except in
      6 * compliance with the License. You may obtain a copy of the License at
      7 * http://www.mozilla.org/NPL/
      8 *
      9 * Software distributed under the License is distributed on an "AS IS" basis,
     10 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
     11 * for the specific language governing rights and limitations under the
     12 * License.
     13 *
     14 * The Original Code is JavaScript Engine testing utilities.
     15 *
     16 * The Initial Developer of the Original Code is Netscape Communications Corp.
     17 * Portions created by the Initial Developer are Copyright (C) 2003
     18 * the Initial Developer. All Rights Reserved.
     19 *
     20 * Contributor(s): flying (at) dom.natm.ru, pschwartau (at) netscape.com
     21 *
     22 * Alternatively, the contents of this file may be used under the terms of
     23 * either the GNU General Public License Version 2 or later (the "GPL"), or
     24 * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
     25 * in which case the provisions of the GPL or the LGPL are applicable instead
     26 * of those above. If you wish to allow use of your version of this file only
     27 * under the terms of either the GPL or the LGPL, and not to allow others to
     28 * use your version of this file under the terms of the NPL, indicate your
     29 * decision by deleting the provisions above and replace them with the notice
     30 * and other provisions required by the GPL or the LGPL. If you do not delete
     31 * the provisions above, a recipient may use your version of this file under
     32 * the terms of any one of the NPL, the GPL or the LGPL.
     33 *
     34 * ***** END LICENSE BLOCK *****
     35 *
     36 *
     37 * Date:    31 January 2003
     38 * SUMMARY: Testing regular expressions of form /(x|y){n,}/
     39 *
     40 * See http://bugzilla.mozilla.org/show_bug.cgi?id=191479
     41 *
     42 */
     43 //-----------------------------------------------------------------------------
     44 var i = 0;
     45 var bug = 191479;
     46 var summary = 'Testing regular expressions of form /(x|y){n,}/';
     47 var status = '';
     48 var statusmessages = new Array();
     49 var pattern = '';
     50 var patterns = new Array();
     51 var string = '';
     52 var strings = new Array();
     53 var actualmatch = '';
     54 var actualmatches = new Array();
     55 var expectedmatch = '';
     56 var expectedmatches = new Array();
     57 
     58 
     59 status = inSection(1);
     60 string = '12 3 45';
     61 pattern = /(\d|\d\s){2,}/;
     62 actualmatch = string.match(pattern);
     63 expectedmatch = Array('12', '2');
     64 addThis();
     65 
     66 status = inSection(2);
     67 string = '12 3 45';
     68 pattern = /(\d|\d\s){4,}/;
     69 actualmatch = string.match(pattern);
     70 expectedmatch = Array(string, '5');
     71 addThis();
     72 
     73 status = inSection(3);
     74 string = '12 3 45';
     75 pattern = /(\d|\d\s)+/;
     76 actualmatch = string.match(pattern);
     77 expectedmatch = Array('12', '2');
     78 addThis();
     79 
     80 status = inSection(4);
     81 string = '12 3 45';
     82 pattern = /(\d\s?){4,}/;
     83 actualmatch = string.match(pattern);
     84 expectedmatch = Array(string, '5');
     85 addThis();
     86 
     87 /*
     88  * Let's reverse the operands in Sections 1-3 above -
     89  */
     90 status = inSection(5);
     91 string = '12 3 45';
     92 pattern = /(\d\s|\d){2,}/;
     93 actualmatch = string.match(pattern);
     94 expectedmatch = Array(string, '5');
     95 addThis();
     96 
     97 status = inSection(6);
     98 string = '12 3 45';
     99 pattern = /(\d\s|\d){4,}/;
    100 actualmatch = string.match(pattern);
    101 expectedmatch = Array(string, '5');
    102 addThis();
    103 
    104 status = inSection(7);
    105 string = '12 3 45';
    106 pattern = /(\d\s|\d)+/;
    107 actualmatch = string.match(pattern);
    108 expectedmatch = Array(string, '5');
    109 addThis();
    110 
    111 
    112 /*
    113  * Let's take all 7 sections above and make each quantifer non-greedy.
    114  *
    115  * This is done by appending ? to it. It doesn't change the meaning of
    116  * the quantifier, but makes it non-greedy, which affects the results -
    117  */
    118 status = inSection(8);
    119 string = '12 3 45';
    120 pattern = /(\d|\d\s){2,}?/;
    121 actualmatch = string.match(pattern);
    122 expectedmatch = Array('12', '2');
    123 addThis();
    124 
    125 status = inSection(9);
    126 string = '12 3 45';
    127 pattern = /(\d|\d\s){4,}?/;
    128 actualmatch = string.match(pattern);
    129 expectedmatch = Array('12 3 4', '4');
    130 addThis();
    131 
    132 status = inSection(10);
    133 string = '12 3 45';
    134 pattern = /(\d|\d\s)+?/;
    135 actualmatch = string.match(pattern);
    136 expectedmatch = Array('1', '1');
    137 addThis();
    138 
    139 status = inSection(11);
    140 string = '12 3 45';
    141 pattern = /(\d\s?){4,}?/;
    142 actualmatch = string.match(pattern);
    143 expectedmatch = Array('12 3 4', '4');
    144 addThis();
    145 
    146 status = inSection(12);
    147 string = '12 3 45';
    148 pattern = /(\d\s|\d){2,}?/;
    149 actualmatch = string.match(pattern);
    150 expectedmatch = Array('12 ', '2 ');
    151 addThis();
    152 
    153 status = inSection(13);
    154 string = '12 3 45';
    155 pattern = /(\d\s|\d){4,}?/;
    156 actualmatch = string.match(pattern);
    157 expectedmatch = Array('12 3 4', '4');
    158 addThis();
    159 
    160 status = inSection(14);
    161 string = '12 3 45';
    162 pattern = /(\d\s|\d)+?/;
    163 actualmatch = string.match(pattern);
    164 expectedmatch = Array('1', '1');
    165 addThis();
    166 
    167 
    168 
    169 //-----------------------------------------------------------------------------
    170 test();
    171 //-----------------------------------------------------------------------------
    172 
    173 
    174 
    175 function addThis()
    176 {
    177   statusmessages[i] = status;
    178   patterns[i] = pattern;
    179   strings[i] = string;
    180   actualmatches[i] = actualmatch;
    181   expectedmatches[i] = expectedmatch;
    182   i++;
    183 }
    184 
    185 
    186 function test()
    187 {
    188   enterFunc ('test');
    189   printBugNumber (bug);
    190   printStatus (summary);
    191   testRegExp(statusmessages, patterns, strings, actualmatches, expectedmatches);
    192   exitFunc ('test');
    193 }
    194