gpii-universal
Version:
Cross platform, core components of the GPII personalization infrastructure.
273 lines (257 loc) • 10.4 kB
JavaScript
/*
* JSON Settings Handler Tests
*
* Copyright 2012 Raising the Floor - International
*
* 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
*/
;
var fluid = require("infusion"),
gpii = fluid.registerNamespace("gpii"),
jqUnit = fluid.registerNamespace("jqUnit"),
kettle = require("kettle"),
fs = require("fs");
fluid.registerNamespace("gpii.tests.JSONSettingsHandler");
kettle.loadTestingSupport();
require("settingsHandlers");
gpii.tests.JSONSettingsHandler.testTempFilePaths = [
__dirname + "/data/JSONSettingsHandler/test1_tmp.json",
__dirname + "/data/JSONSettingsHandler/test2_tmp.json",
__dirname + "/data/JSONSettingsHandler/test3_tmp.json"
];
// TODO: consolidate this shared utility across our three file-based handlers
gpii.tests.JSONSettingsHandler.deleteTestFiles = function () {
fluid.each(gpii.tests.JSONSettingsHandler.testTempFilePaths, function (filePath) {
if (fs.existsSync(filePath)) {
fs.unlinkSync(filePath);
}
});
};
gpii.tests.JSONSettingsHandler.tests = {
basicTest: {
defaultFile: __dirname +
"/data/JSONSettingsHandler/test1_default.json",
tmpFile: gpii.tests.JSONSettingsHandler.testTempFilePaths[0],
expectedFile: __dirname +
"/data/JSONSettingsHandler/test1_expectedOutput.json",
set: {
payload: {
"net.gpii.test.jsonSettings": [{
options: {
"filename": gpii.tests.JSONSettingsHandler.testTempFilePaths[0]
},
settings: {
"fish": "battered and fried",
"lemon": "sliced",
"peas": "mushy",
"potatoes": "fried"
}
}]
},
expectedResult: {
"net.gpii.test.jsonSettings": [{
options: {
"filename": gpii.tests.JSONSettingsHandler.testTempFilePaths[0]
},
settings: {
"fish": { newValue: "battered and fried", oldValue: "raw" },
"lemon": { newValue: "sliced", oldValue: "whole" },
"peas": { newValue: "mushy", oldValue: "frozen" },
"potatoes": { newValue: "fried", oldValue: "raw"}
}
}]
}
},
get: {
payload: {
"net.gpii.test.jsonSettings": [{
options: {
"filename": __dirname +
"/data/JSONSettingsHandler/test1_default.json"
},
settings: {
"fish": null,
"potatoes": null
}
}]
},
expectedResult: {
"net.gpii.test.jsonSettings": [{
settings: {
"fish": "raw",
"potatoes": "raw"
}
}]
}
}
},
complexTest: {
defaultFile: __dirname + "/data/JSONSettingsHandler/test2_default.json",
tmpFile: gpii.tests.JSONSettingsHandler.testTempFilePaths[1],
expectedFile: __dirname + "/data/JSONSettingsHandler/test2_expectedOutput.json",
set: {
payload: {
"org.gnome.orca": [{
options: {
"filename": gpii.tests.JSONSettingsHandler.testTempFilePaths[1]
},
settings: {
"profiles.default.profile.0": "undefault",
"profiles.default.voices.default.rate": 666,
"profiles.default.voices.foo\\.bar.boo": "far out, man!!"
}
}]
},
expectedResult: {
"org.gnome.orca": [{
options: {
"filename": gpii.tests.JSONSettingsHandler.testTempFilePaths[1]
},
settings: {
"profiles.default.profile.0": {
newValue: "undefault",
oldValue: "Default"
},
"profiles.default.voices.default.rate": {
newValue: 666,
oldValue: 50
},
"profiles.default.voices.foo\\.bar.boo": {
newValue: "far out, man!!",
oldValue: "far"
}
}
}]
}
},
get: {
payload: {
"org.gnome.orca": [{
options: {
"filename": __dirname + "/data/JSONSettingsHandler/test2_default.json"
},
settings: {
"profiles.default.profile.0": null,
"profiles.default.voices.default.rate": null,
"profiles.default.voices.foo\\.bar.boo": null
}
}]
},
expectedResult: {
"org.gnome.orca": [{
settings: {
"profiles.default.profile.0": "Default",
"profiles.default.voices.default.rate": 50,
"profiles.default.voices.foo\\.bar.boo": "far"
}
}]
}
}
},
removalTest: {
defaultFile: __dirname + "/data/JSONSettingsHandler/test2_default.json",
tmpFile: gpii.tests.JSONSettingsHandler.testTempFilePaths[2],
expectedFile: __dirname + "/data/JSONSettingsHandler/test3_expectedOutput.json",
set: {
payload: {
"org.gnome.orca": [{
options: {
"filename": gpii.tests.JSONSettingsHandler.testTempFilePaths[2]
},
settings: {
// TODO: we have no way to express removal from arrays. SettingsHandler API will have to be
// upgraded to support ChangeRequest objects, and ChangeApplier will have to be upgraded too (FLUID-3504)
"profiles.default.profile.0": "undefault",
"profiles.default.voices.default.rate": undefined,
"profiles.default.voices.foo\\.bar.boo": undefined
}
}]
},
expectedResult: {
"org.gnome.orca": [{
options: {
"filename": gpii.tests.JSONSettingsHandler.testTempFilePaths[2]
},
settings: {
"profiles.default.profile.0": {
newValue: "undefault",
oldValue: "Default"
},
"profiles.default.voices.default.rate": {
newValue: undefined,
oldValue: 50
},
"profiles.default.voices.foo\\.bar.boo": {
newValue: undefined,
oldValue: "far"
}
}
}]
}
}
}
};
// TODO: consolidate all this duplicated code across our three file-based handlers
gpii.tests.JSONSettingsHandler.setTester = function (name, test) {
// read original JSON and copy to a file we can mess up:
var origJSON = fs.readFileSync(test.defaultFile, "utf-8");
fs.writeFileSync(test.tmpFile, origJSON, "utf-8");
// test return payload
var returnPayload = gpii.settingsHandlers.JSONSettingsHandler.set(test.set.payload);
jqUnit.assertDeepEq("Checking return payload for " + name + " JSON file: ", test.set.expectedResult, returnPayload);
// next check that the written JSON file is as expected:
var savedJSON = JSON.parse(fs.readFileSync(test.tmpFile, "utf-8"));
var expectedJSON = JSON.parse(fs.readFileSync(test.expectedFile, "utf-8"));
jqUnit.assertDeepEq("checking JSON file for " + name + ": ", expectedJSON, savedJSON);
};
gpii.tests.JSONSettingsHandler.getTester = function (name, test) {
if (test.get) {
var returnPayload = gpii.settingsHandlers.JSONSettingsHandler.get(test.get.payload);
jqUnit.assertDeepEq("Checking return payload for " + name + " JSON file: ", test.get.expectedResult, returnPayload);
}
};
gpii.tests.JSONSettingsHandler.testSet = function () {
fluid.each(gpii.tests.JSONSettingsHandler.tests, function (v, k) {
gpii.tests.JSONSettingsHandler.setTester(k, v);
});
};
gpii.tests.JSONSettingsHandler.testGet = function () {
fluid.each(gpii.tests.JSONSettingsHandler.tests, function (v, k) {
gpii.tests.JSONSettingsHandler.getTester(k, v);
});
};
fluid.defaults("gpii.tests.JSONSettingsHandler.environment", {
gradeNames: ["fluid.test.testEnvironment"],
components: {
tester: {
type: "gpii.tests.JSONSettingsHandler.holder"
}
}
});
fluid.defaults("gpii.tests.JSONSettingsHandler.holder", {
gradeNames: ["fluid.test.testCaseHolder"],
listeners: {
onDestroy: "gpii.tests.JSONSettingsHandler.deleteTestFiles"
},
modules: [{
name: "JSONSettingsHandler",
tests: [{
expect: 6,
name: "JSONHandler.set",
func: "gpii.tests.JSONSettingsHandler.testSet"
}, {
expect: 2,
name: "JSONHandler.get",
func: "gpii.tests.JSONSettingsHandler.testGet"
}]
}]
});
module.exports = kettle.test.bootstrap("gpii.tests.JSONSettingsHandler.environment");