Skip to content

Commit d8fc43a

Browse files
committed
ci: log json decoding error in property test
1 parent 79e84c0 commit d8fc43a

2 files changed

Lines changed: 32 additions & 19 deletions

File tree

.github/property_failures.exs

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,36 @@
22

33
defmodule Main do
44
@moduledoc false
5+
require Logger
6+
57
@repo System.get_env("REPO", "elixir-tools/spitfire")
68
def run do
7-
results = :json.decode(IO.read(:eof))
9+
input = IO.read(:eof)
10+
11+
results =
12+
case JSON.decode(input) do
13+
{:ok, results} ->
14+
results
15+
16+
{:error, reason} ->
17+
case reason do
18+
{_, offset, byte} ->
19+
Logger.error(inspect(byte))
20+
Logger.error(binary_slice(input, offset, byte_size(input)))
21+
22+
_ ->
23+
:ok
24+
end
25+
26+
Logger.error(inspect(reason))
27+
raise "Malformed JSON: " <> input
28+
end
829

930
failures =
1031
for failures <- get_in(results, ["tests", Access.all(), "failures"]), f <- failures do
1132
[match] = Regex.run(~r/.*Clause:.*\s+Generated:.*\n+(.*)/, f["message"], capture: :all_but_first)
1233

13-
:json.decode(String.trim(match))
34+
JSON.decode!(String.trim(match))
1435
end
1536

1637
failures = Enum.uniq_by(failures, & &1["code"])
@@ -26,7 +47,7 @@ defmodule Main do
2647
["--jq", ~s<. | map(. | select(.title == "#{fail["code"]}"))>]
2748
)
2849

29-
case :json.decode(issues) do
50+
case JSON.decode!(issues) do
3051
[] ->
3152
IO.write(:stderr, "Making new issue for #{fail["code"]}\n")
3253

test/char_property_test.exs

Lines changed: 8 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1640,15 +1640,13 @@ defmodule Spitfire.CharPropertyTest do
16401640
{:ok, spitfire_ast} ->
16411641
msg =
16421642
if @ci do
1643-
%{
1643+
JSON.encode!(%{
16441644
type: :mismatch,
16451645
context: context,
16461646
code: code,
16471647
elixir: inspect(elixir_ast, pretty: true),
16481648
spitfire: inspect(spitfire_ast, pretty: true)
1649-
}
1650-
|> :json.encode()
1651-
|> IO.iodata_to_binary()
1649+
})
16521650
else
16531651
"""
16541652
AST mismatch in context #{context} for code: #{inspect(code)}
@@ -1666,14 +1664,12 @@ defmodule Spitfire.CharPropertyTest do
16661664
{:error, _spitfire_ast, _errors} ->
16671665
msg =
16681666
if @ci do
1669-
%{
1667+
JSON.encode!(%{
16701668
type: :spitfire_error,
16711669
context: context,
16721670
code: code,
16731671
elixir: inspect(elixir_ast, pretty: true)
1674-
}
1675-
|> :json.encode()
1676-
|> IO.iodata_to_binary()
1672+
})
16771673
else
16781674
"""
16791675
Spitfire returned error when elixir succeeded in context #{context} for code: #{inspect(code)}
@@ -1688,14 +1684,12 @@ defmodule Spitfire.CharPropertyTest do
16881684
{:error, :no_fuel_remaining} ->
16891685
msg =
16901686
if @ci do
1691-
%{
1687+
JSON.encode!(%{
16921688
type: :spitfire_fuel,
16931689
context: context,
16941690
code: code,
16951691
elixir: inspect(elixir_ast, pretty: true)
1696-
}
1697-
|> :json.encode()
1698-
|> IO.iodata_to_binary()
1692+
})
16991693
else
17001694
"""
17011695
Spitfire ran out of fuel in context #{context} for code: #{inspect(code)}
@@ -1710,14 +1704,12 @@ defmodule Spitfire.CharPropertyTest do
17101704
:crashed ->
17111705
msg =
17121706
if @ci do
1713-
%{
1707+
JSON.encode!(%{
17141708
type: :spitfire_crash,
17151709
context: context,
17161710
code: code,
17171711
elixir: inspect(elixir_ast, pretty: true)
1718-
}
1719-
|> :json.encode()
1720-
|> IO.iodata_to_binary()
1712+
})
17211713
else
17221714
"""
17231715
Spitfire crashed when elixir succeeded in context #{context} for code: #{inspect(code)}

0 commit comments

Comments
 (0)