github.com/mattn/gom@v0.0.0-20190726063113-0ebf2b5d812d/exec_test.go (about)

     1  package main
     2  
     3  import (
     4  	"io/ioutil"
     5  	"os"
     6  	"path/filepath"
     7  	"runtime"
     8  	"strconv"
     9  	"strings"
    10  	"testing"
    11  )
    12  
    13  func TestExec(t *testing.T) {
    14  	dir, err := ioutil.TempDir("", "gom")
    15  	if err != nil {
    16  		t.Fatal(err)
    17  	}
    18  	defer os.RemoveAll(dir)
    19  	cwd, err := os.Getwd()
    20  	if err != nil {
    21  		t.Fatal(err)
    22  	}
    23  	err = os.Chdir(dir)
    24  	if err != nil {
    25  		t.Fatal(err)
    26  	}
    27  	defer os.Chdir(cwd)
    28  	f, err := ioutil.TempFile(dir, "gom")
    29  	if err != nil {
    30  		t.Fatal(err)
    31  	}
    32  	vendor := filepath.Join(dir, vendorFolder)
    33  	err = os.MkdirAll(vendorSrc(vendor), 0755)
    34  	if err != nil {
    35  		t.Fatal(err)
    36  	}
    37  	oldstdout := stdout
    38  	defer func() {
    39  		stdout = oldstdout
    40  	}()
    41  	stdout = f
    42  	err = run([]string{"go", "env"}, None)
    43  	if err != nil {
    44  		t.Fatal(err)
    45  	}
    46  	f.Close()
    47  	stdout = oldstdout
    48  	b, err := ioutil.ReadFile(f.Name())
    49  	if err != nil {
    50  		t.Fatal(err)
    51  	}
    52  	gopath := ""
    53  	for _, line := range strings.Split(string(b), "\n") {
    54  		if runtime.GOOS == "windows" {
    55  			item := strings.SplitN(line, " ", 2)
    56  			if len(item) < 2 {
    57  				continue
    58  			}
    59  			if strings.HasPrefix(item[1], "GOPATH=") {
    60  				gopath = item[1][7:]
    61  			}
    62  		} else if strings.HasPrefix(line, "GOPATH=") {
    63  			gopath, _ = strconv.Unquote(line[7:])
    64  		}
    65  	}
    66  	found := false
    67  	vendorInfo, _ := os.Stat(vendor)
    68  	for _, s := range strings.Split(gopath, string(filepath.ListSeparator)) {
    69  		currentInfo, _ := os.Stat(s)
    70  		if os.SameFile(vendorInfo, currentInfo) {
    71  			found = true
    72  			break
    73  		}
    74  	}
    75  	if !found {
    76  		t.Fatalf("Expected %v, but %v:", vendor, gopath)
    77  	}
    78  }