Skip to content

Commit f06357c

Browse files
author
Frank Hunleth
committed
Fix dialyzer warnings in support code
This also runs Dialyzer in the test environment so that the support code is checked from now on. Credo was moved for consistency.
1 parent ee0cb78 commit f06357c

4 files changed

Lines changed: 49 additions & 22 deletions

File tree

mix.exs

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,13 @@ defmodule Delux.MixProject do
1616
docs: docs(),
1717
dialyzer: dialyzer(),
1818
deps: deps(),
19-
preferred_cli_env: %{docs: :docs, "hex.build": :docs, "hex.publish": :docs}
19+
preferred_cli_env: %{
20+
docs: :docs,
21+
"hex.build": :docs,
22+
"hex.publish": :docs,
23+
credo: :test,
24+
dialyzer: :test
25+
}
2026
]
2127
end
2228

@@ -32,8 +38,8 @@ defmodule Delux.MixProject do
3238
defp deps do
3339
[
3440
{:ex_doc, "~> 0.22", only: :docs, runtime: false},
35-
{:dialyxir, "~> 1.1", only: :dev, runtime: false},
36-
{:credo, "~> 1.5", only: :dev, runtime: false}
41+
{:dialyxir, "~> 1.1", only: :test, runtime: false},
42+
{:credo, "~> 1.5", only: :test, runtime: false}
3743
]
3844
end
3945

test/delux/backend_test.exs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,8 +48,8 @@ defmodule Delux.BackendTest do
4848
assert FakeLEDs.read_trigger(2) == "none"
4949

5050
assert FakeLEDs.read_pattern(0) == "255 500 255 0 0 500 0 0 "
51-
assert FakeLEDs.read_pattern(1) == ""
52-
assert FakeLEDs.read_pattern(2) == ""
51+
assert FakeLEDs.read_pattern(1) == :eof
52+
assert FakeLEDs.read_pattern(2) == :eof
5353
end
5454

5555
@tag :tmp_dir

test/delux_test.exs

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ defmodule DeluxTest do
9797
# Set a lower priority blink and check that nothing gets written
9898
Delux.render(pid, Delux.Effects.blink(:green, 5), :status)
9999
assert info_as_binary(pid) == "green at 1 Hz"
100-
assert FakeLEDs.read_pattern(0) == ""
100+
assert FakeLEDs.read_pattern(0) == :eof
101101

102102
# Clear the higher priority blink
103103
Delux.render(pid, nil, :notification)
@@ -167,17 +167,17 @@ defmodule DeluxTest do
167167
assert FakeLEDs.read_pattern(1) == "0 3600000 0 0 "
168168
assert FakeLEDs.read_pattern(2) == "1 250 1 0 0 250 0 0 "
169169
# Not written
170-
assert FakeLEDs.read_pattern(3) == ""
171-
assert FakeLEDs.read_pattern(4) == ""
172-
assert FakeLEDs.read_pattern(5) == ""
170+
assert FakeLEDs.read_pattern(3) == :eof
171+
assert FakeLEDs.read_pattern(4) == :eof
172+
assert FakeLEDs.read_pattern(5) == :eof
173173

