Packages

Wrapper for Advent of Code with Elixir

Current section

Files

Jump to
belodon lib task test.ex
Raw

lib/task/test.ex

defmodule Mix.Tasks.Belodon.Test do
@moduledoc """
Runs all the tests of a puzzle with specific parameters.
## Parameters
- `--year` (`-y`): Target year for the test. Defaults to the environment variable BELODON_TEST_YEAR.
- `--day` (`-d`): Target day for the test. Defaults to the environment variable BELODON_TEST_DAY.
## Examples
$ mix belodon.test --year 2024 --day 25
$ mix belodon.test -y 2024 -d 25
Runs the task with the `year` parameter set to `2024` and the day parameter set to `25`.
"""
use Mix.Task
alias Belodon.Types
alias Mix.Tasks.Belodon.Test.Behavior.Mock
@impl Mix.Task
def run(args) do
{dirty_opts, _} =
OptionParser.parse!(args,
switches: [year: :integer, day: :integer],
aliases: [y: :year, d: :day]
)
default_year = fetch_int("BELODON_TEST_YEAR", 0)
default_day = fetch_int("BELODON_TEST_DAY", 0)
opts = Keyword.merge([year: default_year, day: default_day], dirty_opts)
valid_year = Types.validate_year!(opts[:year])
valid_day = Types.validate_day!(opts[:day])
year = "#{valid_year}"
day = String.slice("0#{valid_day}", -2, 2)
test_path = "test/year#{year}/day#{day}_test.exs"
Mock.send(test_path)
end
@spec fetch_int(String.t(), integer) :: integer()
defp fetch_int(env_var, default_value) do
env_var
|> System.get_env("#{default_value}")
|> String.to_integer()
rescue
_ -> default_value
end
end