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