Packages

A marvelous mutation testing tool for Elixir

Current section

Files

Jump to
exmen lib exmen discover middleware.ex
Raw

lib/exmen/discover/middleware.ex

defmodule Exmen.Discover.Middleware do
defstruct module: nil, config: []
def run(ast, mutate) do
mutate(ast, [], mutate)
end
defp mutate(node, mutations, fun) do
case fun.(node) do
{:ok, new_mutation, next} ->
mutate(next, [new_mutation|mutations], fun)
{:skip, _} ->
mutations
_ ->
do_mutate(node, mutations, fun)
end
end
defp do_mutate({_, args}, mutations, fun), do: mutate(args, mutations, fun)
defp do_mutate({_, _, args}, mutations, fun), do: mutate(args, mutations, fun)
defp do_mutate([head|tail], mutations, fun), do: mutate(tail, mutate(head, mutations, fun), fun)
defp do_mutate(_, mutations, _), do: mutations
end