ExUnit.Filters
Conveniences for parsing and evaluating filters.
Summary
Types
Functions
- eval(include, exclude, tags, collection)
Evaluates the
includeandexcludefilters against the giventagsto determine if tests should be skipped or excluded.- failure_info(manifest_file)
Returns a tuple containing useful information about test failures from the manifest. The tuple contains
- normalize(include, exclude)
Normalizes
includeandexcludefilters to remove duplicates and keep precedence.- parse(filters)
Parses the given filters, as one would receive from the command line.
- parse_path(file)
Parses filters out of a path.
Types
t()
Specs
t() :: [{atom(), Regex.t() | String.Chars.t()} | atom()] Functions
eval(include, exclude, tags, collection)
Specs
eval(t(), t(), map(), [ExUnit.Test.t()]) ::
:ok | {:excluded, String.t()} | {:skipped, String.t()} Evaluates the include and exclude filters against the given tags to determine if tests should be skipped or excluded.
Some filters, like :line, may require the whole test collection to find the closest line, that's why it must also be passed as an argument.
Filters can either be a regular expression or any data structure that implements the String.Chars protocol, which is invoked before comparing the filter with the :tag value.
Precedence
Tests are first excluded, then included, and then skipped (if any left).
If a :skip tag is found in tags, {:skipped, message} is returned if the test has been left after the exclude and include filters. Otherwise {:exclude, message} is returned.
The only exception to this rule is that :skip is found in the include filter, :ok is returned regardless of whether the test was excluded or not.
Examples
iex> ExUnit.Filters.eval([foo: "bar"], [:foo], %{foo: "bar"}, [])
:ok
iex> ExUnit.Filters.eval([foo: "bar"], [:foo], %{foo: "baz"}, [])
{:excluded, "due to foo filter"} failure_info(manifest_file)
Specs
failure_info(Path.t()) :: {MapSet.t(Path.t()), MapSet.t(ExUnit.test_id())} Returns a tuple containing useful information about test failures from the manifest. The tuple contains:
- A set of files that contain tests that failed the last time they ran. The paths are absolute paths.
- A set of test IDs that failed the last time they ran
normalize(include, exclude)
Specs
normalize(t() | nil, t() | nil) :: {t(), t()} Normalizes include and exclude filters to remove duplicates and keep precedence.
Examples
iex> ExUnit.Filters.normalize(nil, nil)
{[], []}
iex> ExUnit.Filters.normalize([:foo, :bar, :bar], [:foo, :baz])
{[:foo, :bar], [:baz]}
iex> ExUnit.Filters.normalize([foo: "true"], [:foo])
{[foo: "true"], [:foo]}
iex> ExUnit.Filters.normalize([:foo], [foo: "true"])
{[:foo], []}
iex> ExUnit.Filters.normalize([foo: "true"], [foo: true])
{[foo: "true"], []}
iex> ExUnit.Filters.normalize([foo: true], [foo: "true"])
{[foo: true], []}
iex> ExUnit.Filters.normalize([foo: 1, foo: 1, foo: 2], [])
{[foo: 1, foo: 2], []}
iex> ExUnit.Filters.normalize([], [foo: 1, foo: 1, foo: 2])
{[], [foo: 1, foo: 2]} parse(filters)
Specs
parse([String.t()]) :: t()
Parses the given filters, as one would receive from the command line.
Examples
iex> ExUnit.Filters.parse(["foo:bar", "baz", "line:9", "bool:true"])
[{:foo, "bar"}, :baz, {:line, "9"}, {:bool, "true"}] parse_path(file)
Specs
parse_path(String.t()) :: {String.t(), Keyword.t()} Parses filters out of a path.
Determines whether a given file path (supplied to ExUnit/Mix as arguments on the command line) includes a line number filter, and if so returns the appropriate ExUnit configuration options.
© 2012 Plataformatec
Licensed under the Apache License, Version 2.0.
https://hexdocs.pm/ex_unit/1.11.2/ExUnit.Filters.html