From 3d6d669a5092cfac597d54574d2570c75bb76cd4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adri=C3=A0=20Arrufat?= Date: Thu, 12 Mar 2026 13:56:53 +0900 Subject: [PATCH] testing: add LogFilter utility for scoped log suppression --- src/browser/Page.zig | 3 +++ src/cdp/domains/page.zig | 4 ++++ src/mcp/router.zig | 5 ++--- src/testing.zig | 20 ++++++++++++++++++++ 4 files changed, 29 insertions(+), 3 deletions(-) diff --git a/src/browser/Page.zig b/src/browser/Page.zig index 1e8fddeb..2e727695 100644 --- a/src/browser/Page.zig +++ b/src/browser/Page.zig @@ -3457,6 +3457,9 @@ fn asUint(comptime string: anytype) std.meta.Int( const testing = @import("../testing.zig"); test "WebApi: Page" { + const filter: testing.LogFilter = .init(.http); + defer filter.deinit(); + try testing.htmlRunner("page", .{}); } diff --git a/src/cdp/domains/page.zig b/src/cdp/domains/page.zig index 6e406c05..fabf37e5 100644 --- a/src/cdp/domains/page.zig +++ b/src/cdp/domains/page.zig @@ -662,6 +662,10 @@ test "cdp.page: getFrameTree" { } test "cdp.page: captureScreenshot" { + const LogFilter = @import("../../testing.zig").LogFilter; + const filter: LogFilter = .init(.not_implemented); + defer filter.deinit(); + var ctx = testing.context(); defer ctx.deinit(); { diff --git a/src/mcp/router.zig b/src/mcp/router.zig index 14f4a3ab..3f4d32ee 100644 --- a/src/mcp/router.zig +++ b/src/mcp/router.zig @@ -133,9 +133,8 @@ test "MCP.router - handleMessage - synchronous unit tests" { // 4. Parse error { - const old_filter = log.opts.filter_scopes; - log.opts.filter_scopes = &.{.mcp}; - defer log.opts.filter_scopes = old_filter; + const filter: testing.LogFilter = .init(.mcp); + defer filter.deinit(); try handleMessage(server, aa, "invalid json"); try testing.expectJson("{\"id\": null, \"error\": {\"code\": -32700}}", out_alloc.writer.buffered()); diff --git a/src/testing.zig b/src/testing.zig index 774f76e4..f30dbae5 100644 --- a/src/testing.zig +++ b/src/testing.zig @@ -610,3 +610,23 @@ fn testHTTPHandler(req: *std.http.Server.Request) !void { unreachable; } + +/// LogFilter provides a scoped way to suppress specific log categories during tests. +/// This is useful for tests that trigger expected errors or warnings. +pub const LogFilter = struct { + old_filter: []const log.Scope, + + /// Sets the log filter to only include the specified scope. + /// Returns a LogFilter that should be deinitialized to restore previous filters. + pub fn init(comptime scope: log.Scope) LogFilter { + const old_filter = log.opts.filter_scopes; + const new_filter = comptime &[_]log.Scope{scope}; + log.opts.filter_scopes = new_filter; + return .{ .old_filter = old_filter }; + } + + /// Restores the log filters to their previous state. + pub fn deinit(self: LogFilter) void { + log.opts.filter_scopes = self.old_filter; + } +};