Skip to content

Commit 92f1e37

Browse files
authored
Omit excluded tests from test count in CLI summary (#14078)
1 parent 71ad8fa commit 92f1e37

File tree

3 files changed

+38
-23
lines changed

3 files changed

+38
-23
lines changed

lib/ex_unit/lib/ex_unit/cli_formatter.ex

Lines changed: 21 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ defmodule ExUnit.CLIFormatter do
3737
def handle_cast({:suite_finished, times_us}, config) do
3838
test_type_counts = collect_test_type_counts(config)
3939

40-
if test_type_counts > 0 && config.excluded_counter == test_type_counts do
40+
if test_type_counts == 0 and config.excluded_counter > 0 do
4141
IO.puts(invalid("All tests have been excluded.", config))
4242
end
4343

@@ -256,6 +256,10 @@ defmodule ExUnit.CLIFormatter do
256256
end
257257
end
258258

259+
defp update_test_counter(test_counter, %{state: {:excluded, _reason}}) do
260+
test_counter
261+
end
262+
259263
defp update_test_counter(test_counter, %{tags: %{test_type: test_type}}) do
260264
Map.update(test_counter, test_type, 1, &(&1 + 1))
261265
end
@@ -331,16 +335,13 @@ defmodule ExUnit.CLIFormatter do
331335
## Printing
332336

333337
defp print_summary(config, force_failures?) do
334-
formatted_test_type_counts = format_test_type_counts(config)
335338
test_type_counts = collect_test_type_counts(config)
339+
test_counter = test_counter_or_default(config, test_type_counts)
340+
formatted_test_type_counts = format_test_type_counts(test_counter)
336341
failure_pl = pluralize(config.failure_counter, "failure", "failures")
337342

338343
message =
339344
"#{formatted_test_type_counts}#{config.failure_counter} #{failure_pl}"
340-
|> if_true(
341-
config.excluded_counter > 0,
342-
&(&1 <> ", #{config.excluded_counter} excluded")
343-
)
344345
|> if_true(
345346
config.invalid_counter > 0,
346347
&(&1 <> ", #{config.invalid_counter} invalid")
@@ -349,6 +350,10 @@ defmodule ExUnit.CLIFormatter do
349350
config.skipped_counter > 0,
350351
&(&1 <> ", " <> skipped("#{config.skipped_counter} skipped", config))
351352
)
353+
|> if_true(
354+
config.excluded_counter > 0,
355+
&(&1 <> " (#{config.excluded_counter} excluded)")
356+
)
352357

353358
cond do
354359
config.failure_counter > 0 or force_failures? ->
@@ -384,15 +389,24 @@ defmodule ExUnit.CLIFormatter do
384389
IO.puts(formatted)
385390
end
386391

387-
defp format_test_type_counts(%{test_counter: test_counter} = _config) do
392+
defp format_test_type_counts(test_counter) do
388393
test_counter
389394
|> Enum.sort()
390395
|> Enum.map(fn {test_type, count} ->
391396
type_pluralized = pluralize(count, test_type, ExUnit.plural_rule(test_type |> to_string()))
397+
392398
"#{count} #{type_pluralized}, "
393399
end)
394400
end
395401

402+
defp test_counter_or_default(_config, 0) do
403+
%{test: 0}
404+
end
405+
406+
defp test_counter_or_default(%{test_counter: test_counter} = _config, _test_type_counts) do
407+
test_counter
408+
end
409+
396410
defp collect_test_type_counts(%{test_counter: test_counter} = _config) do
397411
Enum.reduce(test_counter, 0, fn {_, count}, acc ->
398412
acc + count

lib/ex_unit/test/ex_unit_test.exs

Lines changed: 15 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ defmodule ExUnitTest do
2929
assert capture_io(fn ->
3030
assert ExUnit.async_run() |> ExUnit.await_run() ==
3131
%{failures: 0, skipped: 0, total: 0, excluded: 0}
32-
end) =~ "\n0 failures\n"
32+
end) =~ "\n0 tests, 0 failures\n"
3333
end
3434

3535
test "supports rerunning given modules" do
@@ -137,7 +137,7 @@ defmodule ExUnitTest do
137137
assert result =~ """
138138
Showing results so far...
139139
140-
0 failures
140+
0 tests, 0 failures
141141
"""
142142
end
143143

@@ -331,19 +331,19 @@ defmodule ExUnitTest do
331331

332332
{result, output} = run_with_filter([exclude: [even: true]], [ParityTest])
333333
assert result == %{failures: 0, skipped: 0, excluded: 1, total: 4}
334-
assert output =~ "\n4 tests, 0 failures, 1 excluded\n"
334+
assert output =~ "\n3 tests, 0 failures (1 excluded)\n"
335335

336336
{result, output} = run_with_filter([exclude: :even], [ParityTest])
337337
assert result == %{failures: 0, skipped: 0, excluded: 3, total: 4}
338-
assert output =~ "\n4 tests, 0 failures, 3 excluded\n"
338+
assert output =~ "\n1 test, 0 failures (3 excluded)\n"
339339

340340
{result, output} = run_with_filter([exclude: :even, include: [even: true]], [ParityTest])
341341
assert result == %{failures: 1, skipped: 0, excluded: 2, total: 4}
342-
assert output =~ "\n4 tests, 1 failure, 2 excluded\n"
342+
assert output =~ "\n2 tests, 1 failure (2 excluded)\n"
343343

344344
{result, output} = run_with_filter([exclude: :test, include: [even: true]], [ParityTest])
345345
assert result == %{failures: 1, skipped: 0, excluded: 3, total: 4}
346-
assert output =~ "\n4 tests, 1 failure, 3 excluded\n"
346+
assert output =~ "\n1 test, 1 failure (3 excluded)\n"
347347
end
348348

349349
test "log capturing" do
@@ -508,16 +508,17 @@ defmodule ExUnitTest do
508508

509509
# Empty because it is already loaded
510510
{result, output} = run_with_filter([exclude: :module], [])
511+
511512
assert result == %{failures: 0, skipped: 0, excluded: 2, total: 2}
512-
assert output =~ "\n2 tests, 0 failures, 2 excluded\n"
513+
assert output =~ "\n0 tests, 0 failures (2 excluded)\n"
513514

514515
{result, output} =
515516
[exclude: :test, include: [module: "ExUnitTest.SecondTestModule"]]
516517
|> run_with_filter([FirstTestModule, SecondTestModule])
517518

518519
assert result == %{failures: 1, skipped: 0, excluded: 1, total: 2}
519520
assert output =~ "\n 1) test false (ExUnitTest.SecondTestModule)\n"
520-
assert output =~ "\n2 tests, 1 failure, 1 excluded\n"
521+
assert output =~ "\n1 test, 1 failure (1 excluded)\n"
521522
end
522523

523524
test "raises on reserved tag :file in module" do
@@ -680,7 +681,7 @@ defmodule ExUnitTest do
680681
end)
681682