174174
# Start a second blink on indicator2
175175
Delux.render(pid, %{indicator2: Delux.Effects.blink(:blue, 1)}, :status)
176176
assert info_as_binary(pid) == "magenta at 2 Hz"
177177
assert info_as_binary(pid, :indicator2) == "blue at 1 Hz"
178-
assert FakeLEDs.read_pattern(0) == ""
179-
assert FakeLEDs.read_pattern(1) == ""
180-
assert FakeLEDs.read_pattern(2) == ""
178+
assert FakeLEDs.read_pattern(0) == :eof
179+
assert FakeLEDs.read_pattern(1) == :eof
180+
assert FakeLEDs.read_pattern(2) == :eof
181181
assert FakeLEDs.read_pattern(3) == "0 3600000 0 0 "
182182
assert FakeLEDs.read_pattern(4) == "0 3600000 0 0 "
183183
assert FakeLEDs.read_pattern(5) == "1 500 1 0 0 500 0 0 "
@@ -189,18 +189,18 @@ defmodule DeluxTest do
189189
assert FakeLEDs.read_pattern(0) == "0 3600000 0 0 "
190190
assert FakeLEDs.read_pattern(1) == "0 3600000 0 0 "
191191
assert FakeLEDs.read_pattern(2) == "0 3600000 0 0 "
192-
assert FakeLEDs.read_pattern(3) == ""
193-
assert FakeLEDs.read_pattern(4) == ""
194-
assert FakeLEDs.read_pattern(5) == ""
192+
assert FakeLEDs.read_pattern(3) == :eof
193+
assert FakeLEDs.read_pattern(4) == :eof
194+
assert FakeLEDs.read_pattern(5) == :eof
195195

196196
# Turn off the second blink
197197
Delux.render(pid, %{indicator2: nil}, :status)
198198
assert info_as_binary(pid) == "off"
199199
assert info_as_binary(pid, :indicator2) == "off"
200200

201-
assert FakeLEDs.read_pattern(0) == ""
202-
assert FakeLEDs.read_pattern(1) == ""
203-
assert FakeLEDs.read_pattern(2) == ""
201+
assert FakeLEDs.read_pattern(0) == :eof
202+
assert FakeLEDs.read_pattern(1) == :eof
203+
assert FakeLEDs.read_pattern(2) == :eof
204204
assert FakeLEDs.read_pattern(3) == "0 3600000 0 0 "
205205
assert FakeLEDs.read_pattern(4) == "0 3600000 0 0 "
206206
assert FakeLEDs.read_pattern(5) == "0 3600000 0 0 "

test/support/fake_leds.ex

Lines changed: 25 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,15 +17,17 @@ defmodule Delux.Support.FakeLEDs do
1717

1818
Process.put({__MODULE__, :led_dir}, led_dir)
1919

20-
for i <- 0..5 do
20+
Enum.each(0..5, fn i ->
2121
File.mkdir_p!(base_dir(led_dir, i))
2222
File.write!(trigger_path(led_dir, i), "none")
2323
File.write!(max_brightness_path(led_dir, i), "#{max_brightness}")
2424
File.write!(pattern_path(led_dir, i), "")
2525

2626
handle = File.open!(pattern_path(led_dir, i), [:read, :raw])
2727
Process.put({__MODULE__, i}, handle)
28-
end
28+
end)
29+
30+
:ok
2931
end
3032

3133
@spec read_trigger(non_neg_integer()) :: binary()
@@ -34,13 +36,32 @@ defmodule Delux.Support.FakeLEDs do
3436
File.read!(trigger_path(led_dir, index))
3537
end
3638

37-
@spec read_pattern(non_neg_integer()) :: binary()
39+
@spec read_pattern(non_neg_integer()) :: binary() | :eof | {:error, any()}
3840
def read_pattern(index) do
3941
# This is a little tricky since tests must read the pattern
4042
# after every time it's set. This is due to how the backend code
4143
# to Linux just keeps appending to the magic file to set patterns,
4244
# but our simulation doesn't truncate the file after every write.
4345
handle = Process.get({__MODULE__, index})
44-
IO.binread(handle, :all)
46+
binread(handle)
47+
end
48+
49+
if Version.match?(System.version(), "~> 1.13") do
50+
defp binread(handle) do
51+
case IO.binread(handle, :eof) do
52+
:eof -> :eof
53+
{:error, _} = error -> error
54+
data -> IO.iodata_to_binary(data)
55+
end
56+
end
57+
else
58+
# Elixir 1.12 and earlier use :all and return empty strings
59+
defp binread(handle) do
60+
case IO.binread(handle, :all) do
61+
"" -> :eof
62+
{:error, _} = error -> error
63+
data -> IO.iodata_to_binary(data)
64+
end
65+
end
4566
end
4667
end

0 commit comments

Comments
 (0)