container/output: move global output to msg
All checks were successful
Test / Create distribution (push) Successful in 32s
Test / Sandbox (push) Successful in 2m10s
Test / Hakurei (push) Successful in 3m10s
Test / Sandbox (race detector) (push) Successful in 4m27s
Test / Hpkg (push) Successful in 4m36s
Test / Hakurei (race detector) (push) Successful in 5m14s
Test / Flake checks (push) Successful in 1m22s
All checks were successful
Test / Create distribution (push) Successful in 32s
Test / Sandbox (push) Successful in 2m10s
Test / Hakurei (push) Successful in 3m10s
Test / Sandbox (race detector) (push) Successful in 4m27s
Test / Hpkg (push) Successful in 4m36s
Test / Hakurei (race detector) (push) Successful in 5m14s
Test / Flake checks (push) Successful in 1m22s
Signed-off-by: Ophestra <cat@gensokyo.uk>
This commit is contained in:
parent
e906cae9ee
commit
802e6afa34
@ -50,3 +50,18 @@ func (msg *DefaultMsg) Verbosef(format string, v ...any) {
|
|||||||
func (msg *DefaultMsg) Suspend() { msg.inactive.Store(true) }
|
func (msg *DefaultMsg) Suspend() { msg.inactive.Store(true) }
|
||||||
func (msg *DefaultMsg) Resume() bool { return msg.inactive.CompareAndSwap(true, false) }
|
func (msg *DefaultMsg) Resume() bool { return msg.inactive.CompareAndSwap(true, false) }
|
||||||
func (msg *DefaultMsg) BeforeExit() {}
|
func (msg *DefaultMsg) BeforeExit() {}
|
||||||
|
|
||||||
|
// msg is the [Msg] implemented used by all exported [container] functions.
|
||||||
|
var msg Msg = new(DefaultMsg)
|
||||||
|
|
||||||
|
// GetOutput returns the current active [Msg] implementation.
|
||||||
|
func GetOutput() Msg { return msg }
|
||||||
|
|
||||||
|
// SetOutput replaces the current active [Msg] implementation.
|
||||||
|
func SetOutput(v Msg) {
|
||||||
|
if v == nil {
|
||||||
|
msg = new(DefaultMsg)
|
||||||
|
} else {
|
||||||
|
msg = v
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -146,3 +146,39 @@ func (out *testOutput) Resume() bool {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (out *testOutput) BeforeExit() { out.Verbose("beforeExit called") }
|
func (out *testOutput) BeforeExit() { out.Verbose("beforeExit called") }
|
||||||
|
|
||||||
|
func TestGetSetOutput(t *testing.T) {
|
||||||
|
{
|
||||||
|
out := container.GetOutput()
|
||||||
|
t.Cleanup(func() { container.SetOutput(out) })
|
||||||
|
}
|
||||||
|
|
||||||
|
t.Run("default", func(t *testing.T) {
|
||||||
|
container.SetOutput(new(stubOutput))
|
||||||
|
if v, ok := container.GetOutput().(*container.DefaultMsg); ok {
|
||||||
|
t.Fatalf("SetOutput: got unexpected output %#v", v)
|
||||||
|
}
|
||||||
|
container.SetOutput(nil)
|
||||||
|
if _, ok := container.GetOutput().(*container.DefaultMsg); !ok {
|
||||||
|
t.Fatalf("SetOutput: got unexpected output %#v", container.GetOutput())
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
t.Run("stub", func(t *testing.T) {
|
||||||
|
container.SetOutput(new(stubOutput))
|
||||||
|
if _, ok := container.GetOutput().(*stubOutput); !ok {
|
||||||
|
t.Fatalf("SetOutput: got unexpected output %#v", container.GetOutput())
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
type stubOutput struct {
|
||||||
|
wrapF func(error, ...any) error
|
||||||
|
}
|
||||||
|
|
||||||
|
func (*stubOutput) IsVerbose() bool { panic("unreachable") }
|
||||||
|
func (*stubOutput) Verbose(...any) { panic("unreachable") }
|
||||||
|
func (*stubOutput) Verbosef(string, ...any) { panic("unreachable") }
|
||||||
|
func (*stubOutput) Suspend() { panic("unreachable") }
|
||||||
|
func (*stubOutput) Resume() bool { panic("unreachable") }
|
||||||
|
func (*stubOutput) BeforeExit() { panic("unreachable") }
|
||||||
|
@ -75,14 +75,3 @@ func (s *Suspendable) Resume() (resumed bool, dropped uintptr, n int64, err erro
|
|||||||
}
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
var msg Msg = new(DefaultMsg)
|
|
||||||
|
|
||||||
func GetOutput() Msg { return msg }
|
|
||||||
func SetOutput(v Msg) {
|
|
||||||
if v == nil {
|
|
||||||
msg = new(DefaultMsg)
|
|
||||||
} else {
|
|
||||||
msg = v
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
package container
|
package container_test
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
@ -8,10 +8,14 @@ import (
|
|||||||
"syscall"
|
"syscall"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
|
"hakurei.app/container"
|
||||||
"hakurei.app/container/stub"
|
"hakurei.app/container/stub"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestSuspendable(t *testing.T) {
|
func TestSuspendable(t *testing.T) {
|
||||||
|
// copied from output.go
|
||||||
|
const suspendBufMax = 1 << 24
|
||||||
|
|
||||||
const (
|
const (
|
||||||
// equivalent to len(want.pt)
|
// equivalent to len(want.pt)
|
||||||
nSpecialPtEquiv = -iota - 1
|
nSpecialPtEquiv = -iota - 1
|
||||||
@ -70,7 +74,7 @@ func TestSuspendable(t *testing.T) {
|
|||||||
|
|
||||||
var dw expectWriter
|
var dw expectWriter
|
||||||
|
|
||||||
w := Suspendable{Downstream: &dw}
|
w := container.Suspendable{Downstream: &dw}
|
||||||
for _, tc := range testCases {
|
for _, tc := range testCases {
|
||||||
// these share the same writer, so cannot be subtests
|
// these share the same writer, so cannot be subtests
|
||||||
t.Logf("writing step %q", tc.name)
|
t.Logf("writing step %q", tc.name)
|
||||||
@ -149,39 +153,3 @@ func (w *expectWriter) Write(p []byte) (n int, err error) {
|
|||||||
}
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestGetSetOutput(t *testing.T) {
|
|
||||||
{
|
|
||||||
out := GetOutput()
|
|
||||||
t.Cleanup(func() { SetOutput(out) })
|
|
||||||
}
|
|
||||||
|
|
||||||
t.Run("default", func(t *testing.T) {
|
|
||||||
SetOutput(new(stubOutput))
|
|
||||||
if v, ok := GetOutput().(*DefaultMsg); ok {
|
|
||||||
t.Fatalf("SetOutput: got unexpected output %#v", v)
|
|
||||||
}
|
|
||||||
SetOutput(nil)
|
|
||||||
if _, ok := GetOutput().(*DefaultMsg); !ok {
|
|
||||||
t.Fatalf("SetOutput: got unexpected output %#v", GetOutput())
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
t.Run("stub", func(t *testing.T) {
|
|
||||||
SetOutput(new(stubOutput))
|
|
||||||
if _, ok := GetOutput().(*stubOutput); !ok {
|
|
||||||
t.Fatalf("SetOutput: got unexpected output %#v", GetOutput())
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
type stubOutput struct {
|
|
||||||
wrapF func(error, ...any) error
|
|
||||||
}
|
|
||||||
|
|
||||||
func (*stubOutput) IsVerbose() bool { panic("unreachable") }
|
|
||||||
func (*stubOutput) Verbose(...any) { panic("unreachable") }
|
|
||||||
func (*stubOutput) Verbosef(string, ...any) { panic("unreachable") }
|
|
||||||
func (*stubOutput) Suspend() { panic("unreachable") }
|
|
||||||
func (*stubOutput) Resume() bool { panic("unreachable") }
|
|
||||||
func (*stubOutput) BeforeExit() { panic("unreachable") }
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user