mirror of
https://gitea.invidious.io/iv-org/shard-spectator.git
synced 2024-08-15 00:53:35 +00:00
67 lines
1.7 KiB
Crystal
67 lines
1.7 KiB
Crystal
module Spectator::SpecHelpers
|
|
# Information about an example compiled and run at runtime.
|
|
struct Result
|
|
# Status of the example after running.
|
|
enum Outcome
|
|
Success
|
|
Failure
|
|
Error
|
|
Unknown
|
|
end
|
|
|
|
# Full name and description of the example.
|
|
getter name : String
|
|
|
|
# Status of the example after running.
|
|
getter outcome : Outcome
|
|
|
|
# List of expectations ran in the example.
|
|
getter expectations : Array(Expectation)
|
|
|
|
# Creates the result.
|
|
def initialize(@name, @outcome, @expectations)
|
|
end
|
|
|
|
# Checks if the example was successful.
|
|
def success?
|
|
outcome.success?
|
|
end
|
|
|
|
# :ditto:
|
|
def successful?
|
|
outcome.success?
|
|
end
|
|
|
|
# Checks if the example failed, but did not error.
|
|
def failure?
|
|
outcome.failure?
|
|
end
|
|
|
|
# Checks if the example encountered an error.
|
|
def error?
|
|
outcome.error?
|
|
end
|
|
|
|
# Extracts the result information from a `JSON::Any` object.
|
|
def self.from_json_any(object : JSON::Any)
|
|
name = object["description"].as_s
|
|
outcome = parse_outcome_string(object["status"].as_s)
|
|
expectations = if (list = object["expectations"].as_a?)
|
|
list.map { |e| Expectation.from_json_any(e) }
|
|
else
|
|
[] of Expectation
|
|
end
|
|
new(name, outcome, expectations)
|
|
end
|
|
|
|
# Converts a result string, such as "fail" to an enum value.
|
|
private def self.parse_outcome_string(string)
|
|
case string
|
|
when /pass/i then Outcome::Success
|
|
when /fail/i then Outcome::Failure
|
|
when /error/i then Outcome::Error
|
|
else Outcome::Unknown
|
|
end
|
|
end
|
|
end
|
|
end
|