diff --git a/lib/std/special/test_runner.zig b/lib/std/special/test_runner.zig index 07c46ee43c..4ba2e3aa7e 100644 --- a/lib/std/special/test_runner.zig +++ b/lib/std/special/test_runner.zig @@ -2,6 +2,8 @@ const std = @import("std"); const io = std.io; const builtin = @import("builtin"); +pub const io_mode = builtin.test_io_mode; + pub fn main() anyerror!void { const test_fn_list = builtin.test_functions; var ok_count: usize = 0; diff --git a/src/all_types.hpp b/src/all_types.hpp index 651ea807ad..58a753c545 100644 --- a/src/all_types.hpp +++ b/src/all_types.hpp @@ -2244,6 +2244,7 @@ struct CodeGen { bool enable_dump_analysis; bool enable_doc_generation; bool disable_bin_generation; + bool test_is_evented; CodeModel code_model; Buf *mmacosx_version_min; diff --git a/src/codegen.cpp b/src/codegen.cpp index 03417f01e5..f71617901b 100644 --- a/src/codegen.cpp +++ b/src/codegen.cpp @@ -8602,6 +8602,9 @@ Buf *codegen_generate_builtin_source(CodeGen *g) { buf_appendf(contents, "pub var test_functions: []TestFn = undefined; // overwritten later\n" ); + + buf_appendf(contents, "pub const test_io_mode = %s;\n", + g->test_is_evented ? ".evented" : ".blocking"); } return contents; @@ -8635,6 +8638,7 @@ static Error define_builtin_compile_vars(CodeGen *g) { cache_bool(&cache_hash, g->is_dynamic); cache_bool(&cache_hash, g->is_test_build); cache_bool(&cache_hash, g->is_single_threaded); + cache_bool(&cache_hash, g->test_is_evented); cache_int(&cache_hash, g->code_model); cache_int(&cache_hash, g->zig_target->is_native); cache_int(&cache_hash, g->zig_target->arch); @@ -10350,6 +10354,7 @@ static Error check_cache(CodeGen *g, Buf *manifest_dir, Buf *digest) { if (g->is_test_build) { cache_buf_opt(ch, g->test_filter); cache_buf_opt(ch, g->test_name_prefix); + cache_bool(ch, g->test_is_evented); } cache_bool(ch, g->link_eh_frame_hdr); cache_bool(ch, g->is_single_threaded); diff --git a/src/main.cpp b/src/main.cpp index 991b46b320..78bdbe1541 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -135,6 +135,7 @@ static int print_full_usage(const char *arg0, FILE *file, int return_code) { " --test-name-prefix [text] add prefix to all tests\n" " --test-cmd [arg] specify test execution command one arg at a time\n" " --test-cmd-bin appends test binary path to test cmd args\n" + " --test-evented-io runs the test in evented I/O mode\n" , arg0); return return_code; } @@ -428,6 +429,7 @@ int main(int argc, char **argv) { ZigList c_source_files = {0}; const char *test_filter = nullptr; const char *test_name_prefix = nullptr; + bool test_evented_io = false; size_t ver_major = 0; size_t ver_minor = 0; size_t ver_patch = 0; @@ -709,6 +711,8 @@ int main(int argc, char **argv) { cur_pkg = cur_pkg->parent; } else if (strcmp(arg, "-ffunction-sections") == 0) { function_sections = true; + } else if (strcmp(arg, "--test-evented-io") == 0) { + test_evented_io = true; } else if (i + 1 >= argc) { fprintf(stderr, "Expected another argument after %s\n", arg); return print_error_usage(arg0); @@ -1059,6 +1063,7 @@ int main(int argc, char **argv) { g->want_stack_check = want_stack_check; g->want_sanitize_c = want_sanitize_c; g->want_single_threaded = want_single_threaded; + g->test_is_evented = test_evented_io; Buf *builtin_source = codegen_generate_builtin_source(g); if (fwrite(buf_ptr(builtin_source), 1, buf_len(builtin_source), stdout) != buf_len(builtin_source)) { fprintf(stderr, "unable to write to stdout: %s\n", strerror(ferror(stdout))); @@ -1232,6 +1237,7 @@ int main(int argc, char **argv) { if (test_filter) { codegen_set_test_filter(g, buf_create_from_str(test_filter)); } + g->test_is_evented = test_evented_io; if (test_name_prefix) { codegen_set_test_name_prefix(g, buf_create_from_str(test_name_prefix));