gpii-universal
Version:
Cross platform, core components of the GPII personalization infrastructure.
283 lines (267 loc) • 9.59 kB
JavaScript
/*
* Settings Handler Utilities Tests
*
* Copyright 2012 Raising the Floor - International
* Copyright 2013 OCAD University
*
* Licensed under the New BSD license. You may not use this file except in
* compliance with this License.
*
* The research leading to these results has received funding from the European Union's
* Seventh Framework Programme (FP7/2007-2013)
* under grant agreement no. 289016.
*
* You may obtain a copy of the License at
* https://github.com/GPII/universal/blob/master/LICENSE.txt
*/
/* global fluid, jqUnit, gpii */
;
(function () {
// TODO: Rewrite all these tests into browser-style jqUnit tests, leaving just
// a stub tester here to test filesystem integration
fluid.registerNamespace("gpii.tests");
fluid.registerNamespace("gpii.tests.settingsHandlersUtilitiesTests");
gpii.tests.settingsHandlersUtilitiesTests.filterSupportedSettingsSpecs = {
"If supportedSettings is undefined, return settings": {
settings: {
"weirdSetting": "foo"
},
supportedSettings: undefined,
expected: {
"weirdSetting": "foo"
}
},
"If settings is undefined, return undefined": {
settings: undefined,
supportedSettings: {
"weirdSetting": {}
},
expected: undefined
},
"Filter by supportedSettings": {
settings: {
"weirdSetting": "foo",
"otherSetting": "bar"
},
supportedSettings: {
"weirdSetting": {}
},
expected: {
"weirdSetting": "foo"
}
},
"If supportedSettings directive is present - test no matching": {
settings: {
"weirdSetting": "foo",
"otherSetting": "bar"
},
supportedSettings: {
"thirdSetting": {}
},
expected: {}
},
"Works with `undefined` values for settings (required when restoring)": {
settings: {
"weirdSetting": undefined,
"otherSetting": undefined
},
supportedSettings: {
"weirdSetting": {}
},
expected: {
"weirdSetting": undefined
}
}
};
jqUnit.test("filterSupportedSettings tests", function () {
fluid.each(gpii.tests.settingsHandlersUtilitiesTests, function (test, name) {
var result = gpii.settingsHandlers.filterSupportedSettings(test.settings, test.supportedSettings);
jqUnit.assertDeepEq(name, test.expected, result);
});
});
jqUnit.test("settingsHandlers.setSettings", function () {
// check simple json structure
var result = gpii.settingsHandlers.setSettings(
{settings: { "key": "val1" }}, { "key": "val2"});
jqUnit.assertDeepEq("Simple setting",
{ key: { oldValue: "val2", newValue: "val1" } }, result.settings);
// complex json structure
var json = {
firstentry: {
lvl2: {
key1: "vala",
key2: "valb"
}
},
nextentry: {
key3: "valc"
}
};
var settings = {
"firstentry.lvl2.key1": "newValue",
"nextentry.key3": "otherNewValue"
};
var exp = {
"firstentry.lvl2.key1": { oldValue: "vala", newValue: "newValue" },
"nextentry.key3": { oldValue: "valc", newValue: "otherNewValue" }
};
result = gpii.settingsHandlers.setSettings({settings: settings}, json);
jqUnit.assertDeepEq("Multiple and nested settings", exp,
result.settings);
// check setSettings for unset values
json = {
somekey: {
somekey2: {
key1: "vala"
}
}
};
settings = {
"newkey1.newkey2": "someval"
};
exp = { "newkey1.newkey2": { oldValue: undefined, newValue: "someval" }};
result = gpii.settingsHandlers.setSettings({settings: settings}, json);
jqUnit.assertDeepEq("Non existing settings (multilevel)", exp, result.settings);
});
jqUnit.test("numberify tests", function () {
jqUnit.assertEquals("Single number", 3, gpii.settingsHandlers.numberify("3"));
jqUnit.assertDeepEq("Array of numbers", [1, "3a", 59.5], gpii.settingsHandlers.numberify(["1", "3a", "59.5"]));
jqUnit.assertDeepEq("Structure of numbers", {a: 3.9998, b: [false, 55]}, gpii.settingsHandlers.numberify({a: "3.9998", b: [false, "55"]}));
});
gpii.tests.settingsHandlersUtilitiesTests.copySettingsDefs = [{
name: "Copy with extra setting in source",
source: {
"myconf": {
"settings": {
"cross-hairs-clip": true,
"mysetting": "some value"
},
"type": "gpii.tests.lifecycleManager.mockSettingsHandler",
"options": {}
}
},
target: {
"myconf": {
"settings": {
"cross-hairs-clip": false
},
"type": "gpii.tests.lifecycleManager.mockSettingsHandler",
"options": {}
}
},
expected: {
"myconf": {
"settings": {
"cross-hairs-clip": true,
"mysetting": "some value"
},
"type": "gpii.tests.lifecycleManager.mockSettingsHandler",
"options": {}
}
}
}, {
name: "Copy with extra setting in target",
source: {
"myconf": {
"settings": {
"cross-hairs-clip": true
},
"type": "gpii.tests.lifecycleManager.mockSettingsHandler",
"options": {}
}
},
target: {
"myconf": {
"settings": {
"cross-hairs-clip": false,
"mysetting": "some value"
},
"type": "gpii.tests.lifecycleManager.mockSettingsHandler",
"options": {}
}
},
expected: {
"myconf": {
"settings": {
"cross-hairs-clip": true,
"mysetting": "some value"
},
"type": "gpii.tests.lifecycleManager.mockSettingsHandler",
"options": {}
}
}
}, {
name: "Copy with 'undefined' value in source and target",
source: {
"myconf": {
"settings": {
"cross-hairs-clip": true,
"undefSetting": undefined
},
"type": "gpii.tests.lifecycleManager.mockSettingsHandler",
"options": {}
}
},
target: {
"myconf": {
"settings": {
"cross-hairs-clip": false,
"undefSetting2": undefined,
"undefSetting": "some value"
},
"type": "gpii.tests.lifecycleManager.mockSettingsHandler",
"options": {}
}
},
expected: {
"myconf": {
"settings": {
"cross-hairs-clip": true,
"undefSetting": undefined,
"undefSetting2": undefined
},
"type": "gpii.tests.lifecycleManager.mockSettingsHandler",
"options": {}
}
}
}];
jqUnit.test("Testing gpii.settingsHandlers.copySettings function", function () {
fluid.each(gpii.tests.settingsHandlersUtilitiesTests.copySettingsDefs, function (testDef) {
gpii.settingsHandlers.copySettings(testDef.target, testDef.source);
jqUnit.assertDeepEq(testDef.name, testDef.expected, testDef.target);
});
});
gpii.tests.settingsHandlersUtilitiesTests.changesToSettingsDefs = [{
name: "Element with type \"DELETE\" returns undefined value",
source: {
type: "DELETE",
value: true
},
expected: undefined
}, {
name: "\"path\" within the element is maintained",
source: {
"value": false,
"path": "pvParam.dwFlags.HCF_HIGHCONTRASTON",
"discard": true
},
expected: {
"value": false,
"path": "pvParam.dwFlags.HCF_HIGHCONTRASTON"
}
}, {
name: "Only element value is returned in other cases",
source: {
"value": 1,
"discard": true
},
expected: 1
}];
jqUnit.test("Testing gpii.settingsHandlers.changesToSettings function", function () {
fluid.each(gpii.tests.settingsHandlersUtilitiesTests.changesToSettingsDefs, function (testDef) {
var assertFunc = fluid.isPlainObject(testDef.expected) ? "assertDeepEq" : testDef.expected === undefined ? "assertUndefined" : "assertEquals";
var result = gpii.settingsHandlers.changesToSettings(testDef.source);
jqUnit[assertFunc](testDef.name, testDef.expected, result);
});
});
})();