merge.js 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. var test = require('tap').test,
  2. merge = require('..');
  3. test('Should not touch properties when types match', function(t) {
  4. var options = {
  5. age: 42
  6. };
  7. merge(options, {
  8. age: 24
  9. });
  10. t.equals(options.age, 42);
  11. t.end();
  12. });
  13. test('Should extend, because types are different', function(t) {
  14. var options = {
  15. age: '42'
  16. };
  17. merge(options, {
  18. age: 24
  19. });
  20. t.equals(options.age, 24);
  21. t.end();
  22. });
  23. test('Should augment with new properties', function(t) {
  24. var options = {
  25. age: 42
  26. };
  27. merge(options, {
  28. newproperty: 24
  29. });
  30. t.equals(options.age, 42);
  31. t.equals(options.newproperty, 24);
  32. t.end();
  33. });
  34. test('goes deep', function(t) {
  35. var options = {
  36. age: 42
  37. };
  38. merge(options, {
  39. nested: {
  40. name: 'deep'
  41. }
  42. });
  43. t.equals(options.age, 42);
  44. t.equals(options.nested.name, 'deep');
  45. t.end();
  46. });
  47. test('goes deep avoids conflicts', function(t) {
  48. var options = {
  49. age: 42,
  50. user: {
  51. firstName: 'John'
  52. }
  53. };
  54. merge(options, {
  55. user: {
  56. lastName: 'Smith'
  57. }
  58. });
  59. t.equals(options.age, 42);
  60. t.equals(options.user.firstName, 'John');
  61. t.equals(options.user.lastName, 'Smith');
  62. t.end();
  63. });
  64. test('Initializes with default object', function(t) {
  65. var options = {
  66. age: '42'
  67. };
  68. var result = merge(undefined, options);
  69. t.deepEqual(result, options);
  70. var onlyOptions = merge(options);
  71. t.deepEqual(onlyOptions, options);
  72. t.end();
  73. });
  74. test('Do not copy prototype', function(t) {
  75. function Options() {
  76. this.age = 42;
  77. }
  78. Options.prototype.foo = 'foo';
  79. var options = new Options();
  80. var result = merge({}, options);
  81. t.equals(result.age, 42);
  82. t.ok(result.foo === undefined);
  83. t.end();
  84. });