1package reporting 2 3import "fmt" 4 5type problem struct { 6 out *Printer 7 errors []*AssertionResult 8 failures []*AssertionResult 9} 10 11func (self *problem) BeginStory(story *StoryReport) {} 12 13func (self *problem) Enter(scope *ScopeReport) {} 14 15func (self *problem) Report(report *AssertionResult) { 16 if report.Error != nil { 17 self.errors = append(self.errors, report) 18 } else if report.Failure != "" { 19 self.failures = append(self.failures, report) 20 } 21} 22 23func (self *problem) Exit() {} 24 25func (self *problem) EndStory() { 26 self.show(self.showErrors, redColor) 27 self.show(self.showFailures, yellowColor) 28 self.prepareForNextStory() 29} 30func (self *problem) show(display func(), color string) { 31 fmt.Print(color) 32 display() 33 fmt.Print(resetColor) 34 self.out.Dedent() 35} 36func (self *problem) showErrors() { 37 for i, e := range self.errors { 38 if i == 0 { 39 self.out.Println("\nErrors:\n") 40 self.out.Indent() 41 } 42 self.out.Println(errorTemplate, e.File, e.Line, e.Error, e.StackTrace) 43 } 44} 45func (self *problem) showFailures() { 46 for i, f := range self.failures { 47 if i == 0 { 48 self.out.Println("\nFailures:\n") 49 self.out.Indent() 50 } 51 self.out.Println(failureTemplate, f.File, f.Line, f.Failure) 52 } 53} 54 55func (self *problem) Write(content []byte) (written int, err error) { 56 return len(content), nil // no-op 57} 58 59func NewProblemReporter(out *Printer) *problem { 60 self := new(problem) 61 self.out = out 62 self.prepareForNextStory() 63 return self 64} 65func (self *problem) prepareForNextStory() { 66 self.errors = []*AssertionResult{} 67 self.failures = []*AssertionResult{} 68} 69