diff --git a/core/testing/runner.odin b/core/testing/runner.odin index 83a5ac4e7..db0587370 100644 --- a/core/testing/runner.odin +++ b/core/testing/runner.odin @@ -949,5 +949,9 @@ To partly mitigate this, redirect STDERR to a file or use the -define:ODIN_TEST_ fmt.assertf(err == nil, "Error writing JSON report: %v", err) } + when ODIN_OS == .Windows { + console_ansi_fini() + } + return total_success_count == total_test_count } diff --git a/core/testing/runner_windows.odin b/core/testing/runner_windows.odin index 401804c71..b35914c72 100644 --- a/core/testing/runner_windows.odin +++ b/core/testing/runner_windows.odin @@ -3,20 +3,34 @@ package testing import win32 "core:sys/windows" +old_stdout_mode: u32 +old_stderr_mode: u32 + console_ansi_init :: proc() { stdout := win32.GetStdHandle(win32.STD_OUTPUT_HANDLE) if stdout != win32.INVALID_HANDLE && stdout != nil { - old_console_mode: u32 - if win32.GetConsoleMode(stdout, &old_console_mode) { - win32.SetConsoleMode(stdout, old_console_mode | win32.ENABLE_VIRTUAL_TERMINAL_PROCESSING) + if win32.GetConsoleMode(stdout, &old_stdout_mode) { + win32.SetConsoleMode(stdout, old_stdout_mode | win32.ENABLE_VIRTUAL_TERMINAL_PROCESSING) } } stderr := win32.GetStdHandle(win32.STD_ERROR_HANDLE) if stderr != win32.INVALID_HANDLE && stderr != nil { - old_console_mode: u32 - if win32.GetConsoleMode(stderr, &old_console_mode) { - win32.SetConsoleMode(stderr, old_console_mode | win32.ENABLE_VIRTUAL_TERMINAL_PROCESSING) + if win32.GetConsoleMode(stderr, &old_stderr_mode) { + win32.SetConsoleMode(stderr, old_stderr_mode | win32.ENABLE_VIRTUAL_TERMINAL_PROCESSING) } } } + +// Restore the cursor on exit +console_ansi_fini :: proc() { + stdout := win32.GetStdHandle(win32.STD_OUTPUT_HANDLE) + if stdout != win32.INVALID_HANDLE && stdout != nil { + win32.SetConsoleMode(stdout, old_stdout_mode) + } + + stderr := win32.GetStdHandle(win32.STD_ERROR_HANDLE) + if stderr != win32.INVALID_HANDLE && stderr != nil { + win32.SetConsoleMode(stderr, old_stderr_mode) + } +} \ No newline at end of file