@@ -9,7 +9,7 @@ defmodule ExUnit.CLIFormatter do
9
9
use GenServer.Behaviour
10
10
11
11
import Exception , only: [ format_entry: 2 ]
12
- defrecord Config , counter: 0 , failures : [ ]
12
+ defrecord Config , counter: 0 , test_failures: [ ] , case_failures : [ ]
13
13
14
14
## Behaviour
15
15
@@ -26,8 +26,8 @@ defmodule ExUnit.CLIFormatter do
26
26
:ok
27
27
end
28
28
29
- def case_finished ( _id , _test_case ) do
30
- :ok
29
+ def case_finished ( id , test_case ) do
30
+ :gen_server . cast ( id , { :case_finished , test_case } )
31
31
end
32
32
33
33
def test_started ( _id , _test ) do
@@ -45,14 +45,20 @@ defmodule ExUnit.CLIFormatter do
45
45
end
46
46
47
47
def handle_call ( { :suite_finished , ms } , _from , config ) do
48
- print_suite ( config . counter , config . failures , ms )
49
- { :stop , :normal , length ( config . failures ) , config }
48
+ print_suite ( config . counter , config . test_failures , config . case_failures , ms )
49
+ { :stop , :normal , length ( config . test_failures ) , config }
50
50
end
51
51
52
52
def handle_call ( _ , _ , _ ) do
53
53
super
54
54
end
55
55
56
+ def handle_cast ( { :test_finished , test = ExUnit.Test [ failure : nil , invalid: true ] } , config ) do
57
+ IO . write invalid ( "?" )
58
+ { :noreply , config . update_counter ( & 1 + 1 ) .
59
+ update_test_failures ( [ test | & 1 ] ) }
60
+ end
61
+
56
62
def handle_cast ( { :test_finished , ExUnit.Test [ failure : nil ] } , config ) do
57
63
IO . write success ( "." )
58
64
{ :noreply , config . update_counter ( & 1 + 1 ) }
@@ -61,30 +67,61 @@ defmodule ExUnit.CLIFormatter do
61
67
def handle_cast ( { :test_finished , test } , config ) do
62
68
IO . write failure ( "F" )
63
69
{ :noreply , config . update_counter ( & 1 + 1 ) .
64
- update_failures ( [ test | & 1 ] ) }
70
+ update_test_failures ( [ test | & 1 ] ) }
71
+ end
72
+
73
+ def handle_cast ( { :case_finished , test_case } , config ) do
74
+ if test_case . failure do
75
+ { :noreply , config . update_case_failures ( [ test_case | & 1 ] ) }
76
+ else
77
+ { :noreply , config }
78
+ end
65
79
end
66
80
67
81
def handle_cast ( _ , _ ) do
68
82
super
69
83
end
70
84
71
- defp print_suite ( counter , [ ] , ms ) do
85
+ defp print_suite ( counter , [ ] , [ ] , ms ) do
72
86
IO . write "\n \n "
73
87
IO . puts "Finished in #{ format_ms ms } seconds"
74
88
IO . puts success ( "#{ counter } tests, 0 failures" )
75
89
end
76
90
77
- defp print_suite ( counter , failures , ms ) do
91
+ defp print_suite ( counter , test_failures , case_failures , ms ) do
78
92
IO . write "\n \n Failures:\n \n "
79
- Enum . reduce Enum . reverse ( failures ) , 1 , print_failure ( & 1 , & 2 , File . cwd! )
93
+ num_fails = Enum . reduce Enum . reverse ( test_failures ) , 1 , print_test_failure ( & 1 , & 2 , File . cwd! )
94
+ Enum . reduce Enum . reverse ( case_failures ) , num_fails , print_case_failure ( & 1 , & 2 , File . cwd! )
95
+ num_invalids = Enum . count test_failures , fn test -> test . invalid end
96
+
80
97
IO . puts "Finished in #{ format_ms ms } seconds"
81
- IO . puts failure ( "#{ counter } tests, #{ length ( failures ) } failures" )
98
+
99
+ num_fails = num_fails - 1
100
+ message = "#{ counter } tests, #{ num_fails } failures"
101
+ if num_invalids > 0 , do: message = message <> ", #{ num_invalids } invalid"
102
+ cond do
103
+ num_fails > 0 -> IO . puts failure ( message )
104
+ num_invalids > 0 -> IO . puts invalid ( message )
105
+ true -> IO . puts success ( message )
106
+ end
107
+ end
108
+
109
+ defp print_test_failure ( ExUnit.Test [ failure : nil ] , acc , _cwd ) do
110
+ acc
111
+ end
112
+
113
+ defp print_test_failure ( ExUnit.Test [ case : test_case , name: test , failure: { kind , reason , stacktrace } ] , acc , cwd ) do
114
+ IO . puts " #{ acc } ) #{ test } (#{ inspect test_case . name } )"
115
+ print_kind_reason ( kind , reason )
116
+ print_stacktrace ( stacktrace , test_case . name , test , cwd )
117
+ IO . write "\n "
118
+ acc + 1
82
119
end
83
120
84
- defp print_failure ( ExUnit.Test [ case : test_case , name: test , failure: { kind , reason , stacktrace } ] , acc , cwd ) do
85
- IO . puts " #{ acc } ) #{ test } ( #{ inspect test_case } ) "
121
+ defp print_case_failure ( ExUnit.TestCase [ name : case_name , failure: { kind , reason , stacktrace } ] , acc , cwd ) do
122
+ IO . puts " #{ acc } ) #{ inspect case_name } "
86
123
print_kind_reason ( kind , reason )
87
- print_stacktrace ( stacktrace , test_case , test , cwd )
124
+ print_stacktrace ( stacktrace , case_name , nil , cwd )
88
125
IO . write "\n "
89
126
acc + 1
90
127
end
@@ -164,6 +201,10 @@ defmodule ExUnit.CLIFormatter do
164
201
IO.ANSI . escape ( "%{green}" <> msg )
165
202
end
166
203
204
+ defp invalid ( msg ) do
205
+ IO.ANSI . escape ( "%{yellow}" <> msg )
206
+ end
207
+
167
208
defp failure ( msg ) do
168
209
IO.ANSI . escape ( "%{red}" <> msg )
169
210
end
@@ -179,4 +220,4 @@ defmodule ExUnit.CLIFormatter do
179
220
defp stacktrace_info ( msg ) do
180
221
" " <> msg
181
222
end
182
- end
223
+ end
0 commit comments