forked from smartystreets/goconvey
/
result.go
120 lines (101 loc) · 2.53 KB
/
result.go
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
109
110
111
112
113
114
115
116
117
118
119
120
package contract
import (
"path/filepath"
"strings"
"go/build"
"github.com/playscale/goconvey/convey/reporting"
"github.com/playscale/goconvey/web/server/messaging"
)
type Package struct {
Path string
Name string
Ignored bool
Disabled bool
BuildTags []string
TestArguments []string
Error error
Output string
Result *PackageResult
HasImportCycle bool
}
func NewPackage(folder *messaging.Folder, hasImportCycle bool) *Package {
self := new(Package)
self.Path = folder.Path
self.Name = resolvePackageName(self.Path)
self.Result = NewPackageResult(self.Name)
self.Ignored = folder.Ignored
self.Disabled = folder.Disabled
self.BuildTags = folder.BuildTags
self.TestArguments = folder.TestArguments
self.HasImportCycle = hasImportCycle
return self
}
func (self *Package) Active() bool {
return !self.Disabled && !self.Ignored
}
func (self *Package) HasUsableResult() bool {
return self.Active() && (self.Error == nil || (self.Output != ""))
}
type CompleteOutput struct {
Packages []*PackageResult
Revision string
Paused bool
}
var ( // PackageResult.Outcome values:
Ignored = "ignored"
Disabled = "disabled"
Passed = "passed"
Failed = "failed"
Panicked = "panicked"
BuildFailure = "build failure"
NoTestFiles = "no test files"
NoTestFunctions = "no test functions"
NoGoFiles = "no go code"
TestRunAbortedUnexpectedly = "test run aborted unexpectedly"
)
type PackageResult struct {
PackageName string
Elapsed float64
Coverage float64
Outcome string
BuildOutput string
TestResults []TestResult
}
func NewPackageResult(packageName string) *PackageResult {
self := new(PackageResult)
self.PackageName = packageName
self.TestResults = []TestResult{}
self.Coverage = -1
return self
}
type TestResult struct {
TestName string
Elapsed float64
Passed bool
Skipped bool
File string
Line int
Message string
Error string
Stories []reporting.ScopeResult
RawLines []string `json:",omitempty"`
}
func NewTestResult(testName string) *TestResult {
self := new(TestResult)
self.Stories = []reporting.ScopeResult{}
self.RawLines = []string{}
self.TestName = testName
return self
}
func resolvePackageName(path string) string {
pkg, err := build.ImportDir(path, build.FindOnly)
if err == nil {
return pkg.ImportPath
}
nameArr := strings.Split(path, endGoPath)
return nameArr[len(nameArr)-1]
}
const (
separator = string(filepath.Separator)
endGoPath = separator + "src" + separator
)