Files
Odin/tests/core/nbio/fs.odin
2026-02-09 15:50:21 +01:00

101 lines
2.3 KiB
Odin

package tests_nbio
import "core:nbio"
import "core:testing"
import "core:time"
import "core:os"
@(test)
close_invalid_handle :: proc(t: ^testing.T) {
if event_loop_guard(t) {
testing.set_fail_timeout(t, time.Minute)
nbio.close(max(nbio.Handle))
ev(t, nbio.run(), nil)
}
}
@(test)
write_read_close :: proc(t: ^testing.T) {
if event_loop_guard(t) {
testing.set_fail_timeout(t, time.Minute)
@static content := [20]byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20}
@static result: [20]byte
FILENAME :: "test_write_read_close"
nbio.open_poly(FILENAME, t, on_open, mode={.Read, .Write, .Create, .Trunc})
on_open :: proc(op: ^nbio.Operation, t: ^testing.T) {
ev(t, op.open.err, nil)
nbio.write_poly(op.open.handle, 0, content[:], t, on_write)
}
on_write :: proc(op: ^nbio.Operation, t: ^testing.T) {
ev(t, op.write.err, nil)
ev(t, op.write.written, len(content))
nbio.read_poly(op.write.handle, 0, result[:], t, on_read, all=true)
}
on_read :: proc(op: ^nbio.Operation, t: ^testing.T) {
ev(t, op.read.err, nil)
ev(t, op.read.read, len(result))
ev(t, result, content)
nbio.close_poly(op.read.handle, t, on_close)
}
on_close :: proc(op: ^nbio.Operation, t: ^testing.T) {
ev(t, op.close.err, nil)
os.remove(FILENAME)
}
ev(t, nbio.run(), nil)
}
}
@(test)
read_empty_file :: proc(t: ^testing.T) {
if event_loop_guard(t) {
testing.set_fail_timeout(t, time.Minute)
FILENAME :: "test_read_empty_file"
handle, err := nbio.open_sync(FILENAME, mode={.Read, .Write, .Create, .Trunc})
ev(t, err, nil)
buf: [128]byte
nbio.read_poly(handle, 0, buf[:], t, proc(op: ^nbio.Operation, t: ^testing.T) {
ev(t, op.read.err, nbio.FS_Error.EOF)
ev(t, op.read.read, 0)
nbio.close_poly(op.read.handle, t, proc(op: ^nbio.Operation, t: ^testing.T) {
ev(t, op.close.err, nil)
os.remove(FILENAME)
})
})
ev(t, nbio.run(), nil)
}
}
@(test)
read_entire_file :: proc(t: ^testing.T) {
if event_loop_guard(t) {
testing.set_fail_timeout(t, time.Minute)
nbio.read_entire_file(#file, t, on_read)
on_read :: proc(t: rawptr, data: []byte, err: nbio.Read_Entire_File_Error) {
t := (^testing.T)(t)
ev(t, err.value, nil)
ev(t, string(data), #load(#file, string))
delete(data)
}
}
}