//------------------------------------------------------------------------------------------------------- // 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());