vis.js is a dynamic, browser-based visualization library
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

134 lines
4.9 KiB

  1. var assert = require('assert');
  2. var util = require('../lib/util');
  3. //
  4. // The important thing with mergeOptions() is that 'enabled' is always set in target option.
  5. //
  6. describe('util.mergeOptions', function () {
  7. it('handles good input without global options', function () {
  8. var options = {
  9. someValue: "silly value",
  10. aBoolOption: false,
  11. anObject: {
  12. answer:42
  13. },
  14. anotherObject: {
  15. enabled: false,
  16. },
  17. merge: null
  18. };
  19. // Case with empty target
  20. var mergeTarget = {};
  21. util.mergeOptions(mergeTarget, options, 'someValue');
  22. assert(mergeTarget.someValue === undefined, 'Non-object option should not be copied');
  23. assert(mergeTarget.anObject === undefined);
  24. util.mergeOptions(mergeTarget, options, 'aBoolOption');
  25. assert(mergeTarget.aBoolOption !== undefined, 'option aBoolOption should now be an object');
  26. assert(mergeTarget.aBoolOption.enabled === false, 'enabled value option aBoolOption should have been copied into object');
  27. util.mergeOptions(mergeTarget, options, 'anObject');
  28. assert(mergeTarget.anObject !== undefined, 'Option object is not copied');
  29. assert(mergeTarget.anObject.answer === 42);
  30. assert(mergeTarget.anObject.enabled === true);
  31. util.mergeOptions(mergeTarget, options, 'anotherObject');
  32. assert(mergeTarget.anotherObject.enabled === false, 'enabled value from options must have priority');
  33. util.mergeOptions(mergeTarget, options, 'merge');
  34. assert(mergeTarget.merge === undefined, 'Explicit null option should not be copied, there is no global option for it');
  35. // Case with non-empty target
  36. mergeTarget = {
  37. someValue: false,
  38. aBoolOption: true,
  39. anObject: {
  40. answer: 49
  41. },
  42. anotherObject: {
  43. enabled: true,
  44. },
  45. merge: 'hello'
  46. };
  47. util.mergeOptions(mergeTarget, options, 'someValue');
  48. assert(mergeTarget.someValue === false, 'Non-object option should not be copied');
  49. assert(mergeTarget.anObject.answer === 49, 'Sibling option should not be changed');
  50. util.mergeOptions(mergeTarget, options, 'aBoolOption');
  51. assert(mergeTarget.aBoolOption !== true, 'option enabled should have been overwritten');
  52. assert(mergeTarget.aBoolOption.enabled === false, 'enabled value option aBoolOption should have been copied into object');
  53. util.mergeOptions(mergeTarget, options, 'anObject');
  54. assert(mergeTarget.anObject.answer === 42);
  55. assert(mergeTarget.anObject.enabled === true);
  56. util.mergeOptions(mergeTarget, options, 'anotherObject');
  57. assert(mergeTarget.anotherObject !== undefined, 'Option object is not copied');
  58. assert(mergeTarget.anotherObject.enabled === false, 'enabled value from options must have priority');
  59. util.mergeOptions(mergeTarget, options, 'merge');
  60. assert(mergeTarget.merge === 'hello', 'Explicit null-option should not be copied, already present in target');
  61. });
  62. it('gracefully handles bad input', function () {
  63. var mergeTarget = {};
  64. var options = {
  65. merge: null
  66. };
  67. var errMsg = 'Non-object parameters should not be accepted';
  68. assert.throws(() => util.mergeOptions(null, options, 'anything'), Error, errMsg);
  69. assert.throws(() => util.mergeOptions(undefined, options, 'anything'), Error, errMsg);
  70. assert.throws(() => util.mergeOptions(42, options, 'anything'), Error, errMsg);
  71. assert.throws(() => util.mergeOptions(mergeTarget, null, 'anything'), Error, errMsg);
  72. assert.throws(() => util.mergeOptions(mergeTarget, undefined, 'anything'), Error, errMsg);
  73. assert.throws(() => util.mergeOptions(mergeTarget, 42, 'anything'), Error, errMsg);
  74. assert.throws(() => util.mergeOptions(mergeTarget, options, null), Error, errMsg);
  75. assert.throws(() => util.mergeOptions(mergeTarget, options, undefined), Error, errMsg);
  76. assert.throws(() => util.mergeOptions(mergeTarget, options, 'anything', null), Error, errMsg);
  77. assert.throws(() => util.mergeOptions(mergeTarget, options, 'anything', 'not an object'), Error, errMsg);
  78. util.mergeOptions(mergeTarget, options, 'iDontExist');
  79. assert(mergeTarget.iDontExist === undefined);
  80. });
  81. it('handles good input with global options', function () {
  82. var mergeTarget = {
  83. };
  84. var options = {
  85. merge: null,
  86. missingEnabled: {
  87. answer: 42
  88. },
  89. alsoMissingEnabled: { // has no enabled in globals
  90. answer: 42
  91. }
  92. };
  93. var globalOptions = {
  94. merge: {
  95. enabled: false
  96. },
  97. missingEnabled: {
  98. enabled: false
  99. }
  100. };
  101. util.mergeOptions(mergeTarget, options, 'merge', globalOptions);
  102. assert(mergeTarget.merge.enabled === false, "null-option should create an empty target object");
  103. util.mergeOptions(mergeTarget, options, 'missingEnabled', globalOptions);
  104. assert(mergeTarget.missingEnabled.enabled === false);
  105. util.mergeOptions(mergeTarget, options, 'alsoMissingEnabled', globalOptions);
  106. assert(mergeTarget.alsoMissingEnabled.enabled === true);
  107. });
  108. });