1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147
|
/* Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/ */
function run_test() {
const { StructuredLogger } = ChromeUtils.importESModule(
"resource://testing-common/StructuredLog.sys.mjs"
);
let testBuffer = [];
let appendBuffer = function (msg) {
testBuffer.push(JSON.stringify(msg));
};
let assertLastMsg = function (refData) {
// Check all fields in refData agree with those in the
// last message logged, and pop that message.
let lastMsg = JSON.parse(testBuffer.pop());
for (let field in refData) {
deepEqual(lastMsg[field], refData[field]);
}
// The logger should always set the source to the logger name.
equal(lastMsg.source, "test_log");
};
let logger = new StructuredLogger("test_log", appendBuffer);
// Test unstructured logging
logger.info("Test message");
assertLastMsg({
action: "log",
message: "Test message",
level: "INFO",
});
logger.info("Test message", { foo: "bar" });
assertLastMsg({
action: "log",
message: "Test message",
level: "INFO",
extra: { foo: "bar" },
});
// Test end / start actions
logger.testStart("aTest");
assertLastMsg({
test: "aTest",
action: "test_start",
});
logger.testEnd("aTest", "OK");
assertLastMsg({
test: "aTest",
action: "test_end",
status: "OK",
});
// A failed test populates the "expected" field.
logger.testStart("aTest");
logger.testEnd("aTest", "FAIL", "PASS");
assertLastMsg({
action: "test_end",
test: "aTest",
status: "FAIL",
expected: "PASS",
});
// A failed test populates the "expected" field.
logger.testStart("aTest");
logger.testEnd("aTest", "FAIL", "PASS", null, "Many\nlines\nof\nstack\n");
assertLastMsg({
action: "test_end",
test: "aTest",
status: "FAIL",
expected: "PASS",
stack: "Many\nlines\nof\nstack\n",
});
// Skipped tests don't log failures
logger.testStart("aTest");
logger.testEnd("aTest", "SKIP", "PASS");
ok(!JSON.parse(testBuffer[testBuffer.length - 1]).hasOwnProperty("expected"));
assertLastMsg({
action: "test_end",
test: "aTest",
status: "SKIP",
});
logger.testStatus("aTest", "foo", "PASS", "PASS", "Passed test");
ok(!JSON.parse(testBuffer[testBuffer.length - 1]).hasOwnProperty("expected"));
assertLastMsg({
action: "test_status",
test: "aTest",
subtest: "foo",
status: "PASS",
message: "Passed test",
});
logger.testStatus("aTest", "bar", "FAIL");
assertLastMsg({
action: "test_status",
test: "aTest",
subtest: "bar",
status: "FAIL",
expected: "PASS",
});
logger.testStatus(
"aTest",
"bar",
"FAIL",
"PASS",
null,
"Many\nlines\nof\nstack\n"
);
assertLastMsg({
action: "test_status",
test: "aTest",
subtest: "bar",
status: "FAIL",
expected: "PASS",
stack: "Many\nlines\nof\nstack\n",
});
// Skipped tests don't log failures
logger.testStatus("aTest", "baz", "SKIP");
ok(!JSON.parse(testBuffer[testBuffer.length - 1]).hasOwnProperty("expected"));
assertLastMsg({
action: "test_status",
test: "aTest",
subtest: "baz",
status: "SKIP",
});
// Suite start and end messages.
var ids = { aManifest: ["aTest"] };
logger.suiteStart(ids);
assertLastMsg({
action: "suite_start",
tests: { aManifest: ["aTest"] },
});
logger.suiteEnd();
assertLastMsg({
action: "suite_end",
});
}
|