problems.go 1.5 KB

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