18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
28e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/* ***** BEGIN LICENSE BLOCK *****
38e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Version: MPL 1.1/GPL 2.0/LGPL 2.1
48e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
58e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * The contents of this file are subject to the Mozilla Public License Version
68e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 1.1 (the "License"); you may not use this file except in compliance with
78e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * the License. You may obtain a copy of the License at
88e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * http://www.mozilla.org/MPL/
98e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Software distributed under the License is distributed on an "AS IS" basis,
118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * for the specific language governing rights and limitations under the
138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * License.
148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * The Original Code is JavaScript Engine testing utilities.
168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * The Initial Developer of the Original Code is
188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Mozilla Foundation.
198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Portions created by the Initial Developer are Copyright (C) 2005
208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * the Initial Developer. All Rights Reserved.
218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Contributor(s): Mike Shaver
238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *                 Bob Clary
248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Alternatively, the contents of this file may be used under the terms of
268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * either the GNU General Public License Version 2 or later (the "GPL"), or
278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * in which case the provisions of the GPL or the LGPL are applicable instead
298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * of those above. If you wish to allow use of your version of this file only
308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * under the terms of either the GPL or the LGPL, and not to allow others to
318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * use your version of this file under the terms of the MPL, indicate your
328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * decision by deleting the provisions above and replace them with the notice
338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * and other provisions required by the GPL or the LGPL. If you do not delete
348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * the provisions above, a recipient may use your version of this file under
358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * the terms of any one of the MPL, the GPL or the LGPL.
368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * ***** END LICENSE BLOCK ***** */
388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project//-----------------------------------------------------------------------------
398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar bug = 290592;
408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar summary = 'Array extras: forEach, indexOf, filter, map';
418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar actual = '';
428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar expect = '';
438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectprintBugNumber (bug);
458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectprintStatus (summary);
468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// Utility functions
488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectfunction identity(v, index, array)
508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  reportCompare(v, array[index], 'identity: check callback argument consistency');
528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  return v;
538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectfunction mutate(v, index, array)
568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  reportCompare(v, array[index], 'mutate: check callback argument consistency');
588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  if (index == 0)
598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  {
608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    array[1] = 'mutated';
618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    delete array[2];
628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    array.push('not visited');
638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  }
648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  return v;
658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectfunction mutateForEach(v, index, array)
688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  reportCompare(v, array[index], 'mutateForEach: check callback argument consistency');
708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  if (index == 0)
718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  {
728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    array[1] = 'mutated';
738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    delete array[2];
748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    array.push('not visited');
758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  }
768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  actual += v + ',';
778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectfunction makeUpperCase(v, index, array)
808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  reportCompare(v, array[index], 'makeUpperCase: check callback argument consistency');
828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  try
838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  {
848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return v.toUpperCase();
858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  }
868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  catch(e)
878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  {
888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  }
898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  return v;
908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectfunction concat(v, index, array)
948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  reportCompare(v, array[index], 'concat: check callback argument consistency');
968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  actual += v + ',';
978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectfunction isUpperCase(v, index, array)
1018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
1028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  reportCompare(v, array[index], 'isUpperCase: check callback argument consistency');
1038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  try
1048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  {
1058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return v == v.toUpperCase();
1068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  }
1078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  catch(e)
1088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  {
1098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  }
1108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  return false;
1118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
1128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectfunction isString(v, index, array)
1148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
1158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  reportCompare(v, array[index], 'isString: check callback argument consistency');
1168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  return typeof v == 'string';
1178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
1188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// callback object.
1218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectfunction ArrayCallback(state)
1228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
1238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  this.state = state;
1248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
1258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectArrayCallback.prototype.makeUpperCase = function (v, index, array)
1278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
1288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  reportCompare(v, array[index], 'ArrayCallback.prototype.makeUpperCase: check callback argument consistency');
1298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  try
1308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  {
1318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return this.state ? v.toUpperCase() : v.toLowerCase();
1328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  }
1338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  catch(e)
1348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  {
1358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  }
1368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  return v;
1378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project};
1388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectArrayCallback.prototype.concat = function(v, index, array)
1408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
1418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  reportCompare(v, array[index], 'ArrayCallback.prototype.concat: check callback argument consistency');
1428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  actual += v + ',';
1438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project};
1448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectArrayCallback.prototype.isUpperCase = function(v, index, array)
1468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
1478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  reportCompare(v, array[index], 'ArrayCallback.prototype.isUpperCase: check callback argument consistency');
1488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  try
1498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  {
1508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return this.state ? true : (v == v.toUpperCase());
1518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  }
1528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  catch(e)
1538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  {
1548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  }
1558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  return false;
1568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project};
1578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectArrayCallback.prototype.isString = function(v, index, array)
1598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
1608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  reportCompare(v, array[index], 'ArrayCallback.prototype.isString: check callback argument consistency');
1618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  return this.state ? true : (typeof v == 'string');
1628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project};
1638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectfunction dumpError(e)
1658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
1668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  var s = e.name + ': ' + e.message +
1678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    ' File: ' + e.fileName +
1688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    ', Line: ' + e.lineNumber +
1698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    ', Stack: ' + e.stack;
1708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  return s;
1718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
1728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar obj;
1748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar strings = ['hello', 'Array', 'WORLD'];
1758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar mixed   = [0, '0', 0];
1768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar sparsestrings = new Array();
1778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectsparsestrings[2] = 'sparse';
1788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectif ('map' in Array.prototype)
1808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
1818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// see http://developer-test.mozilla.org/docs/Core_JavaScript_1.5_Reference:Objects:Array:map
1828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  // test Array.map
1848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  // map has 1 required argument
1868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  expect = 1;
1878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  actual = Array.prototype.map.length;
1888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  reportCompare(expect, actual, 'Array.prototype.map.length == 1');
1898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  // throw TypeError if no callback function specified
1918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  expect = 'TypeError';
1928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  try
1938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  {
1948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    strings.map();
1958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    actual = 'no error';
1968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  }
1978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  catch(e)
1988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  {
1998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    actual = e.name;
2008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  }
2018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  reportCompare(expect, actual, 'Array.map(undefined) throws TypeError');
2028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  try
2048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  {
2058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    // identity map
2068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    expect = 'hello,Array,WORLD';
2078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    actual = strings.map(identity).toString();
2088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  }
2098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  catch(e)
2108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  {
2118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    actual = dumpError(e);
2128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  }
2138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  reportCompare(expect, actual, 'Array.map: identity');
2148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  try
2178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  {
2188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    expect = 'hello,mutated,';
2198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    actual = strings.map(mutate).toString();
2208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  }
2218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  catch(e)
2228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  {
2238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    actual = dumpError(e);
2248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  }
2258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  reportCompare(expect, actual, 'Array.map: mutate');
2268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  strings = ['hello', 'Array', 'WORLD'];
2288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  try
2308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  {
2318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    // general map
2328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    expect = 'HELLO,ARRAY,WORLD';
2338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    actual = strings.map(makeUpperCase).toString();
2348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  }
2358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  catch(e)
2368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  {
2378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    actual = dumpError(e);
2388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  }
2398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  reportCompare(expect, actual, 'Array.map: uppercase');
2408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  try
2428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  {
2438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    // pass object method as map callback
2448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    expect = 'HELLO,ARRAY,WORLD';
2458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    var obj = new ArrayCallback(true);
2468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    actual  = strings.map(obj.makeUpperCase, obj).toString();
2478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  }
2488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  catch(e)
2498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  {
2508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    actual = dumpError(e);
2518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  }
2528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  reportCompare(expect, actual, 'Array.map: uppercase with object callback');
2538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  try
2558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  {
2568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    expect = 'hello,array,world';
2578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    obj = new ArrayCallback(false);
2588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    actual = strings.map(obj.makeUpperCase, obj).toString();
2598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  }
2608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  catch(e)
2618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  {
2628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    actual = dumpError(e);
2638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  }
2648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  reportCompare(expect, actual, 'Array.map: lowercase with object callback');
2658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  try
2678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  {
2688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    // map on sparse arrays
2698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    expect = ',,SPARSE';
2708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    actual = sparsestrings.map(makeUpperCase).toString();
2718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  }
2728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  catch(e)
2738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  {
2748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    actual = dumpError(e);
2758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  }
2768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  reportCompare(expect, actual, 'Array.map: uppercase on sparse array');
2778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
2788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectif ('forEach' in Array.prototype)
2808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
2818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// see http://developer-test.mozilla.org/docs/Core_JavaScript_1.5_Reference:Objects:Array:forEach
2828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  // test Array.forEach
2848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  // forEach has 1 required argument
2868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  expect = 1;
2878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  actual = Array.prototype.forEach.length;
2888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  reportCompare(expect, actual, 'Array.prototype.forEach.length == 1');
2898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  // throw TypeError if no callback function specified
2918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  expect = 'TypeError';
2928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  try
2938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  {
2948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    strings.forEach();
2958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    actual = 'no error';
2968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  }
2978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  catch(e)
2988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  {
2998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    actual = e.name;
3008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  }
3018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  reportCompare(expect, actual, 'Array.forEach(undefined) throws TypeError');
3028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  try
3048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  {
3058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    // general forEach
3068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    expect = 'hello,Array,WORLD,';
3078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    actual = '';
3088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    strings.forEach(concat);
3098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  }
3108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  catch(e)
3118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  {
3128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    actual = dumpError(e);
3138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  }
3148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  reportCompare(expect, actual, 'Array.forEach');
3158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  try
3178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  {
3188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    expect = 'hello,mutated,';
3198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    actual = '';
3208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    strings.forEach(mutateForEach);
3218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  }
3228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  catch(e)
3238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  {
3248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    actual = dumpError(e);
3258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  }
3268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  reportCompare(expect, actual, 'Array.forEach: mutate');
3278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  strings = ['hello', 'Array', 'WORLD'];
3298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  try
3338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  {
3348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    // pass object method as forEach callback
3358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    expect = 'hello,Array,WORLD,';
3368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    actual = '';
3378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    obj = new ArrayCallback(true);
3388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    strings.forEach(obj.concat, obj);
3398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  }
3408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  catch(e)
3418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  {
3428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    actual = dumpError(e);
3438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  }
3448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  reportCompare(expect, actual, 'Array.forEach with object callback 1');
3458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  try
3478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  {
3488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    expect = 'hello,Array,WORLD,';
3498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    actual = '';
3508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    obj = new ArrayCallback(false);
3518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    strings.forEach(obj.concat, obj);
3528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  }
3538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  catch(e)
3548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  {
3558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    actual = dumpError(e);
3568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  }
3578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  reportCompare(expect, actual, 'Array.forEach with object callback 2');
3588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  try
3608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  {
3618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    // test forEach on sparse arrays
3628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    // see https://bugzilla.mozilla.org/show_bug.cgi?id=311082
3638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    expect = 'sparse,';
3648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    actual = '';
3658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    sparsestrings.forEach(concat);
3668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  }
3678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  catch(e)
3688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  {
3698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    actual = dumpError(e);
3708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  }
3718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  reportCompare(expect, actual, 'Array.forEach on sparse array');
3728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
3738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectif ('filter' in Array.prototype)
3758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
3768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// see http://developer-test.mozilla.org/docs/Core_JavaScript_1.5_Reference:Objects:Array:filter
3778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  // test Array.filter
3798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  // filter has 1 required argument
3818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  expect = 1;
3828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  actual = Array.prototype.filter.length;
3838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  reportCompare(expect, actual, 'Array.prototype.filter.length == 1');
3848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  // throw TypeError if no callback function specified
3868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  expect = 'TypeError';
3878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  try
3888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  {
3898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    strings.filter();
3908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    actual = 'no error';
3918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  }
3928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  catch(e)
3938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  {
3948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    actual = e.name;
3958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  }
3968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  reportCompare(expect, actual, 'Array.filter(undefined) throws TypeError');
3978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  try
3998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  {
4008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    // test general filter
4018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    expect = 'WORLD';
4028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    actual = strings.filter(isUpperCase).toString();
4038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  }
4048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  catch(e)
4058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  {
4068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    actual = dumpError(e);
4078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  }
4088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  reportCompare(expect, actual, 'Array.filter');
4098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
4108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  try
4118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  {
4128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    expect = 'WORLD';
4138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    obj = new ArrayCallback(false);
4148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    actual = strings.filter(obj.isUpperCase, obj).toString();
4158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  }
4168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  catch(e)
4178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  {
4188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    actual = dumpError(e);
4198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  }
4208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  reportCompare(expect, actual, 'Array.filter object callback 1');
4218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
4228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  try
4238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  {
4248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    expect = 'hello,Array,WORLD';
4258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    obj = new ArrayCallback(true);
4268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    actual = strings.filter(obj.isUpperCase, obj).toString();
4278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  }
4288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  catch(e)
4298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  {
4308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    actual = dumpError(e);
4318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  }
4328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  reportCompare(expect, actual, 'Array.filter object callback 2');
4338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
4348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
4358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectif ('every' in Array.prototype)
4368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
4378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// see http://developer-test.mozilla.org/docs/Core_JavaScript_1.5_Reference:Objects:Array:every
4388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
4398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  // test Array.every
4408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
4418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  // every has 1 required argument
4428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
4438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  expect = 1;
4448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  actual = Array.prototype.every.length;
4458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  reportCompare(expect, actual, 'Array.prototype.every.length == 1');
4468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
4478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  // throw TypeError if no every callback function specified
4488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  expect = 'TypeError';
4498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  try
4508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  {
4518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    strings.every();
4528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    actual = 'no error';
4538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  }
4548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  catch(e)
4558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  {
4568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    actual = e.name;
4578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  }
4588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  reportCompare(expect, actual, 'Array.every(undefined) throws TypeError');
4598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
4608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  // test general every
4618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
4628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  try
4638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  {
4648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    expect = true;
4658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    actual = strings.every(isString);
4668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  }
4678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  catch(e)
4688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  {
4698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    actual = dumpError(e);
4708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  }
4718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  reportCompare(expect, actual, 'strings: every element is a string');
4728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
4738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  try
4748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  {
4758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    expect = false;
4768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    actual = mixed.every(isString);
4778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  }
4788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  catch(e)
4798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  {
4808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    actual = dumpError(e);
4818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  }
4828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  reportCompare(expect, actual, 'mixed: every element is a string');
4838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
4848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  try
4858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  {
4868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    // see https://bugzilla.mozilla.org/show_bug.cgi?id=311082
4878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    expect = true;
4888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    actual = sparsestrings.every(isString);
4898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  }
4908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  catch(e)
4918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  {
4928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    actual = dumpError(e);
4938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  }
4948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  reportCompare(expect, actual, 'sparsestrings: every element is a string');
4958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
4968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  // pass object method as map callback
4978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
4988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  obj = new ArrayCallback(false);
4998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
5008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  try
5018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  {
5028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    expect = true;
5038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    actual = strings.every(obj.isString, obj);
5048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  }
5058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  catch(e)
5068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  {
5078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    actual = dumpError(e);
5088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  }
5098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  reportCompare(expect, actual, 'strings: every element is a string, via object callback');
5108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
5118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  try
5128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  {
5138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    expect = false;
5148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    actual = mixed.every(obj.isString, obj);
5158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  }
5168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  catch(e)
5178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  {
5188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    actual = dumpError(e) ;
5198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  }
5208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  reportCompare(expect, actual, 'mixed: every element is a string, via object callback');
5218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
5228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  try
5238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  {
5248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    // see https://bugzilla.mozilla.org/show_bug.cgi?id=311082
5258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    expect = true;
5268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    actual = sparsestrings.every(obj.isString, obj);
5278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  }
5288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  catch(e)
5298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  {
5308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    actual = dumpError(e);
5318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  }
5328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  reportCompare(expect, actual, 'sparsestrings: every element is a string, via object callback');
5338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
5348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
5358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
5368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectif ('some' in Array.prototype)
5378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
5388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// see http://developer-test.mozilla.org/docs/Core_JavaScript_1.5_Reference:Objects:Array:some
5398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
5408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  // test Array.some
5418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
5428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  // some has 1 required argument
5438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
5448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  expect = 1;
5458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  actual = Array.prototype.some.length;
5468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  reportCompare(expect, actual, 'Array.prototype.some.length == 1');
5478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
5488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  // throw TypeError if no some callback function specified
5498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  expect = 'TypeError';
5508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  try
5518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  {
5528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    strings.some();
5538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    actual = 'no error';
5548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  }
5558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  catch(e)
5568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  {
5578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    actual = e.name;
5588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  }
5598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  reportCompare(expect, actual, 'Array.some(undefined) throws TypeError');
5608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
5618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  // test general some
5628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
5638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  try
5648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  {
5658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    expect = true;
5668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    actual = strings.some(isString);
5678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  }
5688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  catch(e)
5698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  {
5708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    actual = dumpError(e);
5718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  }
5728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  reportCompare(expect, actual, 'strings: some element is a string');
5738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
5748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  try
5758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  {
5768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    expect = true;
5778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    actual = mixed.some(isString);
5788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  }
5798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  catch(e)
5808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  {
5818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    actual = dumpError(e);
5828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  }
5838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  reportCompare(expect, actual, 'mixed: some element is a string');
5848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
5858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  try
5868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  {
5878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    expect = true;
5888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    actual = sparsestrings.some(isString);
5898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  }
5908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  catch(e)
5918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  {
5928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    actual = dumpError(e);
5938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  }
5948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  reportCompare(expect, actual, 'sparsestrings: some element is a string');
5958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
5968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  // pass object method as map callback
5978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
5988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  obj = new ArrayCallback(false);
5998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
6008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  try
6018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  {
6028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    expect = true;
6038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    actual = strings.some(obj.isString, obj);
6048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  }
6058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  catch(e)
6068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  {
6078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    actual = dumpError(e);
6088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  }
6098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  reportCompare(expect, actual, 'strings: some element is a string, via object callback');
6108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
6118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  try
6128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  {
6138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    expect = true;
6148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    actual = mixed.some(obj.isString, obj);
6158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  }
6168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  catch(e)
6178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  {
6188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    actual = dumpError(e);
6198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  }
6208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  reportCompare(expect, actual, 'mixed: some element is a string, via object callback');
6218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
6228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  try
6238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  {
6248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    expect = true;
6258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    actual = sparsestrings.some(obj.isString, obj);
6268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  }
6278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  catch(e)
6288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  {
6298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    actual = dumpError(e);
6308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  }
6318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  reportCompare(expect, actual, 'sparsestrings: some element is a string, via object callback');
6328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
6338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
6348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
6358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectif ('indexOf' in Array.prototype)
6368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
6378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// see http://developer-test.mozilla.org/docs/Core_JavaScript_1.5_Reference:Objects:Array:indexOf
6388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
6398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  // test Array.indexOf
6408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
6418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  // indexOf has 1 required argument
6428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
6438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  expect = 1;
6448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  actual = Array.prototype.indexOf.length;
6458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  reportCompare(expect, actual, 'Array.prototype.indexOf.length == 1');
6468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
6478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  // test general indexOf
6488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
6498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  try
6508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  {
6518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    expect = -1;
6528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    actual = mixed.indexOf('not found');
6538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  }
6548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  catch(e)
6558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  {
6568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    actual = dumpError(e);
6578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  }
6588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  reportCompare(expect, actual, 'indexOf returns -1 if value not found');
6598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
6608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  try
6618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  {
6628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    expect = 0;
6638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    actual = mixed.indexOf(0);
6648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  }
6658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  catch(e)
6668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  {
6678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    actual = dumpError(e);
6688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  }
6698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  reportCompare(expect, actual, 'indexOf matches using strict equality');
6708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
6718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  try
6728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  {
6738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    expect = 1;
6748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    actual = mixed.indexOf('0');
6758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  }
6768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  catch(e)
6778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  {
6788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    actual = dumpError(e);
6798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  }
6808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  reportCompare(expect, actual, 'indexOf matches using strict equality');
6818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
6828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  try
6838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  {
6848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    expect = 2;
6858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    actual = mixed.indexOf(0, 1);
6868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  }
6878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  catch(e)
6888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  {
6898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    actual = dumpError(e);
6908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  }
6918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  reportCompare(expect, actual, 'indexOf begins searching at fromIndex');
6928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
6938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
694