summaryrefslogtreecommitdiff
path: root/cmd/playsmf/main_test.go
blob: 68ee28fae61be6699ae5d7cd46efa84f324d8287 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
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")
}