@@ -559,14 +559,44 @@ func TestFailfastSuite(t *testing.T) {
559
559
}},
560
560
)
561
561
assert .Equal (t , false , ok )
562
+ var expect []string
562
563
if failFast {
563
564
// Test A Fails and because we are running with failfast Test B never runs and we proceed straight to TearDownSuite
564
- assert . Equal ( t , "SetupSuite; SetupTest; Test A Fails;TearDownTest;TearDownSuite " , strings . Join ( s . callOrder , ";" ))
565
+ expect = [] string { "SetupSuite" , " SetupTest" , " Test A Fails" , "TearDownTest" , "TearDownSuite" }
565
566
} else {
566
567
// Test A Fails and because we are running without failfast we continue and run Test B and then proceed to TearDownSuite
567
- assert . Equal ( t , "SetupSuite; SetupTest; Test A Fails; TearDownTest; SetupTest; Test B Passes;TearDownTest;TearDownSuite " , strings . Join ( s . callOrder , ";" ))
568
+ expect = [] string { "SetupSuite" , " SetupTest" , " Test A Fails" , " TearDownTest" , " SetupTest" , " Test B Passes" , "TearDownTest" , "TearDownSuite" }
568
569
}
570
+ callOrderAssert (t , expect , s .callOrder )
569
571
}
572
+
573
+ type tHelper interface {
574
+ Helper ()
575
+ }
576
+
577
+ // callOrderAssert is a help with confirms that asserts that expect
578
+ // matches one or more times in callOrder. This makes it compatible
579
+ // with go test flag -count=X where X > 1.
580
+ func callOrderAssert (t * testing.T , expect , callOrder []string ) {
581
+ var ti interface {} = t
582
+ if h , ok := ti .(tHelper ); ok {
583
+ h .Helper ()
584
+ }
585
+
586
+ callCount := len (callOrder )
587
+ expectCount := len (expect )
588
+ if callCount > expectCount && callCount % expectCount == 0 {
589
+ // Command line flag -count=X where X > 1.
590
+ for len (callOrder ) >= expectCount {
591
+ assert .Equal (t , expect , callOrder [:expectCount ])
592
+ callOrder = callOrder [expectCount :]
593
+ }
594
+ return
595
+ }
596
+
597
+ assert .Equal (t , expect , callOrder )
598
+ }
599
+
570
600
func TestFailfastSuiteFailFastOn (t * testing.T ) {
571
601
// To test this with failfast on (and isolated from other intended test failures in our test suite) we launch it in its own process
572
602
cmd := exec .Command ("go" , "test" , "-v" , "-race" , "-run" , "TestFailfastSuite" , "-failfast" )
0 commit comments