123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108 |
- package reporting
- import (
- "fmt"
- "sync"
- )
- func (self *statistics) BeginStory(story *StoryReport) {}
- func (self *statistics) Enter(scope *ScopeReport) {}
- func (self *statistics) Report(report *AssertionResult) {
- self.Lock()
- defer self.Unlock()
- if !self.failing && report.Failure != "" {
- self.failing = true
- }
- if !self.erroring && report.Error != nil {
- self.erroring = true
- }
- if report.Skipped {
- self.skipped += 1
- } else {
- self.total++
- }
- }
- func (self *statistics) Exit() {}
- func (self *statistics) EndStory() {
- self.Lock()
- defer self.Unlock()
- if !self.suppressed {
- self.printSummaryLocked()
- }
- }
- func (self *statistics) Suppress() {
- self.Lock()
- defer self.Unlock()
- self.suppressed = true
- }
- func (self *statistics) PrintSummary() {
- self.Lock()
- defer self.Unlock()
- self.printSummaryLocked()
- }
- func (self *statistics) printSummaryLocked() {
- self.reportAssertionsLocked()
- self.reportSkippedSectionsLocked()
- self.completeReportLocked()
- }
- func (self *statistics) reportAssertionsLocked() {
- self.decideColorLocked()
- self.out.Print("\n%d total %s", self.total, plural("assertion", self.total))
- }
- func (self *statistics) decideColorLocked() {
- if self.failing && !self.erroring {
- fmt.Print(yellowColor)
- } else if self.erroring {
- fmt.Print(redColor)
- } else {
- fmt.Print(greenColor)
- }
- }
- func (self *statistics) reportSkippedSectionsLocked() {
- if self.skipped > 0 {
- fmt.Print(yellowColor)
- self.out.Print(" (one or more sections skipped)")
- }
- }
- func (self *statistics) completeReportLocked() {
- fmt.Print(resetColor)
- self.out.Print("\n")
- self.out.Print("\n")
- }
- func (self *statistics) Write(content []byte) (written int, err error) {
- return len(content), nil // no-op
- }
- func NewStatisticsReporter(out *Printer) *statistics {
- self := statistics{}
- self.out = out
- return &self
- }
- type statistics struct {
- sync.Mutex
- out *Printer
- total int
- failing bool
- erroring bool
- skipped int
- suppressed bool
- }
- func plural(word string, count int) string {
- if count == 1 {
- return word
- }
- return word + "s"
- }
|