nano-test
Version:
nano size unit test toolkit.
336 lines (328 loc) • 11.3 kB
JavaScript
const iconsole = require("interactiveConsole");
exports.test = function () {
this.history = [];
this.tests = [];
this.interactivrConsole = "";
this.processLine = "";
this.processIcon = [
"|",
"/",
"-",
"\\"
];
this.processIconI=0;
this.processTimeout = "";
this.result = {
ok: 0,
fail: 0
};
this.detected = {
interactiveConsole: 0,
};
this.processing = function (){
let progress = thast.tests.length-thast.result.ok-thast.result.fail;
if (thast.detected.interactiveConsole === 0) {
process.stdout.clearLine();
process.stdout.cursorTo(0);
process.stdout.write(thast.processLine+" "+thast.processIcon[thast.processIconI]);
thast.processIconI++;
if(thast.processIconI >3)
thast.processIconI=0;
}else{
thast.interactivrConsole.bar.update({
"name" : "progress",
"update" : {
"1" : progress,
"2" : thast.result.ok,
"3" : thast.result.fail
}});
thast.interactivrConsole.cursor.up(3);
thast.interactivrConsole.bar.draw("progress");
}
if(thast.processTimeout !== ""){
clearTimeout(thast.processTimeout);
thast.processTimeout="";
}
if(
(thast.result.ok+thast.result.fail === 0)||
(parseInt(progress) !== 0)
)
thast.processTimeout = setTimeout(thast.processing, 20);
};
this.check = function () {
try {
thast.interactivrConsole = new iconsole.console();
thast.detected.interactiveConsole = 1;
} catch (e) {
thast.detected.interactiveConsole = 0;
}
};
this.printLog = function () {
for (let i = 0; i < this.history.length; i++)
if(typeof this.history[i].debug !== "undefined")
console.log(this.history[i]);
for (let i = 0; i < this.history.length; i++)
if (this.history[i].result === "ok") {
if (thast.detected.interactiveConsole === 0) {
console.log(
this.history[i].name +
" : " +
this.history[i].result +
" - " +
this.history[i].time +
" ms"
);
} else {
this.interactivrConsole.printLn(
this.interactivrConsole.style(
"✓ ",
{color: "green"}
)+
this.history[i].name +
" : " +
this.history[i].result +
" - " + this.history[i].time +
" ms "
);
}
} else {
if (thast.detected.interactiveConsole === 0) {
console.log(
this.history[i].name +
" : " +
this.history[i].result +
" --- value --- " +
JSON.stringify(
this.history[i].value
)
);
} else {
this.interactivrConsole.printLn(
this.interactivrConsole.style(
"✗ ",
{color: "red"}
)+
this.history[i].name +
" : " +
this.history[i].result +
" --- value --- " +
JSON.stringify(this.history[i].value)
);
}
}
};
this.addLog = function (input) {
this.history.push({
time: input.time,
name: input.name,
result: input.result,
error: input.error,
value: input.value,
debug: input.debug
});
};
this.add = function (name, test, rule, sample) {
this.tests.push({
name: name,
test: test,
rule: rule,
sample: sample,
});
};
this.test = async function (name, test, rule, sample) {
let result;
let error = "none";
let time = 0;
let startTime;
let value;
let endTime;
let debug;
try {
if(typeof test === "string"){
startTime = (+new Date());
eval("value = " + test);
endTime = (+new Date());
}else if(typeof test === "object"){
if(
(typeof test.options === "undefined")||
(test.options.length === 0)){
startTime = (+new Date());
value = await test.function();
endTime = (+new Date());
}else if(test.options.length === 1){
startTime = (+new Date());
value = await test.function(
test.options[0]
);
endTime = (+new Date());
}else if(test.options.length === 2){
startTime = (+new Date());
value = await test.function(
test.options[0],
test.options[1]
);
endTime = (+new Date());
}else if(test.options.length === 3){
startTime = (+new Date());
value = await test.function(
test.options[0],
test.options[1],
test.options[2]
);
endTime = (+new Date());
}else if(test.options.length === 4){
startTime = (+new Date());
value = await test.function(
test.options[0],
test.options[1],
test.options[2],
test.options[3]
);
endTime = (+new Date());
}else if(test.options.length === 5){
startTime = (+new Date());
value = await test.function(
test.options[0],
test.options[1],
test.options[2],
test.options[3],
test.options[4]
);
endTime = (+new Date());
}
}else{
startTime = (+new Date());
value = await test();
endTime = (+new Date());
}
time = (endTime - startTime).toString();
result = "ok";
} catch (e) {
result = "failed";
error = "runtime Error";
debug = e;
}
if (result === "ok")
if (rule == "==") {
if (value == sample) {
result = "ok";
} else {
result = "faild";
}
} else if (rule == "j==") {
if (JSON.stringify(value) == JSON.stringify(sample)) {
result = "ok";
} else {
result = "faild";
}
} else if (rule == "===") {
if (value === sample) {
result = "ok";
} else {
result = "faild";
}
} else if (rule == "!=") {
if (value != sample) {
result = "ok";
} else {
result = "faild";
}
} else if (rule == "!==") {
if (value !== sample) {
result = "ok";
} else {
result = "faild";
}
} else if (rule == "<") {
if (value < sample) {
result = "ok";
} else {
result = "faild";
}
} else if (rule == ">") {
if (value > sample) {
result = "ok";
} else {
result = "faild";
}
} else if (rule == "length") {
if (value.length === sample) {
result = "ok";
} else {
result = "faild";
}
}
if (result == "faild")
this.result.fail++;
else
this.result.ok++;
return {
time: time,
name: name,
result: result,
error: error,
value: value,
sample: sample,
debug: debug
};
};
process.stderr.write("\x1B[?25l");
this.run = async function () {
process.stderr.write("\x1B[?25l");
if (thast.detected.interactiveConsole === 1) {
thast.interactivrConsole.print("\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
thast.interactivrConsole.bar.init({
"name":"progress",
"max" : thast.tests.length
});
thast.interactivrConsole.bar.addLine({
"bar" : "progress",
"id" : "1",
"title" : "not tested",
"color" : "blue"
});
thast.interactivrConsole.bar.addLine({
"bar" : "progress",
"id" : "2",
"title" : "ok",
"color" : "green"
});
thast.interactivrConsole.bar.addLine({
"bar" : "progress",
"id" : "3",
"title" : "failed",
"color" : "red"
});
}
for (var i = 0; i < this.tests.length; i++) {
this.addLog(
await this.test(
this.tests[i].name,
this.tests[i].test,
this.tests[i].rule,
this.tests[i].sample
)
);
}
thast.processing();
thast.printLog();
if (thast.detected.interactiveConsole === 0) {
console.log("ok :" + thast.result.ok.toString() + " | failed : " + thast.result.fail.toString());
} else {
this.interactivrConsole.printLn(
"ok :" +
this.interactivrConsole.style(
thast.result.ok.toString(), {
color: "green"
})+ " | failed : " +
this.interactivrConsole.style(thast.result.fail.toString(),
{color: "red"}
)
);
}
process.stderr.write("\x1B[?25h");
};
var thast = this;
this.check();
thast.processing();
};