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