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