github.com/jasonish/buffalo@v0.8.2-0.20170413145823-bacbdd415f1b/buffalo/cmd/test.go (about) 1 package cmd 2 3 import ( 4 "bytes" 5 "fmt" 6 "os" 7 "os/exec" 8 "regexp" 9 "strings" 10 11 "github.com/markbates/pop" 12 "github.com/spf13/cobra" 13 ) 14 15 const vendorPattern = "/vendor/" 16 17 var vendorRegex *regexp.Regexp 18 19 func init() { 20 RootCmd.AddCommand(testCmd) 21 vendorRegex = regexp.MustCompile(vendorPattern) 22 } 23 24 var testCmd = &cobra.Command{ 25 Use: "test", 26 Short: "Runs the tests for your Buffalo app", 27 DisableFlagParsing: true, 28 RunE: func(c *cobra.Command, args []string) error { 29 os.Setenv("GO_ENV", "test") 30 if _, err := os.Stat("database.yml"); err == nil { 31 // there's a database 32 test, err := pop.Connect("test") 33 if err != nil { 34 return err 35 } 36 37 // drop the test db: 38 test.Dialect.DropDB() 39 40 // create the test db: 41 err = test.Dialect.CreateDB() 42 if err != nil { 43 return err 44 } 45 46 dev, err := pop.Connect("development") 47 if err != nil { 48 return err 49 } 50 schema := &bytes.Buffer{} 51 err = dev.Dialect.DumpSchema(schema) 52 if err != nil { 53 return err 54 } 55 56 err = test.Dialect.LoadSchema(schema) 57 if err != nil { 58 return err 59 } 60 } 61 return testRunner(args) 62 }, 63 } 64 65 func testRunner(args []string) error { 66 cmd := exec.Command("go", "test", "-p", "1") 67 cmd.Args = append(cmd.Args, args...) 68 cmd.Stdin = os.Stdin 69 cmd.Stdout = os.Stdout 70 cmd.Stderr = os.Stderr 71 runFlag := false 72 for _, a := range cmd.Args { 73 if a == "-run" { 74 runFlag = true 75 } 76 } 77 if !runFlag { 78 out, err := exec.Command("go", "list", "./...").Output() 79 if err != nil { 80 return err 81 } 82 pkgs := bytes.Split(bytes.TrimSpace(out), []byte("\n")) 83 for _, p := range pkgs { 84 if !vendorRegex.Match(p) { 85 cmd.Args = append(cmd.Args, string(p)) 86 } 87 } 88 } 89 fmt.Println(strings.Join(cmd.Args, " ")) 90 return cmd.Run() 91 }