1 /* ***** BEGIN LICENSE BLOCK *****
2 * Version: NPL 1.1/GPL 2.0/LGPL 2.1
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/
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
14 * The Original Code is JavaScript Engine testing utilities.
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.
20 * Contributor(s): pschwartau@netscape.com, rogerl@netscape.com
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.
34 * ***** END LICENSE BLOCK *****
38 * SUMMARY: Testing JS RegExp engine against Perl 5 RegExp engine.
39 * Adjust cnLBOUND, cnUBOUND below to restrict which sections are tested.
41 * This test was created by running various patterns and strings through the
42 * Perl 5 RegExp engine. We saved the results below to test the JS engine.
44 * Each of the examples below is a negative test; that is, each produces a
45 * null match in Perl. Thus we set |expectedmatch| = |null| in each section.
47 * NOTE: ECMA/JS and Perl do differ on certain points. We have either commented
48 * out such sections altogether, or modified them to fit what we expect from JS.
52 * - ECMA does support (?: (?= and (?! operators, but doesn't support (?< etc.
54 * - ECMA doesn't support (?(condition)
57 //-----------------------------------------------------------------------------
60 var summary = 'Testing regular expression edge cases';
61 var cnSingleSpace = ' ';
63 var statusmessages = new Array();
65 var patterns = new Array();
67 var strings = new Array();
69 var actualmatches = new Array();
70 var expectedmatch = '';
71 var expectedmatches = new Array();
76 status = inSection(1);
79 actualmatch = string.match(pattern);
83 status = inSection(2);
86 actualmatch = string.match(pattern);
90 status = inSection(3);
93 actualmatch = string.match(pattern);
97 status = inSection(4);
100 actualmatch = string.match(pattern);
101 expectedmatch = null;
104 status = inSection(5);
107 actualmatch = string.match(pattern);
108 expectedmatch = null;
111 status = inSection(6);
112 pattern = /ab{1,}bc/;
114 actualmatch = string.match(pattern);
115 expectedmatch = null;
118 status = inSection(7);
119 pattern = /ab{4,5}bc/;
121 actualmatch = string.match(pattern);
122 expectedmatch = null;
125 status = inSection(8);
128 actualmatch = string.match(pattern);
129 expectedmatch = null;
132 status = inSection(9);
135 actualmatch = string.match(pattern);
136 expectedmatch = null;
139 status = inSection(10);
142 actualmatch = string.match(pattern);
143 expectedmatch = null;
146 status = inSection(11);
149 actualmatch = string.match(pattern);
150 expectedmatch = null;
153 status = inSection(12);
156 actualmatch = string.match(pattern);
157 expectedmatch = null;
160 status = inSection(13);
163 actualmatch = string.match(pattern);
164 expectedmatch = null;
167 status = inSection(14);
170 actualmatch = string.match(pattern);
171 expectedmatch = null;
174 status = inSection(15);
177 actualmatch = string.match(pattern);
178 expectedmatch = null;
181 status = inSection(16);
184 actualmatch = string.match(pattern);
185 expectedmatch = null;
188 status = inSection(17);
191 actualmatch = string.match(pattern);
192 expectedmatch = null;
195 status = inSection(18);
198 actualmatch = string.match(pattern);
199 expectedmatch = null;
202 status = inSection(19);
205 actualmatch = string.match(pattern);
206 expectedmatch = null;
209 status = inSection(20);
212 actualmatch = string.match(pattern);
213 expectedmatch = null;
216 status = inSection(21);
219 actualmatch = string.match(pattern);
220 expectedmatch = null;
223 status = inSection(22);
226 actualmatch = string.match(pattern);
227 expectedmatch = null;
230 status = inSection(23);
233 actualmatch = string.match(pattern);
234 expectedmatch = null;
237 status = inSection(24);
240 actualmatch = string.match(pattern);
241 expectedmatch = null;
244 status = inSection(25);
247 actualmatch = string.match(pattern);
248 expectedmatch = null;
251 status = inSection(26);
254 actualmatch = string.match(pattern);
255 expectedmatch = null;
258 status = inSection(27);
261 actualmatch = string.match(pattern);
262 expectedmatch = null;
265 status = inSection(28);
268 actualmatch = string.match(pattern);
269 expectedmatch = null;
272 status = inSection(29);
275 actualmatch = string.match(pattern);
276 expectedmatch = null;
279 status = inSection(30);
282 actualmatch = string.match(pattern);
283 expectedmatch = null;
286 status = inSection(31);
289 actualmatch = string.match(pattern);
290 expectedmatch = null;
293 status = inSection(32);
296 actualmatch = string.match(pattern);
297 expectedmatch = null;
300 status = inSection(33);
303 actualmatch = string.match(pattern);
304 expectedmatch = null;
307 status = inSection(34);
310 actualmatch = string.match(pattern);
311 expectedmatch = null;
314 status = inSection(35);
315 pattern = /^(ab|cd)e/;
317 actualmatch = string.match(pattern);
318 expectedmatch = null;
321 status = inSection(36);
322 pattern = /a[bcd]+dcdcde/;
324 actualmatch = string.match(pattern);
325 expectedmatch = null;
328 status = inSection(37);
329 pattern = /(bc+d$|ef*g.|h?i(j|k))/;
331 actualmatch = string.match(pattern);
332 expectedmatch = null;
335 status = inSection(38);
336 pattern = /(bc+d$|ef*g.|h?i(j|k))/;
338 actualmatch = string.match(pattern);
339 expectedmatch = null;
342 status = inSection(39);
345 actualmatch = string.match(pattern);
346 expectedmatch = null;
349 // MODIFIED - ECMA has different rules for paren contents.
350 status = inSection(40);
353 actualmatch = string.match(pattern);
354 //expectedmatch = null;
355 expectedmatch = Array("", undefined);
358 // MODIFIED - ECMA has different rules for paren contents.
359 status = inSection(41);
360 pattern = /((\3|b)\2(a)x)+/;
361 string = 'aaxabxbaxbbx';
362 actualmatch = string.match(pattern);
363 //expectedmatch = null;
364 expectedmatch = Array("ax", "ax", "", "a");
367 status = inSection(42);
370 actualmatch = string.match(pattern);
371 expectedmatch = null;
374 status = inSection(43);
377 actualmatch = string.match(pattern);
378 expectedmatch = null;
381 status = inSection(44);
384 actualmatch = string.match(pattern);
385 expectedmatch = null;
388 status = inSection(45);
391 actualmatch = string.match(pattern);
392 expectedmatch = null;
395 status = inSection(46);
398 actualmatch = string.match(pattern);
399 expectedmatch = null;
402 status = inSection(47);
403 pattern = /ab{1,}bc/i;
405 actualmatch = string.match(pattern);
406 expectedmatch = null;
409 status = inSection(48);
410 pattern = /ab{4,5}?bc/i;
412 actualmatch = string.match(pattern);
413 expectedmatch = null;
416 status = inSection(49);
419 actualmatch = string.match(pattern);
420 expectedmatch = null;
423 status = inSection(50);
426 actualmatch = string.match(pattern);
427 expectedmatch = null;
430 status = inSection(51);
433 actualmatch = string.match(pattern);
434 expectedmatch = null;
437 status = inSection(52);
440 actualmatch = string.match(pattern);
441 expectedmatch = null;
444 status = inSection(53);
447 actualmatch = string.match(pattern);
448 expectedmatch = null;
451 status = inSection(54);
452 pattern = /a[b-d]e/i;
454 actualmatch = string.match(pattern);
455 expectedmatch = null;
458 status = inSection(55);
459 pattern = /a[^bc]d/i;
461 actualmatch = string.match(pattern);
462 expectedmatch = null;
465 status = inSection(56);
466 pattern = /a[^-b]c/i;
468 actualmatch = string.match(pattern);
469 expectedmatch = null;
472 status = inSection(57);
473 pattern = /a[^]b]c/i;
475 actualmatch = string.match(pattern);
476 expectedmatch = null;
479 status = inSection(58);
482 actualmatch = string.match(pattern);
483 expectedmatch = null;
486 status = inSection(59);
487 pattern = /^(ab|cd)e/i;
489 actualmatch = string.match(pattern);
490 expectedmatch = null;
493 status = inSection(60);
494 pattern = /a[bcd]+dcdcde/i;
496 actualmatch = string.match(pattern);
497 expectedmatch = null;
500 status = inSection(61);
501 pattern = /(bc+d$|ef*g.|h?i(j|k))/i;
503 actualmatch = string.match(pattern);
504 expectedmatch = null;
507 status = inSection(62);
508 pattern = /(bc+d$|ef*g.|h?i(j|k))/i;
510 actualmatch = string.match(pattern);
511 expectedmatch = null;
514 status = inSection(63);
517 actualmatch = string.match(pattern);
518 expectedmatch = null;
521 status = inSection(64);
522 pattern = /^(a\1?){4}$/;
523 string = 'aaaaaaaaa';
524 actualmatch = string.match(pattern);
525 expectedmatch = null;
528 status = inSection(65);
529 pattern = /^(a\1?){4}$/;
530 string = 'aaaaaaaaaaa';
531 actualmatch = string.match(pattern);
532 expectedmatch = null;
535 /* ECMA doesn't support (?(
536 status = inSection(66);
537 pattern = /^(a(?(1)\1)){4}$/;
538 string = 'aaaaaaaaa';
539 actualmatch = string.match(pattern);
540 expectedmatch = null;
543 status = inSection(67);
544 pattern = /^(a(?(1)\1)){4}$/;
545 string = 'aaaaaaaaaaa';
546 actualmatch = string.match(pattern);
547 expectedmatch = null;
551 /* ECMA doesn't support (?<
552 status = inSection(68);
555 actualmatch = string.match(pattern);
556 expectedmatch = null;
559 status = inSection(69);
562 actualmatch = string.match(pattern);
563 expectedmatch = null;
566 status = inSection(70);
569 actualmatch = string.match(pattern);
570 expectedmatch = null;
574 /* ECMA doesn't support (?(condition)
575 status = inSection(71);
576 pattern = /(?:(?i)a)b/;
578 actualmatch = string.match(pattern);
579 expectedmatch = null;
582 status = inSection(72);
583 pattern = /((?i)a)b/;
585 actualmatch = string.match(pattern);
586 expectedmatch = null;
589 status = inSection(73);
592 actualmatch = string.match(pattern);
593 expectedmatch = null;
596 status = inSection(74);
597 pattern = /((?i:a))b/;
599 actualmatch = string.match(pattern);
600 expectedmatch = null;
603 status = inSection(75);
604 pattern = /(?:(?-i)a)b/i;
606 actualmatch = string.match(pattern);
607 expectedmatch = null;
610 status = inSection(76);
611 pattern = /((?-i)a)b/i;
613 actualmatch = string.match(pattern);
614 expectedmatch = null;
617 status = inSection(77);
618 pattern = /(?:(?-i)a)b/i;
620 actualmatch = string.match(pattern);
621 expectedmatch = null;
624 status = inSection(78);
625 pattern = /((?-i)a)b/i;
627 actualmatch = string.match(pattern);
628 expectedmatch = null;
631 status = inSection(79);
632 pattern = /(?-i:a)b/i;
634 actualmatch = string.match(pattern);
635 expectedmatch = null;
638 status = inSection(80);
639 pattern = /((?-i:a))b/i;
641 actualmatch = string.match(pattern);
642 expectedmatch = null;
645 status = inSection(81);
646 pattern = /(?-i:a)b/i;
648 actualmatch = string.match(pattern);
649 expectedmatch = null;
652 status = inSection(82);
653 pattern = /((?-i:a))b/i;
655 actualmatch = string.match(pattern);
656 expectedmatch = null;
659 status = inSection(83);
660 pattern = /((?-i:a.))b/i;
662 actualmatch = string.match(pattern);
663 expectedmatch = null;
666 status = inSection(84);
667 pattern = /((?s-i:a.))b/i;
669 actualmatch = string.match(pattern);
670 expectedmatch = null;
674 /* ECMA doesn't support (?<
675 status = inSection(85);
676 pattern = /(?<![cd])b/;
678 actualmatch = string.match(pattern);
679 expectedmatch = null;
682 status = inSection(86);
683 pattern = /(?<!(c|d))b/;
685 actualmatch = string.match(pattern);
686 expectedmatch = null;
690 status = inSection(87);
691 pattern = /^(?:a?b?)*$/;
693 actualmatch = string.match(pattern);
694 expectedmatch = null;
697 status = inSection(88);
699 string = 'a\nb\nc\n';
700 actualmatch = string.match(pattern);
701 expectedmatch = null;
704 status = inSection(89);
706 string = 'a\nb\nc\n';
707 actualmatch = string.match(pattern);
708 expectedmatch = null;
711 /* ECMA doesn't support (?(
712 status = inSection(90);
713 pattern = /(?(1)a|b)/;
715 actualmatch = string.match(pattern);
716 expectedmatch = null;
719 status = inSection(91);
720 pattern = /(x)?(?(1)a|b)/;
722 actualmatch = string.match(pattern);
723 expectedmatch = null;
726 status = inSection(92);
727 pattern = /()(?(1)b|a)/;
729 actualmatch = string.match(pattern);
730 expectedmatch = null;
733 status = inSection(93);
734 pattern = /^(\()?blah(?(1)(\)))$/;
736 actualmatch = string.match(pattern);
737 expectedmatch = null;
740 status = inSection(94);
741 pattern = /^(\()?blah(?(1)(\)))$/;
743 actualmatch = string.match(pattern);
744 expectedmatch = null;
747 status = inSection(95);
748 pattern = /^(\(+)?blah(?(1)(\)))$/;
750 actualmatch = string.match(pattern);
751 expectedmatch = null;
754 status = inSection(96);
755 pattern = /^(\(+)?blah(?(1)(\)))$/;
757 actualmatch = string.match(pattern);
758 expectedmatch = null;
761 status = inSection(97);
762 pattern = /(?(?{0})a|b)/;
764 actualmatch = string.match(pattern);
765 expectedmatch = null;
768 status = inSection(98);
769 pattern = /(?(?{1})b|a)/;
771 actualmatch = string.match(pattern);
772 expectedmatch = null;
775 status = inSection(99);
776 pattern = /(?(?!a)a|b)/;
778 actualmatch = string.match(pattern);
779 expectedmatch = null;
782 status = inSection(100);
783 pattern = /(?(?=a)b|a)/;
785 actualmatch = string.match(pattern);
786 expectedmatch = null;
790 status = inSection(101);
791 pattern = /^(?=(a+?))\1ab/;
793 actualmatch = string.match(pattern);
794 expectedmatch = null;
797 status = inSection(102);
798 pattern = /^(?=(a+?))\1ab/;
800 actualmatch = string.match(pattern);
801 expectedmatch = null;
804 status = inSection(103);
805 pattern = /([\w:]+::)?(\w+)$/;
807 actualmatch = string.match(pattern);
808 expectedmatch = null;
811 status = inSection(104);
812 pattern = /([\w:]+::)?(\w+)$/;
814 actualmatch = string.match(pattern);
815 expectedmatch = null;
818 status = inSection(105);
821 actualmatch = string.match(pattern);
822 expectedmatch = null;
825 status = inSection(106);
828 actualmatch = string.match(pattern);
829 expectedmatch = null;
832 status = inSection(107);
835 actualmatch = string.match(pattern);
836 expectedmatch = null;
839 status = inSection(108);
842 actualmatch = string.match(pattern);
843 expectedmatch = null;
846 status = inSection(109);
849 actualmatch = string.match(pattern);
850 expectedmatch = null;
853 status = inSection(110);
856 actualmatch = string.match(pattern);
857 expectedmatch = null;
860 status = inSection(111);
863 actualmatch = string.match(pattern);
864 expectedmatch = null;
867 status = inSection(112);
870 actualmatch = string.match(pattern);
871 expectedmatch = null;
874 status = inSection(113);
877 actualmatch = string.match(pattern);
878 expectedmatch = null;
881 status = inSection(114);
884 actualmatch = string.match(pattern);
885 expectedmatch = null;
888 status = inSection(115);
891 actualmatch = string.match(pattern);
892 expectedmatch = null;
895 status = inSection(116);
898 actualmatch = string.match(pattern);
899 expectedmatch = null;
902 status = inSection(117);
905 actualmatch = string.match(pattern);
906 expectedmatch = null;
909 status = inSection(118);
912 actualmatch = string.match(pattern);
913 expectedmatch = null;
916 status = inSection(119);
919 actualmatch = string.match(pattern);
920 expectedmatch = null;
923 status = inSection(120);
926 actualmatch = string.match(pattern);
927 expectedmatch = null;
930 status = inSection(121);
933 actualmatch = string.match(pattern);
934 expectedmatch = null;
937 status = inSection(122);
940 actualmatch = string.match(pattern);
941 expectedmatch = null;
944 status = inSection(123);
947 actualmatch = string.match(pattern);
948 expectedmatch = null;
951 status = inSection(124);
954 actualmatch = string.match(pattern);
955 expectedmatch = null;
958 status = inSection(125);
961 actualmatch = string.match(pattern);
962 expectedmatch = null;
965 status = inSection(126);
968 actualmatch = string.match(pattern);
969 expectedmatch = null;
972 status = inSection(127);
975 actualmatch = string.match(pattern);
976 expectedmatch = null;
979 status = inSection(128);
982 actualmatch = string.match(pattern);
983 expectedmatch = null;
986 status = inSection(129);
989 actualmatch = string.match(pattern);
990 expectedmatch = null;
993 status = inSection(130);
996 actualmatch = string.match(pattern);
997 expectedmatch = null;
1000 status = inSection(131);
1003 actualmatch = string.match(pattern);
1004 expectedmatch = null;
1007 status = inSection(132);
1010 actualmatch = string.match(pattern);
1011 expectedmatch = null;
1014 status = inSection(133);
1017 actualmatch = string.match(pattern);
1018 expectedmatch = null;
1021 status = inSection(134);
1024 actualmatch = string.match(pattern);
1025 expectedmatch = null;
1028 status = inSection(135);
1031 actualmatch = string.match(pattern);
1032 expectedmatch = null;
1035 status = inSection(136);
1038 actualmatch = string.match(pattern);
1039 expectedmatch = null;
1042 status = inSection(137);
1045 actualmatch = string.match(pattern);
1046 expectedmatch = null;
1049 status = inSection(138);
1052 actualmatch = string.match(pattern);
1053 expectedmatch = null;
1056 status = inSection(139);
1059 actualmatch = string.match(pattern);
1060 expectedmatch = null;
1063 status = inSection(140);
1066 actualmatch = string.match(pattern);
1067 expectedmatch = null;
1070 status = inSection(141);
1073 actualmatch = string.match(pattern);
1074 expectedmatch = null;
1077 status = inSection(142);
1080 actualmatch = string.match(pattern);
1081 expectedmatch = null;
1084 status = inSection(143);
1087 actualmatch = string.match(pattern);
1088 expectedmatch = null;
1091 status = inSection(144);
1094 actualmatch = string.match(pattern);
1095 expectedmatch = null;
1098 status = inSection(145);
1101 actualmatch = string.match(pattern);
1102 expectedmatch = null;
1105 status = inSection(146);
1108 actualmatch = string.match(pattern);
1109 expectedmatch = null;
1112 status = inSection(147);
1115 actualmatch = string.match(pattern);
1116 expectedmatch = null;
1119 status = inSection(148);
1122 actualmatch = string.match(pattern);
1123 expectedmatch = null;
1126 status = inSection(149);
1129 actualmatch = string.match(pattern);
1130 expectedmatch = null;
1133 status = inSection(150);
1136 actualmatch = string.match(pattern);
1137 expectedmatch = null;
1140 status = inSection(151);
1143 actualmatch = string.match(pattern);
1144 expectedmatch = null;
1147 status = inSection(152);
1150 actualmatch = string.match(pattern);
1151 expectedmatch = null;
1154 status = inSection(153);
1157 actualmatch = string.match(pattern);
1158 expectedmatch = null;
1161 status = inSection(154);
1164 actualmatch = string.match(pattern);
1165 expectedmatch = null;
1168 status = inSection(155);
1171 actualmatch = string.match(pattern);
1172 expectedmatch = null;
1175 status = inSection(156);
1178 actualmatch = string.match(pattern);
1179 expectedmatch = null;
1182 status = inSection(157);
1185 actualmatch = string.match(pattern);
1186 expectedmatch = null;
1189 status = inSection(158);
1192 actualmatch = string.match(pattern);
1193 expectedmatch = null;
1196 status = inSection(159);
1199 actualmatch = string.match(pattern);
1200 expectedmatch = null;
1203 status = inSection(160);
1206 actualmatch = string.match(pattern);
1207 expectedmatch = null;
1210 status = inSection(161);
1213 actualmatch = string.match(pattern);
1214 expectedmatch = null;
1217 status = inSection(162);
1220 actualmatch = string.match(pattern);
1221 expectedmatch = null;
1224 status = inSection(163);
1227 actualmatch = string.match(pattern);
1228 expectedmatch = null;
1231 status = inSection(164);
1234 actualmatch = string.match(pattern);
1235 expectedmatch = null;
1238 status = inSection(165);
1241 actualmatch = string.match(pattern);
1242 expectedmatch = null;
1245 status = inSection(166);
1248 actualmatch = string.match(pattern);
1249 expectedmatch = null;
1252 status = inSection(167);
1255 actualmatch = string.match(pattern);
1256 expectedmatch = null;
1259 status = inSection(168);
1262 actualmatch = string.match(pattern);
1263 expectedmatch = null;
1266 status = inSection(169);
1269 actualmatch = string.match(pattern);
1270 expectedmatch = null;
1273 status = inSection(170);
1276 actualmatch = string.match(pattern);
1277 expectedmatch = null;
1280 status = inSection(171);
1283 actualmatch = string.match(pattern);
1284 expectedmatch = null;
1287 status = inSection(172);
1290 actualmatch = string.match(pattern);
1291 expectedmatch = null;
1294 status = inSection(173);
1297 actualmatch = string.match(pattern);
1298 expectedmatch = null;
1301 status = inSection(174);
1304 actualmatch = string.match(pattern);
1305 expectedmatch = null;
1308 status = inSection(175);
1311 actualmatch = string.match(pattern);
1312 expectedmatch = null;
1315 status = inSection(176);
1318 actualmatch = string.match(pattern);
1319 expectedmatch = null;
1322 status = inSection(177);
1325 actualmatch = string.match(pattern);
1326 expectedmatch = null;
1329 status = inSection(178);
1332 actualmatch = string.match(pattern);
1333 expectedmatch = null;
1336 status = inSection(179);
1339 actualmatch = string.match(pattern);
1340 expectedmatch = null;
1343 status = inSection(180);
1346 actualmatch = string.match(pattern);
1347 expectedmatch = null;
1350 status = inSection(181);
1353 actualmatch = string.match(pattern);
1354 expectedmatch = null;
1357 status = inSection(182);
1360 actualmatch = string.match(pattern);
1361 expectedmatch = null;
1364 status = inSection(183);
1367 actualmatch = string.match(pattern);
1368 expectedmatch = null;
1371 status = inSection(184);
1374 actualmatch = string.match(pattern);
1375 expectedmatch = null;
1378 status = inSection(185);
1381 actualmatch = string.match(pattern);
1382 expectedmatch = null;
1385 status = inSection(186);
1388 actualmatch = string.match(pattern);
1389 expectedmatch = null;
1392 status = inSection(187);
1395 actualmatch = string.match(pattern);
1396 expectedmatch = null;
1399 status = inSection(188);
1402 actualmatch = string.match(pattern);
1403 expectedmatch = null;
1406 status = inSection(189);
1409 actualmatch = string.match(pattern);
1410 expectedmatch = null;
1413 status = inSection(190);
1416 actualmatch = string.match(pattern);
1417 expectedmatch = null;
1420 status = inSection(191);
1423 actualmatch = string.match(pattern);
1424 expectedmatch = null;
1427 status = inSection(192);
1430 actualmatch = string.match(pattern);
1431 expectedmatch = null;
1434 status = inSection(193);
1437 actualmatch = string.match(pattern);
1438 expectedmatch = null;
1441 status = inSection(194);
1444 actualmatch = string.match(pattern);
1445 expectedmatch = null;
1448 status = inSection(195);
1451 actualmatch = string.match(pattern);
1452 expectedmatch = null;
1455 status = inSection(196);
1457 string = 'abb\nb\n';
1458 actualmatch = string.match(pattern);
1459 expectedmatch = null;
1462 status = inSection(197);
1464 string = 'abb\nb\n';
1465 actualmatch = string.match(pattern);
1466 expectedmatch = null;
1469 status = inSection(198);
1471 string = 'abb\nb\n';
1472 actualmatch = string.match(pattern);
1473 expectedmatch = null;
1476 status = inSection(199);
1478 string = 'b\nabb\n';
1479 actualmatch = string.match(pattern);
1480 expectedmatch = null;
1483 status = inSection(200);
1485 string = 'abb\nb\n';
1486 actualmatch = string.match(pattern);
1487 expectedmatch = null;
1490 status = inSection(201);
1492 string = 'b\nabb\n';
1493 actualmatch = string.match(pattern);
1494 expectedmatch = null;
1497 status = inSection(202);
1500 actualmatch = string.match(pattern);
1501 expectedmatch = null;
1504 status = inSection(203);
1507 actualmatch = string.match(pattern);
1508 expectedmatch = null;
1511 status = inSection(204);
1514 actualmatch = string.match(pattern);
1515 expectedmatch = null;
1518 status = inSection(205);
1521 actualmatch = string.match(pattern);
1522 expectedmatch = null;
1525 status = inSection(206);
1528 actualmatch = string.match(pattern);
1529 expectedmatch = null;
1532 status = inSection(207);
1535 actualmatch = string.match(pattern);
1536 expectedmatch = null;
1539 status = inSection(208);
1542 actualmatch = string.match(pattern);
1543 expectedmatch = null;
1546 status = inSection(209);
1549 actualmatch = string.match(pattern);
1550 expectedmatch = null;
1553 status = inSection(210);
1556 actualmatch = string.match(pattern);
1557 expectedmatch = null;
1560 status = inSection(211);
1563 actualmatch = string.match(pattern);
1564 expectedmatch = null;
1567 status = inSection(212);
1570 actualmatch = string.match(pattern);
1571 expectedmatch = null;
1574 status = inSection(213);
1577 actualmatch = string.match(pattern);
1578 expectedmatch = null;
1581 status = inSection(214);
1584 actualmatch = string.match(pattern);
1585 expectedmatch = null;
1588 status = inSection(215);
1591 actualmatch = string.match(pattern);
1592 expectedmatch = null;
1595 status = inSection(216);
1598 actualmatch = string.match(pattern);
1599 expectedmatch = null;
1602 status = inSection(217);
1605 actualmatch = string.match(pattern);
1606 expectedmatch = null;
1609 status = inSection(218);
1612 actualmatch = string.match(pattern);
1613 expectedmatch = null;
1616 status = inSection(219);
1619 actualmatch = string.match(pattern);
1620 expectedmatch = null;
1623 status = inSection(220);
1626 actualmatch = string.match(pattern);
1627 expectedmatch = null;
1630 status = inSection(221);
1633 actualmatch = string.match(pattern);
1634 expectedmatch = null;
1637 status = inSection(222);
1640 actualmatch = string.match(pattern);
1641 expectedmatch = null;
1644 status = inSection(223);
1647 actualmatch = string.match(pattern);
1648 expectedmatch = null;
1651 status = inSection(224);
1654 actualmatch = string.match(pattern);
1655 expectedmatch = null;
1658 status = inSection(225);
1661 actualmatch = string.match(pattern);
1662 expectedmatch = null;
1665 status = inSection(226);
1668 actualmatch = string.match(pattern);
1669 expectedmatch = null;
1672 status = inSection(227);
1675 actualmatch = string.match(pattern);
1676 expectedmatch = null;
1679 status = inSection(228);
1682 actualmatch = string.match(pattern);
1683 expectedmatch = null;
1686 status = inSection(229);
1689 actualmatch = string.match(pattern);
1690 expectedmatch = null;
1693 status = inSection(230);
1696 actualmatch = string.match(pattern);
1697 expectedmatch = null;
1700 status = inSection(231);
1703 actualmatch = string.match(pattern);
1704 expectedmatch = null;
1707 status = inSection(232);
1710 actualmatch = string.match(pattern);
1711 expectedmatch = null;
1714 status = inSection(233);
1717 actualmatch = string.match(pattern);
1718 expectedmatch = null;
1721 status = inSection(234);
1724 actualmatch = string.match(pattern);
1725 expectedmatch = null;
1728 status = inSection(235);
1731 actualmatch = string.match(pattern);
1732 expectedmatch = null;
1735 status = inSection(236);
1738 actualmatch = string.match(pattern);
1739 expectedmatch = null;
1742 status = inSection(237);
1745 actualmatch = string.match(pattern);
1746 expectedmatch = null;
1749 status = inSection(238);
1750 pattern = /a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz/;
1752 actualmatch = string.match(pattern);
1753 expectedmatch = null;
1756 status = inSection(239);
1759 actualmatch = string.match(pattern);
1760 expectedmatch = null;
1763 status = inSection(240);
1764 pattern = /\.c(pp|xx|c)?$/i;
1766 actualmatch = string.match(pattern);
1767 expectedmatch = null;
1770 status = inSection(241);
1771 pattern = /^([a-z]:)/;
1773 actualmatch = string.match(pattern);
1774 expectedmatch = null;
1777 status = inSection(242);
1778 pattern = /(\w)?(abc)\1b/;
1780 actualmatch = string.match(pattern);
1781 expectedmatch = null;
1784 /* ECMA doesn't support (?(
1785 status = inSection(243);
1786 pattern = /^(a)?(?(1)a|b)+$/;
1788 actualmatch = string.match(pattern);
1789 expectedmatch = null;
1795 //-----------------------------------------------------------------------------
1797 //-----------------------------------------------------------------------------
1803 if(omitCurrentSection())
1806 statusmessages[i] = status;
1807 patterns[i] = pattern;
1808 strings[i] = string;
1809 actualmatches[i] = actualmatch;
1810 expectedmatches[i] = expectedmatch;
1815 function omitCurrentSection()
1819 // current section number is in global status variable
1820 var n = status.match(/(\d+)/)[1];
1821 return ((n < cnLBOUND) || (n > cnUBOUND));
1833 printBugNumber (bug);
1834 printStatus (summary);
1835 testRegExp(statusmessages, patterns, strings, actualmatches, expectedmatches);