682683
refute output =~ max_failures_reached_msg()
683-
assert output =~ "\n6 tests, 0 failures, 1 excluded, 4 invalid, 1 skipped\n"
684+
assert output =~ "\n5 tests, 0 failures, 4 invalid, 1 skipped (1 excluded)\n"
684685
end
685686

686687
test "parameterized tests" do
@@ -787,7 +788,7 @@ defmodule ExUnitTest do
787788
end)
788789

789790
assert output =~ max_failures_reached_msg()
790-
assert output =~ "\n6 tests, 2 failures, 1 excluded, 1 skipped\n"
791+
assert output =~ "\n5 tests, 2 failures, 1 skipped (1 excluded)\n"
791792
end
792793

793794
test ":max_failures is not reached" do
@@ -818,7 +819,7 @@ defmodule ExUnitTest do
818819
end)
819820

820821
refute output =~ max_failures_reached_msg()
821-
assert output =~ "\n8 tests, 2 failures, 2 excluded, 1 skipped\n"
822+
assert output =~ "\n6 tests, 2 failures, 1 skipped (2 excluded)\n"
822823
end
823824

824825
test ":max_failures has been reached" do
@@ -852,7 +853,7 @@ defmodule ExUnitTest do
852853
end)
853854

854855
assert output =~ max_failures_reached_msg()
855-
assert output =~ "\n7 tests, 2 failures, 2 excluded, 2 skipped\n"
856+
assert output =~ "\n5 tests, 2 failures, 2 skipped (2 excluded)\n"
856857
end
857858

858859
# Excluded and skipped tests are detected before setup_all
@@ -886,7 +887,7 @@ defmodule ExUnitTest do
886887
end)
887888

888889
assert output =~ max_failures_reached_msg()
889-
assert output =~ "\n4 tests, 0 failures, 1 excluded, 2 invalid, 1 skipped\n"
890+
assert output =~ "\n3 tests, 0 failures, 2 invalid, 1 skipped (1 excluded)\n"
890891
end
891892

892893
test ":max_failures flushes all async/sync cases" do
@@ -1077,7 +1078,7 @@ defmodule ExUnitTest do
10771078
end)
10781079

10791080
assert output =~ "All tests have been excluded.\n"
1080-
assert output =~ "2 tests, 0 failures, 2 excluded\n"
1081+
assert output =~ "0 tests, 0 failures (2 excluded)\n"
10811082
end
10821083

10831084
test "tests are run in compile order (FIFO)" do

lib/mix/test/mix/tasks/test_test.exs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -238,7 +238,7 @@ defmodule Mix.Tasks.TestTest do
238238
# Of the passing tests, 1 is tagged with `@tag :foo`.
239239
# But only the failing test with that tag should run.
240240
output = mix(["test", "--failed", "--only", "foo"])
241-
assert output =~ "2 tests, 1 failure, 1 excluded"
241+
assert output =~ "1 test, 1 failure (1 excluded)"
242242

243243
# Run again to give it a chance to record as passed
244244
System.put_env("PASS_FAILING_TESTS", "true")
@@ -548,7 +548,7 @@ defmodule Mix.Tasks.TestTest do
548548
Including tags: [location: {"test/bar_tests.exs", 5}]
549549
"""
550550

551-
assert output =~ "4 tests, 0 failures, 3 excluded\n"
551+
assert output =~ "1 test, 0 failures (3 excluded)\n"
552552
end)
553553
end
554554
end

0 commit comments

Comments
 (0)