mirror of
https://github.com/odin-lang/Odin.git
synced 2026-02-17 00:24:05 +00:00
101 lines
2.3 KiB
Odin
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)
|
|
}
|
|
}
|
|
}
|