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