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  }