mirror of
https://github.com/odin-lang/Odin.git
synced 2025-12-29 01:14:40 +00:00
Changes - Support multi-threaded testing. - Support `set_fail_timeout` on all platforms. - Display an animated progress report. - Setup all tests with a context logger. - Give all tests their own separate custom allocators. - Support tracking test memory usage. - Display a summary of the failed tests at the end. - Let users select only specific tests to run. - Support copying failed tests to the clipboard to run again. - Support catching SIGINT (CTRL-C) to cancel early. - Record context in cleanup procs. - Write all log messages to STDERR for easy redirection. - Possibly more I've forgotten. New Options - `-define:test_threads=N`: Specify thread count. - `-define:test_thread_memory=B`: Specify initial memory block size in bytes to each thread. - `-define:test_track_memory=true`: Track the memory usage of individual tests. - `-define:test_fancy=false`: Disable animated progress report. - `-define:test_select=package.test_name,...`: Run only select tests. - `-define:test_clipboard=true`: Copy names of failed tests to the clipboard. - `-define:test_progress_width=24`: Change the width of the animated progress bars.
49 lines
768 B
Odin
49 lines
768 B
Odin
//+private
|
|
package testing
|
|
|
|
import "base:runtime"
|
|
import "core:sync/chan"
|
|
import "core:time"
|
|
|
|
Test_State :: enum {
|
|
Ready,
|
|
Running,
|
|
Successful,
|
|
Failed,
|
|
}
|
|
|
|
Update_Channel :: chan.Chan(Channel_Event)
|
|
Update_Channel_Sender :: chan.Chan(Channel_Event, .Send)
|
|
|
|
Task_Channel :: struct {
|
|
channel: Update_Channel,
|
|
test_index: int,
|
|
}
|
|
|
|
Event_New_Test :: struct {
|
|
test_index: int,
|
|
}
|
|
|
|
Event_State_Change :: struct {
|
|
new_state: Test_State,
|
|
}
|
|
|
|
Event_Set_Fail_Timeout :: struct {
|
|
at_time: time.Time,
|
|
location: runtime.Source_Code_Location,
|
|
}
|
|
|
|
Event_Log_Message :: struct {
|
|
level: runtime.Logger_Level,
|
|
text: string,
|
|
time: time.Time,
|
|
formatted_text: string,
|
|
}
|
|
|
|
Channel_Event :: union {
|
|
Event_New_Test,
|
|
Event_State_Change,
|
|
Event_Set_Fail_Timeout,
|
|
Event_Log_Message,
|
|
}
|