Merge pull request #681 from qistoph/testing

Testing
This commit is contained in:
Michael Teeuw 2017-02-07 12:02:40 +01:00 committed by GitHub
commit d35f2c4a4f
3 changed files with 160 additions and 3 deletions

View File

@ -2,10 +2,42 @@ var fs = require("fs");
var path = require("path"); var path = require("path");
var chai = require("chai"); var chai = require("chai");
var expect = chai.expect; var expect = chai.expect;
var vm = require("vm");
before(function() {
var basedir = path.join(__dirname, "../../..");
var fileName = "js/app.js";
var filePath = path.join(basedir, fileName);
var code = fs.readFileSync(filePath);
this.sandbox = {
module: {},
__dirname: path.dirname(filePath),
global: {},
console: {
log: function() { /*console.log("console.log(", arguments, ")");*/ }
},
process: {
on: function() { /*console.log("process.on called with: ", arguments);*/ },
env: {}
}
};
this.sandbox.require = function(filename) {
// This modifies the global slightly,
// but supplies vm with essential code
return require(filename);
};
vm.runInNewContext(code, this.sandbox, fileName);
});
after(function() {
//console.log(global);
});
describe("'global.root_path' set in js/app.js", function() { describe("'global.root_path' set in js/app.js", function() {
var appMM = require("../../../js/app.js")
var expectedSubPaths = [ var expectedSubPaths = [
"modules", "modules",
"serveronly", "serveronly",
@ -18,8 +50,16 @@ describe("'global.root_path' set in js/app.js", function() {
expectedSubPaths.forEach(subpath => { expectedSubPaths.forEach(subpath => {
it(`contains a file/folder "${subpath}"`, function() { it(`contains a file/folder "${subpath}"`, function() {
expect(fs.existsSync(path.join(global.root_path, subpath))).to.equal(true); expect(fs.existsSync(path.join(this.sandbox.global.root_path, subpath))).to.equal(true);
}); });
}); });
it("should not modify global.root_path for testing", function() {
expect(global.root_path).to.equal(undefined);
});
it("should not modify global.version for testing", function() {
expect(global.version).to.equal(undefined);
});
}); });

View File

@ -0,0 +1,115 @@
var fs = require("fs");
var path = require("path");
var chai = require("chai");
var expect = chai.expect;
describe("Translations have the same keys as en.js", function() {
var translations = require("../../../translations/translations.js");
var base = JSON.parse(stripComments(fs.readFileSync("translations/en.json", "utf8")));
var baseKeys = Object.keys(base).sort();
Object.keys(translations).forEach(function(tr) {
var fileName = translations[tr];
var fileContent = stripComments(fs.readFileSync(fileName, "utf8"));
var fileTranslations = JSON.parse(fileContent);
var fileKeys = Object.keys(fileTranslations).sort();
it(fileName + " keys should be in base", function() {
fileKeys.forEach(function(key) {
expect( baseKeys.indexOf(key) ).to.be.at.least(0);
});
});
it(fileName + " should contain all base keys", function() {
var test = this;
baseKeys.forEach(function(key) {
// TODO: when all translations are fixed, use
// expect(fileKeys).to.deep.equal(baseKeys);
// instead of the try-catch-block
try {
expect(fileKeys).to.deep.equal(baseKeys);
} catch(e) {
if (e instanceof chai.AssertionError) {
test.skip();
} else {
throw e;
}
}
});
});
});
});
// Copied from js/translator.js
function stripComments(str, opts) {
// strip comments copied from: https://github.com/sindresorhus/strip-json-comments
var singleComment = 1;
var multiComment = 2;
function stripWithoutWhitespace() {
return "";
}
function stripWithWhitespace(str, start, end) {
return str.slice(start, end).replace(/\S/g, " ");
}
opts = opts || {};
var currentChar;
var nextChar;
var insideString = false;
var insideComment = false;
var offset = 0;
var ret = "";
var strip = opts.whitespace === false ? stripWithoutWhitespace : stripWithWhitespace;
for (var i = 0; i < str.length; i++) {
currentChar = str[i];
nextChar = str[i + 1];
if (!insideComment && currentChar === "\"") {
var escaped = str[i - 1] === "\\" && str[i - 2] !== "\\";
if (!escaped) {
insideString = !insideString;
}
}
if (insideString) {
continue;
}
if (!insideComment && currentChar + nextChar === "//") {
ret += str.slice(offset, i);
offset = i;
insideComment = singleComment;
i++;
} else if (insideComment === singleComment && currentChar + nextChar === "\r\n") {
i++;
insideComment = false;
ret += strip(str, offset, i);
offset = i;
continue;
} else if (insideComment === singleComment && currentChar === "\n") {
insideComment = false;
ret += strip(str, offset, i);
offset = i;
} else if (!insideComment && currentChar + nextChar === "/*") {
ret += str.slice(offset, i);
offset = i;
insideComment = multiComment;
i++;
continue;
} else if (insideComment === multiComment && currentChar + nextChar === "*/") {
i++;
insideComment = false;
ret += strip(str, offset, i + 1);
offset = i + 1;
continue;
}
}
return ret + (insideComment ? strip(str.substr(offset)) : str.substr(offset));
}

View File

@ -31,3 +31,5 @@ var translations = {
"hu" : "translations/hu.json", // Hungarian "hu" : "translations/hu.json", // Hungarian
"is" : "translations/is.json", // Icelandic "is" : "translations/is.json", // Icelandic
}; };
if (typeof module !== "undefined") {module.exports = translations;}