Skip to content

Commit

Permalink
Fixed newsletter analysis to allow guard clause
Browse files Browse the repository at this point in the history
Signed-off-by: Willy Wombat <[email protected]>
  • Loading branch information
octowombat committed Oct 13, 2023
1 parent 78cb44a commit 83fda08
Show file tree
Hide file tree
Showing 3 changed files with 74 additions and 1 deletion.
40 changes: 40 additions & 0 deletions lib/elixir_analyzer/test_suite/newsletter.ex
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,14 @@ defmodule ElixirAnalyzer.TestSuite.Newsletter do
end
end
end

form do
def close_log(_ignore) when _ignore do
_block_ends_with do
:ok
end
end
end
end

feature "use IO.puts in log_sent_email rather than IO.write as last call" do
Expand All @@ -33,6 +41,14 @@ defmodule ElixirAnalyzer.TestSuite.Newsletter do
end
end
end

form do
def log_sent_email(_ignore, _ignore) when _ignore do
_block_ends_with do
:ok
end
end
end
end

assert_no_call "use IO.puts in log_sent_email rather than IO.write" do
Expand All @@ -55,6 +71,14 @@ defmodule ElixirAnalyzer.TestSuite.Newsletter do
end
end
end

form do
def log_sent_email(_ignore, _ignore) when _ignore do
_block_ends_with do
:ok
end
end
end
end

feature "send_newsletter ends with close_log" do
Expand All @@ -69,6 +93,14 @@ defmodule ElixirAnalyzer.TestSuite.Newsletter do
end
end
end

form do
def send_newsletter(_ignore, _ignore, _ignore) when _ignore do
_block_ends_with do
:ok
end
end
end
end

feature "open_log used the option :write" do
Expand Down Expand Up @@ -107,6 +139,14 @@ defmodule ElixirAnalyzer.TestSuite.Newsletter do
end
end
end

form do
def open_log(_ignore) when _ignore do
_block_includes do
File.open!(_ignore, [:write])
end
end
end
end

assert_call "send_newsletter/3 calls open_log/1" do
Expand Down
34 changes: 34 additions & 0 deletions test/elixir_analyzer/test_suite/newsletter_test.exs
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,40 @@ defmodule ElixirAnalyzer.ExerciseTest.NewsletterTest do
if f.(email) === :ok, do: log_sent_email(log_pid, email)
do_send(rest, log_pid, f)
end
end,
defmodule Newsletter do
def read_emails(path) do
path
|> File.read!()
|> String.split()
end

def open_log(path) when is_binary(path) do
File.open!(path, [:write])
end

def log_sent_email(pid, email) when is_pid(pid) and is_binary(email) do
IO.puts(pid, email)
end

def close_log(pid) when is_pid(pid) do
File.close(pid)
end

def send_newsletter(emails_path, log_path, send_fun)
when is_binary(emails_path) and is_binary(log_path) and is_function(send_fun, 1) do
log_pid = open_log(log_path)
emails = read_emails(emails_path)

Enum.each(emails, fn email ->
case send_fun.(email) do
:ok -> log_sent_email(log_pid, email)
_ -> nil
end
end)

close_log(log_pid)
end
end
]
end
Expand Down
1 change: 0 additions & 1 deletion test_data/two_fer/imperfect_solution/lib/two_fer.ex
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
defmodule TwoFer do
@someUnusedModuleAttribute 1

defmodule My_empty_module do
end
Expand Down

0 comments on commit 83fda08

Please sign in to comment.