diff --git a/Makefile b/Makefile
index 3bd9eb4ee..0ec21e8ab 100644
--- a/Makefile
+++ b/Makefile
@@ -119,16 +119,8 @@ run-debug: build-dev
@printf "\033[36mRunning...\033[0m\n"
@./zig-out/bin/lightpanda || (printf "\033[33mRun ERROR\033[0m\n"; exit 1;)
-## Test - `grep` is used to filter out the huge compile command on build
-ifeq ($(OS), macos)
test:
- @script -q /dev/null sh -c 'TEST_FILTER="${F}" $(ZIG) build $(ZIGFLAGS) test -freference-trace' 2>&1 \
- | grep --line-buffered -v "^/.*zig test -freference-trace"
-else
-test:
- @script -qec 'TEST_FILTER="${F}" $(ZIG) build $(ZIGFLAGS) test -freference-trace' /dev/null 2>&1 \
- | grep --line-buffered -v "^/.*zig test -freference-trace"
-endif
+ TEST_FILTER="${F}" $(ZIG) build $(ZIGFLAGS) test -freference-trace
## Run demo/runner end to end tests
end2end:
diff --git a/src/SemanticTree.zig b/src/SemanticTree.zig
index 02a5f8f36..ad224bab9 100644
--- a/src/SemanticTree.zig
+++ b/src/SemanticTree.zig
@@ -730,8 +730,6 @@ pub fn getNodeDetails(
const testing = @import("testing.zig");
test "SemanticTree backendDOMNodeId" {
- defer testing.reset();
-
var registry: CDPNode.Registry = .init(testing.allocator);
defer registry.deinit();
@@ -756,7 +754,6 @@ test "SemanticTree backendDOMNodeId" {
}
test "SemanticTree max_depth" {
- defer testing.reset();
var registry: CDPNode.Registry = .init(testing.allocator);
defer registry.deinit();
diff --git a/src/Server.zig b/src/Server.zig
index 7bd65a4fb..2d93c46c9 100644
--- a/src/Server.zig
+++ b/src/Server.zig
@@ -331,8 +331,7 @@ test "server: buildJSONVersionResponse" {
}
test "Client: http invalid request" {
- const filter: testing.LogFilter = .init(&.{.cdp});
- defer filter.deinit();
+ testing.silenceLog(&.{.cdp});
var c = try createTestClient();
defer c.deinit();
@@ -449,8 +448,7 @@ test "Client: read invalid websocket message" {
}
{
- const filter: testing.LogFilter = .init(&.{.cdp});
- defer filter.deinit();
+ testing.expectLog(&.{.cdp});
// length of message is 0, 0, 0, 0, 0, 16, 0, 1 i.e: 1024 * 1024 + 1
try assertWebSocketError(1009, &.{ 129, 255, 0, 0, 0, 0, 0, 16, 0, 1, 'm', 'a', 's', 'k' });
}
diff --git a/src/browser/Frame.zig b/src/browser/Frame.zig
index d4c3db33e..30bc1769e 100644
--- a/src/browser/Frame.zig
+++ b/src/browser/Frame.zig
@@ -3460,8 +3460,7 @@ test "Frame: urlBasename" {
}
test "WebApi: Frame" {
- const filter: testing.LogFilter = .init(&.{.http});
- defer filter.deinit();
+ testing.silenceLog(&.{.http});
try testing.htmlRunner("page", .{});
}
@@ -3470,8 +3469,7 @@ test "WebApi: Frames" {
}
test "WebApi: Frame Blob" {
- const filter: testing.LogFilter = .init(&.{ .frame, .browser, .js });
- defer filter.deinit();
+ testing.silenceLog(&.{ .frame, .browser, .js });
try testing.htmlRunner("frames/blob", .{});
}
@@ -3524,6 +3522,8 @@ test "Page: isSameOrigin" {
}
test "Frame: httpMetadata after navigation" {
+ testing.expectLog(&.{.http});
+
const page = try testing.pageTest("page/meta.html", .{});
defer page.close();
@@ -3544,8 +3544,6 @@ test "Frame: httpMetadata 404" {
}
test "Frame: 401" {
- defer testing.reset();
-
var page = try testing.pageTest("401", .{});
defer page.close();
diff --git a/src/browser/ImportMap.zig b/src/browser/ImportMap.zig
index a2c0ee7e7..355d28216 100644
--- a/src/browser/ImportMap.zig
+++ b/src/browser/ImportMap.zig
@@ -360,8 +360,6 @@ fn isSpecialUrl(url: []const u8) bool {
const testing = @import("../testing.zig");
test "ImportMap: exact match" {
- defer testing.reset();
-
const im = try testParse(
\\{ "imports": { "moment": "/node_modules/moment/index.js" } }
, "https://example.com/app/index.html");
@@ -371,8 +369,6 @@ test "ImportMap: exact match" {
}
test "ImportMap: trailing slash prefix match" {
- defer testing.reset();
-
const im = try testParse(
\\{ "imports": { "moment/": "/node_modules/moment/src/" } }
, "https://example.com/app/index.html");
@@ -382,8 +378,6 @@ test "ImportMap: trailing slash prefix match" {
}
test "ImportMap: specificity — longest match wins" {
- defer testing.reset();
-
const im = try testParse(
\\{ "imports": {
\\ "a": "/1",
@@ -413,8 +407,6 @@ test "ImportMap: specificity — longest match wins" {
}
test "ImportMap: scopes — most specific scope wins" {
- defer testing.reset();
-
const im = try testParse(
\\{
\\ "imports": { "a": "/a-1.mjs", "b": "/b-1.mjs", "d": "/d-1.mjs" },
@@ -444,8 +436,6 @@ test "ImportMap: scopes — most specific scope wins" {
}
test "ImportMap: bare specifier with no match returns null" {
- defer testing.reset();
-
const im = try testParse(
\\{ "imports": { "moment": "/m.js" } }
, "https://example.com/app/index.html");
@@ -455,8 +445,6 @@ test "ImportMap: bare specifier with no match returns null" {
}
test "ImportMap: URL-like specifier falls back to itself" {
- defer testing.reset();
-
const im: ImportMap = .empty;
const r = try testResolve(&im, "https://example.com/app.mjs", "./foo.js");
@@ -464,8 +452,6 @@ test "ImportMap: URL-like specifier falls back to itself" {
}
test "ImportMap: null entry throws (no fallback)" {
- defer testing.reset();
-
const im = try testParse(
\\{ "imports": { "blocked": null } }
, "https://example.com/app/index.html");
@@ -474,8 +460,6 @@ test "ImportMap: null entry throws (no fallback)" {
}
test "ImportMap: backtracking out of prefix throws" {
- defer testing.reset();
-
const im = try testParse(
\\{ "imports": { "moment/": "/node_modules/moment/src/" } }
, "https://example.com/app/index.html");
@@ -484,7 +468,6 @@ test "ImportMap: backtracking out of prefix throws" {
}
test "ImportMap: merge — first-wins on imports, new keys added" {
- defer testing.reset();
const base: [:0]const u8 = "https://example.com/app/index.html";
var im = try testParse(
@@ -504,7 +487,6 @@ test "ImportMap: merge — first-wins on imports, new keys added" {
}
test "ImportMap: merge — same-prefix scopes merge their imports" {
- defer testing.reset();
const base: [:0]const u8 = "https://example.com/app/index.html";
var im = try testParse(
diff --git a/src/browser/Mime.zig b/src/browser/Mime.zig
index 6b5d85068..7bd941ab1 100644
--- a/src/browser/Mime.zig
+++ b/src/browser/Mime.zig
@@ -810,8 +810,6 @@ fn trimRight(s: []const u8) []const u8 {
const testing = @import("../testing.zig");
test "Mime: invalid" {
- defer testing.reset();
-
const invalids = [_][]const u8{
"",
"text",
@@ -828,7 +826,6 @@ test "Mime: invalid" {
}
test "Mime: malformed parameters are ignored" {
- defer testing.reset();
// These should all parse successfully as text/html with malformed params ignored
const valid_with_malformed_params = [_][]const u8{
@@ -851,8 +848,6 @@ test "Mime: malformed parameters are ignored" {
}
test "Mime: parse common" {
- defer testing.reset();
-
try expect(.{ .content_type = .{ .text_xml = {} } }, "text/xml");
try expect(.{ .content_type = .{ .text_html = {} } }, "text/html");
try expect(.{ .content_type = .{ .text_plain = {} } }, "text/plain");
@@ -888,8 +883,6 @@ test "Mime: parse common" {
}
test "Mime: parse uncommon" {
- defer testing.reset();
-
const text_csv = Expectation{
.content_type = .{ .other = {} },
};
@@ -902,8 +895,6 @@ test "Mime: parse uncommon" {
}
test "Mime: parse charset" {
- defer testing.reset();
-
try expect(.{
.content_type = .{ .text_xml = {} },
.charset = "utf-8",
@@ -936,7 +927,6 @@ test "Mime: parse charset" {
}
test "Mime: parse charset (WHATWG parameter semantics)" {
- defer testing.reset();
// First charset wins (not last).
try expect(.{ .content_type = .{ .text_html = {} }, .charset = "gbk" }, "text/html;charset=gbk;charset=utf-8");
@@ -959,8 +949,6 @@ test "Mime: parse charset (WHATWG parameter semantics)" {
}
test "Mime: isHTML" {
- defer testing.reset();
-
const assert = struct {
fn assert(expected: bool, input: []const u8) !void {
const mutable_input = try testing.arena_allocator.dupe(u8, input);
@@ -977,8 +965,6 @@ test "Mime: isHTML" {
}
test "Mime: isXML" {
- defer testing.reset();
-
const assert = struct {
fn assert(expected: bool, input: []const u8) !void {
const mutable_input = try testing.arena_allocator.dupe(u8, input);
@@ -1105,7 +1091,6 @@ fn expect(expected: Expectation, input: []const u8) !void {
}
test "Mime: serialize" {
- defer testing.reset();
const arena = testing.arena_allocator;
const expectSerialize = struct {
diff --git a/src/browser/Page.zig b/src/browser/Page.zig
index a0bbb3151..597c0ba47 100644
--- a/src/browser/Page.zig
+++ b/src/browser/Page.zig
@@ -407,7 +407,8 @@ fn appendFrameExecutions(frame: *Frame, origin: []const u8, arena: Allocator, li
const testing = @import("../testing.zig");
test "Page: js_error_count" {
- defer testing.reset();
+ testing.expectLog(&.{ .js, .js, .js });
+
// One uncaught top-level script exception, one uncaught timer-callback
// exception.
const page = try testing.pageTest("page_js_error.html", .{});
diff --git a/src/browser/Runner.zig b/src/browser/Runner.zig
index 5c6edd94d..f07b748f6 100644
--- a/src/browser/Runner.zig
+++ b/src/browser/Runner.zig
@@ -474,7 +474,6 @@ test "Runner: waitForSelector timeout" {
}
test "Runner: waitForSelector" {
- defer testing.reset();
const page = try testing.pageTest("runner/runner1.html", .{});
var runner = page.session.runner(.{});
diff --git a/src/browser/ScriptManager.zig b/src/browser/ScriptManager.zig
index 4c72e1036..952b82934 100644
--- a/src/browser/ScriptManager.zig
+++ b/src/browser/ScriptManager.zig
@@ -566,7 +566,6 @@ const PreloadedScript = struct {
const testing = @import("../testing.zig");
test "ScriptManager: PreloadedScript.shutdownCallback drops a .loading preload" {
- defer testing.reset();
const page = try testing.pageTest("mcp_nav.html", .{});
defer page.close();
@@ -598,7 +597,6 @@ test "ScriptManager: PreloadedScript.shutdownCallback drops a .loading preload"
}
test "ScriptManager: waitForPreload stops when teardown is pending" {
- defer testing.reset();
const page = try testing.pageTest("mcp_nav.html", .{});
defer page.close();
diff --git a/src/browser/ScriptManagerBase.zig b/src/browser/ScriptManagerBase.zig
index a2b0c1e3a..2069bfee7 100644
--- a/src/browser/ScriptManagerBase.zig
+++ b/src/browser/ScriptManagerBase.zig
@@ -1080,7 +1080,6 @@ pub const ImportedModule = struct {
const testing = @import("../testing.zig");
test "ScriptManagerBase: shutdownCallback fails a .loading module" {
- defer testing.reset();
const page = try testing.pageTest("mcp_nav.html", .{});
defer page.close();
const frame = page.frame().?;
@@ -1115,7 +1114,6 @@ test "ScriptManagerBase: shutdownCallback fails a .loading module" {
}
test "ScriptManagerBase: waitForImport stops when teardown is pending" {
- defer testing.reset();
const page = try testing.pageTest("mcp_nav.html", .{});
defer page.close();
const frame = page.frame().?;
diff --git a/src/browser/SelectorPath.zig b/src/browser/SelectorPath.zig
index 1750728be..0b2cb8515 100644
--- a/src/browser/SelectorPath.zig
+++ b/src/browser/SelectorPath.zig
@@ -213,8 +213,6 @@ fn isFirstMatch(self: SelectorPath, target: *Element, candidate: []const u8) boo
const testing = @import("../testing.zig");
fn expectSelector(comptime selector: []const u8, comptime expected: []const u8) !void {
- defer testing.reset();
-
var page = try testing.pageTest("selector_path.html", .{});
defer page.close();
const frame = page.frame().?;
diff --git a/src/browser/URL.zig b/src/browser/URL.zig
index fe97add68..94d53d8df 100644
--- a/src/browser/URL.zig
+++ b/src/browser/URL.zig
@@ -692,8 +692,6 @@ test "URL: isCompleteHTTPUrl" {
}
test "URL: resolve regression (#1093)" {
- defer testing.reset();
-
const Case = struct {
base: [:0]const u8,
path: [:0]const u8,
@@ -715,8 +713,6 @@ test "URL: resolve regression (#1093)" {
}
test "URL: resolve" {
- defer testing.reset();
-
const Case = struct {
base: [:0]const u8,
path: [:0]const u8,
@@ -961,8 +957,6 @@ test "URL: resolve" {
}
test "URL: resolve strips tab and newline from input" {
- defer testing.reset();
-
const Case = struct {
base: [:0]const u8,
path: [:0]const u8,
@@ -994,7 +988,6 @@ test "URL: resolve strips tab and newline from input" {
}
test "URL: resolve validates ASCII punycode (xn--) labels" {
- defer testing.reset();
// Valid punycode is left untouched.
const ok = try resolve(testing.arena_allocator, "https://example.com/", "https://xn--rksmrgs-5wao1o.se/x", .{});
@@ -1006,8 +999,6 @@ test "URL: resolve validates ASCII punycode (xn--) labels" {
}
test "URL: resolve with encoding" {
- defer testing.reset();
-
const Case = struct {
base: [:0]const u8,
path: [:0]const u8,
@@ -1176,7 +1167,6 @@ test "URL: resolve with encoding" {
}
test "URL: eqlDocument" {
- defer testing.reset();
{
const url = "https://lightpanda.io/about";
try testing.expectEqual(true, eqlDocument(url, url));
@@ -1244,7 +1234,6 @@ test "URL: eqlDocument" {
}
test "URL: concatQueryString" {
- defer testing.reset();
const arena = testing.arena_allocator;
{
@@ -1274,7 +1263,6 @@ test "URL: concatQueryString" {
}
test "URL: getRobotsUrl" {
- defer testing.reset();
const arena = testing.arena_allocator;
{
@@ -1302,7 +1290,6 @@ test "URL: getRobotsUrl" {
}
test "URL: unescape" {
- defer testing.reset();
const arena = testing.arena_allocator;
{
@@ -1437,8 +1424,6 @@ test "URL: setPathname percent-encodes" {
}
test "URL: getOrigin" {
- defer testing.reset();
-
const Case = struct {
url: [:0]const u8,
expected: ?[]const u8,
@@ -1680,8 +1665,6 @@ test "URL: resolve path scheme" {
}
test "URL: resolveNavigation defaults a schemeless host to http (curl-like)" {
- defer testing.reset();
-
const Case = struct {
url: [:0]const u8,
expected: [:0]const u8,
diff --git a/src/browser/data_url.zig b/src/browser/data_url.zig
index 81e9deb24..fce62bb8f 100644
--- a/src/browser/data_url.zig
+++ b/src/browser/data_url.zig
@@ -72,28 +72,24 @@ fn base64Decode(arena: Allocator, input: []const u8) ![]const u8 {
const testing = @import("../testing.zig");
test "data_url: plain text, default content-type" {
- defer testing.reset();
const r = try parse(testing.arena_allocator, "data:,Hello%2C%20World");
try testing.expectString("text/plain;charset=US-ASCII", r.content_type);
try testing.expectString("Hello, World", r.body);
}
test "data_url: explicit mediatype" {
- defer testing.reset();
const r = try parse(testing.arena_allocator, "data:text/html,hi");
try testing.expectString("text/html", r.content_type);
try testing.expectString("hi", r.body);
}
test "data_url: base64" {
- defer testing.reset();
const r = try parse(testing.arena_allocator, "data:text/plain;base64,SGVsbG8=");
try testing.expectString("text/plain", r.content_type);
try testing.expectString("Hello", r.body);
}
test "data_url: base64 without padding decodes (forgiving)" {
- defer testing.reset();
const r = try parse(testing.arena_allocator, "data:application/octet-stream;base64,SGVsbG8");
try testing.expectString("Hello", r.body);
@@ -106,7 +102,6 @@ test "data_url: base64 without padding decodes (forgiving)" {
}
test "data_url: forgiving-base64 rejects misplaced/over-padding" {
- defer testing.reset();
const arena = testing.arena_allocator;
try std.testing.expectError(error.InvalidBase64, parse(arena, "data:;base64,abcd=")); // len % 4 == 1
try std.testing.expectError(error.InvalidBase64, parse(arena, "data:;base64,="));
@@ -115,18 +110,15 @@ test "data_url: forgiving-base64 rejects misplaced/over-padding" {
}
test "data_url: bare charset gets text/plain prefix" {
- defer testing.reset();
const r = try parse(testing.arena_allocator, "data:;charset=utf-8,x");
try testing.expectString("text/plain;charset=utf-8", r.content_type);
}
test "data_url: empty body" {
- defer testing.reset();
const r = try parse(testing.arena_allocator, "data:text/plain,");
try testing.expectString("", r.body);
}
test "data_url: missing comma is an error" {
- defer testing.reset();
try std.testing.expectError(error.InvalidDataUrl, parse(testing.arena_allocator, "data:text/plain"));
}
diff --git a/src/browser/dump.zig b/src/browser/dump.zig
index 394e12c92..fc197bea0 100644
--- a/src/browser/dump.zig
+++ b/src/browser/dump.zig
@@ -382,7 +382,6 @@ const testing = @import("../testing.zig");
//