Sfoglia il codice sorgente

Merge pull request #5186 from Kelimion/restore-cursor

Restore console mode when test runner exits.
Jeroen van Rijn 3 mesi fa
parent
commit
714066d91b
2 ha cambiato i file con 24 aggiunte e 6 eliminazioni
  1. 4 0
      core/testing/runner.odin
  2. 20 6
      core/testing/runner_windows.odin

+ 4 - 0
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
 }

+ 20 - 6
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)
+	}
+}