github.com/weiwenhao/getter@v1.30.1/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", "testdata/detect-file-symlink-pwd/syml/pwd", 25 "testdata/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 59 out, ok, err := f.Detect(tc.in, pwd) 60 if err != nil { 61 t.Fatalf("err: %s", err) 62 } 63 if !ok { 64 t.Fatal("not ok") 65 } 66 67 expected := tc.out 68 if !strings.HasPrefix(expected, "file://") { 69 expected = "file://" + filepath.Join(pwdRoot, expected) 70 } 71 72 if out != expected { 73 t.Fatalf("input: %q\npwd: %q\nexpected: %q\nbad output: %#v", 74 tc.in, pwd, expected, out) 75 } 76 }) 77 } 78 } 79 80 var noPwdFileTests = []fileTest{ 81 {in: "./foo", pwd: "", out: "", err: true}, 82 {in: "foo", pwd: "", out: "", err: true}, 83 } 84 85 var noPwdUnixFileTests = []fileTest{ 86 {in: "/foo", pwd: "", out: "file:///foo", err: false}, 87 } 88 89 var noPwdWinFileTests = []fileTest{ 90 {in: "/foo", pwd: "", out: "", err: true}, 91 {in: `C:\`, pwd: ``, out: `file://C:/`, err: false}, 92 } 93 94 func TestFileDetector_noPwd(t *testing.T) { 95 if runtime.GOOS == "windows" { 96 noPwdFileTests = append(noPwdFileTests, noPwdWinFileTests...) 97 } else { 98 noPwdFileTests = append(noPwdFileTests, noPwdUnixFileTests...) 99 } 100 101 f := new(FileDetector) 102 for i, tc := range noPwdFileTests { 103 out, ok, err := f.Detect(tc.in, tc.pwd) 104 if err != nil != tc.err { 105 t.Fatalf("%d: err: %s", i, err) 106 } 107 if !ok { 108 t.Fatal("not ok") 109 } 110 111 if out != tc.out { 112 t.Fatalf("%d: bad: %#v", i, out) 113 } 114 } 115 }