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/MichaelMure/git-bug/cache"
13 "github.com/MichaelMure/git-bug/repository"
14)
15
16var _ Out = &TestOut{}
17
18type TestOut struct {
19 *bytes.Buffer
20}
21
22func (te *TestOut) Printf(format string, a ...interface{}) {
23 _, _ = fmt.Fprintf(te.Buffer, format, a...)
24}
25
26func (te *TestOut) Print(a ...interface{}) {
27 _, _ = fmt.Fprint(te.Buffer, a...)
28}
29
30func (te *TestOut) Println(a ...interface{}) {
31 _, _ = fmt.Fprintln(te.Buffer, a...)
32}
33
34func (te *TestOut) PrintJSON(v interface{}) error {
35 raw, err := json.MarshalIndent(v, "", " ")
36 if err != nil {
37 return err
38 }
39 te.Println(string(raw))
40 return nil
41}
42
43func (te *TestOut) Raw() io.Writer {
44 return te.Buffer
45}
46
47func NewTestEnv(t *testing.T) *Env {
48 t.Helper()
49
50 repo := repository.CreateGoGitTestRepo(t, false)
51
52 backend, err := cache.NewRepoCacheNoEvents(repo)
53 require.NoError(t, err)
54
55 t.Cleanup(func() {
56 backend.Close()
57 })
58
59 return &Env{
60 Repo: repo,
61 Backend: backend,
62 Out: &TestOut{&bytes.Buffer{}},
63 Err: &TestOut{&bytes.Buffer{}},
64 }
65}