milestone 21: abp list exceptions and a regex rule kind
This commit is contained in:
@@ -94,6 +94,8 @@ fn compileOnce(
|
||||
var list_w: std.Io.Writer.Discarding = .init(&list_sink);
|
||||
var wild_sink: [0]u8 = .{};
|
||||
var wild_w: std.Io.Writer.Discarding = .init(&wild_sink);
|
||||
var allow_sink: [0]u8 = .{};
|
||||
var allow_w: std.Io.Writer.Discarding = .init(&allow_sink);
|
||||
|
||||
return compiler.compile(
|
||||
std.testing.allocator,
|
||||
@@ -101,6 +103,7 @@ fn compileOnce(
|
||||
format,
|
||||
&list_w.writer,
|
||||
&wild_w.writer,
|
||||
&allow_w.writer,
|
||||
) catch |err| switch (err) {
|
||||
error.OutOfMemory,
|
||||
error.TooManyDomains,
|
||||
@@ -122,12 +125,13 @@ fn expectConsistent(counts: compiler.Counts, bytes: []const u8) !void {
|
||||
// A candidate is a non-empty whitespace-separated field or a whole wildcard
|
||||
// line, so every candidate consumes at least one byte of the input, and a
|
||||
// written name is a candidate that survived.
|
||||
const candidates = @as(u64, counts.domains) + counts.wildcards +
|
||||
const candidates = @as(u64, counts.domains) + counts.wildcards + counts.exceptions +
|
||||
counts.duplicates + counts.invalid;
|
||||
try std.testing.expect(candidates <= bytes.len + 1);
|
||||
|
||||
try std.testing.expect(counts.domains <= compiler.max_domains);
|
||||
try std.testing.expect(counts.wildcards <= compiler.max_domains);
|
||||
try std.testing.expect(counts.exceptions <= compiler.max_domains);
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
@@ -154,6 +158,9 @@ const corpus = [_][]const u8{
|
||||
sliceInput(long_line_terminated),
|
||||
sliceInput("# a hosts list\n0.0.0.0 ads.example.com # advertising\n"),
|
||||
sliceInput("||ads.example.net^\n@@||allow.example.net^\n/re[0-9]+/\n"),
|
||||
// The three exception shapes: the two accepted spellings with the one
|
||||
// tolerated modifier, and a form that stays unsupported.
|
||||
sliceInput("@@||a.example.net^$important\n@@||b.example.net\n@@c.example.net\n"),
|
||||
sliceInput("*.wild.example.org\nlocalhost\nAdS.Example.COM.\n"),
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user