diff options
Diffstat (limited to '')
-rw-r--r-- | src/syscall/fs_wasip1_test.go | 76 |
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) + } + }) + } +} |