-
Notifications
You must be signed in to change notification settings - Fork 1
/
suite_option.go
80 lines (71 loc) · 1.45 KB
/
suite_option.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
package server
import (
"fmt"
"regexp"
"time"
"github.com/blippar/aragorn/pkg/util/json"
)
// SuiteOption is a function that sets some option on the suite.
type SuiteOption func(c *SuiteConfig)
func Timeout(timeout time.Duration) SuiteOption {
return func(cfg *SuiteConfig) {
cfg.Timeout = json.Duration(timeout)
}
}
func FailFast(ff bool) SuiteOption {
return func(cfg *SuiteConfig) {
cfg.FailFast = ff
}
}
func Filter(filter string) SuiteOption {
return func(cfg *SuiteConfig) {
cfg.filter = filter
}
}
func baseSuite(bs []byte) SuiteOption {
return func(cfg *SuiteConfig) {
cfg.baseSuite = bs
}
}
func (cfg *SuiteConfig) applyOptions(options ...SuiteOption) {
for _, option := range options {
option(cfg)
}
}
func (s *Suite) applyConfig(cfg *SuiteConfig) error {
if cfg.Name != "" {
s.name = cfg.Name
}
if cfg.RunEvery > 0 {
s.runEvery = time.Duration(cfg.RunEvery)
}
if cfg.RunCron != "" {
s.runCron = cfg.RunCron
}
if cfg.RetryCount > 0 {
s.retryCount = cfg.RetryCount
}
if cfg.RetryWait > 0 {
s.retryWait = time.Duration(cfg.RetryWait)
}
if cfg.Timeout > 0 {
s.timeout = time.Duration(cfg.Timeout)
}
if cfg.FailFast {
s.failfast = true
}
if cfg.filter != "" {
re, err := regexp.Compile(cfg.filter)
if err != nil {
return fmt.Errorf("filter: %v", err)
}
tests := s.tests[:0]
for _, t := range s.tests {
if re.MatchString(t.Name()) {
tests = append(tests, t)
}
}
s.tests = tests
}
return nil
}