env_testing.go

 1package execenv
 2
 3import (
 4	"bytes"
 5	"encoding/json"
 6	"fmt"
 7	"testing"
 8
 9	"github.com/stretchr/testify/require"
10
11	"github.com/MichaelMure/git-bug/cache"
12	"github.com/MichaelMure/git-bug/repository"
13)
14
15type TestOut struct {
16	*bytes.Buffer
17}
18
19func (te *TestOut) Printf(format string, a ...interface{}) {
20	_, _ = fmt.Fprintf(te.Buffer, format, a...)
21}
22
23func (te *TestOut) Print(a ...interface{}) {
24	_, _ = fmt.Fprint(te.Buffer, a...)
25}
26
27func (te *TestOut) Println(a ...interface{}) {
28	_, _ = fmt.Fprintln(te.Buffer, a...)
29}
30
31func (te *TestOut) PrintJSON(v interface{}) error {
32	raw, err := json.MarshalIndent(v, "", "    ")
33	if err != nil {
34		return err
35	}
36	te.Println(string(raw))
37	return nil
38}
39
40func NewTestEnv(t *testing.T) *Env {
41	t.Helper()
42
43	repo := repository.CreateGoGitTestRepo(t, false)
44
45	buf := new(bytes.Buffer)
46
47	backend, err := cache.NewRepoCacheNoEvents(repo)
48	require.NoError(t, err)
49
50	t.Cleanup(func() {
51		backend.Close()
52	})
53
54	return &Env{
55		Repo:    repo,
56		Backend: backend,
57		Out:     &TestOut{buf},
58		Err:     &TestOut{buf},
59	}
60}