9
// -----------------------------------------------------------------------
10
// Output writer manages atomic output writing according to settings.
12
type outputWriter struct {
15
wroteCallProblemLast bool
20
func newOutputWriter(writer io.Writer, stream, verbose bool) *outputWriter {
21
return &outputWriter{writer: writer, Stream: stream, Verbose: verbose}
24
func (ow *outputWriter) Write(content []byte) (n int, err error) {
26
n, err = ow.writer.Write(content)
31
func (ow *outputWriter) WriteCallStarted(label string, c *C) {
33
header := renderCallHeader(label, c, "", "\n")
35
ow.writer.Write([]byte(header))
40
func (ow *outputWriter) WriteCallProblem(label string, c *C) {
43
prefix = "\n-----------------------------------" +
44
"-----------------------------------\n"
46
header := renderCallHeader(label, c, prefix, "\n\n")
48
ow.wroteCallProblemLast = true
49
ow.writer.Write([]byte(header))
51
c.logb.WriteTo(ow.writer)
56
func (ow *outputWriter) WriteCallSuccess(label string, c *C) {
57
if ow.Stream || (ow.Verbose && c.kind == testKd) {
58
// TODO Use a buffer here.
61
suffix = " (" + c.reason + ")"
63
if c.status() == succeededSt {
64
suffix += "\t" + c.timerString()
70
header := renderCallHeader(label, c, "", suffix)
72
// Resist temptation of using line as prefix above due to race.
73
if !ow.Stream && ow.wroteCallProblemLast {
74
header = "\n-----------------------------------" +
75
"-----------------------------------\n" +
78
ow.wroteCallProblemLast = false
79
ow.writer.Write([]byte(header))
84
func renderCallHeader(label string, c *C, prefix, suffix string) string {
86
return fmt.Sprintf("%s%s: %s: %s%s", prefix, label, niceFuncPath(pc),
87
niceFuncName(pc), suffix)