package main import ( "fmt" "io/ioutil" "os" "os/exec" "testing" "github.com/pkg/term/termios" "gotest.tools/golden" ) func TestMain(m *testing.M) { switch os.Getenv("GOTESTMODE") { case "main": // run the normal main function main() default: os.Exit(m.Run()) } } func TestCLI(t *testing.T) { pty, tty, err := termios.Pty() if err != nil { t.Fatal(err) } defer pty.Close() cmd := exec.Command(os.Args[0], "-com", tty.Name(), "./testdata/ceottk.mid") cmd.Env = append(os.Environ(), "GOTESTMODE=main") output, err := cmd.Output() if err != nil { fmt.Printf("output: %s\n", string(output)) t.Fatal(err) } tty.Close() b, err := ioutil.ReadAll(pty) if err != nil && err.Error() != "read ptm: input/output error" { t.Errorf("error reading pty: %+v", err) } golden.AssertBytes(t, b, "ceottk-serial.golden.bin") golden.Assert(t, string(output), "ceottk-output.golden") }