test: split log silent rows into silent_test.ww per ref/hare/log/silent.ha
Pure file-boundary move: the two silent-logger rows
(silentwritesnothing, silentignoresprintfln) leave lib/log/log_test.ww
for lib/log/silent_test.ww, mirroring ref/hare/log/silent.ha's
ownership (ref/hare/log has no test files of its own; the file name
follows the impl layout as directed). Only the two banner lines are
deleted; both moved blocks are byte-identical. silent_test.ww imports
log + memio only (neither row uses streq/fmt/io).
The specced funcs_test/global_test halves stay merged in log_test.ww:
the streq helper is consumed by six lprint* rows AND the
setloggerswap/printflnglobal global rows, and same-package test files
compile as one unit in dir mode (duplicate fn rejected), so that
boundary cannot be a pure move; reported upstream rather than
relocating the majority of rows.
Ordering: defaultwiredtoglobal must precede any log.setlogger caller.
All setlogger callers (setloggerswap, printflnglobal) remain after it
in log_test.ww; the silent rows never touch setlogger, and dir-mode
concat order (pkgsort: log_test.ww < silent_test.ww) keeps
defaultwiredtoglobal first overall.
Consumers: Makefile LIBRARY_TESTS gains lib/log/silent_test.ww beside
the log_test.ww entry; test/byteid/libbyteid_test.ww roster gains
fx("lib/log/silent_test.ww") after the log_test row, roster 44->45
(+1, NENTEXPECT bumped).
Validation: standalone ww test lib/log/log_test.ww (9 passed) and
lib/log/silent_test.ww (2 passed); dir mode ww test lib/log (11
passed, defaultwiredtoglobal first); test/byteid/libbyteid_test.ww
compile-only build exit 0, 45 roster appends == NENTEXPECT.
This commit is contained in:
@@ -89,28 +89,6 @@ fn streq(a: str, b: str) bool = {
|
||||
assert(!(!streq(memio.string(&mem), "\n")));
|
||||
};
|
||||
|
||||
// ---- silent: lprintln through log.silent writes no bytes --------------
|
||||
|
||||
// The silent logger's callback discards args without touching fmt or
|
||||
// any sink. Verified indirectly: we wire a memio.stream and never
|
||||
// pass it to log.silent — but the @test fn calling log.new first
|
||||
// triggers [[log.ensureinit]] so log.silent is non-nil here. Then
|
||||
// lprintln(silent, ...) must not crash and the memio sink must stay
|
||||
// empty (silent has no path to it anyway).
|
||||
@test fn silentwritesnothing() void = {
|
||||
let buf: [16]u8;
|
||||
let mem = memio.fixed(buf[0:16]);
|
||||
let s = &mem.vt;
|
||||
|
||||
let sl = log.new(s); // triggers log.ensureinit; populates log.silent
|
||||
|
||||
assert(!(log.silent == nil));
|
||||
|
||||
log.lprintln(log.silent, "ignored", 1i64, true);
|
||||
|
||||
assert(!(mem.pos != 0));
|
||||
};
|
||||
|
||||
// ---- setlogger swap: global redirects to a new sink, then to silent --
|
||||
|
||||
// Three-phase: install sl1 as global, println writes there; swap to
|
||||
@@ -181,25 +159,6 @@ fn streq(a: str, b: str) bool = {
|
||||
assert(!(mem2.pos != 0));
|
||||
};
|
||||
|
||||
// ---- silent.printfln writes nothing ---------------------------------
|
||||
|
||||
// The silent logger's printfln callback discards args without touching
|
||||
// fmt or any sink. Same pattern as [[silentwritesnothing]] for the
|
||||
// bare-args path.
|
||||
@test fn silentignoresprintfln() void = {
|
||||
let buf: [16]u8;
|
||||
let mem = memio.fixed(buf[0:16]);
|
||||
let s = &mem.vt;
|
||||
|
||||
let sl = log.new(s); // triggers log.ensureinit; populates log.silent
|
||||
|
||||
assert(!(log.silent == nil));
|
||||
|
||||
log.lprintfln(log.silent, "ignored={}", 1i64);
|
||||
|
||||
assert(!(mem.pos != 0));
|
||||
};
|
||||
|
||||
// ---- lprintfln: indexed {N} placeholder across log → fmt seam -------
|
||||
|
||||
// The fmt parser proper is covered in fmttest; this pins that log's
|
||||
|
||||
41
lib/log/silent_test.ww
Normal file
41
lib/log/silent_test.ww
Normal file
@@ -0,0 +1,41 @@
|
||||
package log_test;
|
||||
|
||||
import log;
|
||||
import memio;
|
||||
|
||||
// The silent logger's callback discards args without touching fmt or
|
||||
// any sink. Verified indirectly: we wire a memio.stream and never
|
||||
// pass it to log.silent — but the @test fn calling log.new first
|
||||
// triggers [[log.ensureinit]] so log.silent is non-nil here. Then
|
||||
// lprintln(silent, ...) must not crash and the memio sink must stay
|
||||
// empty (silent has no path to it anyway).
|
||||
@test fn silentwritesnothing() void = {
|
||||
let buf: [16]u8;
|
||||
let mem = memio.fixed(buf[0:16]);
|
||||
let s = &mem.vt;
|
||||
|
||||
let sl = log.new(s); // triggers log.ensureinit; populates log.silent
|
||||
|
||||
assert(!(log.silent == nil));
|
||||
|
||||
log.lprintln(log.silent, "ignored", 1i64, true);
|
||||
|
||||
assert(!(mem.pos != 0));
|
||||
};
|
||||
|
||||
// The silent logger's printfln callback discards args without touching
|
||||
// fmt or any sink. Same pattern as [[silentwritesnothing]] for the
|
||||
// bare-args path.
|
||||
@test fn silentignoresprintfln() void = {
|
||||
let buf: [16]u8;
|
||||
let mem = memio.fixed(buf[0:16]);
|
||||
let s = &mem.vt;
|
||||
|
||||
let sl = log.new(s); // triggers log.ensureinit; populates log.silent
|
||||
|
||||
assert(!(log.silent == nil));
|
||||
|
||||
log.lprintfln(log.silent, "ignored={}", 1i64);
|
||||
|
||||
assert(!(mem.pos != 0));
|
||||
};
|
||||
Reference in New Issue
Block a user