Skip to content

Commit e180cfe

Browse files
authored
Better test code (#78)
* Better generation of test_code Expects my other PR to be merged first. * Simplify test_code conditions
1 parent b675623 commit e180cfe

File tree

2 files changed

+20
-13
lines changed

2 files changed

+20
-13
lines changed

src/tojson.jl

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,21 @@ function tojson(output::String, ts::ReportingTestSet)
8484
# All stdout from the top level test set, used for all tests.
8585
output = truncate_output(output)
8686

87+
function test_code(result::Test.Result)
88+
if startswith(string(result.test_type), "test_throws")
89+
"@test_throws $(result.data) $(result.orig_expr)"
90+
elseif result isa Test.LogTestFailure
91+
"@test_logs $(join(result.patterns, ' ')) $(result.orig_expr)"
92+
elseif result.test_type == :test_unbroken
93+
"@test_broken $(result.orig_expr)"
94+
elseif result isa Test.Broken
95+
macro_name = result.test_type === :skipped ? "@test_skip " : "@test_broken "
96+
"$macro_name $(result.orig_expr)"
97+
else
98+
"@test $(result.orig_expr)"
99+
end
100+
end
101+
87102
"""
88103
push_result!(tests, result, name)
89104
@@ -92,31 +107,24 @@ function tojson(output::String, ts::ReportingTestSet)
92107
function push_result!(tests, result::Test.Result, name)
93108
status = nothing
94109
message = nothing
95-
test_code = nothing
96110

97111
if result isa Test.Pass
98112
status = "pass"
99-
test_code = "@test $(result.orig_expr)"
100113
elseif result isa Test.Fail
101114
status = "fail"
102115
message = string(result)
103-
test_code = "@test $(result.orig_expr)"
104116
elseif result isa Test.LogTestFailure
105117
status = "fail"
106118
message = string(result)
107-
test_code = "@test_logs $(join(result.patterns, ' ')) $(result.orig_expr)"
108119
elseif result isa Test.Error
109120
status = "error"
110121
message = result.backtrace
111-
test_code = "@test " * result.orig_expr
112122
elseif result isa Test.Broken
113123
if result.test_type === :skipped
114124
return nothing
115125
end
116126
# TODO: In the future we might have a new `status = skip`
117127
message = string(result)
118-
test_code = result.test_type === :skipped ? "@test_skip " : "@test_broken "
119-
test_code *= string(result.orig_expr)
120128
else
121129
error("Unknown testset.results item: $result")
122130
end
@@ -127,7 +135,7 @@ function tojson(output::String, ts::ReportingTestSet)
127135
"name" => name,
128136
"status" => status,
129137
"message" => message,
130-
"test_code" => test_code,
138+
"test_code" => test_code(result),
131139
"output" => output,
132140
))))
133141
end
@@ -159,12 +167,11 @@ function tojson(output::String, ts::ReportingTestSet)
159167
collapse_passing_tests = num_results >= TEST_RESULT_COLLAPSE_THRESHOLD && num_passing > 1 && name != ""
160168

161169
if collapse_passing_tests
162-
test_code = join(("@test $(r.orig_expr)" for r in passing_tests), '\n')
163170
collapsed_name = num_passing == num_results ? name : "$name » $num_passing tests"
164171
push!(tests, Dict(
165172
"name" => collapsed_name,
166173
"status" => "pass",
167-
"test_code" => test_code
174+
"test_code" => join(map(test_code, passing_tests), '\n')
168175
))
169176
end
170177

test/fixtures/grains/results.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,17 +14,17 @@
1414
},
1515
{
1616
"name": "Invalid values » Zero",
17-
"test_code": "@test on_square(0)\n@test total_after(0)",
17+
"test_code": "@test_throws DomainError on_square(0)\n@test_throws DomainError total_after(0)",
1818
"status": "pass"
1919
},
2020
{
2121
"name": "Invalid values » Negative",
22-
"test_code": "@test on_square(-1)\n@test total_after(-1)",
22+
"test_code": "@test_throws DomainError on_square(-1)\n@test_throws DomainError total_after(-1)",
2323
"status": "pass"
2424
},
2525
{
2626
"name": "Invalid values » Greater than 64",
27-
"test_code": "@test on_square(65)\n@test total_after(65)",
27+
"test_code": "@test_throws DomainError on_square(65)\n@test_throws DomainError total_after(65)",
2828
"status": "pass"
2929
}
3030
]

0 commit comments

Comments
 (0)