UNPKG

gpii-universal

Version:

Cross platform, core components of the GPII personalization infrastructure.

273 lines (257 loc) 10.4 kB
/* * 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 */ "use strict"; 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");