@@ -751,3 +751,169 @@ func TestUnInitializedSuites(t *testing.T) {
751751 })
752752 })
753753}
754+
755+ var register = map [string ]bool {"SuiteTesterTestTwo" : true }
756+
757+ func skip (suiteName , testName string ) bool {
758+ return register [suiteName + testName ]
759+ }
760+
761+ // TestRunSuiteWithSkip will be run by the 'go test' command, so within it, we
762+ // can run our suite using the Run(*testing.T, TestingSuite) function.
763+ func TestRunSuiteWithSkip (t * testing.T ) {
764+ suiteTester := new (SuiteTester )
765+ RunWithSkip (t , suiteTester , skip )
766+
767+ // Normally, the test would end here. The following are simply
768+ // some assertions to ensure that the Run function is working as
769+ // intended - they are not part of the example.
770+
771+ // The suite was only run once, so the SetupSuite and TearDownSuite
772+ // methods should have each been run only once.
773+ assert .Equal (t , 1 , suiteTester .SetupSuiteRunCount )
774+ assert .Equal (t , 1 , suiteTester .TearDownSuiteRunCount )
775+
776+ assert .Len (t , suiteTester .SuiteNameAfter , 3 )
777+ assert .Len (t , suiteTester .SuiteNameBefore , 3 )
778+ assert .Len (t , suiteTester .TestNameAfter , 3 )
779+ assert .Len (t , suiteTester .TestNameBefore , 3 )
780+
781+ assert .Contains (t , suiteTester .TestNameAfter , "TestOne" )
782+ assert .NotContains (t , suiteTester .TestNameAfter , "TestTwo" )
783+ assert .Contains (t , suiteTester .TestNameAfter , "TestSkip" )
784+ assert .Contains (t , suiteTester .TestNameAfter , "TestSubtest" )
785+
786+ assert .Contains (t , suiteTester .TestNameBefore , "TestOne" )
787+ assert .NotContains (t , suiteTester .TestNameBefore , "TestTwo" )
788+ assert .Contains (t , suiteTester .TestNameBefore , "TestSkip" )
789+ assert .Contains (t , suiteTester .TestNameBefore , "TestSubtest" )
790+
791+ assert .Contains (t , suiteTester .SetupSubTestNames , "TestRunSuiteWithSkip/TestSubtest/first" )
792+ assert .Contains (t , suiteTester .SetupSubTestNames , "TestRunSuiteWithSkip/TestSubtest/second" )
793+
794+ assert .Contains (t , suiteTester .TearDownSubTestNames , "TestRunSuiteWithSkip/TestSubtest/first" )
795+ assert .Contains (t , suiteTester .TearDownSubTestNames , "TestRunSuiteWithSkip/TestSubtest/second" )
796+
797+ for _ , suiteName := range suiteTester .SuiteNameAfter {
798+ assert .Equal (t , "SuiteTester" , suiteName )
799+ }
800+
801+ for _ , suiteName := range suiteTester .SuiteNameBefore {
802+ assert .Equal (t , "SuiteTester" , suiteName )
803+ }
804+
805+ for _ , when := range suiteTester .TimeAfter {
806+ assert .False (t , when .IsZero ())
807+ }
808+
809+ for _ , when := range suiteTester .TimeBefore {
810+ assert .False (t , when .IsZero ())
811+ }
812+
813+ // There are four test methods (TestOne, TestTwo, TestSkip, and TestSubtest), so
814+ // the SetupTest and TearDownTest methods (which should be run once for
815+ // each test) should have been run four times.
816+ assert .Equal (t , 3 , suiteTester .SetupTestRunCount )
817+ assert .Equal (t , 3 , suiteTester .TearDownTestRunCount )
818+
819+ // Each test should have been run once.
820+ assert .Equal (t , 1 , suiteTester .TestOneRunCount )
821+ assert .Equal (t , 0 , suiteTester .TestTwoRunCount )
822+ assert .Equal (t , 1 , suiteTester .TestSubtestRunCount )
823+
824+ assert .Equal (t , 2 , suiteTester .TearDownSubTestRunCount )
825+ assert .Equal (t , 2 , suiteTester .SetupSubTestRunCount )
826+
827+ // Methods that don't match the test method identifier shouldn't
828+ // have been run at all.
829+ assert .Equal (t , 0 , suiteTester .NonTestMethodRunCount )
830+
831+ suiteSkipTester := new (SuiteSkipTester )
832+ Run (t , suiteSkipTester )
833+
834+ // The suite was only run once, so the SetupSuite and TearDownSuite
835+ // methods should have each been run only once, even though SetupSuite
836+ // called Skip()
837+ assert .Equal (t , 1 , suiteSkipTester .SetupSuiteRunCount )
838+ assert .Equal (t , 1 , suiteSkipTester .TearDownSuiteRunCount )
839+
840+ }
841+
842+ // TestRunSuiteWithSkip will be run by the 'go test' command, so within it, we
843+ // can run our suite using the Run(*testing.T, TestingSuite) function.
844+ func TestRunSuiteWithSkipAll (t * testing.T ) {
845+ suiteTester := new (SuiteTester )
846+ RunWithSkip (t , suiteTester , func (_ , _ string ) bool { return true })
847+
848+ // Normally, the test would end here. The following are simply
849+ // some assertions to ensure that the Run function is working as
850+ // intended - they are not part of the example.
851+
852+ // The suite was only run once, so the SetupSuite and TearDownSuite
853+ // methods should have each been run only once.
854+ assert .Equal (t , 0 , suiteTester .SetupSuiteRunCount )
855+ assert .Equal (t , 0 , suiteTester .TearDownSuiteRunCount )
856+
857+ assert .Len (t , suiteTester .SuiteNameAfter , 0 )
858+ assert .Len (t , suiteTester .SuiteNameBefore , 0 )
859+ assert .Len (t , suiteTester .TestNameAfter , 0 )
860+ assert .Len (t , suiteTester .TestNameBefore , 0 )
861+
862+ assert .NotContains (t , suiteTester .TestNameAfter , "TestOne" )
863+ assert .NotContains (t , suiteTester .TestNameAfter , "TestTwo" )
864+ assert .NotContains (t , suiteTester .TestNameAfter , "TestSkip" )
865+ assert .NotContains (t , suiteTester .TestNameAfter , "TestSubtest" )
866+
867+ assert .NotContains (t , suiteTester .TestNameBefore , "TestOne" )
868+ assert .NotContains (t , suiteTester .TestNameBefore , "TestTwo" )
869+ assert .NotContains (t , suiteTester .TestNameBefore , "TestSkip" )
870+ assert .NotContains (t , suiteTester .TestNameBefore , "TestSubtest" )
871+
872+ assert .NotContains (t , suiteTester .SetupSubTestNames , "TestRunSuiteWithSkipAll/TestSubtest/first" )
873+ assert .NotContains (t , suiteTester .SetupSubTestNames , "TestRunSuiteWithSkipAll/TestSubtest/second" )
874+
875+ assert .NotContains (t , suiteTester .TearDownSubTestNames , "TestRunSuiteWithSkipAll/TestSubtest/first" )
876+ assert .NotContains (t , suiteTester .TearDownSubTestNames , "TestRunSuiteWithSkipAll/TestSubtest/second" )
877+
878+ for _ , suiteName := range suiteTester .SuiteNameAfter {
879+ assert .Equal (t , "SuiteTester" , suiteName )
880+ }
881+
882+ for _ , suiteName := range suiteTester .SuiteNameBefore {
883+ assert .Equal (t , "SuiteTester" , suiteName )
884+ }
885+
886+ for _ , when := range suiteTester .TimeAfter {
887+ assert .False (t , when .IsZero ())
888+ }
889+
890+ for _ , when := range suiteTester .TimeBefore {
891+ assert .False (t , when .IsZero ())
892+ }
893+
894+ // There are four test methods (TestOne, TestTwo, TestSkip, and TestSubtest), so
895+ // the SetupTest and TearDownTest methods (which should be run once for
896+ // each test) should have been run four times.
897+ assert .Equal (t , 0 , suiteTester .SetupTestRunCount )
898+ assert .Equal (t , 0 , suiteTester .TearDownTestRunCount )
899+
900+ // Each test should have been run once.
901+ assert .Equal (t , 0 , suiteTester .TestOneRunCount )
902+ assert .Equal (t , 0 , suiteTester .TestTwoRunCount )
903+ assert .Equal (t , 0 , suiteTester .TestSubtestRunCount )
904+
905+ assert .Equal (t , 0 , suiteTester .TearDownSubTestRunCount )
906+ assert .Equal (t , 0 , suiteTester .SetupSubTestRunCount )
907+
908+ // Methods that don't match the test method identifier shouldn't
909+ // have been run at all.
910+ assert .Equal (t , 0 , suiteTester .NonTestMethodRunCount )
911+
912+ suiteSkipTester := new (SuiteSkipTester )
913+ Run (t , suiteSkipTester )
914+
915+ // All tests were skipped via skip function, so Setup/TearDownSuite should not run
916+ assert .Equal (t , 0 , suiteSkipTester .SetupSuiteRunCount )
917+ assert .Equal (t , 0 , suiteSkipTester .TearDownSuiteRunCount )
918+
919+ }
0 commit comments