diff --git a/src/spectator.cr b/src/spectator.cr index 03d9b23..3f49b84 100644 --- a/src/spectator.cr +++ b/src/spectator.cr @@ -16,6 +16,6 @@ module Spectator end at_exit do - Runner.new(ALL_EXAMPLES).run + Runner.new(ALL_EXAMPLES, DefinedRunOrder.new).run end end diff --git a/src/spectator/defined_run_order.cr b/src/spectator/defined_run_order.cr new file mode 100644 index 0000000..617dba1 --- /dev/null +++ b/src/spectator/defined_run_order.cr @@ -0,0 +1,9 @@ +require "./run_order" + +module Spectator + private class DefinedRunOrder < RunOrder + def sort(a : Example, b : Example) : Int32 + -1 + end + end +end diff --git a/src/spectator/run_order.cr b/src/spectator/run_order.cr new file mode 100644 index 0000000..96ca03b --- /dev/null +++ b/src/spectator/run_order.cr @@ -0,0 +1,5 @@ +module Spectator + private abstract class RunOrder + abstract def sort(a : Example, b : Example) : Int32 + end +end diff --git a/src/spectator/runner.cr b/src/spectator/runner.cr index 6b2584f..ff721aa 100644 --- a/src/spectator/runner.cr +++ b/src/spectator/runner.cr @@ -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)