2018-08-19 07:15:32 +00:00
|
|
|
module Spectator
|
2018-10-10 19:05:17 +00:00
|
|
|
# Base class for all types of examples.
|
|
|
|
# Concrete types must implement the `#run_inner` and `#description` methods.
|
2018-08-24 20:53:14 +00:00
|
|
|
abstract class Example
|
2018-10-10 19:05:17 +00:00
|
|
|
# Indicates whether the example has already been run.
|
2018-09-13 03:31:44 +00:00
|
|
|
getter? finished = false
|
2018-10-10 19:05:17 +00:00
|
|
|
|
|
|
|
# Group that the example belongs to.
|
2018-09-23 18:16:38 +00:00
|
|
|
getter group : ExampleGroup
|
2018-09-11 03:51:14 +00:00
|
|
|
|
2018-10-10 19:05:17 +00:00
|
|
|
# Runs the example code.
|
|
|
|
# A result is returned, which represents the outcome of the test.
|
|
|
|
# An example can be run only once.
|
|
|
|
# An exception is raised if an attempt is made to run it more than once.
|
|
|
|
def run : Result
|
|
|
|
raise "Attempted to run example more than once (#{self})" if finished?
|
|
|
|
@finished = true
|
|
|
|
run_inner
|
|
|
|
end
|
|
|
|
|
|
|
|
# Implementation-specific for running the example code.
|
|
|
|
private abstract def run_inner : Result
|
|
|
|
|
|
|
|
# Message that describes what the example tests.
|
2018-09-11 21:57:18 +00:00
|
|
|
abstract def description : String
|
2018-09-21 20:03:09 +00:00
|
|
|
|
2018-10-10 19:05:17 +00:00
|
|
|
# Creates the base of the example.
|
|
|
|
# The group should be the example group the example belongs to.
|
|
|
|
# The `sample_values` are passed to the example code.
|
2018-09-23 23:04:06 +00:00
|
|
|
def initialize(@group, sample_values : Internals::SampleValues)
|
2018-09-21 20:03:09 +00:00
|
|
|
end
|
|
|
|
|
2018-10-10 19:05:17 +00:00
|
|
|
# String representation of the example.
|
|
|
|
# This consists of the groups the example is in and the description.
|
|
|
|
# The string can be given to end-users to identify the example.
|
2018-09-24 02:24:28 +00:00
|
|
|
def to_s(io)
|
|
|
|
@group.to_s(io)
|
|
|
|
io << ' '
|
|
|
|
io << description
|
|
|
|
end
|
2018-08-19 07:15:32 +00:00
|
|
|
end
|
|
|
|
end
|