-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathfile_handling_test.go
More file actions
79 lines (74 loc) · 1.95 KB
/
Copy pathfile_handling_test.go
File metadata and controls
79 lines (74 loc) · 1.95 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
package main
import (
"path/filepath"
"testing"
)
// TestNewFile exercises NewFile's path-resolution behavior.
func TestNewFile(t *testing.T) {
tmp := t.TempDir()
tests := []struct {
name string
// input is the raw path passed to NewFile.
input string
// want is the absolute path the resulting *File should expose. If
// empty, the test computes the expected value via filepath.Abs(input)
// at runtime (useful for inputs that are inherently relative to the
// test process's working directory).
want string
}{
{
name: "absolute path is returned cleaned",
input: filepath.Join(tmp, "foo"),
want: filepath.Join(tmp, "foo"),
},
{
name: "absolute path with redundant separators is cleaned",
input: tmp + "//foo///bar",
want: filepath.Join(tmp, "foo", "bar"),
},
{
name: "absolute path with .. is resolved",
input: filepath.Join(tmp, "a", "..", "b"),
want: filepath.Join(tmp, "b"),
},
{
name: "relative path is resolved to absolute",
input: "relative/path",
// want is computed below because it depends on the test
// process's working directory.
},
{
name: "relative path with .. is resolved",
input: "a/../b",
},
{
name: "dot is resolved to the working directory",
input: ".",
},
}
for _, tc := range tests {
t.Run(tc.name, func(t *testing.T) {
want := tc.want
if want == "" {
abs, err := filepath.Abs(tc.input)
if err != nil {
t.Fatalf("filepath.Abs(%q) returned unexpected error: %v", tc.input, err)
}
want = abs
}
got, err := NewFile(tc.input)
if err != nil {
t.Fatalf("NewFile(%q) returned unexpected error: %v", tc.input, err)
}
if got == nil {
t.Fatalf("NewFile(%q) returned nil", tc.input)
}
if got.Path != want {
t.Errorf("NewFile(%q).Path = %q; want %q", tc.input, got.Path, want)
}
if !filepath.IsAbs(got.Path) {
t.Errorf("NewFile(%q).Path = %q; want an absolute path", tc.input, got.Path)
}
})
}
}