mirror of
https://github.com/odin-lang/Odin.git
synced 2026-01-03 11:42:28 +00:00
117 lines
2.9 KiB
Odin
117 lines
2.9 KiB
Odin
package tests_core_os_os2
|
|
|
|
import os "core:os/os2"
|
|
import "core:log"
|
|
import "core:slice"
|
|
import "core:testing"
|
|
import "core:strings"
|
|
|
|
@(test)
|
|
test_read_dir :: proc(t: ^testing.T) {
|
|
path, err_join := os.join_path({#directory, "../dir"}, context.allocator)
|
|
defer delete(path)
|
|
|
|
fis, err_read := os.read_all_directory_by_path(path, context.allocator)
|
|
defer os.file_info_slice_delete(fis, context.allocator)
|
|
|
|
slice.sort_by_key(fis, proc(fi: os.File_Info) -> string { return fi.name })
|
|
|
|
if err_read == .Unsupported {
|
|
log.warn("os2 directory functionality is unsupported, skipping test")
|
|
return
|
|
}
|
|
|
|
testing.expect_value(t, err_join, nil)
|
|
testing.expect_value(t, err_read, nil)
|
|
testing.expect_value(t, len(fis), 2)
|
|
|
|
testing.expect_value(t, fis[0].name, "b.txt")
|
|
testing.expect_value(t, fis[0].type, os.File_Type.Regular)
|
|
|
|
testing.expect_value(t, fis[1].name, "sub")
|
|
testing.expect_value(t, fis[1].type, os.File_Type.Directory)
|
|
}
|
|
|
|
@(test)
|
|
test_walker :: proc(t: ^testing.T) {
|
|
path, err := os.join_path({#directory, "../dir"}, context.allocator)
|
|
defer delete(path)
|
|
testing.expect_value(t, err, nil)
|
|
|
|
w := os.walker_create(path)
|
|
defer os.walker_destroy(&w)
|
|
|
|
test_walker_internal(t, &w)
|
|
}
|
|
|
|
@(test)
|
|
test_walker_file :: proc(t: ^testing.T) {
|
|
path, err_join := os.join_path({#directory, "../dir"}, context.allocator)
|
|
defer delete(path)
|
|
testing.expect_value(t, err_join, nil)
|
|
|
|
f, err_open := os.open(path)
|
|
testing.expect_value(t, err_open, nil)
|
|
defer os.close(f)
|
|
|
|
w := os.walker_create(f)
|
|
defer os.walker_destroy(&w)
|
|
|
|
test_walker_internal(t, &w)
|
|
}
|
|
|
|
test_walker_internal :: proc(t: ^testing.T, w: ^os.Walker) {
|
|
Seen :: struct {
|
|
type: os.File_Type,
|
|
path: string,
|
|
}
|
|
|
|
joined_1, err_joined_1 := os.join_path({"dir", "b.txt"}, context.allocator)
|
|
joined_2, err_joined_2 := os.join_path({"dir", "sub"}, context.allocator)
|
|
joined_3, err_joined_3 := os.join_path({"dir", "sub", ".gitkeep"}, context.allocator)
|
|
|
|
testing.expect_value(t, err_joined_1, nil)
|
|
testing.expect_value(t, err_joined_2, nil)
|
|
testing.expect_value(t, err_joined_3, nil)
|
|
|
|
expected := [?]Seen{
|
|
{.Regular, joined_1},
|
|
{.Directory, joined_2},
|
|
{.Regular, joined_3},
|
|
}
|
|
|
|
seen: [dynamic]Seen
|
|
defer delete(seen)
|
|
|
|
for info in os.walker_walk(w) {
|
|
|
|
errpath, err := os.walker_error(w)
|
|
testing.expectf(t, err == nil, "walker error for %q: %v", errpath, err)
|
|
|
|
append(&seen, Seen{
|
|
info.type,
|
|
strings.clone(info.fullpath),
|
|
})
|
|
}
|
|
|
|
if _, err := os.walker_error(w); err == .Unsupported {
|
|
log.warn("os2 directory functionality is unsupported, skipping test")
|
|
return
|
|
}
|
|
|
|
testing.expect_value(t, len(seen), len(expected))
|
|
|
|
for expectation in expected {
|
|
found: bool
|
|
for entry in seen {
|
|
if strings.has_suffix(entry.path, expectation.path) {
|
|
found = true
|
|
testing.expect_value(t, entry.type, expectation.type)
|
|
delete(entry.path)
|
|
}
|
|
}
|
|
testing.expectf(t, found, "%q not found in %v", expectation, seen)
|
|
delete(expectation.path)
|
|
}
|
|
}
|