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

Link to this macro

throws(arg1, arg2)

View Source (macro)

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