@@ -107,7 +107,7 @@ defmodule ExUnit.Runner do
107
107
108
108
# Slots are available, start with async modules
109
109
async_modules = ExUnit.Server . take_async_modules ( available ) ->
110
- running = spawn_modules ( config , async_modules , running )
110
+ running = spawn_modules ( config , async_modules , true , running )
111
111
modules_to_restore = maybe_store_modules ( modules_to_restore , :async , async_modules )
112
112
async_loop ( config , running , true , modules_to_restore )
113
113
@@ -125,7 +125,7 @@ defmodule ExUnit.Runner do
125
125
126
126
# Run all sync modules directly
127
127
for pair <- sync_modules do
128
- running = spawn_modules ( config , [ pair ] , % { } )
128
+ running = spawn_modules ( config , [ pair ] , false , % { } )
129
129
running != % { } and wait_until_available ( config , running )
130
130
end
131
131
@@ -157,16 +157,16 @@ defmodule ExUnit.Runner do
157
157
end
158
158
end
159
159
160
- defp spawn_modules ( _config , [ ] , running ) do
160
+ defp spawn_modules ( _config , [ ] , _async , running ) do
161
161
running
162
162
end
163
163
164
- defp spawn_modules ( config , [ { module , params } | modules ] , running ) do
164
+ defp spawn_modules ( config , [ { module , params } | modules ] , async? , running ) do
165
165
if max_failures_reached? ( config ) do
166
166
running
167
167
else
168
- { pid , ref } = spawn_monitor ( fn -> run_module ( config , module , params ) end )
169
- spawn_modules ( config , modules , Map . put ( running , ref , pid ) )
168
+ { pid , ref } = spawn_monitor ( fn -> run_module ( config , module , async? , params ) end )
169
+ spawn_modules ( config , modules , async? , Map . put ( running , ref , pid ) )
170
170
end
171
171
end
172
172
@@ -221,20 +221,20 @@ defmodule ExUnit.Runner do
221
221
222
222
## Running modules
223
223
224
- defp run_module ( config , module , params ) do
224
+ defp run_module ( config , module , async? , params ) do
225
225
test_module = % { module . __ex_unit__ ( ) | parameters: params }
226
226
EM . module_started ( config . manager , test_module )
227
227
228
228
# Prepare tests, selecting which ones should be run or skipped
229
- { to_run_tests , excluded_and_skipped_tests } = prepare_tests ( config , test_module . tests )
229
+ { to_run_tests , excluded_and_skipped_tests } = prepare_tests ( config , async? , test_module . tests )
230
230
231
231
for excluded_or_skipped_test <- excluded_and_skipped_tests do
232
232
EM . test_started ( config . manager , excluded_or_skipped_test )
233
233
EM . test_finished ( config . manager , excluded_or_skipped_test )
234
234
end
235
235
236
236
{ test_module , invalid_tests , finished_tests } =
237
- run_module_tests ( config , test_module , to_run_tests )
237
+ run_module_tests ( config , test_module , async? , to_run_tests )
238
238
239
239
pending_tests =
240
240
case process_max_failures ( config , test_module ) do
@@ -261,7 +261,7 @@ defmodule ExUnit.Runner do
261
261
end
262
262
end
263
263
264
- defp prepare_tests ( config , tests ) do
264
+ defp prepare_tests ( config , async? , tests ) do
265
265
tests = shuffle ( config , tests )
266
266
include = config . include
267
267
exclude = config . exclude
@@ -270,7 +270,7 @@ defmodule ExUnit.Runner do
270
270
{ to_run , to_skip } =
271
271
for test <- tests , include_test? ( test_ids , test ) , reduce: { [ ] , [ ] } do
272
272
{ to_run , to_skip } ->
273
- tags = Map . merge ( test . tags , % { test: test . name , module: test . module } )
273
+ tags = Map . merge ( test . tags , % { test: test . name , module: test . module , async: async? } )
274
274
275
275
case ExUnit.Filters . eval ( include , exclude , tags , tests ) do
276
276
:ok -> { [ % { test | tags: tags } | to_run ] , to_skip }
@@ -285,12 +285,12 @@ defmodule ExUnit.Runner do
285
285
test_ids == nil or MapSet . member? ( test_ids , { test . module , test . name } )
286
286
end
287
287
288
- defp run_module_tests ( _config , test_module , [ ] ) do
288
+ defp run_module_tests ( _config , test_module , _async? , [ ] ) do
289
289
{ test_module , [ ] , [ ] }
290
290
end
291
291
292
- defp run_module_tests ( config , test_module , tests ) do
293
- { module_pid , module_ref } = run_setup_all ( test_module , self ( ) )
292
+ defp run_module_tests ( config , test_module , async? , tests ) do
293
+ { module_pid , module_ref } = run_setup_all ( test_module , async? , self ( ) )
294
294
295
295
{ test_module , invalid_tests , finished_tests } =
296
296
receive do
@@ -324,12 +324,14 @@ defmodule ExUnit.Runner do
324
324
325
325
defp run_setup_all (
326
326
% ExUnit.TestModule { name: module , tags: tags , parameters: params } = test_module ,
327
+ async? ,
327
328
parent_pid
328
329
) do
329
330
Process . put ( @ current_key , test_module )
330
331
331
332
spawn_monitor ( fn ->
332
333
ExUnit.OnExitHandler . register ( self ( ) )
334
+ tags = tags |> Map . merge ( params ) |> Map . merge ( % { module: module , async: async? } )
333
335
334
336
result =
335
337
try do
0 commit comments