assign.js 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  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. WScript.LoadScriptFile("..\\UnitTestFramework\\UnitTestFramework.js");
  6. var tests = [
  7. {
  8. name: "simple copy",
  9. body: function ()
  10. {
  11. let orig = {};
  12. let sym = Symbol("c");
  13. orig.a = 1;
  14. orig.b = "asdf";
  15. orig[sym] = "qwert";
  16. let newObj = Object.assign({}, orig);
  17. assert.areEqual(newObj.b, orig.b);
  18. assert.areEqual(newObj.a, orig.a);
  19. assert.areEqual(newObj[sym], orig[sym]);
  20. }
  21. },
  22. {
  23. name: "non-path type handler",
  24. body: function ()
  25. {
  26. let orig = {};
  27. orig.a = 1;
  28. orig.b = "asdf";
  29. delete orig.a;
  30. let newObj = Object.assign({}, orig);
  31. assert.areEqual(newObj.b, orig.b);
  32. assert.areEqual(newObj.a, orig.a);
  33. }
  34. },
  35. {
  36. name: "has getter",
  37. body: function ()
  38. {
  39. let orig = {};
  40. orig.a = 1;
  41. Object.defineProperty(orig, 'b', {
  42. get: function() { return "asdf"; }, enumerable: true
  43. });
  44. let newObj = Object.assign({}, orig);
  45. assert.areEqual(newObj.b, orig.b);
  46. assert.areEqual(newObj.a, orig.a);
  47. }
  48. },
  49. {
  50. name: "has setter",
  51. body: function ()
  52. {
  53. let orig = {};
  54. orig.a = 1;
  55. Object.defineProperty(orig, 'b', {
  56. set: function() { }, enumerable: true
  57. });
  58. let newObj = Object.assign({}, orig);
  59. assert.areEqual(newObj.b, orig.b);
  60. assert.areEqual(newObj.a, orig.a);
  61. }
  62. },
  63. {
  64. name: "different proto",
  65. body: function ()
  66. {
  67. let protoObj = {};
  68. let orig = Object.create(protoObj);
  69. orig.a = 1;
  70. orig.b = "asdf";
  71. let newObj = Object.assign({}, orig);
  72. assert.areEqual(newObj.b, orig.b);
  73. assert.areEqual(newObj.a, orig.a);
  74. }
  75. },
  76. {
  77. name: "non-enumerable",
  78. body: function ()
  79. {
  80. let orig = {};
  81. orig.a = 1;
  82. Object.defineProperty(orig, 'b', {
  83. value: "asdf", enumerable: false
  84. });
  85. let newObj = Object.assign({}, orig);
  86. assert.areEqual(newObj.b, undefined);
  87. assert.areEqual(newObj.a, orig.a);
  88. }
  89. },
  90. {
  91. name: "proto accessor",
  92. body: function ()
  93. {
  94. Object.defineProperty(Object.prototype, 'b', {
  95. get: function() { return "asdf"; }
  96. });
  97. let orig = {};
  98. orig.a = 1;
  99. let newObj = Object.assign({}, orig);
  100. assert.areEqual(newObj.b, "asdf");
  101. assert.areEqual(newObj.a, orig.a);
  102. }
  103. },
  104. {
  105. name: "has object array",
  106. body: function ()
  107. {
  108. let orig = {};
  109. orig.a = 1;
  110. orig[0] = 2;
  111. let newObj = Object.assign({}, orig);
  112. assert.areEqual(newObj.a, orig.a);
  113. assert.areEqual(newObj[0], orig[0]);
  114. }
  115. },
  116. {
  117. name: "target has object array",
  118. body: function ()
  119. {
  120. let orig = {};
  121. orig.a = 1;
  122. orig[0] = 2;
  123. let newObj = {};
  124. newObj[0] = 3;
  125. Object.assign(newObj, orig);
  126. assert.areEqual(newObj.a, orig.a);
  127. assert.areEqual(newObj[0], orig[0]);
  128. }
  129. },
  130. {
  131. name: "has object array with non-enumerable prop",
  132. body: function ()
  133. {
  134. let orig = {};
  135. orig.a = 1;
  136. orig[0] = 2;
  137. Object.defineProperty(orig, '1', {
  138. value: "3", enumerable: false
  139. });
  140. let newObj = Object.assign({}, orig);
  141. assert.areEqual(newObj.a, orig.a);
  142. assert.areEqual(newObj[0], orig[0]);
  143. assert.areEqual(newObj[1], undefined);
  144. }
  145. }
  146. ];
  147. testRunner.runTests(tests, { verbose: WScript.Arguments[0] != "summary" });