cnchar/test/test.js

86 lines
2.3 KiB
JavaScript

const chalk = require('chalk');
function green (txt) {
console.log(chalk.green(txt));
}
function red (txt) {
console.log(chalk.red(txt));
}
function blue (txt) {
console.log(chalk.blue(txt));
}
function testSingle ({
name, test, expect, args
}, argsConfig) {
let result;
if (args instanceof Array) {
result = test.apply(argsConfig, args.map((item) => {
return argsConfig[item];
}));
} else {
result = test.call(argsConfig, argsConfig);
}
let res = {
result,
expect,
name
};
if (typeof result !== typeof expect) {
res.pass = false;
} else {
if (typeof res === 'object') {
res.pass = objectEqual(result, expect);
} else {
res.pass = result === expect;
}
}
return res;
};
function main (config, argsConfig) {
blue('Test start:');
config.forEach((item) => {
let result = testSingle(item, argsConfig);
if (result.pass) {
green(`PASS: [${result.name}]; result:${JSON.stringify(result.result)}`);
} else {
red(`FAIL: [${result.name}]; result:${JSON.stringify(result.result)}; but expect: ${JSON.stringify(result.expect)}`);
}
console.log();
});
}
function objectEqual (o1, o2) {
return objectEqualBase(o1, o2) && objectEqualBase(o2, o1);
}
function objectEqualBase (result, expect) {
// 数组与json都是用for in遍历
// 数组需要下标一致
let equal = true;
for (let key in result) {
let resultItem = result[key];
let expectItem = expect[key];
if (typeof resultItem !== typeof expectItem) {
equal = false;
} else if (typeof resultItem === 'object') {
if (!objectEqual(resultItem, expectItem)) {
equal = false;
}
} else if (resultItem !== expectItem) {
equal = false;
}
}
return equal;
}
function startTest ({config, args}) {
main(config, args);
}
module.exports = startTest;
// console.log(cnchar.stroke('一个', 'order'));
// console.log(cnchar.stroke('長城', 'count', 'order', 'name'));
// console.log(cnchar.orderToWord(['横', '撇', '捺']));
// console.log('美好的地方'.spell('tone'));
// module.exports = cnchar