@@ -2,42 +2,100 @@ package runner
22
33import (
44 "fmt"
5- "os"
5+ "runtime"
6+ "sync"
67
78 "github.com/rogpeppe/go-internal/testscript"
89)
910
1011type cliTest struct {
11- failed bool
12+ mu sync.Mutex
13+ failed bool
14+ skipped bool
15+ isSub bool
16+ parent * cliTest
1217}
1318
14- func (c * cliTest ) Fatal (args ... any ) {
15- c .failed = true
16- _ , _ = fmt .Fprint (os .Stderr , "❌ " )
17- _ , _ = fmt .Fprintln (os .Stderr , args ... )
19+ func (t * cliTest ) Run (name string , f func (t testscript.T )) {
20+ subTest := & cliTest {
21+ isSub : true ,
22+ parent : t ,
23+ }
24+
25+ fmt .Printf ("Running: %s\n " , name )
26+
27+ done := make (chan struct {})
28+ go func () {
29+ defer close (done )
30+ f (subTest )
31+ }()
32+ <- done
33+
34+ if subTest .failed {
35+ t .mu .Lock ()
36+ t .failed = true
37+ t .mu .Unlock ()
38+ }
1839}
1940
20- func (c * cliTest ) Log (args ... any ) {
21- _ , _ = fmt .Fprintln (os .Stdout , args ... )
41+ func (t * cliTest ) Fatal (args ... interface {}) {
42+ t .mu .Lock ()
43+ t .failed = true
44+ t .mu .Unlock ()
45+ fmt .Printf ("🚨 Fatal error: %s\n " , fmt .Sprint (args ... ))
46+ if t .isSub {
47+ runtime .Goexit ()
48+ }
2249}
2350
24- func (c * cliTest ) FailNow () {
25- c .failed = true
51+ func (t * cliTest ) Log (args ... interface {}) {
52+ if t .skipped {
53+ fmt .Println ()
54+ } else {
55+ fmt .Println (args ... )
56+ }
2657}
2758
28- func (c * cliTest ) Skip (args ... any ) {
29- _ , _ = fmt .Fprint (os .Stdout , "⏭️ Skipped: " )
30- _ , _ = fmt .Fprintln (os .Stdout , args ... )
59+ func (t * cliTest ) Logf (format string , args ... interface {}) {
60+ if t .skipped {
61+ fmt .Println ()
62+ } else {
63+ fmt .Printf (format + "\n " , args ... )
64+ }
3165}
3266
33- func (c * cliTest ) Parallel () {
34- // No-op for CLI runner sequential runs
67+ func (t * cliTest ) Skip (args ... interface {}) {
68+ t .skipped = true
69+ fmt .Printf ("⚠️ Skipped: %s\n " , fmt .Sprint (args ... ))
70+ if t .isSub {
71+ runtime .Goexit ()
72+ }
3573}
3674
37- func (c * cliTest ) Verbose () bool {
38- return true
75+ func (t * cliTest ) Skipf (format string , args ... interface {}) {
76+ t .skipped = true
77+ fmt .Printf ("⚠️ Skipped: %s\n " , fmt .Sprintf (format , args ... ))
78+ if t .isSub {
79+ runtime .Goexit ()
80+ }
3981}
4082
41- func (c * cliTest ) Run (name string , f func (testscript.T )) {
42- f (c )
83+ func (t * cliTest ) Errorf (format string , args ... interface {}) {
84+ t .mu .Lock ()
85+ t .failed = true
86+ t .mu .Unlock ()
87+ fmt .Printf ("❌ " + format + "\n " , args ... )
4388}
89+
90+ func (t * cliTest ) FailNow () {
91+ t .mu .Lock ()
92+ t .failed = true
93+ t .mu .Unlock ()
94+ if t .isSub {
95+ runtime .Goexit ()
96+ }
97+ }
98+
99+ func (t * cliTest ) Parallel () {}
100+ func (t * cliTest ) Helper () {}
101+ func (t * cliTest ) Verbose () bool { return false }
0 commit comments