1package execenv
2
3import (
4 "bytes"
5 "encoding/json"
6 "fmt"
7 "io"
8 "testing"
9
10 "github.com/stretchr/testify/require"
11
12 "github.com/git-bug/git-bug/cache"
13 "github.com/git-bug/git-bug/repository"
14)
15
16var _ In = &TestIn{}
17
18type TestIn struct {
19 *bytes.Buffer
20 forceIsTerminal bool
21}
22
23func (t *TestIn) IsTerminal() bool {
24 return t.forceIsTerminal
25}
26
27func (t *TestIn) ForceIsTerminal(value bool) {
28 t.forceIsTerminal = value
29}
30
31var _ Out = &TestOut{}
32
33type TestOut struct {
34 *bytes.Buffer
35 forceIsTerminal bool
36}
37
38func (te *TestOut) Printf(format string, a ...interface{}) {
39 _, _ = fmt.Fprintf(te.Buffer, format, a...)
40}
41
42func (te *TestOut) Print(a ...interface{}) {
43 _, _ = fmt.Fprint(te.Buffer, a...)
44}
45
46func (te *TestOut) Println(a ...interface{}) {
47 _, _ = fmt.Fprintln(te.Buffer, a...)
48}
49
50func (te *TestOut) PrintJSON(v interface{}) error {
51 raw, err := json.MarshalIndent(v, "", " ")
52 if err != nil {
53 return err
54 }
55 te.Println(string(raw))
56 return nil
57}
58
59func (te *TestOut) IsTerminal() bool {
60 return te.forceIsTerminal
61}
62
63func (te *TestOut) Width() int {
64 return 80
65}
66
67func (te *TestOut) Raw() io.Writer {
68 return te.Buffer
69}
70
71func (te *TestOut) ForceIsTerminal(value bool) {
72 te.forceIsTerminal = value
73}
74
75func NewTestEnv(t *testing.T) *Env {
76 t.Helper()
77 return newTestEnv(t, false)
78}
79
80func NewTestEnvTerminal(t *testing.T) *Env {
81 t.Helper()
82 return newTestEnv(t, true)
83}
84
85func newTestEnv(t *testing.T, isTerminal bool) *Env {
86 repo := repository.CreateGoGitTestRepo(t, false)
87
88 backend, err := cache.NewRepoCacheNoEvents(repo)
89 require.NoError(t, err)
90
91 t.Cleanup(func() {
92 backend.Close()
93 })
94
95 return &Env{
96 Repo: repo,
97 Backend: backend,
98 In: &TestIn{Buffer: &bytes.Buffer{}, forceIsTerminal: isTerminal},
99 Out: &TestOut{Buffer: &bytes.Buffer{}, forceIsTerminal: isTerminal},
100 Err: &TestOut{Buffer: &bytes.Buffer{}, forceIsTerminal: isTerminal},
101 }
102}