18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/* ***** BEGIN LICENSE BLOCK *****
28e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* Version: NPL 1.1/GPL 2.0/LGPL 2.1
38e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*
48e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* The contents of this file are subject to the Netscape Public License
58e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* Version 1.1 (the "License"); you may not use this file except in
68e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* compliance with the License. You may obtain a copy of the License at
78e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* http://www.mozilla.org/NPL/
88e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*
98e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* Software distributed under the License is distributed on an "AS IS" basis,
108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* for the specific language governing rights and limitations under the
128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* License.
138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*
148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* The Original Code is JavaScript Engine testing utilities.
158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*
168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* The Initial Developer of the Original Code is Netscape Communications Corp.
178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* Portions created by the Initial Developer are Copyright (C) 2002
188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* the Initial Developer. All Rights Reserved.
198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*
208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* Contributor(s): pschwartau@netscape.com
218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*
228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* Alternatively, the contents of this file may be used under the terms of
238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* either the GNU General Public License Version 2 or later (the "GPL"), or
248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* in which case the provisions of the GPL or the LGPL are applicable instead
268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* of those above. If you wish to allow use of your version of this file only
278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* under the terms of either the GPL or the LGPL, and not to allow others to
288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* use your version of this file under the terms of the NPL, indicate your
298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* decision by deleting the provisions above and replace them with the notice
308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* and other provisions required by the GPL or the LGPL. If you do not delete
318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* the provisions above, a recipient may use your version of this file under
328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* the terms of any one of the NPL, the GPL or the LGPL.
338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*
348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* ***** END LICENSE BLOCK *****
358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*
368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*
378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* Date:    11 Nov 2002
388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* SUMMARY: JS shouldn't crash on extraneous args to str.match(), etc.
398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* See http://bugzilla.mozilla.org/show_bug.cgi?id=179524
408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*
418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* Note that when testing str.replace(), we have to be careful if the first
428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* argument provided to str.replace() is not a regexp object. ECMA-262 says
438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* it is NOT converted to one, unlike the case for str.match(), str.search().
448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*
458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* See http://bugzilla.mozilla.org/show_bug.cgi?id=83293#c21. This means
468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* we have to be careful how we test meta-characters in the first argument
478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* to str.replace(), if that argument is a string -
488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project//-----------------------------------------------------------------------------
508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar UBound = 0;
518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar bug = 179524;
528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar summary = "Don't crash on extraneous arguments to str.match(), etc.";
538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar status = '';
548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar statusitems = [];
558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar actual = '';
568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar actualvalues = [];
578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar expect= '';
588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar expectedvalues = [];
598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstr = 'ABC abc';
628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar re = /z/ig;
638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstatus = inSection(1);
658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectactual = str.match(re);
668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectexpect = null;
678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectaddThis();
688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstatus = inSection(2);
708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectactual = str.match(re, 'i');
718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectexpect = null;
728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectaddThis();
738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstatus = inSection(3);
758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectactual = str.match(re, 'g', '');
768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectexpect = null;
778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectaddThis();
788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstatus = inSection(4);
808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectactual = str.match(re, 'z', new Object(), new Date());
818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectexpect = null;
828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectaddThis();
838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*
868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Now try the same thing with str.search()
878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */
888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstatus = inSection(5);
898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectactual = str.search(re);
908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectexpect = -1;
918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectaddThis();
928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstatus = inSection(6);
948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectactual = str.search(re, 'i');
958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectexpect = -1;
968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectaddThis();
978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstatus = inSection(7);
998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectactual = str.search(re, 'g', '');
1008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectexpect = -1;
1018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectaddThis();
1028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstatus = inSection(8);
1048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectactual = str.search(re, 'z', new Object(), new Date());
1058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectexpect = -1;
1068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectaddThis();
1078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*
1108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Now try the same thing with str.replace()
1118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */
1128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstatus = inSection(9);
1138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectactual = str.replace(re, 'Z');
1148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectexpect = str;
1158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectaddThis();
1168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstatus = inSection(10);
1188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectactual = str.replace(re, 'Z', 'i');
1198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectexpect = str;
1208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectaddThis();
1218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstatus = inSection(11);
1238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectactual = str.replace(re, 'Z', 'g', '');
1248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectexpect = str;
1258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectaddThis();
1268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstatus = inSection(12);
1288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectactual = str.replace(re, 'Z', 'z', new Object(), new Date());
1298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectexpect = str;
1308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectaddThis();
1318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*
1358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Now test the case where str.match()'s first argument is not a regexp object.
1368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * In that case, JS follows ECMA-262 Ed.3 by converting the 1st argument to a
1378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * regexp object using the argument as a regexp pattern, but then extends ECMA
1388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * by taking any optional 2nd argument to be a regexp flag string (e.g.'ig').
1398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
1408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Reference: http://bugzilla.mozilla.org/show_bug.cgi?id=179524#c10
1418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */
1428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstatus = inSection(13);
1438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectactual = str.match('a').toString();
1448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectexpect = str.match(/a/).toString();
1458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectaddThis();
1468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstatus = inSection(14);
1488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectactual = str.match('a', 'i').toString();
1498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectexpect = str.match(/a/i).toString();
1508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectaddThis();
1518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstatus = inSection(15);
1538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectactual = str.match('a', 'ig').toString();
1548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectexpect = str.match(/a/ig).toString();
1558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectaddThis();
1568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstatus = inSection(16);
1588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectactual = str.match('\\s', 'm').toString();
1598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectexpect = str.match(/\s/m).toString();
1608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectaddThis();
1618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*
1648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Now try the previous three cases with extraneous parameters
1658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */
1668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstatus = inSection(17);
1678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectactual = str.match('a', 'i', 'g').toString();
1688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectexpect = str.match(/a/i).toString();
1698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectaddThis();
1708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstatus = inSection(18);
1728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectactual = str.match('a', 'ig', new Object()).toString();
1738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectexpect = str.match(/a/ig).toString();
1748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectaddThis();
1758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstatus = inSection(19);
1778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectactual = str.match('\\s', 'm', 999).toString();
1788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectexpect = str.match(/\s/m).toString();
1798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectaddThis();
1808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*
1838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Try an invalid second parameter (i.e. an invalid regexp flag)
1848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */
1858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstatus = inSection(20);
1868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttry
1878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
1888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  actual = str.match('a', 'z').toString();
1898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  expect = 'SHOULD HAVE FALLEN INTO CATCH-BLOCK!';
1908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  addThis();
1918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
1928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectcatch (e)
1938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
1948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  actual = e instanceof SyntaxError;
1958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  expect = true;
1968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  addThis();
1978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
1988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*
2028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Now test str.search() where the first argument is not a regexp object.
2038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * The same considerations as above apply -
2048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
2058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Reference: http://bugzilla.mozilla.org/show_bug.cgi?id=179524#c16
2068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */
2078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstatus = inSection(21);
2088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectactual = str.search('a');
2098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectexpect = str.search(/a/);
2108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectaddThis();
2118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstatus = inSection(22);
2138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectactual = str.search('a', 'i');
2148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectexpect = str.search(/a/i);
2158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectaddThis();
2168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstatus = inSection(23);
2188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectactual = str.search('a', 'ig');
2198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectexpect = str.search(/a/ig);
2208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectaddThis();
2218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstatus = inSection(24);
2238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectactual = str.search('\\s', 'm');
2248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectexpect = str.search(/\s/m);
2258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectaddThis();
2268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*
2298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Now try the previous three cases with extraneous parameters
2308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */
2318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstatus = inSection(25);
2328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectactual = str.search('a', 'i', 'g');
2338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectexpect = str.search(/a/i);
2348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectaddThis();
2358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstatus = inSection(26);
2378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectactual = str.search('a', 'ig', new Object());
2388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectexpect = str.search(/a/ig);
2398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectaddThis();
2408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstatus = inSection(27);
2428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectactual = str.search('\\s', 'm', 999);
2438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectexpect = str.search(/\s/m);
2448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectaddThis();
2458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*
2488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Try an invalid second parameter (i.e. an invalid regexp flag)
2498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */
2508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstatus = inSection(28);
2518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttry
2528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
2538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  actual = str.search('a', 'z');
2548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  expect = 'SHOULD HAVE FALLEN INTO CATCH-BLOCK!';
2558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  addThis();
2568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
2578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectcatch (e)
2588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
2598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  actual = e instanceof SyntaxError;
2608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  expect = true;
2618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  addThis();
2628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
2638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*
2678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Now test str.replace() where the first argument is not a regexp object.
2688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * The same considerations as above apply, EXCEPT for meta-characters.
2698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * See introduction to testcase above. References:
2708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
2718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * http://bugzilla.mozilla.org/show_bug.cgi?id=179524#c16
2728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * http://bugzilla.mozilla.org/show_bug.cgi?id=83293#c21
2738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */
2748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstatus = inSection(29);
2758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectactual = str.replace('a', 'Z');
2768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectexpect = str.replace(/a/, 'Z');
2778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectaddThis();
2788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstatus = inSection(30);
2808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectactual = str.replace('a', 'Z', 'i');
2818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectexpect = str.replace(/a/i, 'Z');
2828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectaddThis();
2838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstatus = inSection(31);
2858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectactual = str.replace('a', 'Z', 'ig');
2868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectexpect = str.replace(/a/ig, 'Z');
2878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectaddThis();
2888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstatus = inSection(32);
2908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectactual = str.replace('\\s', 'Z', 'm'); //<--- NO!!! No meta-characters 1st arg!
2918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectactual = str.replace(' ', 'Z', 'm');   //<--- Have to do this instead
2928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectexpect = str.replace(/\s/m, 'Z');
2938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectaddThis();
2948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*
2978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Now try the previous three cases with extraneous parameters
2988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */
2998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstatus = inSection(33);
3008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectactual = str.replace('a', 'Z', 'i', 'g');
3018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectexpect = str.replace(/a/i, 'Z');
3028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectaddThis();
3038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstatus = inSection(34);
3058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectactual = str.replace('a', 'Z', 'ig', new Object());
3068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectexpect = str.replace(/a/ig, 'Z');
3078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectaddThis();
3088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstatus = inSection(35);
3108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectactual = str.replace('\\s', 'Z', 'm', 999); //<--- NO meta-characters 1st arg!
3118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectactual = str.replace(' ', 'Z', 'm', 999);   //<--- Have to do this instead
3128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectexpect = str.replace(/\s/m, 'Z');
3138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectaddThis();
3148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*
3178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Try an invalid third parameter (i.e. an invalid regexp flag)
3188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */
3198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstatus = inSection(36);
3208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttry
3218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
3228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  actual = str.replace('a', 'Z', 'z');
3238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  expect = 'SHOULD HAVE FALLEN INTO CATCH-BLOCK!';
3248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  addThis();
3258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
3268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectcatch (e)
3278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
3288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  actual = e instanceof SyntaxError;
3298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  expect = true;
3308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  addThis();
3318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
3328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project//-----------------------------------------------------------------------------
3378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttest();
3388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project//-----------------------------------------------------------------------------
3398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectfunction addThis()
3438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
3448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  statusitems[UBound] = status;
3458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  actualvalues[UBound] = actual;
3468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  expectedvalues[UBound] = expect;
3478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  UBound++;
3488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
3498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectfunction test()
3528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
3538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  enterFunc('test');
3548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  printBugNumber(bug);
3558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  printStatus(summary);
3568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  for (var i=0; i<UBound; i++)
3588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  {
3598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    reportCompare(expectedvalues[i], actualvalues[i], statusitems[i]);
3608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  }
3618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  exitFunc ('test');
3638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
364