Files
factorio-clusterio/lib/getFactorioLocale.spec.js
T
Hornwitser 940a7b9180 Refactor getFactorioLocale spec
Fix the incorrect error validation, be more lenient about empty values
and convert the checks to use async functions instead of error prone
callbacks.

Remove excessive getFactorioLocale checks in master.spec.
2019-08-24 11:25:40 +02:00

74 lines
2.4 KiB
JavaScript

const assert = require("assert");
const util = require("util");
const getFactorioLocale = require("./getFactorioLocale");
const asObjectAsync = util.promisify(getFactorioLocale.asObject);
describe("getFactorioLocale.js", function() {
describe("asObject()", function() {
it("requires 2 strings and a function as parameters", function() {
function validate(err) {
return err.message == "Error: wrong parameters provided"
}
let message = "getFactorioLocale is responding incorrectly to invalid arguments"
let callback = (err,object) => true;
assert.throws(() => getFactorioLocale.asObject(), validate, message);
assert.throws(() => getFactorioLocale.asObject("hello", "I forgot my callback"), validate, message);
assert.throws(() => getFactorioLocale.asObject(undefined, undefined, callback), validate, message);
// the proper way to do it
getFactorioLocale.asObject("factorio_0.15.27", "en", callback);
});
it("returns a nested object with base game locale information", async function() {
let object = await asObjectAsync("factorio", "en");
assert.equal(typeof object, "object");
assert.equal(object["entity-name"]["fish"], "Fish");
assert.equal(object["entity-name"]["small-lamp"], "Lamp");
let empty_keys = 0;
Object.keys(object).forEach(key => {
// first level of the nested object is always an object
assert.equal(typeof object[key], "object");
Object.keys(object[key]).forEach(key2 => {
// second level of the nested object is always a string, nearly always truthy
if (!object[key][key2]) {
empty_keys++;
}
assert.equal(typeof object[key][key2], "string");
});
});
assert(empty_keys < 10, `Got unusually high amount (${empty_keys}) of empty keys`);
});
it("has some duplicate keys", async function() {
let object = await asObjectAsync("factorio", "en");
let arrayOfKeys = [];
// collect all keys in a single array
Object.keys(object).forEach(key => {
arrayOfKeys.push(key);
Object.keys(object[key]).forEach(key2 => {
arrayOfKeys.push(key2);
});
});
// check for duplicates
let duplicateKeys = [];
let i = 0;
arrayOfKeys.forEach(key => {
let o = 0;
arrayOfKeys.forEach(key2 => {
if(i != o && key == key2){
duplicateKeys.push(key);
}
o++
});
i++;
});
// we got 704 but this is a very unexact number
assert(duplicateKeys.length > 10)
});
});
});