Current section

Files

Jump to
white_bread lib white_bread.ex
Raw

lib/white_bread.ex

defmodule WhiteBread do
def run(context, path, options \\ []) do
tags = options |> Keyword.get(:tags)
output = WhiteBread.Outputers.Console.start
features = path
|> WhiteBread.Feature.Finder.find_in_path
|> read_in_feature_files
|> parse_features
|> filter_features(tags)
results = features
|> run_all_features(context, output)
output |> WhiteBread.Outputers.Console.stop
%{
successes: results |> Enum.filter(&feature_success?/1),
failures: results |> Enum.filter(&feature_failure?/1)
}
end
defp read_in_feature_files(file_paths) do
file_paths |> Stream.map(&File.read!/1)
end
defp parse_features(feature_texts) do
feature_texts
|> Enum.map(&parse_task/1)
|> Enum.map(&Task.await/1)
end
defp parse_task(feature_text) do
Task.async(fn -> WhiteBread.Gherkin.Parser.parse_feature(feature_text) end)
end
defp filter_features(features, _tags = nil) do
features
end
defp filter_features(features, tags) do
features |> WhiteBread.Tags.FeatureFilterer.get_for_tags(tags)
end
defp run_all_features(features, context, output) do
features |> Enum.map(get_feature_runner(context, output))
end
defp get_feature_runner(context, output) do
fn(feature) ->
{feature, WhiteBread.Runners.FeatureRunner.run(feature, context, output)}
end
end
defp feature_success?({_feature, %{failures: failures}}) do
failures == []
end
defp feature_failure?({_feature, %{failures: failures}}) do
failures != []
end
end