Current section
Files
Jump to
Current section
Files
lib/result.ex
defmodule PropCheck.Result do
@moduledoc false
# A GenServer managing the results of test runs
use GenServer
defstruct tests: [], errors: [], current: nil
@type t :: %__MODULE__{tests: [any], errors: [any], current: nil | atom}
def start_link do
:gen_server.start_link({:local, __MODULE__}, __MODULE__, [], [])
end
def stop do
:gen_server.call(__MODULE__, :stop)
catch
_ -> :ok
end
def status do
:gen_server.call(__MODULE__, :status)
end
def message(fmt, args) do
:gen_server.call(__MODULE__, {:message, fmt, args})
end
@spec init(any) :: {:ok, t}
def init(_args) do
{:ok, %__MODULE__{}}
end
@spec handle_call({:message, any, any}, {pid, any}, t) :: {:reply, :ok, t}
def handle_call({:message, fmt, args}, _from, state) do
state =
cond do
:lists.prefix(~c"Error", fmt) ->
%__MODULE__{state | errors: [{state.current, {fmt, args}} | state.errors]}
:lists.prefix(~c"Failed", fmt) ->
%__MODULE__{state | errors: [{state.current, {fmt, args}} | state.errors]}
:lists.prefix(~c"Testing", fmt) ->
%__MODULE__{state | tests: [args | state.tests], current: args}
end
{:reply, :ok, state}
end
def handle_call(:status, _from, state) do
{:reply, {state.tests, state.errors}, state}
end
def handle_call(:stop, _from, state) do
{:stop, :normal, :ok, state}
end
end