@@ -751,7 +751,7 @@ function runtests(ARGS; testfilter = Returns(true), RecordType = TestRecord,
751751 end
752752 end
753753
754- # construct a testset to render the test results
754+ # construct a testset containing all results
755755 function create_testset (name; start= nothing , stop= nothing , kwargs... )
756756 if start === nothing
757757 testset = Test. DefaultTestSet (name; kwargs... )
@@ -780,68 +780,71 @@ function runtests(ARGS; testfilter = Returns(true), RecordType = TestRecord,
780780 end
781781 t1 = time ()
782782 o_ts = create_testset (" Overall" ; start= t0, stop= t1, verbose= do_verbose)
783- with_testset (o_ts) do
784- completed_tests = Set {String} ()
785- for (testname, result, start, stop) in results
786- push! (completed_tests, testname)
787-
788- # decode or fake a testset
789- if isa (result, AbstractTestRecord)
790- testset = result. test
791- else
792- testset = create_testset (testname; start, stop)
793- if isa (result, RemoteException) &&
794- isa (result. captured. ex, Test. TestSetException)
795- println (io_ctx. stderr , " Worker $(result. pid) failed running test $(testname) :" )
796- Base. showerror (io_ctx. stderr , result. captured)
797- println (io_ctx. stderr )
798-
799- c = IOCapture. capture () do
783+ function collect_results ()
784+ with_testset (o_ts) do
785+ completed_tests = Set {String} ()
786+ for (testname, result, start, stop) in results
787+ push! (completed_tests, testname)
788+
789+ # decode or fake a testset
790+ if isa (result, AbstractTestRecord)
791+ testset = result. test
792+ else
793+ testset = create_testset (testname; start, stop)
794+ if isa (result, RemoteException) &&
795+ isa (result. captured. ex, Test. TestSetException)
800796 for i in 1 : result. captured. ex. pass
801- Test. record (testset, Test. Pass (:test , nothing , nothing , nothing , nothing ))
797+ Test. record (testset, Test. Pass (:test , nothing , nothing , nothing , LineNumberNode ( @__LINE__ , @__FILE__ ) ))
802798 end
803799 for i in 1 : result. captured. ex. broken
804800 Test. record (testset, Test. Broken (:test , nothing ))
805801 end
806802 for t in result. captured. ex. errors_and_fails
807803 Test. record (testset, t)
808804 end
805+ else
806+ if ! isa (result, Exception)
807+ result = ErrorException (string (" Unknown result type : " , typeof (result)))
808+ end
809+ # If this test raised an exception that is not a remote testset exception,
810+ # i.e. not a RemoteException capturing a TestSetException that means
811+ # the test runner itself had some problem, so we may have hit a segfault,
812+ # deserialization errors or something similar. Record this testset as Errored.
813+ Test. record (testset, Test. Error (:nontest_error , testname, nothing , Base. ExceptionStack (NamedTuple[(;exception = result, backtrace = [])]), LineNumberNode (1 )))
809814 end
810- print (io_ctx. stdout , c. output)
811- else
812- if ! isa (result, Exception)
813- result = ErrorException (string (" Unknown result type : " , typeof (result)))
814- end
815- # If this test raised an exception that is not a remote testset exception,
816- # i.e. not a RemoteException capturing a TestSetException that means
817- # the test runner itself had some problem, so we may have hit a segfault,
818- # deserialization errors or something similar. Record this testset as Errored.
819- c = IOCapture. capture () do
820- Test. record (testset, Test. Error (:nontest_error , testname, nothing , Base. ExceptionStack ([(exception = result, backtrace = [])]), LineNumberNode (1 )))
821- end
822- print (io_ctx. stdout , c. output)
823815 end
824- end
825816
826- # record the testset
827- with_testset ( testset) do
828- Test . record (o_ts, testset)
817+ with_testset ( testset) do
818+ Test . record (o_ts, testset)
819+ end
829820 end
830- end
831821
832- # mark remaining or running tests as interrupted
833- for test in [tests; collect (keys (running_tests))]
834- (test in completed_tests) && continue
835- testset = create_testset (test)
836- c = IOCapture. capture () do
837- Test. record (testset, Test. Error (:test_interrupted , test, nothing , Base. ExceptionStack ([(exception = " skipped" , backtrace = [])]), LineNumberNode (1 )))
838- end
839- # don't print the output of interrupted tests, it's not useful
840- with_testset (testset) do
841- Test. record (o_ts, testset)
822+ # mark remaining or running tests as interrupted
823+ for test in [tests; collect (keys (running_tests))]
824+ (test in completed_tests) && continue
825+ testset = create_testset (test)
826+ Test. record (testset, Test. Error (:test_interrupted , test, nothing , Base. ExceptionStack (NamedTuple[(;exception = " skipped" , backtrace = [])]), LineNumberNode (1 )))
827+ with_testset (testset) do
828+ Test. record (o_ts, testset)
829+ end
842830 end
843831 end
844832 end
833+ @static if VERSION >= v " 1.13.0-DEV.1044"
834+ @with Test. TESTSET_PRINT_ENABLE => false begin
835+ collect_results ()
836+ end
837+ else
838+ old_print_setting = Test. TESTSET_PRINT_ENABLE[]
839+ Test. TESTSET_PRINT_ENABLE[] = false
840+ try
841+ collect_results ()
842+ finally
843+ Test. TESTSET_PRINT_ENABLE[] = old_print_setting
844+ end
845+ end
846+
847+ # display the results
845848 println (io_ctx. stdout )
846849 if VERSION >= v " 1.13.0-DEV.1033"
847850 Test. print_test_results (io_ctx. stdout , o_ts, 1 )
0 commit comments