@@ -604,14 +604,44 @@ func TestFailfastSuite(t *testing.T) {
604
604
}},
605
605
)
606
606
assert .False (t , ok )
607
+ var expect []string
607
608
if failFast {
608
609
// Test A Fails and because we are running with failfast Test B never runs and we proceed straight to TearDownSuite
609
- assert . Equal ( t , "SetupSuite; SetupTest; Test A Fails;TearDownTest;TearDownSuite " , strings . Join ( s . callOrder , ";" ))
610
+ expect = [] string { "SetupSuite" , " SetupTest" , " Test A Fails" , "TearDownTest" , "TearDownSuite" }
610
611
} else {
611
612
// Test A Fails and because we are running without failfast we continue and run Test B and then proceed to TearDownSuite
612
- assert . Equal ( t , "SetupSuite; SetupTest; Test A Fails; TearDownTest; SetupTest; Test B Passes;TearDownTest;TearDownSuite " , strings . Join ( s . callOrder , ";" ))
613
+ expect = [] string { "SetupSuite" , " SetupTest" , " Test A Fails" , " TearDownTest" , " SetupTest" , " Test B Passes" , "TearDownTest" , "TearDownSuite" }
613
614
}
615
+ callOrderAssert (t , expect , s .callOrder )
614
616
}
617
+
618
+ type tHelper interface {
619
+ Helper ()
620
+ }
621
+
622
+ // callOrderAssert is a help with confirms that asserts that expect
623
+ // matches one or more times in callOrder. This makes it compatible
624
+ // with go test flag -count=X where X > 1.
625
+ func callOrderAssert (t * testing.T , expect , callOrder []string ) {
626
+ var ti interface {} = t
627
+ if h , ok := ti .(tHelper ); ok {
628
+ h .Helper ()
629
+ }
630
+
631
+ callCount := len (callOrder )
632
+ expectCount := len (expect )
633
+ if callCount > expectCount && callCount % expectCount == 0 {
634
+ // Command line flag -count=X where X > 1.
635
+ for len (callOrder ) >= expectCount {
636
+ assert .Equal (t , expect , callOrder [:expectCount ])
637
+ callOrder = callOrder [expectCount :]
638
+ }
639
+ return
640
+ }
641
+
642
+ assert .Equal (t , expect , callOrder )
643
+ }
644
+
615
645
func TestFailfastSuiteFailFastOn (t * testing.T ) {
616
646
// To test this with failfast on (and isolated from other intended test failures in our test suite) we launch it in its own process
617
647
cmd := exec .Command ("go" , "test" , "-v" , "-race" , "-run" , "TestFailfastSuite" , "-failfast" )
0 commit comments