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): igor3@apochta.com, 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:    21 May 2002
388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* SUMMARY: ECMA conformance of Function.prototype.apply
398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*
408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*   Function.prototype.apply(thisArg, argArray)
418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*
428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* See ECMA-262 Edition 3 Final, Section 15.3.4.3
438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project//-----------------------------------------------------------------------------
458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar UBound = 0;
468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar bug = 145791;
478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar summary = 'Testing ECMA conformance of Function.prototype.apply';
488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar status = '';
498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar statusitems = [];
508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar actual = '';
518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar actualvalues = [];
528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar expect= '';
538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar expectedvalues = [];
548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectfunction F0(a)
578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  return "" + this + arguments.length;
598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectfunction F1(a)
628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  return "" + this + a;
648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectfunction F2()
678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  return "" + this;
698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*
748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Function.prototype.apply.length should return 2
758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */
768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstatus = inSection(1);
778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectactual = Function.prototype.apply.length;
788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectexpect = 2;
798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectaddThis();
808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*
838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * When |thisArg| is not provided to the apply() method, the
848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * called function must be passed the global object as |this|
858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */
868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstatus = inSection(2);
878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectactual = F0.apply();
888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectexpect = "" + this + 0;
898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectaddThis();
908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*
938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * If |argArray| is not provided to the apply() method, the
948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * called function should be invoked with an empty argument list
958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */
968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstatus = inSection(3);
978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectactual = F0.apply("");
988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectexpect = "" + "" + 0;
998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectaddThis();
1008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstatus = inSection(4);
1028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectactual = F0.apply(true);
1038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectexpect = "" + true + 0;
1048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectaddThis();
1058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*
1088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Function.prototype.apply(x) and
1098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Function.prototype.apply(x, undefined) should return the same result
1108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */
1118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstatus = inSection(5);
1128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectactual = F1.apply(0, undefined);
1138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectexpect = F1.apply(0);
1148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectaddThis();
1158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstatus = inSection(6);
1178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectactual = F1.apply("", undefined);
1188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectexpect = F1.apply("");
1198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectaddThis();
1208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstatus = inSection(7);
1228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectactual = F1.apply(null, undefined);
1238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectexpect = F1.apply(null);
1248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectaddThis();
1258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstatus = inSection(8);
1278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectactual = F1.apply(undefined, undefined);
1288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectexpect = F1.apply(undefined);
1298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectaddThis();
1308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*
1338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Function.prototype.apply(x) and
1348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Function.prototype.apply(x, null) should return the same result
1358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */
1368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstatus = inSection(9);
1378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectactual = F1.apply(0, null);
1388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectexpect = F1.apply(0);
1398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectaddThis();
1408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstatus = inSection(10);
1428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectactual = F1.apply("", null);
1438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectexpect = F1.apply("");
1448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectaddThis();
1458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstatus = inSection(11);
1478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectactual = F1.apply(null, null);
1488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectexpect = F1.apply(null);
1498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectaddThis();
1508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstatus = inSection(12);
1528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectactual = F1.apply(undefined, null);
1538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectexpect = F1.apply(undefined);
1548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectaddThis();
1558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*
1588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Function.prototype.apply() and
1598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Function.prototype.apply(undefined) should return the same result
1608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */
1618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstatus = inSection(13);
1628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectactual = F2.apply(undefined);
1638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectexpect = F2.apply();
1648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectaddThis();
1658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*
1688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Function.prototype.apply() and
1698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Function.prototype.apply(null) should return the same result
1708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */
1718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstatus = inSection(14);
1728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectactual = F2.apply(null);
1738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectexpect = F2.apply();
1748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectaddThis();
1758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project//-----------------------------------------------------------------------------
1798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttest();
1808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project//-----------------------------------------------------------------------------
1818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectfunction addThis()
1858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
1868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  statusitems[UBound] = status;
1878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  actualvalues[UBound] = actual;
1888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  expectedvalues[UBound] = expect;
1898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  UBound++;
1908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
1918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectfunction test()
1948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
1958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  enterFunc('test');
1968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  printBugNumber(bug);
1978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  printStatus(summary);
1988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  for (var i=0; i<UBound; i++)
2008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  {
2018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    reportCompare(expectedvalues[i], actualvalues[i], statusitems[i]);
2028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  }
2038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  exitFunc ('test');
2058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
206