Skip to content

Instantly share code, notes, and snippets.

@localshred
Created December 17, 2015 17:32
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save localshred/84aedec310e59b43f9ed to your computer and use it in GitHub Desktop.
Save localshred/84aedec310e59b43f9ed to your computer and use it in GitHub Desktop.
$ tree test
test
├── coordinator_test.exs
├── data
│   ├── post_items.json
│   ├── postitems.1.json
│   ├── postitems.json
│   ├── test_cases
│   │   ├── big
│   │   │   ├── ferrari.done.json
│   │   │   ├── floridawild.done.json
│   │   │   └── postgres.done.json
│   │   ├── one_post_deletion.json
│   │   ├── one_post_one_topic.json
│   │   ├── one_post_redundant_deletion.json
│   │   ├── one_post_two_topics.json
│   │   ├── two_post_deletion.json
│   │   ├── two_post_one_profile_one_topic.json
│   │   ├── two_post_redundant_deletion.json
│   │   ├── two_post_redundant_sentiment_change.json
│   │   ├── two_post_sentiment_change.json
│   │   └── two_profile_three_post_one_topic.json
│   ├── topic_influence.1.json
│   └── topic_influence.json
├── gretel_test.exs
├── helpers
│   ├── dict_pipeline_test.exs
│   └── epoch_test.exs
├── test_helper.exs
├── test_helpers
│   └── topic_worker_test_case_loader.ex
└── topic_worker_test.exs
5 directories, 25 files
# located in test/test_helpers/topic_worker_test_case_loader.exs
defmodule TestHelpers.TopicWorkerTestCaseLoader do
@test_case_directory "./test/data/test_cases"
if System.get_env("TEST_LARGE_FILES") == nil do
@wildcard_path "#{@test_case_directory}/*.json"
else
@wildcard_path "#{@test_case_directory}/**/*.json"
end
def run_test_cases(define_test_case) do
Path.wildcard(@wildcard_path)
|> Enum.each fn (file) ->
file
|> read_file
|> decode_json
|> load_test_case
|> define_test_case.()
end
end
def decode_json({ { :ok, file_content }, filename }) do
{ :ok_json, filename, Poison.decode!(file_content) }
end
def decode_json({ { :error, error }, filename }) do
{ :error, filename, "Can't load file #{filename}: #{error}" }
end
def load_test_case({ :ok_json, filename, %{ "input" => post_items, "output" => expected_stats }}) do
{ :ok, filename, post_items, expected_stats }
end
def load_test_case({ :error, _, _ } = error) do
error
end
def read_file(filename) do
{ File.read(filename), filename }
end
end
# located in test/topic_worker_test.exs
defmodule TopicWorkerTest do
use ExUnit.Case
doctest TopicWorker
## THIS IS NOT WORKING
import TestHelpers.TopicWorkerTestCaseLoader
## THIS IS NOT WORKING
@doc """
Dynamically define a test for every JSON file in the test_case_directory.
"""
run_test_cases fn (test_case) ->
case test_case do
{ :ok, filename, post_items, expected_stats } ->
@filename filename
@post_items post_items
@expected_stats expected_stats
test "TopicWorker test case: #{@filename}" do
assert(@expected_stats == TopicWorker.process_events(@post_items))
end
{ :error, filename, error } ->
@filename filename
@error error
test "TopicWorker test case: #{@filename}" do
flunk(@error)
end
end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment