View Source Corsa.Throws (corsa v0.1.2)
Throws checks if the exception thrown by the annotated function is expected.
Example
iex> defmodule Elixir.Corsa.Throws.Example do
...> use Corsa.Assert
...> use Corsa.Throws
...> throws f(x, y) do x > y end
...> def f(x, y) when x < y do raise "some error" end
...> def f(x, y) do x + y end
...> end
iex> Elixir.Corsa.Throws.Example.f(2, 1)
3
iex> Elixir.Corsa.Throws.Example.f(1, 2)
** (Corsa.ThrowsViolationError) @throws does not hold in call 'Corsa.Throws.Example.f(1, 2)'
Summary
Functions
Errors
iex> defmodule Elixir.Corsa.Throws.ExampleError1 do
...> use Corsa.Assert
...> use Corsa.Throws
...> throws f(x, y) do x > y end
...> throws f(x, y) do x > y end
...> def f(x, y) do x + y end
...> end
** (Corsa.ThrowsError) @throws for function 'f/2' already defined
iex> defmodule Elixir.Corsa.Throws.ExampleError2 do
...> use Corsa.Assert
...> use Corsa.Throws
...> throws f(x, x) do x > y end
...> def f(x, y) do x + y end
...> end
** (Corsa.ThrowsError) arguments in @throws should contain different names
iex> defmodule Elixir.Corsa.Throws.ExampleError3 do
...> use Corsa.Assert
...> use Corsa.Throws
...> throws f(x, _) do x > y end
...> def f(x, y) do x + y end
...> end
** (Corsa.ThrowsError) arguments in @throws cannot be ignored with _
iex> defmodule Elixir.Corsa.Throws.ExampleError4 do
...> use Corsa.Assert
...> use Corsa.Throws
...> throws f(kind, x) do x > 0 end
...> def f(x, y) do x + y end
...> end
** (Corsa.ThrowsError) 'kind' cannot be an argument in @throws
iex> defmodule Elixir.Corsa.Throws.ExampleError5 do
...> use Corsa.Assert
...> use Corsa.Throws
...> throws f(value, x) do value < 0 end
...> def f(x, y) do x + y end
...> end
** (Corsa.ThrowsError) 'value' cannot be an argument in @throws
Functions
Errors
iex> defmodule Elixir.Corsa.Throws.ExampleError1 do
...> use Corsa.Assert
...> use Corsa.Throws
...> throws f(x, y) do x > y end
...> throws f(x, y) do x > y end
...> def f(x, y) do x + y end
...> end
** (Corsa.ThrowsError) @throws for function 'f/2' already defined
iex> defmodule Elixir.Corsa.Throws.ExampleError2 do
...> use Corsa.Assert
...> use Corsa.Throws
...> throws f(x, x) do x > y end
...> def f(x, y) do x + y end
...> end
** (Corsa.ThrowsError) arguments in @throws should contain different names
iex> defmodule Elixir.Corsa.Throws.ExampleError3 do
...> use Corsa.Assert
...> use Corsa.Throws
...> throws f(x, _) do x > y end
...> def f(x, y) do x + y end
...> end
** (Corsa.ThrowsError) arguments in @throws cannot be ignored with _
iex> defmodule Elixir.Corsa.Throws.ExampleError4 do
...> use Corsa.Assert
...> use Corsa.Throws
...> throws f(kind, x) do x > 0 end
...> def f(x, y) do x + y end
...> end
** (Corsa.ThrowsError) 'kind' cannot be an argument in @throws
iex> defmodule Elixir.Corsa.Throws.ExampleError5 do
...> use Corsa.Assert
...> use Corsa.Throws
...> throws f(value, x) do value < 0 end
...> def f(x, y) do x + y end
...> end
** (Corsa.ThrowsError) 'value' cannot be an argument in @throws