From 6250dd9f9b739471ec50e47a83735461066806f3 Mon Sep 17 00:00:00 2001 From: Hajime Hoshi Date: Sun, 9 Feb 2020 04:53:21 +0900 Subject: [PATCH] buffered: Bug fix: ebiten.Run must be called from the main thread Updates #1027 --- internal/buffered/image_test.go | 25 ++++++++++++++++++------- 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/internal/buffered/image_test.go b/internal/buffered/image_test.go index 43af344b2..e56c62d7d 100644 --- a/internal/buffered/image_test.go +++ b/internal/buffered/image_test.go @@ -15,6 +15,7 @@ package buffered_test import ( + "errors" "image/color" "os" "testing" @@ -34,19 +35,29 @@ func runOnMainThread(f func()) { } func TestMain(m *testing.M) { + codeCh := make(chan int) + endCh := make(chan struct{}) go func() { - os.Exit(m.Run()) + code := m.Run() + close(endCh) + codeCh <- code + close(codeCh) }() - for { - if err := ebiten.Run(func(*ebiten.Image) error { - f := <-mainCh + rt := errors.New("regular termination") + if err := ebiten.Run(func(*ebiten.Image) error { + select { + case f := <-mainCh: f() - return nil - }, 320, 240, 1, ""); err != nil { - panic(err) + case <-endCh: + return rt } + return nil + }, 320, 240, 1, ""); err != nil && err != rt { + panic(err) } + + os.Exit(<-codeCh) } type testResult struct {