blob: f27e6a8cd786ab8a09cd0b31fca3d33ccc49f1de [file] [log] [blame]
// 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)
}
})
}
}