Merge pull request #74 from ukutaht/split-test-harness

Create a test file for each of the koan modules
This commit is contained in:
Felipe Seré
2016-04-23 13:10:23 +01:00
14 changed files with 250 additions and 215 deletions

View File

@@ -56,8 +56,8 @@ defmodule PatternMatching do
def make_noise(_anything), do: "Eh?"
koan "Functions can declare what kind of arguments they accept" do
dog = %{type: "dog"}
cat = %{type: "cat"}
dog = %{type: "dog"}
snake = %{type: "snake"}
assert make_noise(cat) == ___

View File

@@ -0,0 +1,27 @@
defmodule EnumTests do
use ExUnit.Case
use TestHarness
test "Enums" do
answers = [
3,
2,
{:multiple, [true, false]},
{:multiple, [true, false]},
{:multiple, [true, false]},
[10,20,30],
[1,3],
[2],
[1,2,3],
[1,2,3,4,5],
[1,2,3],
[{1, :a}, {2, :b}, {3, :c}],
2,
nil,
:no_such_element,
6
]
test_all(Enums, answers)
end
end

View File

@@ -0,0 +1,18 @@
defmodule EqualitiesTests do
use ExUnit.Case
use TestHarness
test "Equalities" do
answers = [
true,
false,
1,
2,
1,
4,
2
]
test_all(Equalities, answers)
end
end

View File

@@ -0,0 +1,22 @@
defmodule FunctionsTests do
use ExUnit.Case
use TestHarness
test "Functions" do
answers = [
"Hello, World!",
3,
{:multiple, ["One and Two", "Only One"]},
{:multiple, ["Hello Hello Hello Hello Hello ","Hello Hello "]},
{:multiple, [:entire_list, :single_thing]},
{:multiple, ["10 is bigger than 5", "4 is not bigger than 27"]},
{:multiple, ["It was zero", "The length was 5"]},
6,
6,
100,
"Full Name"
]
test_all(Functions, answers)
end
end

View File

@@ -0,0 +1,25 @@
defmodule ListsTests do
use ExUnit.Case
use TestHarness
test "Lists" do
answers = [1,
3,
[1, 2, :a, "b"],
[1,2],
[1,2,3],
[1,3],
["life", "life", "life"],
[1, 2, 3, 4, 5],
[1, 4, 2, 3],
[10, 2, 3],
[1, 2, 3],
[1, 2, 3, 4],
[1, 2, 3, 4],
{1, 2, 3},
["value"],
]
test_all(Lists, answers)
end
end

View File

@@ -0,0 +1,22 @@
defmodule MapsTests do
use ExUnit.Case
use TestHarness
test "Maps" do
answers = [
"Jon",
{:multiple, [[:age, :last_name, :name], [27, "Jon", "Snow"]]},
{:ok, 27},
:error,
{:ok, "Kayaking"},
{:ok, 37},
{:ok, 16},
[:last_name, :name],
%{:name => "Jon", :last_name => "Snow"},
{:ok, "Baratheon"},
%{ :name => "Jon", :last_name => "Snow"}
]
test_all(Maps, answers)
end
end

View File

@@ -0,0 +1,23 @@
defmodule PatternsTests do
use ExUnit.Case
use TestHarness
test "Pattern Matching" do
answers = [
1,
2,
1,
{:multiple, [1, [2,3,4]]},
[1,2,3,4],
3,
"eggs, milk",
"Honda",
[1,2,3],
{:multiple, ["Meow", "Woof", "Eh?",]},
"dog",
"Max"
]
test_all(PatternMatching, answers)
end
end

View File

@@ -0,0 +1,23 @@
defmodule ProcessesTests do
use ExUnit.Case
use TestHarness
test "Processes" do
answers = [
true,
:running,
"hola!",
:how_are_you?,
{:waited_too_long, "I am inpatient"},
false,
{:multiple, [true, false]},
{:exited, :random_reason},
true,
false,
{:exited, :normal},
{:exited, :normal}
]
test_all(Processes, answers)
end
end

View File

@@ -0,0 +1,20 @@
defmodule StringTests do
use ExUnit.Case
use TestHarness
test "Strings" do
answers = [
"hello",
"hello ",
"hello world",
"An incredible day",
"incredible",
"banana",
"banana",
"String",
"listen"
]
test_all(Strings, answers)
end
end

View File

@@ -0,0 +1,17 @@
defmodule StructsTests do
use ExUnit.Case
use TestHarness
test "Structs" do
answers = [
%Structs.Person{},
nil,
"Joe",
33,
{:multiple, [true, false]},
22,
]
test_all(Structs, answers)
end
end

View File

@@ -0,0 +1,17 @@
defmodule TasksTests do
use ExUnit.Case
use TestHarness
test "Tasks" do
answers = [
10,
:ok,
nil,
false,
9,
[1,4,9,16]
]
test_all(Tasks, answers)
end
end

