shard-spectator/src/spectator/result.cr

41 lines
1.5 KiB
Crystal
Raw Normal View History

2018-08-31 03:07:14 +00:00
module Spectator
2018-11-16 16:48:35 +00:00
# Base class that represents the outcome of running an example.
# Sub-classes contain additional information specific to the type of result.
2018-09-15 19:25:11 +00:00
abstract class Result
2018-11-16 16:48:35 +00:00
# Example that was run that this result is for.
2018-08-31 03:07:14 +00:00
getter example : Example
2018-11-16 16:48:35 +00:00
# Constructs the base of the result.
# The *example* should refer to the example that was run
2018-11-16 16:48:35 +00:00
# and that this result is for.
def initialize(@example)
2018-08-31 03:07:14 +00:00
end
# Calls the corresponding method for the type of result.
# This is used to avoid placing if or case-statements everywhere based on type.
# Each sub-class implements this method by calling the correct method on *interface*.
abstract def call(interface)
2019-02-21 04:00:22 +00:00
# Calls the corresponding method for the type of result.
# This is used to avoid placing if or case-statements everywhere based on type.
# Each sub-class implements this method by calling the correct method on *interface*.
# This variation takes a block, which is passed the result.
# The value returned from the block will be returned by this method.
abstract def call(interface, &block : Result -> _)
# Creates a JSON object from the result information.
def to_json(json : ::JSON::Builder)
json.object do
add_json_fields(json)
end
end
# Adds the common fields for a result to a JSON builder.
private def add_json_fields(json : ::JSON::Builder)
2019-03-23 03:43:33 +00:00
json.field("name", example)
json.field("location", example.source)
json.field("result", to_s)
end
2018-08-31 03:07:14 +00:00
end
end