push2.js 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. //-------------------------------------------------------------------------------------------------------
  2. // Copyright (C) Microsoft. All rights reserved.
  3. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information.
  4. //-------------------------------------------------------------------------------------------------------
  5. var maxPushArgs = 3; // Maximum number of arguments to push supported by this test case. Cannot be greater than 6.
  6. for (var b = 0; b <= 1; b++) {
  7. var isArray = (b === 0);
  8. for (var i = 1; i <= maxPushArgs; i++) {
  9. var testType = isArray ? "Array" : "Object";
  10. WScript.Echo(testType + " Test " + i);
  11. var a = Create(isArray);
  12. WScript.Echo("Pushing...");
  13. PushArgs(a, i, "Bef");
  14. Output(a, i);
  15. WScript.Echo("Pushing...");
  16. PushArgs(a, 1, "Aft");
  17. Output(a, i + 1);
  18. }
  19. }
  20. function Create(isArray)
  21. {
  22. var arr;
  23. if (isArray)
  24. {
  25. arr = [];
  26. }
  27. else
  28. {
  29. arr = {};
  30. arr.push = Array.prototype.push;
  31. arr.length = 4294967294;
  32. }
  33. arr[0]="Value0";
  34. arr[1]="Value1";
  35. arr[2]="Value2";
  36. arr[4294967293] = "Value4294967293";
  37. return arr;
  38. }
  39. function PushArgs(arr, num, prefix) {
  40. if (num < 1 || num > maxPushArgs) {
  41. WScript.Echo("FAIL");
  42. return;
  43. }
  44. try {
  45. if (num === 1) {
  46. arr.push(prefix + "1");
  47. }
  48. else if (num === 2) {
  49. arr.push(prefix + "1", prefix + "2");
  50. }
  51. else if (num === 3) {
  52. arr.push(prefix + "1", prefix + "2", prefix + "3");
  53. }
  54. WScript.Echo("No exception");
  55. }
  56. catch (e) {
  57. WScript.Echo(e.name + ": " + e.message);
  58. }
  59. }
  60. function Output(arr, numPushed)
  61. {
  62. if (numPushed > maxPushArgs) {
  63. WScript.Echo("FAIL");
  64. return;
  65. }
  66. WScript.Echo("Length is: " + arr.length);
  67. OutputIndex(arr, 0);
  68. OutputIndex(arr, 1);
  69. OutputIndex(arr, 2);
  70. for (var i = 0; i <= numPushed; i++)
  71. {
  72. var index = "429496729" + (3 + i); // Does not work if maxPushArgs > 6
  73. OutputIndex(arr, index);
  74. }
  75. }
  76. function OutputIndex(arr, index)
  77. {
  78. var v = arr[index];
  79. if (v == undefined)
  80. {
  81. v = "UNDEFINED";
  82. }
  83. WScript.Echo(index + ": " + v);
  84. }
  85. //implicit calls
  86. function foo()
  87. {
  88. var obj = {};
  89. Object.prototype.push = Array.prototype.push;
  90. var x;
  91. Object.defineProperty(obj, "length", {get: function() {x = true; return 5;}});
  92. x = false;
  93. try
  94. {
  95. var len = obj.push(1);
  96. }
  97. catch (e)
  98. {
  99. WScript.Echo('caught exception calling push');
  100. }
  101. WScript.Echo(x);
  102. return len;
  103. }
  104. WScript.Echo (foo());
  105. function bar()
  106. {
  107. var a = Number();
  108. Number.prototype.push = Array.prototype.push;
  109. a.push(1);
  110. }
  111. bar();
  112. function test0(arr)
  113. {
  114. for(var __loopvar4 = 0; __loopvar4 < 2; __loopvar4++)
  115. {
  116. arr.length --;
  117. arr.push(3);
  118. }
  119. return arr.length;
  120. }
  121. WScript.Echo("ary.length = " + test0(new Array(10)));
  122. function popTest() {
  123. [ , ].pop();
  124. };
  125. WScript.Echo(popTest());