| // 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) |
| } |
| }) |
| } |
| } |