summaryrefslogtreecommitdiffstats
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/interfaces.go12
-rw-r--r--vendor/github.com/stretchr/testify/suite/suite.go27
-rw-r--r--vendor/github.com/stretchr/testify/suite/suite_test.go69
3 files changed, 98 insertions, 10 deletions
diff --git a/vendor/github.com/stretchr/testify/suite/interfaces.go b/vendor/github.com/stretchr/testify/suite/interfaces.go
index 20969472c..b37cb0409 100644
--- a/vendor/github.com/stretchr/testify/suite/interfaces.go
+++ b/vendor/github.com/stretchr/testify/suite/interfaces.go
@@ -32,3 +32,15 @@ type TearDownAllSuite interface {
type TearDownTestSuite interface {
TearDownTest()
}
+
+// BeforeTest has a function to be executed right before the test
+// starts and receives the suite and test names as input
+type BeforeTest interface {
+ BeforeTest(suiteName, testName string)
+}
+
+// AfterTest has a function to be executed right after the test
+// finishes and receives the suite and test names as input
+type AfterTest interface {
+ AfterTest(suiteName, testName string)
+}
diff --git a/vendor/github.com/stretchr/testify/suite/suite.go b/vendor/github.com/stretchr/testify/suite/suite.go
index db7413000..e20afbc21 100644
--- a/vendor/github.com/stretchr/testify/suite/suite.go
+++ b/vendor/github.com/stretchr/testify/suite/suite.go
@@ -12,6 +12,7 @@ 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
@@ -86,7 +87,13 @@ func Run(t *testing.T, suite TestingSuite) {
if setupTestSuite, ok := suite.(SetupTestSuite); ok {
setupTestSuite.SetupTest()
}
+ if beforeTestSuite, ok := suite.(BeforeTest); ok {
+ beforeTestSuite.BeforeTest(methodFinder.Elem().Name(), method.Name)
+ }
defer func() {
+ if afterTestSuite, ok := suite.(AfterTest); ok {
+ afterTestSuite.AfterTest(methodFinder.Elem().Name(), method.Name)
+ }
if tearDownTestSuite, ok := suite.(TearDownTestSuite); ok {
tearDownTestSuite.TearDownTest()
}
@@ -98,10 +105,20 @@ func Run(t *testing.T, suite TestingSuite) {
tests = append(tests, test)
}
}
+ runTests(t, tests)
+}
+
+func runTests(t testing.TB, tests []testing.InternalTest) {
+ r, ok := t.(runner)
+ if !ok { // backwards compatibility with Go 1.6 and below
+ if !testing.RunTests(allTestsFilter, tests) {
+ t.Fail()
+ }
+ return
+ }
- if !testing.RunTests(func(_, _ string) (bool, error) { return true, nil },
- tests) {
- t.Fail()
+ for _, test := range tests {
+ r.Run(test.Name, test.F)
}
}
@@ -113,3 +130,7 @@ func methodFilter(name string) (bool, error) {
}
return regexp.MatchString(*matchMethod, name)
}
+
+type runner interface {
+ Run(name string, f func(t *testing.T)) bool
+}
diff --git a/vendor/github.com/stretchr/testify/suite/suite_test.go b/vendor/github.com/stretchr/testify/suite/suite_test.go
index c7c4e88f7..b75fa4ac1 100644
--- a/vendor/github.com/stretchr/testify/suite/suite_test.go
+++ b/vendor/github.com/stretchr/testify/suite/suite_test.go
@@ -5,8 +5,10 @@ import (
"io/ioutil"
"os"
"testing"
+ "time"
"github.com/stretchr/testify/assert"
+ "github.com/stretchr/testify/require"
)
// SuiteRequireTwice is intended to test the usage of suite.Require in two
@@ -18,7 +20,7 @@ type SuiteRequireTwice struct{ Suite }
// A regression would result on these tests panicking rather than failing.
func TestSuiteRequireTwice(t *testing.T) {
ok := testing.RunTests(
- func(_, _ string) (bool, error) { return true, nil },
+ allTestsFilter,
[]testing.InternalTest{{
Name: "TestSuiteRequireTwice",
F: func(t *testing.T) {
@@ -58,6 +60,15 @@ type SuiteTester struct {
TestOneRunCount int
TestTwoRunCount int
NonTestMethodRunCount int
+
+ SuiteNameBefore []string
+ TestNameBefore []string
+
+ SuiteNameAfter []string
+ TestNameAfter []string
+
+ TimeBefore []time.Time
+ TimeAfter []time.Time
}
type SuiteSkipTester struct {
@@ -75,6 +86,18 @@ func (suite *SuiteTester) SetupSuite() {
suite.SetupSuiteRunCount++
}
+func (suite *SuiteTester) BeforeTest(suiteName, testName string) {
+ suite.SuiteNameBefore = append(suite.SuiteNameBefore, suiteName)
+ suite.TestNameBefore = append(suite.TestNameBefore, testName)
+ suite.TimeBefore = append(suite.TimeBefore, time.Now())
+}
+
+func (suite *SuiteTester) AfterTest(suiteName, testName string) {
+ suite.SuiteNameAfter = append(suite.SuiteNameAfter, suiteName)
+ suite.TestNameAfter = append(suite.TestNameAfter, testName)
+ suite.TimeAfter = append(suite.TimeAfter, time.Now())
+}
+
func (suite *SuiteSkipTester) SetupSuite() {
suite.SetupSuiteRunCount++
suite.T().Skip()
@@ -145,6 +168,35 @@ func TestRunSuite(t *testing.T) {
assert.Equal(t, suiteTester.SetupSuiteRunCount, 1)
assert.Equal(t, suiteTester.TearDownSuiteRunCount, 1)
+ assert.Equal(t, len(suiteTester.SuiteNameAfter), 3)
+ assert.Equal(t, len(suiteTester.SuiteNameBefore), 3)
+ assert.Equal(t, len(suiteTester.TestNameAfter), 3)
+ assert.Equal(t, len(suiteTester.TestNameBefore), 3)
+
+ assert.Contains(t, suiteTester.TestNameAfter, "TestOne")
+ assert.Contains(t, suiteTester.TestNameAfter, "TestTwo")
+ assert.Contains(t, suiteTester.TestNameAfter, "TestSkip")
+
+ assert.Contains(t, suiteTester.TestNameBefore, "TestOne")
+ assert.Contains(t, suiteTester.TestNameBefore, "TestTwo")
+ assert.Contains(t, suiteTester.TestNameBefore, "TestSkip")
+
+ for _, suiteName := range suiteTester.SuiteNameAfter {
+ assert.Equal(t, "SuiteTester", suiteName)
+ }
+
+ for _, suiteName := range suiteTester.SuiteNameBefore {
+ assert.Equal(t, "SuiteTester", suiteName)
+ }
+
+ for _, when := range suiteTester.TimeAfter {
+ assert.False(t, when.IsZero())
+ }
+
+ for _, when := range suiteTester.TimeBefore {
+ assert.False(t, when.IsZero())
+ }
+
// There are three test methods (TestOne, TestTwo, and TestSkip), so
// the SetupTest and TearDownTest methods (which should be run once for
// each test) should have been run three times.
@@ -216,16 +268,19 @@ func (sc *StdoutCapture) StopCapture() (string, error) {
}
func TestSuiteLogging(t *testing.T) {
- testT := testing.T{}
-
suiteLoggingTester := new(SuiteLoggingTester)
-
capture := StdoutCapture{}
+ internalTest := testing.InternalTest{
+ Name: "SomeTest",
+ F: func(subT *testing.T) {
+ Run(subT, suiteLoggingTester)
+ },
+ }
capture.StartCapture()
- Run(&testT, suiteLoggingTester)
+ testing.RunTests(allTestsFilter, []testing.InternalTest{internalTest})
output, err := capture.StopCapture()
-
- assert.Nil(t, err, "Got an error trying to capture stdout!")
+ require.NoError(t, err, "Got an error trying to capture stdout and stderr!")
+ require.NotEmpty(t, output, "output content must not be empty")
// Failed tests' output is always printed
assert.Contains(t, output, "TESTLOGFAIL")