1/* 2* The contents of this file are subject to the Netscape Public 3* License Version 1.1 (the "License"); you may not use this file 4* except in compliance with the License. You may obtain a copy of 5* the License at http://www.mozilla.org/NPL/ 6* 7* Software distributed under the License is distributed on an "AS IS" 8* basis, WITHOUT WARRANTY OF ANY KIND, either expressed 9* or implied. See the License for the specific language governing 10* rights and limitations under the License. 11* 12* The Original Code is mozilla.org code. 13* 14* The Initial Developer of the Original Code is Netscape 15* Communications Corporation. Portions created by Netscape are 16* Copyright (C) 1998 Netscape Communications Corporation. 17* All Rights Reserved. 18* 19* Contributor(s): pschwartau@netscape.com 20* Date: 06 February 2001 21* 22* SUMMARY: Arose from Bugzilla bug 67773: 23* "Regular subexpressions followed by + failing to run to completion" 24* 25* See http://bugzilla.mozilla.org/show_bug.cgi?id=67773 26* See http://bugzilla.mozilla.org/show_bug.cgi?id=69989 27*/ 28//------------------------------------------------------------------------------------------------- 29var i = 0; 30var bug = 67773; 31var summary = 'Testing regular subexpressions followed by ? or +\n'; 32var cnSingleSpace = ' '; 33var status = ''; 34var statusmessages = new Array(); 35var pattern = ''; 36var patterns = new Array(); 37var string = ''; 38var strings = new Array(); 39var actualmatch = ''; 40var actualmatches = new Array(); 41var expectedmatch = ''; 42var expectedmatches = new Array(); 43 44 45pattern = /^(\S+)?( ?)(B+)$/; //single space before second ? character 46 status = inSection(1); 47 string = 'AAABBB AAABBB '; //single space at middle and at end - 48 actualmatch = string.match(pattern); 49 expectedmatch = null; 50 addThis(); 51 52 status = inSection(2); 53 string = 'AAABBB BBB'; //single space in the middle 54 actualmatch = string.match(pattern); 55 expectedmatch = Array(string, 'AAABBB', cnSingleSpace, 'BBB'); 56 addThis(); 57 58 status = inSection(3); 59 string = 'AAABBB AAABBB'; //single space in the middle 60 actualmatch = string.match(pattern); 61 expectedmatch = null; 62 addThis(); 63 64 65pattern = /^(A+B)+$/; 66 status = inSection(4); 67 string = 'AABAAB'; 68 actualmatch = string.match(pattern); 69 expectedmatch = Array(string, 'AAB'); 70 addThis(); 71 72 status = inSection(5); 73 string = 'ABAABAAAAAAB'; 74 actualmatch = string.match(pattern); 75 expectedmatch = Array(string, 'AAAAAAB'); 76 addThis(); 77 78 status = inSection(6); 79 string = 'ABAABAABAB'; 80 actualmatch = string.match(pattern); 81 expectedmatch = Array(string, 'AB'); 82 addThis(); 83 84 status = inSection(7); 85 string = 'ABAABAABABB'; 86 actualmatch = string.match(pattern); 87 expectedmatch = null; // because string doesn't match at end 88 addThis(); 89 90 91pattern = /^(A+1)+$/; 92 status = inSection(8); 93 string = 'AA1AA1'; 94 actualmatch = string.match(pattern); 95 expectedmatch = Array(string, 'AA1'); 96 addThis(); 97 98 99pattern = /^(\w+\-)+$/; 100 status = inSection(9); 101 string = ''; 102 actualmatch = string.match(pattern); 103 expectedmatch = null; 104 addThis(); 105 106 status = inSection(10); 107 string = 'bla-'; 108 actualmatch = string.match(pattern); 109 expectedmatch = Array(string, string); 110 addThis(); 111 112 status = inSection(11); 113 string = 'bla-bla'; // hyphen missing at end - 114 actualmatch = string.match(pattern); 115 expectedmatch = null; //because string doesn't match at end 116 addThis(); 117 118 status = inSection(12); 119 string = 'bla-bla-'; 120 actualmatch = string.match(pattern); 121 expectedmatch = Array(string, 'bla-'); 122 addThis(); 123 124 125pattern = /^(\S+)+(A+)$/; 126 status = inSection(13); 127 string = 'asdldflkjAAA'; 128 actualmatch = string.match(pattern); 129 expectedmatch = Array(string, 'asdldflkjAA', 'A'); 130 addThis(); 131 132 status = inSection(14); 133 string = 'asdldflkj AAA'; // space in middle 134 actualmatch = string.match(pattern); 135 expectedmatch = null; //because of the space 136 addThis(); 137 138 139pattern = /^(\S+)+(\d+)$/; 140 status = inSection(15); 141 string = 'asdldflkj122211'; 142 actualmatch = string.match(pattern); 143 expectedmatch = Array(string, 'asdldflkj12221', '1'); 144 addThis(); 145 146 status = inSection(16); 147 string = 'asdldflkj1111111aaa1'; 148 actualmatch = string.match(pattern); 149 expectedmatch = Array(string, 'asdldflkj1111111aaa', '1'); 150 addThis(); 151 152 153/* 154 * This one comes from Stephen Ostermiller. 155 * See http://bugzilla.mozilla.org/show_bug.cgi?id=69989 156 */ 157pattern = /^[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)+$/; 158 status = inSection(17); 159 string = 'some.host.tld'; 160 actualmatch = string.match(pattern); 161 expectedmatch = Array(string, '.tld', '.'); 162 addThis(); 163 164 165 166//------------------------------------------------------------------------------------------------- 167test(); 168//------------------------------------------------------------------------------------------------- 169 170 171 172function addThis() 173{ 174 statusmessages[i] = status; 175 patterns[i] = pattern; 176 strings[i] = string; 177 actualmatches[i] = actualmatch; 178 expectedmatches[i] = expectedmatch; 179 i++; 180} 181 182 183function test() 184{ 185 enterFunc ('test'); 186 printBugNumber (bug); 187 printStatus (summary); 188 testRegExp(statusmessages, patterns, strings, actualmatches, expectedmatches); 189 exitFunc ('test'); 190} 191