package main import ( "bytes" "context" "isle/daemon" "isle/toolkit" "reflect" "testing" "dev.mediocregopher.com/mediocre-go-lib.git/mlog" "github.com/stretchr/testify/assert" "gopkg.in/yaml.v3" ) type runHarness struct { ctx context.Context logger *mlog.Logger daemonRPC *daemon.MockRPC stdout *bytes.Buffer } func newRunHarness(t *testing.T) *runHarness { t.Parallel() var ( ctx = context.Background() logger = toolkit.NewTestLogger(t) daemonRPC = daemon.NewMockRPC(t) stdout = new(bytes.Buffer) ) return &runHarness{ctx, logger, daemonRPC, stdout} } func (h *runHarness) run(_ *testing.T, args ...string) error { return doRootCmd(h.ctx, h.logger, &subCmdCtxOpts{ args: args, daemonRPC: h.daemonRPC, stdout: h.stdout, }) } func (h *runHarness) runAssertStdout( t *testing.T, want any, args ...string, ) { var ( gotType = reflect.ValueOf(want) got = reflect.New(gotType.Type()) ) h.stdout.Reset() assert.NoError(t, h.run(t, args...)) assert.NoError(t, yaml.Unmarshal(h.stdout.Bytes(), got.Interface())) assert.Equal(t, want, got.Elem().Interface()) }