aboutsummaryrefslogtreecommitdiff
path: root/src/cli.zig
diff options
context:
space:
mode:
Diffstat (limited to 'src/cli.zig')
-rw-r--r--src/cli.zig23
1 files changed, 20 insertions, 3 deletions
diff --git a/src/cli.zig b/src/cli.zig
index d19ede800..aa36c63fb 100644
--- a/src/cli.zig
+++ b/src/cli.zig
@@ -20,6 +20,7 @@ const json_parser = bun.JSON;
const js_printer = bun.js_printer;
const js_ast = bun.JSAst;
const linker = @import("linker.zig");
+const RegularExpression = bun.RegularExpression;
const sync = @import("./sync.zig");
const Api = @import("api/schema.zig").Api;
@@ -219,6 +220,7 @@ pub const Arguments = struct {
clap.parseParam("--only Only run tests that are marked with \"test.only()\"") catch unreachable,
clap.parseParam("--todo Include tests that are marked with \"test.todo()\"") catch unreachable,
clap.parseParam("--bail <NUMBER>? Exit the test suite after <NUMBER> failures. If you do not specify a number, it defaults to 1.") catch unreachable,
+ clap.parseParam("-t, --test-name-pattern <STR> Run only tests with a name that matches the given regex.") catch unreachable,
};
const build_params_public = public_params ++ build_only_params;
@@ -388,12 +390,12 @@ pub const Arguments = struct {
if (args.option("--bail")) |bail| {
if (bail.len > 0) {
ctx.test_options.bail = std.fmt.parseInt(u32, bail, 10) catch |e| {
- Output.prettyErrorln("--bail expects a number: {s}", .{@errorName(e)});
+ Output.prettyErrorln("<r><red>error<r>: --bail expects a number: {s}", .{@errorName(e)});
Global.exit(1);
};
if (ctx.test_options.bail == 0) {
- Output.prettyErrorln("--bail expects a number greater than 0", .{});
+ Output.prettyErrorln("<r><red>error<r>: --bail expects a number greater than 0", .{});
Global.exit(1);
}
} else {
@@ -403,11 +405,25 @@ pub const Arguments = struct {
if (args.option("--rerun-each")) |repeat_count| {
if (repeat_count.len > 0) {
ctx.test_options.repeat_count = std.fmt.parseInt(u32, repeat_count, 10) catch |e| {
- Output.prettyErrorln("--rerun-each expects a number: {s}", .{@errorName(e)});
+ Output.prettyErrorln("<r><red>error<r>: --rerun-each expects a number: {s}", .{@errorName(e)});
Global.exit(1);
};
}
}
+ if (args.option("--test-name-pattern")) |namePattern| {
+ const regex = RegularExpression.init(bun.String.fromBytes(namePattern), RegularExpression.Flags.none) catch {
+ Output.prettyErrorln(
+ "<r><red>error<r>: --test-name-pattern expects a valid regular expression but received {}",
+ .{
+ strings.QuotedFormatter{
+ .text = namePattern,
+ },
+ },
+ );
+ Global.exit(1);
+ };
+ ctx.test_options.test_filter_regex = regex;
+ }
ctx.test_options.update_snapshots = args.flag("--update-snapshots");
ctx.test_options.run_todo = args.flag("--todo");
ctx.test_options.only = args.flag("--only");
@@ -949,6 +965,7 @@ pub const Command = struct {
run_todo: bool = false,
only: bool = false,
bail: u32 = 0,
+ test_filter_regex: ?*RegularExpression = null,
};
pub const Context = struct {