View File

@@ -0,0 +1,19 @@
defmodule TupleTests do
use ExUnit.Case
use TestHarness
test "Tuples" do
answers = [
{:a, 1, "hi"},
3,
"hi",
{:a, "bye"},
{:a, :new_thing, "hi"},
{"Huey", "Dewey", "Louie"},
{:this, :is, :awesome},
[:this, :can, :be, :a, :list]
]
test_all(Tuples, answers)
end
end

View File

@@ -1,214 +0,0 @@
defmodule KoansHarnessTest do
use ExUnit.Case
test "Equalities" do
answers = [
true,
false,
1,
2,
1,
4,
2
]
test_all(Equalities, answers)
end
test "Strings" do
answers = [
"hello",
"hello ",
"hello world",
"An incredible day",
"incredible",
"banana",
"banana",
"String",
"listen"
]
test_all(Strings, answers)
end
test "Tuples" do
answers = [
{:a, 1, "hi"},
3,
"hi",
{:a, "bye"},
{:a, :new_thing, "hi"},
{"Huey", "Dewey", "Louie"},
{:this, :is, :awesome},
[:this, :can, :be, :a, :list]
]
test_all(Tuples, answers)
end
test "Lists" do
answers = [
1,
3,
[1, 2, :a, "b"],
[1,2],
[1,2,3],
[1,3],
["life", "life", "life"],
[1, 2, 3, 4, 5],
[1, 4, 2, 3],
[10, 2, 3],
[1, 2, 3],
[1, 2, 3, 4],
[1, 2, 3, 4],
{1, 2, 3},
["value"],
]
test_all(Lists, answers)
end
test "Maps" do
answers = [
"Jon",
{:multiple, [[:age, :last_name, :name], [27, "Jon", "Snow"]]},
{:ok, 27},
:error,
{:ok, "Kayaking"},
{:ok, 37},
{:ok, 16},
[:last_name, :name],
%{:name => "Jon", :last_name => "Snow"},
{:ok, "Baratheon"},
%{ :name => "Jon", :last_name => "Snow"}
]
test_all(Maps, answers)
end
test "Structs" do
answers = [
%Structs.Person{},
nil,
"Joe",
33,
{:multiple, [true, false]},
22,
]
test_all(Structs, answers)
end
test "Pattern Matching" do
answers = [
1,
2,
1,
{:multiple, [1, [2,3,4]]},
[1,2,3,4],
3,
"eggs, milk",
"Honda",
[1,2,3],
{:multiple, ["Meow", "Woof", "Eh?",]},
"dog",
"Max"
]
test_all(PatternMatching, answers)
end
test "Functions" do
answers = [
"Hello, World!",
3,
{:multiple, ["One and Two", "Only One"]},
{:multiple, ["Hello Hello Hello Hello Hello ","Hello Hello "]},
{:multiple, [:entire_list, :single_thing]},
{:multiple, ["10 is bigger than 5", "4 is not bigger than 27"]},
{:multiple, ["It was zero", "The length was 5"]},
6,
6,
100,
"Full Name"
]
test_all(Functions, answers)
end
test "Enums" do
answers = [
3,
2,
{:multiple, [true, false]},
{:multiple, [true, false]},
{:multiple, [true, false]},
[10,20,30],
[1,3],
[2],
[1,2,3],
[1,2,3,4,5],
[1,2,3],
[{1, :a}, {2, :b}, {3, :c}],
2,
nil,
:no_such_element,
6
]
test_all(Enums, answers)
end
test "Processes" do
answers = [
true,
:running,
"hola!",
:how_are_you?,
{:waited_too_long, "I am inpatient"},
false,
{:multiple, [true, false]},
{:exited, :random_reason},
true,
false,
{:exited, :normal},
{:exited, :normal}
]
test_all(Processes, answers)
end
test "Tasks" do
answers = [
10,
:ok,
nil,
false,
9,
[1,4,9,16]
]
test_all(Tasks, answers)
end
test "Agents" do
answers = [
"Hi there",
"HI THERE",
{:multiple, [["Milk"], ["Bread", "Milk"]]},
false
]
test_all(Agents, answers)
end
def test_all(module, answers) do
module.all_koans
|> Enum.zip(answers)
|> run_all(module)
end
def run_all(pairs, module) do
Enum.map(pairs, fn ({koan, answer}) -> Execute.run_koan(module, koan, [answer]) end)
end
end

View File

@@ -1 +1,17 @@
ExUnit.start()
defmodule TestHarness do
defmacro __using__(_) do
quote do
def test_all(module, answers) do
module.all_koans
|> Enum.zip(answers)
|> run_all(module)
end
def run_all(pairs, module) do
Enum.map(pairs, fn ({koan, answer}) -> Execute.run_koan(module, koan, [answer]) end)
end
end
end
end