diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 0d22e2d..78246ab 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -14,7 +14,7 @@ jobs: # Change this to add or remove tests env: - TESTS: all_passing,all_passing_with_debugging,everything_at_once,one_fail,one_passing,truncated_output,grains,complex-numbers + TESTS: all_passing,all_passing_with_debugging,everything_at_once,one_fail,one_passing,truncated_output,grains,complex-numbers,test_logs JULIA_NUM_THREADS: 2 steps: diff --git a/src/tojson.jl b/src/tojson.jl index b519ad1..315699d 100644 --- a/src/tojson.jl +++ b/src/tojson.jl @@ -7,6 +7,7 @@ tests collapsed into a single report. """ const TEST_RESULT_COLLAPSE_THRESHOLD = 2 const MAX_REPORTED_FAILURES_PER_TESTSET = 5 +const MAX_REPORTED_PASSING_TEST_CODE_PER_COLLAPSE = 5 """ tojson(output::String, ts::ReportingTestSet) @@ -85,11 +86,11 @@ function tojson(output::String, ts::ReportingTestSet) output = truncate_output(output) function test_code(result::Test.Result) - if startswith(string(result.test_type), "test_throws") + if hasproperty(result, :test_type) && startswith(string(result.test_type), "test_throws") "@test_throws $(result.data) $(result.orig_expr)" elseif result isa Test.LogTestFailure "@test_logs $(join(result.patterns, ' ')) $(result.orig_expr)" - elseif result.test_type == :test_unbroken + elseif hasproperty(result, :test_type) && result.test_type == :test_unbroken "@test_broken $(result.orig_expr)" elseif result isa Test.Broken macro_name = result.test_type === :skipped ? "@test_skip " : "@test_broken " @@ -168,10 +169,16 @@ function tojson(output::String, ts::ReportingTestSet) if collapse_passing_tests collapsed_name = num_passing == num_results ? name : "$name ยป $num_passing tests" + # If many tests pass then the reported test_code will be excessively large, so we truncate it. + if num_passing > MAX_REPORTED_PASSING_TEST_CODE_PER_COLLAPSE + code = join(map(test_code, passing_tests[1:MAX_REPORTED_PASSING_TEST_CODE_PER_COLLAPSE]), '\n') * "\n..." + else + code = join(map(test_code, passing_tests), '\n') + end push!(tests, Dict( "name" => collapsed_name, "status" => "pass", - "test_code" => join(map(test_code, passing_tests), '\n') + "test_code" => code, )) end diff --git a/test/fixtures/grains/results.json b/test/fixtures/grains/results.json index 3dcc4af..eb20b7f 100644 --- a/test/fixtures/grains/results.json +++ b/test/fixtures/grains/results.json @@ -4,7 +4,7 @@ "tests": [ { "name": "beginning squares", - "test_code": "@test on_square(1) == 1\n@test on_square(2) == 2\n@test on_square(3) == 4\n@test on_square(4) == 8\n@test on_square(16) == 32768\n@test on_square(32) == 2147483648\n@test total_after(1) == 1\n@test total_after(3) == on_square(1) + on_square(2) + on_square(3)", + "test_code": "@test on_square(1) == 1\n@test on_square(2) == 2\n@test on_square(3) == 4\n@test on_square(4) == 8\n@test on_square(16) == 32768\n...", "status": "pass" }, {