flush the output to stdout and stderr. This waits until done is closed.
(stdout, stderr io.Writer)
| 2217 | // flush the output to stdout and stderr. |
| 2218 | // This waits until done is closed. |
| 2219 | func (b *testOutputBuf) flush(stdout, stderr io.Writer) error { |
| 2220 | b.mu.Lock() |
| 2221 | |
| 2222 | var err error |
| 2223 | b.stdout = stdout |
| 2224 | b.stderr = stderr |
| 2225 | for _, e := range b.output { |
| 2226 | var w io.Writer |
| 2227 | var errDst *error |
| 2228 | if e.stderr { |
| 2229 | w = stderr |
| 2230 | errDst = &b.errerr |
| 2231 | } else { |
| 2232 | w = stdout |
| 2233 | errDst = &b.outerr |
| 2234 | } |
| 2235 | if *errDst != nil { |
| 2236 | continue |
| 2237 | } |
| 2238 | |
| 2239 | _, werr := w.Write(e.data) |
| 2240 | if werr != nil { |
| 2241 | if err == nil { |
| 2242 | err = werr |
| 2243 | } |
| 2244 | *errDst = err |
| 2245 | } |
| 2246 | } |
| 2247 | |
| 2248 | b.mu.Unlock() |
| 2249 | |
| 2250 | <-b.done |
| 2251 | |
| 2252 | return err |
| 2253 | } |
| 2254 | |
| 2255 | // testStdout writes stdout from a test to the output buffer. |
| 2256 | type testStdout testOutputBuf |