ww: put test result trailers on a new line

This commit is contained in:
2026-08-21 06:19:26 +09:00
parent 9b6b1100f4
commit b5fb478613
5 changed files with 281 additions and 9 deletions

View File

@@ -1683,6 +1683,115 @@ fn cwdwritedata(dir: str, label: str) void = {
clean(root);
};
@test fn directory_test_trailer_starts_on_new_line() void = {
let root: str = fresh();
let pass: str = strings.concat(root, "/pass");
let fail: str = strings.concat(root, "/fail");
let complete: str = strings.concat(root, "/complete");
let empty: str = strings.concat(root, "/empty");
let signal: str = strings.concat(root, "/signal");
mkdirall(pass);
mkdirall(fail);
mkdirall(complete);
mkdirall(empty);
mkdirall(signal);
writefile(strings.concat(pass, "/partial_test.ww"), strings.concat(
"package trailer_pass_test;\nimport os;\n",
"fn init() void = { os.write(os.STDOUT_FILENO,",
" \"partial-success\".ptr, 15u64); os.exit(0); };\n",
"@test fn unreachable() void = { void; };\n"));
writefile(strings.concat(fail, "/partial_test.ww"), strings.concat(
"package trailer_fail_test;\nimport os;\n",
"fn init() void = { os.write(os.STDERR_FILENO,",
" \"partial-failure\".ptr, 15u64); os.exit(7); };\n",
"@test fn unreachable() void = { void; };\n"));
writefile(strings.concat(complete, "/complete_test.ww"), strings.concat(
"package trailer_complete_test;\nimport os;\n",
"fn init() void = { os.write(os.STDOUT_FILENO,",
" \"complete\\n\".ptr, 9u64); os.exit(0); };\n",
"@test fn unreachable() void = { void; };\n"));
writefile(strings.concat(empty, "/empty_test.ww"), strings.concat(
"package trailer_empty_test;\nimport os;\n",
"fn init() void = { os.exit(0); };\n",
"@test fn unreachable() void = { void; };\n"));
writefile(strings.concat(signal, "/partial_test.ww"), strings.concat(
"package trailer_signal_test;\nimport os;\n",
"fn init() void = { os.write(os.STDOUT_FILENO,",
" \"partial-signal\".ptr, 14u64);",
" os.kill(os.getpid(), os.SIGTERM); };\n",
"@test fn unreachable() void = { void; };\n"));
let stages: []str = ["ww", "ww_ww"];
let tags: []str = ["c", "ww"];
let multiout: []str = ["", ""];
let multierr: []str = ["", ""];
let retained: []str = ["", ""];
let out: commandout;
let i: i32 = 0;
for (i < stages.len) {
let mav: []str = [driver(stages[i]), "test", "-j", "5", "-run",
"unreachable", pass, fail, complete, empty, signal];
runcommand(root, strings.concat("trailer-multi-", tags[i]), mav,
(90i64 * (time.second: i64)): time.duration, &out);
expectexit(&out, 1);
assert(out.stderr.len == 0);
assert(has(out.stdout, "partial-success\nok "));
assert(!has(out.stdout, "partial-successok "));
assert(has(out.stdout, "partial-failure\nFAIL "));
assert(!has(out.stdout, "partial-failureFAIL "));
assert(has(out.stdout, "partial-signal\nFAIL "));
assert(!has(out.stdout, "partial-signalFAIL "));
assert(has(out.stdout, "complete\nok "));
assert(!has(out.stdout, "complete\n\nok "));
multiout[i] = strings.dup(out.stdout);
multierr[i] = strings.dup(out.stderr);
let eav: []str = [driver(stages[i]), "test", empty];
runcommand(root, strings.concat("trailer-empty-", tags[i]), eav,
(60i64 * (time.second: i64)): time.duration, &out);
expectexit(&out, 0);
assert(out.stderr.len == 0);
assert(pos(out.stdout, "ok ") == 0);
let lav: []str = [driver(stages[i]), "test", "-list", pass];
runcommand(root, strings.concat("trailer-list-", tags[i]), lav,
(60i64 * (time.second: i64)): time.duration, &out);
expectexit(&out, 0);
assert(out.stderr.len == 0);
assert(has(out.stdout, "partial-success\nok "));
retained[i] = strings.concat(root, "/retained-", tags[i]);
let rav: []str = [driver(stages[i]), "test", "-o", retained[i],
pass];
runcommand(root, strings.concat("trailer-retained-", tags[i]), rav,
(60i64 * (time.second: i64)): time.duration, &out);
expectexit(&out, 0);
assert(out.stderr.len == 0);
assert(has(out.stdout, "partial-success\nok "));
assert(os.exists(retained[i]));
let runav: []str = [retained[i]];
runcommand(root, strings.concat("trailer-manual-", tags[i]), runav,
(30i64 * (time.second: i64)): time.duration, &out);
expectexit(&out, 0);
assert(same(out.stdout, "partial-success"));
assert(out.stderr.len == 0);
let rawav: []str = [driver(stages[i]), "test",
strings.concat(pass, "/partial_test.ww")];
runcommand(root, strings.concat("trailer-raw-", tags[i]), rawav,
(60i64 * (time.second: i64)): time.duration, &out);
expectexit(&out, 0);
assert(same(out.stdout, "partial-success"));
assert(out.stderr.len == 0);
i += 1;
};
assert(same(multiout[0], multiout[1]));
assert(same(multierr[0], multierr[1]));
assert(same(readfile(retained[0]), readfile(retained[1])));
clean(root);
};
@test fn imported_dependency_tests_do_not_leak() void = {
let root: str = fresh();
let base: str = packagepath("dependency");