diff --git a/lib/elixir_analyzer/constants.ex b/lib/elixir_analyzer/constants.ex index 19247b35..5496a545 100644 --- a/lib/elixir_analyzer/constants.ex +++ b/lib/elixir_analyzer/constants.ex @@ -76,7 +76,7 @@ defmodule ElixirAnalyzer.Constants do captains_log_do_not_use_enum_random: "elixir.captains-log.do_not_use_enum_random", captains_log_do_not_use_rand_uniform_real: "elixir.captains-log.do_not_use_rand_uniform_real", captains_log_use_rand_uniform: "elixir.captains-log.use_rand_uniform", - captains_log_use_io_lib: "elixir.captains-log.use_io_lib", + captains_log_use_erlang: "elixir.captains-log.use_erlang", # Community Garden Comments community_garden_use_get_and_update: "elixir.community-garden.use_get_and_update", diff --git a/lib/elixir_analyzer/test_suite/captains_log.ex b/lib/elixir_analyzer/test_suite/captains_log.ex index 05a1256e..320203e5 100644 --- a/lib/elixir_analyzer/test_suite/captains_log.ex +++ b/lib/elixir_analyzer/test_suite/captains_log.ex @@ -47,6 +47,15 @@ defmodule ElixirAnalyzer.TestSuite.CaptainsLog do type :essential calling_fn module: CaptainsLog, name: :format_stardate called_fn module: :io_lib, name: :_ - comment Constants.captains_log_use_io_lib() + comment Constants.captains_log_use_erlang() + suppress_if "format_stardate uses :erlang", :pass + end + + assert_call "format_stardate uses :erlang" do + type :essential + calling_fn module: CaptainsLog, name: :format_stardate + called_fn module: :erlang, name: :_ + comment Constants.captains_log_use_erlang() + suppress_if "format_stardate uses :io_lib", :pass end end diff --git a/test/elixir_analyzer/test_suite/captains_log_test.exs b/test/elixir_analyzer/test_suite/captains_log_test.exs index b3b783fd..26c7213e 100644 --- a/test/elixir_analyzer/test_suite/captains_log_test.exs +++ b/test/elixir_analyzer/test_suite/captains_log_test.exs @@ -97,14 +97,34 @@ defmodule ElixirAnalyzer.ExerciseTest.CaptainsLogTest do end end - test_exercise_analysis "format_stardate uses Float.round", - comments_include: [Constants.captains_log_use_io_lib()] do - defmodule CaptainsLog do - def format_stardate(stardate) do - if is_float(stardate) do - Float.round(stardate, 1) |> to_string() - else - raise ArgumentError + describe "format_stardate uses :io_lib or :erlang" do + test_exercise_analysis "format_stardate uses Float.round", + comments_include: [Constants.captains_log_use_erlang()] do + defmodule CaptainsLog do + def format_stardate(stardate) do + if is_float(stardate) do + Float.round(stardate, 1) |> to_string() + else + raise ArgumentError + end + end + end + end + + test_exercise_analysis "format_stardate uses :io_lib", + comments_exclude: [Constants.captains_log_use_erlang()] do + defmodule CaptainsLog do + def format_stardate(stardate) do + to_string(:io_lib.format("~.1f", [stardate])) + end + end + end + + test_exercise_analysis "format_stardate uses :erlang", + comments_exclude: [Constants.captains_log_use_erlang()] do + defmodule CaptainsLog do + def format_stardate(stardate) do + :erlang.float_to_binary(stardate, [{:decimals, 1}]) end end end