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  }