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) 2002 18 * the Initial Developer. All Rights Reserved. 19 * 20 * Contributor(s): rogerl (at) netscape.com, 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: 09 July 2002 38 * SUMMARY: RegExp conformance test 39 * 40 * These testcases are derived from the examples in the ECMA-262 Ed.3 spec 41 * scattered through section 15.10.2. 42 * 43 */ 44 //----------------------------------------------------------------------------- 45 var i = 0; 46 var bug = '(none)'; 47 var summary = 'RegExp conformance test'; 48 var status = ''; 49 var statusmessages = new Array(); 50 var pattern = ''; 51 var patterns = new Array(); 52 var string = ''; 53 var strings = new Array(); 54 var actualmatch = ''; 55 var actualmatches = new Array(); 56 var expectedmatch = ''; 57 var expectedmatches = new Array(); 58 59 60 status = inSection(1); 61 pattern = /a|ab/; 62 string = 'abc'; 63 actualmatch = string.match(pattern); 64 expectedmatch = Array('a'); 65 addThis(); 66 67 status = inSection(2); 68 pattern = /((a)|(ab))((c)|(bc))/; 69 string = 'abc'; 70 actualmatch = string.match(pattern); 71 expectedmatch = Array('abc', 'a', 'a', undefined, 'bc', undefined, 'bc'); 72 addThis(); 73 74 status = inSection(3); 75 pattern = /a[a-z]{2,4}/; 76 string = 'abcdefghi'; 77 actualmatch = string.match(pattern); 78 expectedmatch = Array('abcde'); 79 addThis(); 80 81 status = inSection(4); 82 pattern = /a[a-z]{2,4}?/; 83 string = 'abcdefghi'; 84 actualmatch = string.match(pattern); 85 expectedmatch = Array('abc'); 86 addThis(); 87 88 status = inSection(5); 89 pattern = /(aa|aabaac|ba|b|c)*/; 90 string = 'aabaac'; 91 actualmatch = string.match(pattern); 92 expectedmatch = Array('aaba', 'ba'); 93 addThis(); 94 95 status = inSection(6); 96 pattern = /^(a+)\1*,\1+$/; 97 string = 'aaaaaaaaaa,aaaaaaaaaaaaaaa'; 98 actualmatch = string.match(pattern); 99 expectedmatch = Array('aaaaaaaaaa,aaaaaaaaaaaaaaa', 'aaaaa'); 100 addThis(); 101 102 status = inSection(7); 103 pattern = /(z)((a+)?(b+)?(c))*/; 104 string = 'zaacbbbcac'; 105 actualmatch = string.match(pattern); 106 expectedmatch = Array('zaacbbbcac', 'z', 'ac', 'a', undefined, 'c'); 107 addThis(); 108 109 status = inSection(8); 110 pattern = /(a*)*/; 111 string = 'b'; 112 actualmatch = string.match(pattern); 113 expectedmatch = Array('', undefined); 114 addThis(); 115 116 status = inSection(9); 117 pattern = /(a*)b\1+/; 118 string = 'baaaac'; 119 actualmatch = string.match(pattern); 120 expectedmatch = Array('b', ''); 121 addThis(); 122 123 status = inSection(10); 124 pattern = /(?=(a+))/; 125 string = 'baaabac'; 126 actualmatch = string.match(pattern); 127 expectedmatch = Array('', 'aaa'); 128 addThis(); 129 130 status = inSection(11); 131 pattern = /(?=(a+))a*b\1/; 132 string = 'baaabac'; 133 actualmatch = string.match(pattern); 134 expectedmatch = Array('aba', 'a'); 135 addThis(); 136 137 status = inSection(12); 138 pattern = /(.*?)a(?!(a+)b\2c)\2(.*)/; 139 string = 'baaabaac'; 140 actualmatch = string.match(pattern); 141 expectedmatch = Array('baaabaac', 'ba', undefined, 'abaac'); 142 addThis(); 143 144 status = inSection(13); 145 pattern = /(?=(a+))/; 146 string = 'baaabac'; 147 actualmatch = string.match(pattern); 148 expectedmatch = Array('', 'aaa'); 149 addThis(); 150 151 152 153 //------------------------------------------------------------------------------------------------- 154 test(); 155 //------------------------------------------------------------------------------------------------- 156 157 158 function addThis() 159 { 160 statusmessages[i] = status; 161 patterns[i] = pattern; 162 strings[i] = string; 163 actualmatches[i] = actualmatch; 164 expectedmatches[i] = expectedmatch; 165 i++; 166 } 167 168 169 function test() 170 { 171 enterFunc ('test'); 172 printBugNumber (bug); 173 printStatus (summary); 174 testRegExp(statusmessages, patterns, strings, actualmatches, expectedmatches); 175 exitFunc ('test'); 176 } 177