@@ -43,15 +43,35 @@ main:
4343
4444class TestAbort :
4545
46- interface TestPrinter :
46+ interface TestPrinter extends Printer :
4747 set-test-ui_ test-ui / TestUi?
4848
4949class TestHumanPrinter extends HumanPrinter implements TestPrinter :
5050 test-ui_ / TestUi? := null
5151
5252 print_ str / string :
5353 if not test-ui_ .quiet_ : super str
54- test-ui_ .stdout += "$ str\n "
54+ test-ui_ .stdout-messages .add "$ str\n "
55+
56+ set-test-ui_ test-ui / TestUi :
57+ test-ui_ = test-ui
58+
59+ class TestPlainPrinter extends PlainPrinter implements TestPrinter :
60+ test-ui_ / TestUi? := null
61+ needs-structured_ / bool
62+
63+ constructor --needs-structured / bool :
64+ needs-structured_ = needs-structured
65+
66+ needs-structured --kind / int -> bool :
67+ return needs-structured_
68+
69+ print_ str / string :
70+ if not test-ui_ .quiet_ : super str
71+ test-ui_ .stdout-messages .add "$ str\n "
72+
73+ emit-structured --kind / int data :
74+ test-ui_ .stdout-messages .add ( json .stringify data )
5575
5676 set-test-ui_ test-ui / TestUi :
5777 test-ui_ = test-ui
@@ -61,32 +81,53 @@ class TestJsonPrinter extends JsonPrinter implements TestPrinter:
6181
6282 print_ str / string :
6383 if not test-ui_ .quiet_ : super str
64- test-ui_ .stderr += "$ str\n "
84+ test-ui_ .stderr-messages . add "$ str\n "
6585
6686 emit-structured --kind / int data :
67- test-ui_ .stdout += json .stringify data
87+ test-ui_ .stdout-messages . add ( json .stringify data )
6888
6989 set-test-ui_ test-ui / TestUi :
7090 test-ui_ = test-ui
7191
7292class TestUi extends Ui :
73- stdout / string := ""
74- stderr / string := ""
93+ stdout-messages / List ::= []
94+ stderr-messages / List ::= []
7595 quiet_ / bool
76- json_ / bool
7796
7897 constructor --level / int= Ui .NORMAL-LEVEL --quiet / bool= true --json / bool= false :
79- quiet_ = quiet
80- json_ = json
8198 printer := create-printer_ --json = json
99+ return TestUi --printer = printer --level = level --quiet = quiet
100+
101+ constructor --level / int= Ui .NORMAL-LEVEL --quiet / bool= true --printer / TestPrinter :
102+ quiet_ = quiet
82103 super --printer = printer --level = level
83104 ( printer as TestPrinter ) .set-test-ui_ this
84105 test-ui_ = this
85106
86- static create-printer_ --json / bool -> Printer :
107+ static create-printer_ --json / bool -> TestPrinter :
87108 if json : return TestJsonPrinter
88109 return TestHumanPrinter
89110
111+ stdout -> string :
112+ return stdout-messages .join ""
113+
114+ stdout= str / string :
115+ stdout-messages .clear
116+ if str != "" :
117+ stdout-messages .add str
118+
119+ stderr -> string :
120+ return stderr-messages .join ""
121+
122+ stderr= str / string :
123+ stderr-messages .clear
124+ if str != "" :
125+ stderr-messages .add str
126+
127+ reset -> none :
128+ stdout-messages .clear
129+ stderr-messages .clear
130+
90131 abort :
91132 throw TestAbort
92133
0 commit comments