github.com/hashicorp/go-getter/v2@v2.2.2/detect_file_test.go (about) 1 package getter 2 3 import ( 4 "fmt" 5 "os" 6 "path/filepath" 7 "runtime" 8 "testing" 9 ) 10 11 type fileTest struct { 12 in, pwd, out string 13 symlink, err bool 14 } 15 16 var fileTests = []fileTest{ 17 {"./foo", "/pwd", "/pwd/foo", false, false}, 18 {"./foo?foo=bar", "/pwd", "/pwd/foo?foo=bar", false, false}, 19 {"foo", "/pwd", "/pwd/foo", false, false}, 20 } 21 22 var unixFileTests = []fileTest{ 23 {"./foo", "testdata/detect-file-symlink-pwd/syml/pwd", 24 "testdata/detect-file-symlink-pwd/real/foo", true, false}, 25 26 {"/foo", "/pwd", "/foo", false, false}, 27 {"/foo?bar=baz", "/pwd", "/foo?bar=baz", false, false}, 28 } 29 30 var winFileTests = []fileTest{ 31 {"/foo", "/pwd", "/pwd/foo", false, false}, 32 {`C:\`, `/pwd`, `C:/`, false, false}, 33 {`C:\?bar=baz`, `/pwd`, `C:/?bar=baz`, false, false}, 34 } 35 36 func TestFileDetector(t *testing.T) { 37 if runtime.GOOS == "windows" { 38 fileTests = append(fileTests, winFileTests...) 39 } else { 40 fileTests = append(fileTests, unixFileTests...) 41 } 42 43 // Get the pwd 44 pwdRoot, err := os.Getwd() 45 if err != nil { 46 t.Fatalf("err: %s", err) 47 } 48 pwdRoot, err = filepath.Abs(pwdRoot) 49 if err != nil { 50 t.Fatalf("err: %s", err) 51 } 52 53 f := new(FileDetector) 54 for i, tc := range fileTests { 55 t.Run(fmt.Sprintf("%d", i), func(t *testing.T) { 56 pwd := tc.pwd 57 58 out, ok, err := f.Detect(tc.in, pwd) 59 if err != nil { 60 t.Fatalf("err: %s", err) 61 } 62 if !ok { 63 t.Fatal("not ok") 64 } 65 66 expected := tc.out 67 if tc.symlink { 68 expected = filepath.Join(pwdRoot, expected) 69 } 70 71 if out != expected { 72 t.Fatalf("input: %q\npwd: %q\nexpected: %q\nbad output: %#v", 73 tc.in, pwd, expected, out) 74 } 75 }) 76 } 77 } 78 79 var noPwdFileTests = []fileTest{ 80 {in: "./foo", pwd: "", out: "", err: true}, 81 {in: "foo", pwd: "", out: "", err: true}, 82 } 83 84 var noPwdUnixFileTests = []fileTest{ 85 {in: "/foo", pwd: "", out: "/foo", err: false}, 86 } 87 88 var noPwdWinFileTests = []fileTest{ 89 {in: "/foo", pwd: "", out: "", err: true}, 90 {in: `C:\`, pwd: ``, out: `C:/`, err: false}, 91 } 92 93 func TestFileDetector_noPwd(t *testing.T) { 94 if runtime.GOOS == "windows" { 95 noPwdFileTests = append(noPwdFileTests, noPwdWinFileTests...) 96 } else { 97 noPwdFileTests = append(noPwdFileTests, noPwdUnixFileTests...) 98 } 99 100 f := new(FileDetector) 101 for i, tc := range noPwdFileTests { 102 out, ok, err := f.Detect(tc.in, tc.pwd) 103 if err != nil != tc.err { 104 t.Fatalf("%d: err: %s", i, err) 105 } 106 if !ok { 107 t.Fatal("not ok") 108 } 109 110 if out != tc.out { 111 t.Fatalf("%d: bad: %#v", i, out) 112 } 113 } 114 }