Add base classes for defining example run order

This commit is contained in:
Michael Miller 2018-08-30 21:32:13 -06:00
parent c100651680
commit 9fb1a3b664
4 changed files with 21 additions and 3 deletions

View file

@ -16,6 +16,6 @@ module Spectator
end
at_exit do
Runner.new(ALL_EXAMPLES).run
Runner.new(ALL_EXAMPLES, DefinedRunOrder.new).run
end
end

View file

@ -0,0 +1,9 @@
require "./run_order"
module Spectator
private class DefinedRunOrder < RunOrder
def sort(a : Example, b : Example) : Int32
-1
end
end
end

View file

@ -0,0 +1,5 @@
module Spectator
private abstract class RunOrder
abstract def sort(a : Example, b : Example) : Int32
end
end

View file

@ -5,17 +5,21 @@ module Spectator
class Runner
getter results : Enumerable(ExampleResult)
def initialize(@examples : Enumerable(Example))
def initialize(@examples : Enumerable(Example), @run_order : RunOrder)
@results = Array(ExampleResult).new(@examples.size)
end
def run : Nil
@examples.each do |example|
sorted_examples.each do |example|
result = run_example(example)
pp result
end
end
private def sorted_examples
@examples.to_a.sort { |a, b| @run_order.sort(a, b) }
end
private def run_example(example)
example.run
SuccessfulExampleResult.new(example)