aboutsummaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorJeroen van Rijn <Kelimion@users.noreply.github.com>2025-11-01 12:59:35 +0100
committerJeroen van Rijn <Kelimion@users.noreply.github.com>2026-02-08 12:54:25 +0100
commit5924fb448ee13deca0fe6536cdd7f76fe5d6a583 (patch)
treeac6d09100ed2ce7d2426689f1844f1886562e576 /tests
parent5d03da8365bd17715a29e497398633fcefcbd8c7 (diff)
Add tests for glob + match
Diffstat (limited to 'tests')
-rw-r--r--tests/core/os/os2/path.odin55
1 files changed, 47 insertions, 8 deletions
diff --git a/tests/core/os/os2/path.odin b/tests/core/os/os2/path.odin
index 26cf1c290..a256b3e22 100644
--- a/tests/core/os/os2/path.odin
+++ b/tests/core/os/os2/path.odin
@@ -1,5 +1,6 @@
package tests_core_os_os2
+import "core:fmt"
import os "core:os/os2"
import "core:log"
import "core:testing"
@@ -386,24 +387,62 @@ Glob_Test :: struct {
glob_tests := []Glob_Test{
{
pattern = ODIN_ROOT + "tests/core/os/*/*.txt",
- matches = {},
- err = nil,
+ matches = {
+ ODIN_ROOT + "tests/core/os/dir/b.txt",
+ },
+ err = {},
+ },
+ {
+ pattern = ODIN_ROOT + "tests/core/os/os2/*.odin",
+ matches = {
+ ODIN_ROOT + "tests/core/os/os2/dir.odin",
+ ODIN_ROOT + "tests/core/os/os2/file.odin",
+ ODIN_ROOT + "tests/core/os/os2/path.odin",
+ ODIN_ROOT + "tests/core/os/os2/process.odin",
+ },
+ err = {},
},
}
@(test)
test_glob :: proc(t: ^testing.T) {
+ compare_matches :: proc(t: ^testing.T, pattern: string, globbed, expected: []string) {
+ glob_fold := make([]string, len(globbed), context.temp_allocator)
+ expect_fold := make([]string, len(globbed), context.temp_allocator)
+
+ for glob, i in globbed {
+ // If `glob` returned a path in response to a pattern,
+ // then `match` should consider that path a match, too,
+ // irrespective of `/` versus `\` presence.
+ no_match_msg := fmt.tprintf("Expected os.match(%q, %q) to be `true`, got `false`", pattern, glob)
+ match, _ := os.match(pattern, glob)
+
+ f, _ := strings.replace_all(glob, `\`, `/`, context.temp_allocator)
+ glob_fold[i] = f
+ testing.expect(t, match, no_match_msg)
+ }
+
+ for exp, i in expected {
+ f, _ := strings.replace_all(exp, `\`, `/`, context.temp_allocator)
+ expect_fold[i] = f
+ }
+
+ slice.sort(glob_fold)
+ slice.sort(expect_fold)
+
+ not_equal_msg := fmt.tprintf("Expected os.glob(%q) to return %v, got %v", pattern, glob_fold, expect_fold)
+ testing.expect(t, slice.equal(glob_fold, expect_fold), not_equal_msg)
+ }
+
for glob in glob_tests {
- files, err := os.glob(glob.pattern, context.allocator)
+ globbed, err := os.glob(glob.pattern, context.allocator)
defer {
- for file in files {
+ for file in globbed {
delete(file)
}
- delete(files)
+ delete(globbed)
}
testing.expect_value(t, err, glob.err)
-
- slice.sort(files)
- log.infof("files: %v", files)
+ compare_matches(t, glob.pattern, globbed, glob.matches)
}
} \ No newline at end of file