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 }