1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108
|
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"
}
|