proxyenumremoval.js 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  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 passed = 1;
  6. passed &= typeof Reflect.enumerate === 'undefined';
  7. var proxy = new Proxy({}, {
  8. enumerate: function() {
  9. passed = 0;
  10. }
  11. });
  12. for(var key in proxy);
  13. var keys=""
  14. var proxy = new Proxy({x:1,y:2}, {});
  15. for(var key in proxy){ keys += key;}
  16. passed &= keys==="xy";
  17. // check ownKeys
  18. var keys=""
  19. var proxy = new Proxy({"5":1}, {
  20. ownKeys: function() {
  21. return ['a', {y:2}, 5, 'b', Symbol.iterator];
  22. }
  23. });
  24. try{
  25. for(var key in proxy);
  26. passed = false;
  27. }
  28. catch(e){}
  29. // check property descriptor
  30. var keys=""
  31. var proxy = new Proxy({b:1,a:2}, {
  32. ownKeys: function() {
  33. return ['a', {y:2}, 5, 'b', Symbol.iterator];
  34. }
  35. });
  36. try{
  37. for(var key in proxy);
  38. passed = false;
  39. }
  40. catch(e){}
  41. var keys=""
  42. var proxy = new Proxy({b:1,a:2}, {
  43. ownKeys: function() {
  44. return new Proxy(['a', 'b'],{});
  45. }
  46. });
  47. for(var key in proxy){ keys += key;}
  48. passed &= keys==="ab";
  49. var keys=""
  50. var proxy = new Proxy({c:1,d:2}, {
  51. ownKeys: function() {
  52. return new Proxy(['a', 'b'],{
  53. get(target, propKey, receiver){
  54. return Reflect.get(['c', 'd'], propKey, receiver);
  55. }
  56. });
  57. }
  58. });
  59. for(var key in proxy){ keys += key;}
  60. passed &= keys==="cd";
  61. var keys=""
  62. var proxy = new Proxy({b:1,a:2}, {
  63. ownKeys: function() {
  64. return {x:1,y:2, '0':'a'};
  65. }
  66. });
  67. for(var key in proxy){ keys += key;}
  68. passed &= keys==="";
  69. var keys=""
  70. var proxy = new Proxy({b:1,a:2}, {
  71. ownKeys: function() {
  72. return {x:1,y:2, '0':'a', length:2};
  73. }
  74. });
  75. for(var key in proxy){ keys += key;}
  76. passed &= keys==="a";
  77. // check property descriptor trap
  78. var keys=""
  79. var already_non_enmerable = false;
  80. var getPrototypeOfCalled = 0;
  81. var proxy = new Proxy({}, {
  82. ownKeys: function() {
  83. return ['a','b','a']; // make first a non-enumerable, and second a enumerable, second a won't show up in for-in
  84. },
  85. getOwnPropertyDescriptor: function(target, key){
  86. var enumerable = true;
  87. if(key === "a" && !already_non_enmerable)
  88. {
  89. enumerable=false;
  90. already_non_enmerable = true;
  91. }
  92. return {
  93. configurable: true,
  94. enumerable: enumerable,
  95. value: 42,
  96. writable: true
  97. };
  98. },
  99. getPrototypeOf: function(){
  100. getPrototypeOfCalled++;
  101. return null;
  102. }
  103. });
  104. for(var key in proxy){ keys += key;}
  105. passed &= keys==="b";
  106. passed &= getPrototypeOfCalled===1;
  107. if (passed) {
  108. WScript.Echo("PASS");
  109. }