Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions lib/ex_unit/lib/ex_unit/server.ex
Original file line number Diff line number Diff line change
Expand Up @@ -91,16 +91,16 @@ defmodule ExUnit.Server do
{[module | async_modules], async_groups, groups}

{group, group_modules}, {async_modules, async_groups, groups} ->
{async_modules, [group | async_groups], [{group, group_modules} | groups]}
{async_modules, [group | async_groups], [{group, Enum.reverse(group_modules)} | groups]}
end)

{:reply, :ok,
%{
state
| loaded: :done,
groups: Map.new(groups),
async_groups: async_groups,
async_modules: :queue.from_list(async_modules),
async_groups: Enum.reverse(async_groups),
async_modules: async_modules |> Enum.reverse() |> :queue.from_list(),
sync_modules: sync_modules
}}
end
Expand Down
75 changes: 65 additions & 10 deletions lib/ex_unit/test/ex_unit_test.exs
Original file line number Diff line number Diff line change
Expand Up @@ -1018,21 +1018,36 @@ defmodule ExUnitTest do
end

test "repeats tests up to the configured number of times" do
defmodule TestRepeatUntilFailureReached do
use ExUnit.Case
{:ok, agent} =
Agent.start_link(fn -> [] end, name: :ex_unit_repeat_until_failure_async_order)

defmodule TestRepeatUntilFailureReachedOne do
use ExUnit.Case, async: true

@tag :skip
test "skipped #{__ENV__.line}", do: assert(false)

test __ENV__.line, do: assert(true)
test __ENV__.line, do: assert(true)
test __ENV__.line, do: assert(true)
test __ENV__.line do
Agent.update(:ex_unit_repeat_until_failure_async_order, &[__MODULE__ | &1])
end

test __ENV__.line do
Agent.update(:ex_unit_repeat_until_failure_async_order, &[__MODULE__ | &1])
end

@tag :exclude
test "excluded #{__ENV__.line}", do: assert(false)
end

configure_and_reload_on_exit(repeat_until_failure: 5)
defmodule TestRepeatUntilFailureReachedTwo do
use ExUnit.Case, async: true

test __ENV__.line do
Agent.update(:ex_unit_repeat_until_failure_async_order, &[__MODULE__ | &1])
end
end

configure_and_reload_on_exit(repeat_until_failure: 5, max_cases: 1)

output =
capture_io(fn ->
Expand All @@ -1044,26 +1059,66 @@ defmodule ExUnitTest do
assert length(runs) == 6
assert output =~ "remaining_runs: 5"
assert output =~ "remaining_runs: 0"

assert Agent.get(agent, &Enum.reverse/1) ==
List.duplicate(
[
TestRepeatUntilFailureReachedOne,
TestRepeatUntilFailureReachedOne,
TestRepeatUntilFailureReachedTwo
],
6
)
|> List.flatten()
end

test "repeats tests up to the configured number of times with groups" do
defmodule TestGroupedRepeatUntilFailureReached do
{:ok, agent} =
Agent.start_link(fn -> [] end, name: :ex_unit_repeat_until_failure_group_order)

defmodule TestGroupedRepeatUntilFailureReachedOne do
use ExUnit.Case, async: true, group: :example
test __ENV__.line, do: assert(true)

test __ENV__.line do
Agent.update(:ex_unit_repeat_until_failure_group_order, &[__MODULE__ | &1])
end
end

configure_and_reload_on_exit(repeat_until_failure: 5)
defmodule TestGroupedRepeatUntilFailureReachedTwo do
use ExUnit.Case, async: true, group: :example

test __ENV__.line do
Agent.update(:ex_unit_repeat_until_failure_group_order, &[__MODULE__ | &1])
end
end

configure_and_reload_on_exit(repeat_until_failure: 5, max_cases: 1)

output =
capture_io(fn ->
assert ExUnit.run() == %{total: 1, failures: 0, skipped: 0, excluded: 0}
assert ExUnit.run() == %{total: 2, failures: 0, skipped: 0, excluded: 0}
end)

runs = String.split(output, "Running ExUnit", trim: true)
# 6 runs in total, 5 repeats
assert length(runs) == 6
assert output =~ "remaining_runs: 5"
assert output =~ "remaining_runs: 0"

assert Agent.get(agent, &Enum.reverse/1) == [
TestGroupedRepeatUntilFailureReachedOne,
TestGroupedRepeatUntilFailureReachedTwo,
TestGroupedRepeatUntilFailureReachedOne,
TestGroupedRepeatUntilFailureReachedTwo,
TestGroupedRepeatUntilFailureReachedOne,
TestGroupedRepeatUntilFailureReachedTwo,
TestGroupedRepeatUntilFailureReachedOne,
TestGroupedRepeatUntilFailureReachedTwo,
TestGroupedRepeatUntilFailureReachedOne,
TestGroupedRepeatUntilFailureReachedTwo,
TestGroupedRepeatUntilFailureReachedOne,
TestGroupedRepeatUntilFailureReachedTwo
]
end
Comment thread
cuishuang marked this conversation as resolved.

test "stops on failure" do
Expand Down
Loading