shard-spectator/src/spectator/example.cr

43 lines
1.4 KiB
Crystal
Raw Normal View History

2018-08-19 07:15:32 +00:00
module Spectator
# Base class for all types of examples.
# Concrete types must implement the `#run_inner` and `#description` methods.
abstract class Example
# Indicates whether the example has already been run.
2018-09-13 03:31:44 +00:00
getter? finished = false
# 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
# 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
# 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)
end
# 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