Merge pull request #74 from ukutaht/split-test-harness
Create a test file for each of the koan modules
This commit is contained in:
@@ -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) == ___
|
||||
|
27
test/koans/enum_koans_test.exs
Normal file
27
test/koans/enum_koans_test.exs
Normal 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
|
18
test/koans/equalities_koan_test.exs
Normal file
18
test/koans/equalities_koan_test.exs
Normal 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
|
22
test/koans/functions_koans_test.exs
Normal file
22
test/koans/functions_koans_test.exs
Normal 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
|
25
test/koans/lists_koans_test.exs
Normal file
25
test/koans/lists_koans_test.exs
Normal 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
|
22
test/koans/maps_koans_test.exs
Normal file
22
test/koans/maps_koans_test.exs
Normal 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
|
23
test/koans/patterns_koans_test.exs
Normal file
23
test/koans/patterns_koans_test.exs
Normal 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
|
23
test/koans/processes_koans_test.exs
Normal file
23
test/koans/processes_koans_test.exs
Normal 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
|
20
test/koans/strings_koan_test.exs
Normal file
20
test/koans/strings_koan_test.exs
Normal 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
|
17
test/koans/structs_koans_test.exs
Normal file
17
test/koans/structs_koans_test.exs
Normal 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
|
17
test/koans/tasks_koans_test.exs
Normal file
17
test/koans/tasks_koans_test.exs
Normal 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
|
19
test/koans/tuples_koans_test.exs
Normal file
19
test/koans/tuples_koans_test.exs
Normal 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
|
@@ -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
|
@@ -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
|
||||
|
Reference in New Issue
Block a user