46 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Elixir
		
	
	
	
	
	
			
		
		
	
	
			46 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Elixir
		
	
	
	
	
	
defmodule Support.FileHelpers do
 | 
						|
  import ExUnit.Assertions
 | 
						|
 | 
						|
  @doc """
 | 
						|
  Returns the `tmp_path` for tests.
 | 
						|
  """
 | 
						|
  def tmp_path do
 | 
						|
    Path.expand("../../tmp", __DIR__)
 | 
						|
  end
 | 
						|
 | 
						|
  @doc """
 | 
						|
  Executes the given function in a temp directory
 | 
						|
  tailored for this test case and test.
 | 
						|
  """
 | 
						|
  defmacro in_tmp(fun) do
 | 
						|
    {name, _arity} = __CALLER__.function || raise "in_tmp must be called inside a function"
 | 
						|
    path = Path.join([tmp_path(), "#{__CALLER__.module}", "#{name}"])
 | 
						|
 | 
						|
    quote do
 | 
						|
      path = unquote(path)
 | 
						|
      File.rm_rf!(path)
 | 
						|
      File.mkdir_p!(path)
 | 
						|
      File.cd!(path, fn -> unquote(fun).(path) end)
 | 
						|
    end
 | 
						|
  end
 | 
						|
 | 
						|
  @doc """
 | 
						|
  Asserts a file was generated.
 | 
						|
  """
 | 
						|
  def assert_file(file) do
 | 
						|
    assert File.regular?(file), "Expected #{file} to exist, but does not"
 | 
						|
  end
 | 
						|
 | 
						|
  @doc """
 | 
						|
  Asserts a file was generated and that it matches a given pattern.
 | 
						|
  """
 | 
						|
  def assert_file(file, callback) when is_function(callback, 1) do
 | 
						|
    assert_file(file)
 | 
						|
    callback.(File.read!(file))
 | 
						|
  end
 | 
						|
 | 
						|
  def assert_file(file, match) do
 | 
						|
    assert_file(file, &assert(&1 =~ match))
 | 
						|
  end
 | 
						|
end
 |