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  }