@@ -23,7 +23,7 @@ defmodule ExUnit.Server do
23
23
[ { name , % { } } ]
24
24
end
25
25
26
- case GenServer . call ( @ name , { :add , { async? , group } , modules } , @ timeout ) do
26
+ case GenServer . call ( @ name , { :add , async? , group , modules } , @ timeout ) do
27
27
:ok ->
28
28
:ok
29
29
@@ -82,7 +82,7 @@ defmodule ExUnit.Server do
82
82
# Called by the runner when --repeat-until-failure is used.
83
83
def handle_call ( { :restore_modules , async_modules , sync_modules } , _from , state ) do
84
84
{ async_modules , async_groups } =
85
- Enum . reduce ( async_modules , { [ ] , [ ] } , fn
85
+ Enum . map_reduce ( async_modules , % { } , fn
86
86
{ nil , [ module ] } , { modules , groups } ->
87
87
{ [ { :module , module } | modules ] , groups }
88
88
@@ -130,28 +130,28 @@ defmodule ExUnit.Server do
130
130
{ :reply , diff , take_modules ( % { state | loaded: :done } ) }
131
131
end
132
132
133
- def handle_call ( { :add , { false = _async , _group } , names } , _from , % { loaded: loaded } = state )
133
+ def handle_call ( { :add , false = _async , _group , names } , _from , % { loaded: loaded } = state )
134
134
when is_integer ( loaded ) do
135
135
state =
136
136
update_in ( state . sync_modules , & Enum . reduce ( names , & 1 , fn name , q -> :queue . in ( name , q ) end ) )
137
137
138
138
{ :reply , :ok , state }
139
139
end
140
140
141
- def handle_call ( { :add , { true = _async , nil = _group } , names } , _from , % { loaded: loaded } = state )
141
+ def handle_call ( { :add , true = _async , nil = _group , names } , _from , % { loaded: loaded } = state )
142
142
when is_integer ( loaded ) do
143
143
state =
144
144
update_in (
145
145
state . async_modules ,
146
146
& Enum . reduce ( names , & 1 , fn name , q -> :queue . in ( { :module , name } , q ) end )
147
147
)
148
148
149
- { :reply , :ok , state }
149
+ { :reply , :ok , take_modules ( state ) }
150
150
end
151
151
152
- def handle_call ( { :add , { true = _async , group } , names } , _from , % { loaded: loaded } = state )
152
+ def handle_call ( { :add , true = _async , group , names } , _from , % { loaded: loaded } = state )
153
153
when is_integer ( loaded ) do
154
- state =
154
+ { async_groups , async_modules } =
155
155
case state . async_groups do
156
156
% { ^ group => entries } = async_groups ->
157
157
{ % { async_groups | group => names ++ entries } , state . async_modules }
@@ -160,11 +160,13 @@ defmodule ExUnit.Server do
160
160
{ Map . put ( async_groups , group , names ) , :queue . in ( { :group , group } , state . async_modules ) }
161
161
end
162
162
163
- { :reply , :ok , state }
163
+ { :reply , :ok ,
164
+ take_modules ( % { state | async_groups: async_groups , async_modules: async_modules } ) }
164
165
end
165
166
166
- def handle_call ( { :add , { _async? , _group } , _names } , _from , state ) ,
167
- do: { :reply , :already_running , state }
167
+ def handle_call ( { :add , _async? , _group , _names } , _from , state ) do
168
+ { :reply , :already_running , state }
169
+ end
168
170
169
171
defp take_modules ( % { waiting: nil } = state ) do
170
172
state
@@ -185,16 +187,16 @@ defmodule ExUnit.Server do
185
187
{ async_modules , remaining_modules } = take_until ( count , state . async_modules )
186
188
187
189
{ async_modules , remaining_groups } =
188
- Enum . reduce ( async_modules , { [ ] , state . async_groups } , fn
189
- { :module , module } , { collected_modules , async_groups } ->
190
- { [ { nil , [ module ] } | collected_modules ] , async_groups }
190
+ Enum . map_reduce ( async_modules , state . async_groups , fn
191
+ { :module , module } , async_groups ->
192
+ { [ module ] , async_groups }
191
193
192
- { :group , group } , { collected_modules , async_groups } ->
194
+ { :group , group } , async_groups ->
193
195
{ group_modules , async_groups } = Map . pop! ( async_groups , group )
194
- { [ { group , Enum . reverse ( group_modules ) } | collected_modules ] , async_groups }
196
+ { Enum . reverse ( group_modules ) , async_groups }
195
197
end )
196
198
197
- GenServer . reply ( from , Enum . reverse ( async_modules ) )
199
+ GenServer . reply ( from , async_modules )
198
200
199
201
% {
200
202
state
0 commit comments