buildr/modules/test_ctx.go
Peter e60726ef9e
All checks were successful
continuous-integration/drone/pr Build is passing
continuous-integration/drone/push Build is passing
feat: implement new and man for plugin modules
- use extracted shared libraries
2023-08-23 22:06:26 +02:00

68 lines
1.4 KiB
Go

package modules
import (
"context"
"io"
"log/slog"
"testing"
"code.icb4dc0.de/buildr/buildr/modules/state"
)
var _ ExecutionContext = (*TestExecutionContext)(nil)
type TestExecutionContext struct {
context.Context
TB testing.TB
StateStore state.Store
TestWorkingDir string
OutputDirectory string
}
func (t TestExecutionContext) Name() string {
return t.TB.Name()
}
func (t TestExecutionContext) WorkingDir() string {
return t.TestWorkingDir
}
func (t TestExecutionContext) OutDir() string {
return t.OutputDirectory
}
func (t TestExecutionContext) BinariesDir() string {
return ""
}
func (t TestExecutionContext) StdOut() io.Writer {
return testWriter{TB: t.TB}
}
func (t TestExecutionContext) StdErr() io.Writer {
return testWriter{TB: t.TB}
}
func (t TestExecutionContext) Logger() *slog.Logger {
return slog.New(slog.NewTextHandler(testWriter{TB: t.TB}, nil))
}
func (t TestExecutionContext) GetState(ctx context.Context, key string) ([]byte, state.Metadata, error) {
return t.StateStore.Get(ctx, state.KeyOfStrings(key))
}
func (t TestExecutionContext) SetState(ctx context.Context, key string, value []byte) error {
return t.StateStore.Set(ctx, state.KeyOfStrings(key), value)
}
var _ io.Writer = (*testWriter)(nil)
type testWriter struct {
testing.TB
}
func (t testWriter) Write(p []byte) (n int, err error) {
t.Log(string(p))
return len(p), nil
}