summaryrefslogtreecommitdiffstats
path: root/src/syscall/fs_wasip1_test.go
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/syscall/fs_wasip1_test.go76
1 files changed, 76 insertions, 0 deletions
diff --git a/src/syscall/fs_wasip1_test.go b/src/syscall/fs_wasip1_test.go
new file mode 100644
index 0000000..f27e6a8
--- /dev/null
+++ b/src/syscall/fs_wasip1_test.go
@@ -0,0 +1,76 @@
+// Copyright 2023 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+//go:build wasip1
+
+package syscall_test
+
+import (
+ "syscall"
+ "testing"
+)
+
+var joinPathTests = [...]struct {
+ dir, file, path string
+}{
+ 0: {".", ".", "."},
+ 1: {"./", "./", "./"},
+ 2: {"././././", ".", "."},
+ 3: {".", "./././", "./"},
+ 4: {".", "a", "a"},
+ 5: {".", "a/b", "a/b"},
+ 6: {".", "..", ".."},
+ 7: {".", "../", "../"},
+ 8: {".", "../../", "../../"},
+ 9: {".", "../..", "../.."},
+ 10: {".", "../..//..///", "../../../"},
+ 11: {"/", "/", "/"},
+ 12: {"/", "a", "/a"},
+ 13: {"/", "a/b", "/a/b"},
+ 14: {"/a", "b", "/a/b"},
+ 15: {"/", ".", "/"},
+ 16: {"/", "..", "/"},
+ 17: {"/", "../../", "/"},
+ 18: {"/", "/../a/b/c", "/a/b/c"},
+ 19: {"/", "/../a/b/c", "/a/b/c"},
+ 20: {"/", "./hello/world", "/hello/world"},
+ 21: {"/a", "../", "/"},
+ 22: {"/a/b/c", "..", "/a/b"},
+ 23: {"/a/b/c", "..///..///", "/a/"},
+ 24: {"/a/b/c", "..///..///..", "/"},
+ 25: {"/a/b/c", "..///..///..///..", "/"},
+ 26: {"/a/b/c", "..///..///..///..///..", "/"},
+ 27: {"/a/b/c/", "/d/e/f/", "/a/b/c/d/e/f/"},
+ 28: {"a/b/c/", ".", "a/b/c"},
+ 29: {"a/b/c/", "./d", "a/b/c/d"},
+ 30: {"a/b/c/", "./d/", "a/b/c/d/"},
+ 31: {"a/b/", "./c/d/", "a/b/c/d/"},
+ 32: {"../", "..", "../.."},
+ 33: {"a/b/c/d", "e/../..", "a/b/c"},
+ 34: {"a/b/c/d", "./e/../..", "a/b/c"},
+ 35: {"a/b/c/d", "./e/..//../../f/g//", "a/b/f/g/"},
+ 36: {"../../../", "a/../../b/c", "../../b/c"},
+ 37: {"/a/b/c", "/.././/hey!", "/a/b/hey!"},
+}
+
+func TestJoinPath(t *testing.T) {
+ for _, test := range joinPathTests {
+ t.Run("", func(t *testing.T) {
+ path := syscall.JoinPath(test.dir, test.file)
+ if path != test.path {
+ t.Errorf("join(%q,%q): want=%q got=%q", test.dir, test.file, test.path, path)
+ }
+ })
+ }
+}
+
+func BenchmarkJoinPath(b *testing.B) {
+ for _, test := range joinPathTests {
+ b.Run("", func(b *testing.B) {
+ for i := 0; i < b.N; i++ {
+ syscall.JoinPath(test.dir, test.file)
+ }
+ })
+ }
+}