blob: c3ccd056a0bb09225b97dc89ae9515776a5d264b (
plain)
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"
}
|