SuperObject.test.js 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. "use strict";
  2. exports.__esModule = true;
  3. Object.merge = Object.entries = Object.values = Object.forEach = undefined;
  4. require("../index");
  5. var assert = require('assert');
  6. describe('SuperObject', function () {
  7. it('Object.merge', function () {
  8. Array.prototype.test = 'test';
  9. var a = {
  10. a: 1,
  11. b: 2,
  12. c: {
  13. c1: 111,
  14. c2: [111, 222, 333],
  15. c3: {
  16. a: 1,
  17. b: 2
  18. }
  19. }
  20. };
  21. var b = {
  22. b: 222,
  23. c: {
  24. c2: [1, 2],
  25. c3: {
  26. a: 1111,
  27. d: function () { return 'ddd'; }
  28. }
  29. }
  30. };
  31. var c = Object.merge({}, a, b);
  32. assert.equal(b.c.c3.d(), 'ddd');
  33. assert.equal(c.c.c3.d(), 'ddd');
  34. delete b.c.c3.d;
  35. delete c.c.c3.d;
  36. assert.deepEqual(a, {
  37. a: 1,
  38. b: 2,
  39. c: {
  40. c1: 111,
  41. c2: [111, 222, 333],
  42. c3: {
  43. a: 1,
  44. b: 2
  45. }
  46. }
  47. }, 'a不应该变');
  48. assert.deepEqual(b, {
  49. b: 222,
  50. c: {
  51. c2: [1, 2],
  52. c3: {
  53. a: 1111
  54. }
  55. }
  56. }, 'b不应该变');
  57. assert.deepEqual(c, {
  58. a: 1,
  59. b: 222,
  60. c: {
  61. c1: 111,
  62. c2: [1, 2, 333],
  63. c3: {
  64. a: 1111,
  65. b: 2
  66. }
  67. }
  68. });
  69. assert.deepEqual(Object.merge([], [[0, 0], null, undefined]), [[0, 0], null, undefined]);
  70. assert.deepEqual(Object.merge([123, null, undefined, 234], [null, 123]), [null, 123, undefined, 234]);
  71. assert.deepEqual(Object.merge({ a: 1, b: 1 }, { a: null, b: null }), { a: null, b: null });
  72. assert.deepEqual(Object.merge({ a: 1, b: 1 }, { a: undefined, b: undefined }), { a: undefined, b: undefined });
  73. assert.deepEqual(Object.merge({ a: { a: 1 }, b: [1] }, { a: null, b: null }), { a: null, b: null });
  74. assert.deepEqual(Object.merge({ a: { a: 1 }, b: [1] }, { a: undefined, b: undefined }), { a: undefined, b: undefined });
  75. // 数组是完整覆盖 而不是合并
  76. assert.deepEqual(Object.merge({ a: [1, 2, 3, 4] }, { a: [10, 20] }), { a: [10, 20, 3, 4] });
  77. });
  78. it('Object.values', function () {
  79. var a = { gggg: 5, zzz: 6, ccc: 7, aaa: 8, bbb: 9 };
  80. assert.deepEqual(Object.values(a), [5, 6, 7, 8, 9]);
  81. });
  82. it('Object.forEach', function () {
  83. var obj = {
  84. a: 1,
  85. b: 3,
  86. c: 5,
  87. d: 7
  88. };
  89. var arrK = [];
  90. var arrV = [];
  91. Object.prototype['aaa'] = 111;
  92. Object.prototype['bbb'] = 222;
  93. Object.prototype['ccc'] = 333;
  94. Object.forEach(obj, function (v, k, o) {
  95. assert.equal(typeof v, 'number');
  96. assert.equal(typeof k, 'string');
  97. arrK.push(k);
  98. arrV.push(v);
  99. o[k] += 2;
  100. });
  101. assert.deepEqual(arrK, ['a', 'b', 'c', 'd']);
  102. assert.deepEqual(arrV, [1, 3, 5, 7]);
  103. assert.deepEqual(obj, { a: 3, b: 5, c: 7, d: 9 });
  104. });
  105. it('Object.entries', function () {
  106. assert.deepEqual(Object.entries({ a: 1, b: 2, c: 'cccc' }), [
  107. ['a', 1],
  108. ['b', 2],
  109. ['c', 'cccc']
  110. ]);
  111. assert.deepEqual(Object.entries(['a', 'b', 'c']), [
  112. ['0', 'a'],
  113. ['1', 'b'],
  114. ['2', 'c']
  115. ]);
  116. });
  117. });