Add tests for clusterctl's output formatting

Add tests for formatOutput and formatOutputColored by using the same
lines as the line parser uses for testing.
This commit is contained in:
Hornwitser committed 2019-11-30 00:08:10 +01:00
1 parent 3bccbac496
commit bfff297d9a
4 files changed
+154 -89

No files matched your search

+6
View File
@@ -432,6 +432,12 @@ async function startControl() {
//XXX control.close("done");
}
module.exports = {
// for testing only
_formatOutputColored: formatOutputColored,
_formatOutput: formatOutput,
}
if (module === require.main) {
console.warn(`
+31
View File
@@ -0,0 +1,31 @@
const assert = require('assert').strict;
const chalk = require('chalk');
const { testLines } = require('./lib/factorio/lines');
const clusterctl = require('../clusterctl.js');
describe("clusterctl", function() {
describe("formatOutputColored()", function() {
it("should pass the test lines", function() {
// Ensure tests get uncoloured output.
let old = chalk.level;
chalk.level = 0;
for (let [reference, output] of testLines) {
let line = clusterctl._formatOutputColored(output);
assert.deepEqual(line, reference);
}
chalk.level = old;
});
});
describe("formatOutput()", function() {
it("should pass the test lines", function() {
for (let [reference, output] of testLines) {
let line = clusterctl._formatOutput(output);
assert.deepEqual(line, reference);
}
});
});
});
+116
View File
@@ -0,0 +1,116 @@
// Lines for testing the factorio output
let testLines = new Map([
[
" 1.306 Info RemoteCommandProcessor.cpp:131: Starting RCON interface at port 4000",
{
format: 'seconds',
time: '1.306',
type: 'log',
level: 'Info',
file: "RemoteCommandProcessor.cpp:131",
message: "Starting RCON interface at port 4000",
}
],
[
" 0.622 Warning FileUtil.cpp:527: test not found; using test.zip",
{
format: 'seconds',
time: '0.622',
type: 'log',
level: 'Warning',
file: "FileUtil.cpp:527",
message: "test not found; using test.zip",
}
],
[
" 0.554 Error Main.cpp:839: require_user_verification must be enabled for public games.",
{
format: 'seconds',
time: '0.554',
type: 'log',
level: 'Error',
file: "Main.cpp:839",
message: "require_user_verification must be enabled for public games.",
}
],
[
" 640.910 Quitting: remote-quit.",
{
format: 'seconds',
time: '640.910',
type: 'generic',
message: "Quitting: remote-quit.",
}
],
[
"1641.421 Goodbye",
{
format: 'seconds',
time: '1641.421',
type: 'generic',
message: "Goodbye",
}
],
[
"2019-01-20 10:30:04 [JOIN] User joined the game",
{
format: 'date',
time: '2019-01-20 10:30:04',
type: 'action',
action: "JOIN",
message: "User joined the game",
}
],
[
"2019-01-20 10:30:07 [CHAT] User: chat message",
{
format: 'date',
time: '2019-01-20 10:30:07',
type: 'action',
action: "CHAT",
message: "User: chat message",
}
],
[
"2019-01-20 10:30:14 [COMMAND] User (command): blah",
{
format: 'date',
time: '2019-01-20 10:30:14',
type: 'action',
action: "COMMAND",
message: "User (command): blah",
}
],
[
"2019-01-20 10:30:14 Cannot execute command. Error: [string \"blah\"]:1: syntax error near <eof>",
{
format: 'date',
time: '2019-01-20 10:30:14',
type: 'generic',
message: "Cannot execute command. Error: [string \"blah\"]:1: syntax error near <eof>",
}
],
[
"2019-01-20 10:30:21 [LEAVE] User left the game",
{
format: 'date',
time: '2019-01-20 10:30:21',
type: 'action',
action: "LEAVE",
message: "User left the game",
}
],
[
"Error while running event level::on_nth_tick(1)",
{
format: 'none',
type: 'generic',
message: "Error while running event level::on_nth_tick(1)",
}
],
])
module.exports = {
testLines,
}
+1 -89
View File
@@ -3,6 +3,7 @@ const fs = require("fs-extra");
const path = require("path");
const factorio = require("lib/factorio");
const { testLines } = require("./lines");
describe("lib/factorio/server", function() {
@@ -92,95 +93,6 @@ describe("lib/factorio/server", function() {
});
describe("parseOutput()", function() {
let testLines = new Map([
[
" 1.306 Info RemoteCommandProcessor.cpp:131: Starting RCON interface at port 4000",
{
format: 'seconds',
time: '1.306',
type: 'log',
level: 'Info',
file: "RemoteCommandProcessor.cpp:131",
message: "Starting RCON interface at port 4000",
}
],
[
" 640.910 Quitting: remote-quit.",
{
format: 'seconds',
time: '640.910',
type: 'generic',
message: "Quitting: remote-quit.",
}
],
[
"1641.421 Goodbye",
{
format: 'seconds',
time: '1641.421',
type: 'generic',
message: "Goodbye",
}
],
[
"2019-01-20 10:30:04 [JOIN] User joined the game",
{
format: 'date',
time: '2019-01-20 10:30:04',
type: 'action',
action: "JOIN",
message: "User joined the game",
}
],
[
"2019-01-20 10:30:07 [CHAT] User: chat message",
{
format: 'date',
time: '2019-01-20 10:30:07',
type: 'action',
action: "CHAT",
message: "User: chat message",
}
],
[
"2019-01-20 10:30:14 [COMMAND] User (command): blah",
{
format: 'date',
time: '2019-01-20 10:30:14',
type: 'action',
action: "COMMAND",
message: "User (command): blah",
}
],
[
"2019-01-20 10:30:14 Cannot execute command. Error: [string \"blah\"]:1: syntax error near <eof>",
{
format: 'date',
time: '2019-01-20 10:30:14',
type: 'generic',
message: "Cannot execute command. Error: [string \"blah\"]:1: syntax error near <eof>",
}
],
[
"2019-01-20 10:30:21 [LEAVE] User left the game",
{
format: 'date',
time: '2019-01-20 10:30:21',
type: 'action',
action: "LEAVE",
message: "User left the game",
}
],
[
"Error while running event level::on_nth_tick(1)",
{
format: 'none',
type: 'generic',
message: "Error while running event level::on_nth_tick(1)",
}
],
])
it("should parse the test lines", function() {
for (let [line, reference] of testLines) {
reference.source = 'test';