gpii-universal
Version:
Cross platform, core components of the GPII personalization infrastructure.
255 lines (237 loc) • 8.26 kB
JavaScript
/*
* INI 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"),
fs = require("fs");
fluid.registerNamespace("gpii.tests");
fluid.require("%gpii-universal");
gpii.loadTestingSupport();
require("settingsHandlers");
var testTempFilePaths = [
__dirname + "/data/INISettingsHandler/test1_tmp.ini",
__dirname + "/data/INISettingsHandler/test2_tmp.ini"
];
var deleteTestFiles = function () {
fluid.each(testTempFilePaths, function (filePath) {
if (fs.existsSync(filePath)) {
fs.unlinkSync(filePath);
}
});
};
var tests = {
basicTest: {
defaultFile: __dirname + "/data/INISettingsHandler/test1_default.ini",
tmpFile: testTempFilePaths[0],
expectedFile: __dirname + "/data/INISettingsHandler/test1_expectedOutput.ini",
set: {
payload: {
"nvda.screenReader": [{
options: {
"filename": testTempFilePaths[0]
},
settings: {
"general.askToExit": false,
"general.showWelcomeDialogAtStartup": false,
"speech.symbolLevel": 90
}
}]
},
expectedResult: {
"nvda.screenReader": [{
options: {
"filename": testTempFilePaths[0]
},
settings: {
"general.askToExit": {
newValue: false,
oldValue: "True"
},
"general.showWelcomeDialogAtStartup": {
newValue: false,
oldValue: "True"
},
"speech.symbolLevel": {
newValue: 90,
oldValue: 100
}
}
}]
}
},
get: {
payload: {
"nvda.screenReader": [{
options: {
"filename": __dirname +
"/data/INISettingsHandler/test1_default.ini"
},
settings: {
"general.askToExit": null,
"general.showWelcomeDialogAtStartup": null,
"speech.symbolLevel": null
}
}]
},
expectedResult: {
"nvda.screenReader": [{
settings: {
"general.askToExit": "True",
"general.showWelcomeDialogAtStartup": "True",
"speech.symbolLevel": 100
}
}]
}
}
},
complexTest: {
defaultFile: __dirname +
"/data/INISettingsHandler/test2_default.ini",
tmpFile: testTempFilePaths[1],
expectedFile: __dirname +
"/data/INISettingsHandler/test2_expectedOutput.ini",
set: {
payload: {
"nvda.screenReader": [{
options: {
"filename": testTempFilePaths[1]
},
settings: {
"speech.symbolLevel": 90,
"speech.espeak.rate": 40,
"speech.espeak.pitch": 30,
"speech.espeak2.newEntry": 30
}
}]
},
expectedResult: {
"nvda.screenReader": [{
options: {
"filename": testTempFilePaths[1]
},
settings: {
"speech.symbolLevel": {
newValue: 90,
oldValue: 100
},
"speech.espeak.rate": {
newValue: 40,
oldValue: 30
},
"speech.espeak.pitch": {
newValue: 30,
oldValue: 40
},
"speech.espeak2.newEntry": {
newValue: 30,
oldValue: undefined
}
}
}]
}
},
get: {
payload: {
"nvda.screenReader": [{
options: {
"filename": __dirname + "/data/INISettingsHandler/test2_default.ini"
},
settings: {
"speech.symbolLevel": null,
"speech.espeak.rate": null,
"speech.espeak.pitch": null,
"speech.espeak2.newEntry": null
}
}]
},
expectedResult: {
"nvda.screenReader": [{
settings: {
"speech.symbolLevel": 100,
"speech.espeak.rate": 30,
"speech.espeak.pitch": 40,
"speech.espeak2.newEntry": undefined
}
}]
}
}
}
};
// avoid issue with windows using \r\n and unix using \n
var unixLinebreak = function (str) {
return str.replace(/\r\n/g, "\n");
};
var setTester = function (name, test) {
// read original INI and copy to a file we can mess up:
var origINI = fs.readFileSync(test.defaultFile, "utf-8");
fs.writeFileSync(test.tmpFile, origINI, "utf-8");
// test return payload
var returnPayload = gpii.settingsHandlers.INISettingsHandler.set(
test.set.payload);
jqUnit.assertDeepEq("Checking return payload for " + name +
" INI file: ", test.set.expectedResult, returnPayload);
// next check that the written INI file is as expected:
var savedINI = fs.readFileSync(test.tmpFile, "utf-8");
savedINI = unixLinebreak(savedINI);
var expectedINI = fs.readFileSync(test.expectedFile, "utf-8");
expectedINI = unixLinebreak(expectedINI);
jqUnit.assertEquals("checking INI file for " + name + ": ",
expectedINI, savedINI);
};
var getTester = function (name, test) {
var returnPayload = gpii.settingsHandlers.INISettingsHandler.get(
test.get.payload);
jqUnit.assertDeepEq("Checking return payload for " + name +
" INI file: ", test.get.expectedResult, returnPayload);
};
gpii.tests.INIHandlerSet = function () {
fluid.each(tests, function (v, k) {
setTester(k, v);
});
};
gpii.tests.INIHandlerGet = function () {
fluid.each(tests, function (v, k) {
getTester(k, v);
});
};
fluid.defaults("gpii.tests.INISettingsHandler", {
gradeNames: ["fluid.test.testEnvironment"],
components: {
tester: {
type: "gpii.testsINISettingsHandlerTester"
}
}
});
fluid.defaults("gpii.testsINISettingsHandlerTester", {
gradeNames: ["fluid.test.testCaseHolder"],
listeners: {
onDestroy: deleteTestFiles
},
modules: [{
name: "INISettingsHandler",
tests: [{
expect: 4,
name: "INIHandler.set",
func: "gpii.tests.INIHandlerSet"
}, {
expect: 2,
name: "INIHandler.get",
func: "gpii.tests.INIHandlerGet"
}]
}]
});
module.exports = gpii.test.runCouchTestDefs("gpii.tests.INISettingsHandler");