Skip to content

Commit 39e30aa

Browse files
committed
Return groups to runner
1 parent 73293b9 commit 39e30aa

File tree

3 files changed

+23
-6
lines changed

3 files changed

+23
-6
lines changed

lib/ex_unit/lib/ex_unit/runner.ex

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@ defmodule ExUnit.Runner do
125125

126126
# Run all sync modules directly
127127
for pair <- sync_modules do
128-
running = spawn_modules(config, [[pair]], false, %{})
128+
running = spawn_modules(config, [{nil, [pair]}], false, %{})
129129
running != %{} and wait_until_available(config, running)
130130
end
131131

@@ -161,7 +161,7 @@ defmodule ExUnit.Runner do
161161
running
162162
end
163163

164-
defp spawn_modules(config, [[_ | _] = modules | groups], async?, running) do
164+
defp spawn_modules(config, [{_group, [_ | _] = modules} | groups], async?, running) do
165165
if max_failures_reached?(config) do
166166
running
167167
else

lib/ex_unit/lib/ex_unit/server.ex

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -192,7 +192,7 @@ defmodule ExUnit.Server do
192192
{reply, groups} =
193193
Enum.map_reduce(groups, state.groups, fn group, acc ->
194194
{entries, acc} = Map.pop!(acc, group)
195-
{Enum.reverse(entries), acc}
195+
{{group, Enum.reverse(entries)}, acc}
196196
end)
197197

198198
GenServer.reply(from, reply)
@@ -204,15 +204,14 @@ defmodule ExUnit.Server do
204204
end
205205

206206
# :queue.split fails if the provided count is larger than the queue size.
207-
# We also want to return the values as a list of lists, so we directly
208-
# return {list, queue} instead of {queue, queue}.
207+
# We also want to return the values as tuples of shape {group, [modules]}.
209208
defp take_until(n, queue), do: take_until(n, queue, [])
210209

211210
defp take_until(0, queue, acc), do: {Enum.reverse(acc), queue}
212211

213212
defp take_until(n, queue, acc) do
214213
case :queue.out(queue) do
215-
{{:value, item}, queue} -> take_until(n - 1, queue, [[item] | acc])
214+
{{:value, item}, queue} -> take_until(n - 1, queue, [{nil, [item]} | acc])
216215
{:empty, queue} -> {Enum.reverse(acc), queue}
217216
end
218217
end

lib/ex_unit/test/ex_unit_test.exs

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -997,6 +997,24 @@ defmodule ExUnitTest do
997997
assert length(runs) == 6
998998
end
999999

1000+
test "repeats tests up to the configured number of times with groups" do
1001+
defmodule TestGroupedRepeatUntilFailureReached do
1002+
use ExUnit.Case, async: true, group: :example
1003+
test __ENV__.line, do: assert(true)
1004+
end
1005+
1006+
configure_and_reload_on_exit(repeat_until_failure: 5)
1007+
1008+
output =
1009+
capture_io(fn ->
1010+
assert ExUnit.run() == %{total: 1, failures: 0, skipped: 0, excluded: 0}
1011+
end)
1012+
1013+
runs = String.split(output, "Running ExUnit", trim: true)
1014+
# 6 runs in total, 5 repeats
1015+
assert length(runs) == 6
1016+
end
1017+
10001018
test "stops on failure" do
10011019
{:ok, pid} = Agent.start_link(fn -> 0 end)
10021020
Process.register(pid, :ex_unit_repeat_until_failure_count)

0 commit comments

Comments
 (0)