blob: 7c982faf6a1af5014ce1b868b6eb0e841078deb7 [file] [log] [blame]
//-------------------------------------------------------------------------------------------------------
// Copyright (C) Microsoft. All rights reserved.
// Licensed under the MIT license. See LICENSE.txt file in the project root for full license information.
//-------------------------------------------------------------------------------------------------------
var maxPushArgs = 3; // Maximum number of arguments to push supported by this test case. Cannot be greater than 6.
for (var b = 0; b <= 1; b++) {
var isArray = (b === 0);
for (var i = 1; i <= maxPushArgs; i++) {
var testType = isArray ? "Array" : "Object";
WScript.Echo(testType + " Test " + i);
var a = Create(isArray);
WScript.Echo("Pushing...");
PushArgs(a, i, "Bef");
Output(a, i);
WScript.Echo("Pushing...");
PushArgs(a, 1, "Aft");
Output(a, i + 1);
}
}
function Create(isArray)
{
var arr;
if (isArray)
{
arr = [];
}
else
{
arr = {};
arr.push = Array.prototype.push;
arr.length = 4294967294;
}
arr[0]="Value0";
arr[1]="Value1";
arr[2]="Value2";
arr[4294967293] = "Value4294967293";
return arr;
}
function PushArgs(arr, num, prefix) {
if (num < 1 || num > maxPushArgs) {
WScript.Echo("FAIL");
return;
}
try {
if (num === 1) {
arr.push(prefix + "1");
}
else if (num === 2) {
arr.push(prefix + "1", prefix + "2");
}
else if (num === 3) {
arr.push(prefix + "1", prefix + "2", prefix + "3");
}
WScript.Echo("No exception");
}
catch (e) {
WScript.Echo(e.name + ": " + e.message);
}
}
function Output(arr, numPushed)
{
if (numPushed > maxPushArgs) {
WScript.Echo("FAIL");
return;
}
WScript.Echo("Length is: " + arr.length);
OutputIndex(arr, 0);
OutputIndex(arr, 1);
OutputIndex(arr, 2);
for (var i = 0; i <= numPushed; i++)
{
var index = "429496729" + (3 + i); // Does not work if maxPushArgs > 6
OutputIndex(arr, index);
}
}
function OutputIndex(arr, index)
{
var v = arr[index];
if (v == undefined)
{
v = "UNDEFINED";
}
WScript.Echo(index + ": " + v);
}
//implicit calls
function foo()
{
var obj = {};
Object.prototype.push = Array.prototype.push;
var x;
Object.defineProperty(obj, "length", {get: function() {x = true; return 5;}});
x = false;
try
{
var len = obj.push(1);
}
catch (e)
{
WScript.Echo('caught exception calling push');
}
WScript.Echo(x);
return len;
}
WScript.Echo (foo());
function bar()
{
var a = Number();
Number.prototype.push = Array.prototype.push;
a.push(1);
}
bar();
function test0(arr)
{
for(var __loopvar4 = 0; __loopvar4 < 2; __loopvar4++)
{
arr.length --;
arr.push(3);
}
return arr.length;
}
WScript.Echo("ary.length = " + test0(new Array(10)));
function popTest() {
[ , ].pop();
};
WScript.Echo(popTest());