mirror of
https://git.sr.ht/~eliasnaur/gio
synced 2026-07-01 07:35:40 +00:00
cmd/gogio: send all e2e logs to t.Logf
chromedp was defaulting to log.Printf, which is not good for tests. The xgb and xgbutil logs were suppressed if -v wasn't given, but they were sent straight to os.Stderr otherwise: === RUN TestX11 === PAUSE TestX11 === CONT TestX11 XGB: conn.go:47: Could not get authority info: EOF XGB: conn.go:48: Trying connection without authority info... --- PASS: TestX11 (0.87s) Instead, direct their loggers to an io.Writer implementation that sends its output to t.Logf: === RUN TestX11 === PAUSE TestX11 === CONT TestX11 TestX11: x11_test.go:187: XGB: conn.go:47: Could not get authority info: EOF TestX11: x11_test.go:187: XGB: conn.go:48: Trying connection without authority info... --- PASS: TestX11 (0.86s) We do end up with duplicate log prefixes, but at least we don't write straight to stderr, which will be a problem as we add more concurrent tests. Signed-off-by: Daniel Martí <mvdan@mvdan.cc>
This commit is contained in:
@@ -66,7 +66,10 @@ func TestJSOnChrome(t *testing.T) {
|
||||
actx, cancel := chromedp.NewExecAllocator(context.Background(), opts...)
|
||||
defer cancel()
|
||||
|
||||
ctx, cancel := chromedp.NewContext(actx)
|
||||
ctx, cancel := chromedp.NewContext(actx,
|
||||
// Send all logf/errf calls to t.Logf
|
||||
chromedp.WithLogf(t.Logf),
|
||||
)
|
||||
defer cancel()
|
||||
|
||||
if err := chromedp.Run(ctx); err != nil {
|
||||
|
||||
+17
-4
@@ -136,10 +136,8 @@ func TestX11(t *testing.T) {
|
||||
// Finally, run our tests. A connection to the X server is used to
|
||||
// interact with it.
|
||||
{
|
||||
if !testing.Verbose() {
|
||||
xgb.Logger.SetOutput(ioutil.Discard)
|
||||
xgbutil.Logger.SetOutput(ioutil.Discard)
|
||||
}
|
||||
xgb.Logger.SetOutput(testLogWriter{t})
|
||||
xgbutil.Logger.SetOutput(testLogWriter{t})
|
||||
xu, err := xgbutil.NewConnDisplay(display)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
@@ -174,3 +172,18 @@ func TestX11(t *testing.T) {
|
||||
wantColor(t, img, 595, 595, 0xdede, 0xadad, 0xbebe)
|
||||
}
|
||||
}
|
||||
|
||||
// testLogWriter is a bit of a hack to redirect libraries that use a *log.Logger
|
||||
// variable to instead send their logs to t.Logf.
|
||||
//
|
||||
// Since *log.Logger isn't an interface and can only take an io.Writer, all we
|
||||
// can do is implement an io.Writer that sends its output to t.Logf. We end up
|
||||
// with duplicate log prefixes, but that doesn't seem so bad.
|
||||
type testLogWriter struct {
|
||||
t *testing.T
|
||||
}
|
||||
|
||||
func (w testLogWriter) Write(p []byte) (n int, err error) {
|
||||
w.t.Logf("%s", p)
|
||||
return len(p), nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user