objectCreateNull.js 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  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. if (this.WScript && this.WScript.LoadScriptFile) { // Check for running in ch
  6. this.WScript.LoadScriptFile("..\\UnitTestFramework\\UnitTestFramework.js");
  7. }
  8. var tests = [
  9. {
  10. name : "NullTypeHandler basic functionality and sanity checks",
  11. body : function() {
  12. var objects = [
  13. Object.create({}),
  14. new Boolean(),
  15. Object.create(Promise.prototype),
  16. Function(""),
  17. new Number(),
  18. new String()
  19. ];
  20. for (var i = 1; i < objects.length; ++i) {
  21. var o = objects[i];
  22. assert.areEqual(undefined, o[0], "NullTypeHandler object with no properties returns undefined");
  23. assert.isFalse(o.hasOwnProperty('0'), "NullTypeHandler object with no properties returns false for hasOwnProperty");
  24. assert.isFalse(o.propertyIsEnumerable('0'), "NullTypeHandler object with no properties returns false for propertyIsEnumerable");
  25. for (var a in o) {
  26. assert.fail("Enumerating an empty object"); // Unreachable
  27. }
  28. o[0] = "str";
  29. assert.areEqual("str", o[0], "NullTypeHandler object with index property returns property correctly");
  30. assert.areEqual("str", o['0'], "NullTypeHandler object with index property returns property correctly");
  31. assert.isTrue(o.hasOwnProperty('0'), "NullTypeHandler object with index property returns true for hasOwnProperty");
  32. assert.isTrue(o.propertyIsEnumerable('0'), "NullTypeHandler object with index property returns true for propertyIsEnumerable");
  33. delete o[0];
  34. assert.areEqual(undefined, o[0], "NullTypeHandler objectwith deleted property returns undefined");
  35. assert.areEqual(undefined, o['0'], "NullTypeHandler objectwith deleted property returns undefined");
  36. assert.isFalse(o.hasOwnProperty('0'), "NullTypeHandler object with deleted property returns false for hasOwnProperty");
  37. assert.isFalse(o.propertyIsEnumerable('0'), "NullTypeHandler object with deleted property returns false for propertyIsEnumerable");
  38. for (var a in o) {
  39. assert.fail("Enumerating an empty object"); // Unreachable
  40. }
  41. o[0] = "str2";
  42. assert.areEqual("str2", o[0], "NullTypeHandler object with readded index property returns property correctly");
  43. assert.areEqual("str2", o['0'], "NullTypeHandler object with readded index property returns property correctly");
  44. assert.isTrue(o.hasOwnProperty('0'), "NullTypeHandler object with readded index property returns true for hasOwnProperty");
  45. assert.isTrue(o.propertyIsEnumerable('0'), "NullTypeHandler object readded with index property returns true for propertyIsEnumerable");
  46. }
  47. }
  48. },
  49. {
  50. name: "NullTypeHandler enumeration",
  51. body: function () {
  52. var obj1 = Object.create({});
  53. var obj2 = Object.create(null);
  54. var numProperties = 3;
  55. for (var i = 0; i < numProperties; ++i)
  56. {
  57. obj1[i] = i;
  58. assert.areEqual(obj1[i], i, "NullTypeHandler first enumeration object with index " + i + " equal to " + i);
  59. assert.isTrue(obj1.hasOwnProperty(i), "NullTypeHandler first enumeration object with index " + i + " returns true for hasOwnProperty");
  60. assert.isTrue(obj1.propertyIsEnumerable(i), "NullTypeHandler object first enumeration with index " + i + " returns true for propertyIsEnumerable");
  61. obj2[i] = i;
  62. assert.areEqual(obj2[i], i, "NullTypeHandler second enumeration object with index " + i + " equal to " + i);
  63. assert.isTrue(Object.prototype.hasOwnProperty.call(obj2, i), "NullTypeHandler first enumeration object with index " + i + " returns true for hasOwnProperty");
  64. assert.isTrue(Object.prototype.propertyIsEnumerable.call(obj2, i), "NullTypeHandler object first enumeration with index " + i + " returns true for propertyIsEnumerable");
  65. }
  66. var j = 0;
  67. for (var k in obj1)
  68. {
  69. ++j;
  70. }
  71. assert.areEqual(j, numProperties, "NullTypeHandler first enumeration object gives same number of properties");
  72. j = 0;
  73. for (var k in obj2)
  74. {
  75. ++j;
  76. }
  77. assert.areEqual(j, numProperties, "NullTypeHandler second enumeration object gives same number of properties");
  78. }
  79. }
  80. ];
  81. testRunner.runTests(tests, { verbose : WScript.Arguments[0] != "summary" });