Current section

Files

Jump to
exalign dev mix tasks exalign.regenerate_tests.ex
Raw

dev/mix/tasks/exalign.regenerate_tests.ex

defmodule Mix.Tasks.Exalign.RegenerateTests do
@shortdoc "Regenerate Elixir fixtures/expected/ from fixtures/input/"
@moduledoc """
Runs `ExAlign.format/2` on every `.ex` file in `dev/test/fixtures/elixir/input/`
and writes the result to the matching file in `dev/test/fixtures/elixir/expected/`.
## Usage
mix exalign.regenerate_tests
Run `mix test` afterwards to confirm the updated expected files match the
current formatter output.
"""
use Mix.Task
@impl Mix.Task
def run(_args) do
input_dir = Path.join([File.cwd!(), "dev/test/fixtures/input"])
expected_dir = Path.join([File.cwd!(), "dev/test/fixtures/expected"])
File.mkdir_p!(expected_dir)
Path.wildcard(Path.join(input_dir, "*.ex"))
|> Enum.each(fn input_path ->
out = ExAlign.format(File.read!(input_path), [])
expected_path = Path.join(expected_dir, Path.basename(input_path))
File.write!(expected_path, out)
Mix.shell().info(" updated #{Path.relative_to_cwd(expected_path)}")
end)
end
end