2
0

hasItem.js 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  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 echo = WScript.Echo;
  6. function testHasItem(o, prop) {
  7. try {
  8. Object.defineProperty(o, prop, {
  9. get: function () { echo(" ", "FAIL: THIS SHOULD NOT BE CALLED"); },
  10. configurable: false,
  11. enumerable: false
  12. });
  13. } catch (e) {
  14. echo(" ", "pass", "...can not defineProperty...", "(" + prop + ")");
  15. return;
  16. }
  17. echo(" ", o.hasOwnProperty(prop) && !o.propertyIsEnumerable(prop) ? "pass" : "fail",
  18. "(" + prop + ")");
  19. }
  20. var objs = {
  21. "empty object": function () {
  22. return {};
  23. },
  24. "empty array": function () {
  25. return [];
  26. },
  27. "number object": function () {
  28. return new Number(123);
  29. },
  30. "string object": function () {
  31. return new String("test");
  32. },
  33. "Object": function () {
  34. return Object;
  35. },
  36. "global object": function () {
  37. return this;
  38. },
  39. "object with 1 property": function () {
  40. return {
  41. hello: "world"
  42. };
  43. },
  44. "object with many properties": function () {
  45. var o = {};
  46. for (var i = 0; i < 50; i++) {
  47. Object.defineProperty(o, "prop" + i, {
  48. value: "value" + i
  49. });
  50. }
  51. return o;
  52. },
  53. "object with accessor": function () {
  54. return {
  55. get hello() { return "world"; },
  56. 0: "value0",
  57. 1: "value1",
  58. 2: "value2"
  59. };
  60. },
  61. "array": function () {
  62. return [0, 1, 2, 3];
  63. },
  64. "es5 array": function () {
  65. var o = [0, 1, 2, 3];
  66. Object.defineProperty(o, 1, {
  67. get: function() { return "getter1"; }
  68. });
  69. return o;
  70. },
  71. };
  72. var props = [
  73. "abc",
  74. -1,
  75. 0,
  76. 1,
  77. 10,
  78. 0xfffffffe,
  79. "x y",
  80. "x\u0000y",
  81. "x\u0000\u0000y"
  82. ];
  83. for (var obj in objs) {
  84. echo("Test " + obj);
  85. for(var prop in props) {
  86. testHasItem(objs[obj](), props[prop]);
  87. }
  88. }