Skip to content

Commit 3764e9d

Browse files
committed
Improve Assertitions by adding source line
1 parent 7acc3ab commit 3764e9d

2 files changed

Lines changed: 62 additions & 10 deletions

File tree

lib/credo/test/assertions.ex

Lines changed: 23 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ defmodule Credo.Test.Assertions do
1515

1616
def refute_issues(issues) do
1717
assert [] == issues,
18-
"There should be no issues, got #{Enum.count(issues)}: #{to_inspected(issues)}"
18+
"There should be no issues, got #{Enum.count(issues)}:\n\n#{to_inspected(issues)}"
1919

2020
issues
2121
end
@@ -24,7 +24,7 @@ defmodule Credo.Test.Assertions do
2424
refute Enum.empty?(issues), "There should be one issue, got none."
2525

2626
assert Enum.count(issues) == 1,
27-
"There should be only 1 issue, got #{Enum.count(issues)}: #{to_inspected(issues)}"
27+
"There should be only 1 issue, got #{Enum.count(issues)}:\n\n#{to_inspected(issues)}"
2828

2929
if callback do
3030
issues |> List.first() |> callback.()
@@ -37,17 +37,32 @@ defmodule Credo.Test.Assertions do
3737
assert Enum.count(issues) > 0, "There should be multiple issues, got none."
3838

3939
assert Enum.count(issues) > 1,
40-
"There should be more than one issue, got: #{to_inspected(issues)}"
40+
"There should be more than one issue, got:\n\n#{to_inspected(issues)}"
4141

4242
if callback, do: callback.(issues)
4343

4444
issues
4545
end
4646

47-
def to_inspected(value) do
48-
value
49-
|> Inspect.Algebra.to_doc(%Inspect.Opts{})
50-
|> Inspect.Algebra.format(50)
51-
|> Enum.join("")
47+
def to_inspected(value) when is_list(value) do
48+
value |> Enum.map(&to_inspected/1) |> Enum.join("\n")
49+
end
50+
51+
def to_inspected(%Credo.Issue{} = issue) do
52+
inspected =
53+
issue
54+
|> Inspect.Algebra.to_doc(%Inspect.Opts{})
55+
|> Inspect.Algebra.format(50)
56+
|> Enum.join("")
57+
58+
if Credo.Test.Case.test_source_files?() do
59+
"""
60+
#{inspected}
61+
62+
#{Credo.Test.Case.get_issue_inline(issue)}
63+
"""
64+
else
65+
inspected
66+
end
5267
end
5368
end

lib/credo/test/case.ex

Lines changed: 39 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -204,6 +204,7 @@ defmodule Credo.Test.Case do
204204
|> run_check(MyProject.MyCheck, foo_parameter: "bar")
205205
"""
206206
def run_check(source_files, check, params \\ []) do
207+
Process.put(:credo_test_source_files, source_files)
207208
issues = CheckRunner.run_check(source_files, check, params)
208209

209210
check_on_malformed_issues(source_files, issues)
@@ -247,18 +248,54 @@ defmodule Credo.Test.Case do
247248
found trigger is not the given trigger:
248249
actual: #{inspect(actual_trigger, pretty: true)}
249250
expected: #{inspect(trigger, pretty: true)}
251+
252+
#{get_issue_inline(issue)}
250253
""")
251254
end
252255
end
253256
end
254257

255-
defp get_source_line(source_files, %Credo.Issue{} = issue) do
258+
@doc false
259+
def test_source_files? do
260+
test_source_files() != []
261+
end
262+
263+
@doc false
264+
def test_source_files do
265+
Process.get(:credo_test_source_files, [])
266+
end
267+
268+
@doc false
269+
def get_issue_inline(issue) do
270+
source_files = test_source_files()
271+
source_line = get_source_line(source_files, issue)
272+
273+
marker =
274+
if issue.column && issue.trigger != Credo.Issue.no_trigger() do
275+
String.duplicate(" ", issue.column - 1) <>
276+
String.duplicate("^", String.length(to_string(issue.trigger)))
277+
else
278+
""
279+
end
280+
281+
"""
282+
#{source_line}
283+
#{marker}
284+
"""
285+
end
286+
287+
defp get_source_line(source_files, %Credo.Issue{} = issue) when is_list(source_files) do
256288
source_files
257289
|> find_source_file(issue)
258290
|> Credo.SourceFile.line_at(issue.line_no)
259291
end
260292

261-
defp find_source_file(source_files, %Credo.Issue{filename: filename}) do
293+
defp get_source_line(%Credo.SourceFile{} = source_file, %Credo.Issue{} = issue) do
294+
Credo.SourceFile.line_at(source_file, issue.line_no)
295+
end
296+
297+
defp find_source_file(source_files, %Credo.Issue{filename: filename})
298+
when is_list(source_files) do
262299
Enum.find(source_files, &(&1.filename == filename)) || raise "Could not find source file"
263300
end
264301

0 commit comments

Comments
 (0)