summaryrefslogtreecommitdiff
path: root/vendor/github.com/stretchr/testify/suite
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/stretchr/testify/suite')
-rw-r--r--vendor/github.com/stretchr/testify/suite/stats.go16
-rw-r--r--vendor/github.com/stretchr/testify/suite/suite.go110
2 files changed, 57 insertions, 69 deletions
diff --git a/vendor/github.com/stretchr/testify/suite/stats.go b/vendor/github.com/stretchr/testify/suite/stats.go
index 261da37f7..be4ccd679 100644
--- a/vendor/github.com/stretchr/testify/suite/stats.go
+++ b/vendor/github.com/stretchr/testify/suite/stats.go
@@ -16,26 +16,30 @@ type TestInformation struct {
}
func newSuiteInformation() *SuiteInformation {
- testStats := make(map[string]*TestInformation)
-
return &SuiteInformation{
- TestStats: testStats,
+ TestStats: make(map[string]*TestInformation),
}
}
-func (s SuiteInformation) start(testName string) {
+func (s *SuiteInformation) start(testName string) {
+ if s == nil {
+ return
+ }
s.TestStats[testName] = &TestInformation{
TestName: testName,
Start: time.Now(),
}
}
-func (s SuiteInformation) end(testName string, passed bool) {
+func (s *SuiteInformation) end(testName string, passed bool) {
+ if s == nil {
+ return
+ }
s.TestStats[testName].End = time.Now()
s.TestStats[testName].Passed = passed
}
-func (s SuiteInformation) Passed() bool {
+func (s *SuiteInformation) Passed() bool {
for _, stats := range s.TestStats {
if !stats.Passed {
return false
diff --git a/vendor/github.com/stretchr/testify/suite/suite.go b/vendor/github.com/stretchr/testify/suite/suite.go
index 18443a91c..1b19be3bc 100644
--- a/vendor/github.com/stretchr/testify/suite/suite.go
+++ b/vendor/github.com/stretchr/testify/suite/suite.go
@@ -7,6 +7,7 @@ import (
"reflect"
"regexp"
"runtime/debug"
+ "strings"
"sync"
"testing"
"time"
@@ -15,7 +16,6 @@ import (
"github.com/stretchr/testify/require"
)
-var allTestsFilter = func(_, _ string) (bool, error) { return true, nil }
var matchMethod = flag.String("testify.m", "", "regular expression to select tests of the testify suite to run")
// Suite is a basic testing suite with methods for storing and
@@ -116,6 +116,11 @@ func (suite *Suite) Run(name string, subtest func()) bool {
})
}
+type test = struct {
+ name string
+ run func(t *testing.T)
+}
+
// Run takes a testing suite and runs all of the tests attached
// to it.
func Run(t *testing.T, suite TestingSuite) {
@@ -124,45 +129,39 @@ func Run(t *testing.T, suite TestingSuite) {
suite.SetT(t)
suite.SetS(suite)
- var suiteSetupDone bool
-
var stats *SuiteInformation
if _, ok := suite.(WithStats); ok {
stats = newSuiteInformation()
}
- tests := []testing.InternalTest{}
+ var tests []test
methodFinder := reflect.TypeOf(suite)
suiteName := methodFinder.Elem().Name()
- for i := 0; i < methodFinder.NumMethod(); i++ {
- method := methodFinder.Method(i)
-
- ok, err := methodFilter(method.Name)
+ var matchMethodRE *regexp.Regexp
+ if *matchMethod != "" {
+ var err error
+ matchMethodRE, err = regexp.Compile(*matchMethod)
if err != nil {
fmt.Fprintf(os.Stderr, "testify: invalid regexp for -m: %s\n", err)
os.Exit(1)
}
+ }
- if !ok {
+ for i := 0; i < methodFinder.NumMethod(); i++ {
+ method := methodFinder.Method(i)
+
+ if !strings.HasPrefix(method.Name, "Test") {
continue
}
-
- if !suiteSetupDone {
- if stats != nil {
- stats.Start = time.Now()
- }
-
- if setupAllSuite, ok := suite.(SetupAllSuite); ok {
- setupAllSuite.SetupSuite()
- }
-
- suiteSetupDone = true
+ // Apply -testify.m filter
+ if matchMethodRE != nil && !matchMethodRE.MatchString(method.Name) {
+ continue
}
- test := testing.InternalTest{
- Name: method.Name,
- F: func(t *testing.T) {
+ test := test{
+ name: method.Name,
+ run: func(t *testing.T) {
parentT := suite.T()
suite.SetT(t)
defer recoverAndFailOnPanic(t)
@@ -171,10 +170,7 @@ func Run(t *testing.T, suite TestingSuite) {
r := recover()
- if stats != nil {
- passed := !t.Failed() && r == nil
- stats.end(method.Name, passed)
- }
+ stats.end(method.Name, !t.Failed() && r == nil)
if afterTestSuite, ok := suite.(AfterTest); ok {
afterTestSuite.AfterTest(suiteName, method.Name)
@@ -195,59 +191,47 @@ func Run(t *testing.T, suite TestingSuite) {
beforeTestSuite.BeforeTest(methodFinder.Elem().Name(), method.Name)
}
- if stats != nil {
- stats.start(method.Name)
- }
+ stats.start(method.Name)
method.Func.Call([]reflect.Value{reflect.ValueOf(suite)})
},
}
tests = append(tests, test)
}
- if suiteSetupDone {
- defer func() {
- if tearDownAllSuite, ok := suite.(TearDownAllSuite); ok {
- tearDownAllSuite.TearDownSuite()
- }
-
- if suiteWithStats, measureStats := suite.(WithStats); measureStats {
- stats.End = time.Now()
- suiteWithStats.HandleStats(suiteName, stats)
- }
- }()
+
+ if len(tests) == 0 {
+ return
}
- runTests(t, tests)
-}
+ if stats != nil {
+ stats.Start = time.Now()
+ }
-// Filtering method according to set regular expression
-// specified command-line argument -m
-func methodFilter(name string) (bool, error) {
- if ok, _ := regexp.MatchString("^Test", name); !ok {
- return false, nil
+ if setupAllSuite, ok := suite.(SetupAllSuite); ok {
+ setupAllSuite.SetupSuite()
}
- return regexp.MatchString(*matchMethod, name)
+
+ defer func() {
+ if tearDownAllSuite, ok := suite.(TearDownAllSuite); ok {
+ tearDownAllSuite.TearDownSuite()
+ }
+
+ if suiteWithStats, measureStats := suite.(WithStats); measureStats {
+ stats.End = time.Now()
+ suiteWithStats.HandleStats(suiteName, stats)
+ }
+ }()
+
+ runTests(t, tests)
}
-func runTests(t testing.TB, tests []testing.InternalTest) {
+func runTests(t *testing.T, tests []test) {
if len(tests) == 0 {
t.Log("warning: no tests to run")
return
}
- r, ok := t.(runner)
- if !ok { // backwards compatibility with Go 1.6 and below
- if !testing.RunTests(allTestsFilter, tests) {
- t.Fail()
- }
- return
- }
-
for _, test := range tests {
- r.Run(test.Name, test.F)
+ t.Run(test.name, test.run)
}
}
-
-type runner interface {
- Run(name string, f func(t *testing.T)) bool
-}