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

var assert = require('assert');
var util = require('../lib/util');
//
// The important thing with mergeOptions() is that 'enabled' is always set in target option.
//
describe('util.mergeOptions', function () {
it('handles good input without global options', function () {
var options = {
someValue: "silly value",
aBoolOption: false,
anObject: {
answer:42
},
anotherObject: {
enabled: false,
},
merge: null
};
// Case with empty target
var mergeTarget = {};
util.mergeOptions(mergeTarget, options, 'someValue');
assert(mergeTarget.someValue === undefined, 'Non-object option should not be copied');
assert(mergeTarget.anObject === undefined);
util.mergeOptions(mergeTarget, options, 'aBoolOption');
assert(mergeTarget.aBoolOption !== undefined, 'option aBoolOption should now be an object');
assert(mergeTarget.aBoolOption.enabled === false, 'enabled value option aBoolOption should have been copied into object');
util.mergeOptions(mergeTarget, options, 'anObject');
assert(mergeTarget.anObject !== undefined, 'Option object is not copied');
assert(mergeTarget.anObject.answer === 42);
assert(mergeTarget.anObject.enabled === true);
util.mergeOptions(mergeTarget, options, 'anotherObject');
assert(mergeTarget.anotherObject.enabled === false, 'enabled value from options must have priority');
util.mergeOptions(mergeTarget, options, 'merge');
assert(mergeTarget.merge === undefined, 'Explicit null option should not be copied, there is no global option for it');
// Case with non-empty target
mergeTarget = {
someValue: false,
aBoolOption: true,
anObject: {
answer: 49
},
anotherObject: {
enabled: true,
},
merge: 'hello'
};
util.mergeOptions(mergeTarget, options, 'someValue');
assert(mergeTarget.someValue === false, 'Non-object option should not be copied');
assert(mergeTarget.anObject.answer === 49, 'Sibling option should not be changed');
util.mergeOptions(mergeTarget, options, 'aBoolOption');
assert(mergeTarget.aBoolOption !== true, 'option enabled should have been overwritten');
assert(mergeTarget.aBoolOption.enabled === false, 'enabled value option aBoolOption should have been copied into object');
util.mergeOptions(mergeTarget, options, 'anObject');
assert(mergeTarget.anObject.answer === 42);
assert(mergeTarget.anObject.enabled === true);
util.mergeOptions(mergeTarget, options, 'anotherObject');
assert(mergeTarget.anotherObject !== undefined, 'Option object is not copied');
assert(mergeTarget.anotherObject.enabled === false, 'enabled value from options must have priority');
util.mergeOptions(mergeTarget, options, 'merge');
assert(mergeTarget.merge === 'hello', 'Explicit null-option should not be copied, already present in target');
});
it('gracefully handles bad input', function () {
var mergeTarget = {};
var options = {
merge: null
};
var errMsg = 'Non-object parameters should not be accepted';
assert.throws(() => util.mergeOptions(null, options, 'anything'), Error, errMsg);
assert.throws(() => util.mergeOptions(undefined, options, 'anything'), Error, errMsg);
assert.throws(() => util.mergeOptions(42, options, 'anything'), Error, errMsg);
assert.throws(() => util.mergeOptions(mergeTarget, null, 'anything'), Error, errMsg);
assert.throws(() => util.mergeOptions(mergeTarget, undefined, 'anything'), Error, errMsg);
assert.throws(() => util.mergeOptions(mergeTarget, 42, 'anything'), Error, errMsg);
assert.throws(() => util.mergeOptions(mergeTarget, options, null), Error, errMsg);
assert.throws(() => util.mergeOptions(mergeTarget, options, undefined), Error, errMsg);
assert.throws(() => util.mergeOptions(mergeTarget, options, 'anything', null), Error, errMsg);
assert.throws(() => util.mergeOptions(mergeTarget, options, 'anything', 'not an object'), Error, errMsg);
util.mergeOptions(mergeTarget, options, 'iDontExist');
assert(mergeTarget.iDontExist === undefined);
});
it('handles good input with global options', function () {
var mergeTarget = {
};
var options = {
merge: null,
missingEnabled: {
answer: 42
},
alsoMissingEnabled: { // has no enabled in globals
answer: 42
}
};
var globalOptions = {
merge: {
enabled: false
},
missingEnabled: {
enabled: false
}
};
util.mergeOptions(mergeTarget, options, 'merge', globalOptions);
assert(mergeTarget.merge.enabled === false, "null-option should create an empty target object");
util.mergeOptions(mergeTarget, options, 'missingEnabled', globalOptions);
assert(mergeTarget.missingEnabled.enabled === false);
util.mergeOptions(mergeTarget, options, 'alsoMissingEnabled', globalOptions);
assert(mergeTarget.alsoMissingEnabled.enabled === true);
});
});