mirror of
https://gitea.invidious.io/iv-org/shard-spectator.git
synced 2024-08-15 00:53:35 +00:00
Remove unused and deprecated types
This commit is contained in:
parent
2e8036d230
commit
fbd9713d52
7 changed files with 0 additions and 356 deletions
|
@ -1,41 +0,0 @@
|
|||
module Spectator
|
||||
# Collection of checks that run before and after tests.
|
||||
# The pre-conditions can be used to verify
|
||||
# that the SUT is in an expected state prior to testing.
|
||||
# The post-conditions can be used to verify
|
||||
# that the SUT is in an expected state after tests have finished.
|
||||
# Each check is just a `Proc` (code block) that runs when invoked.
|
||||
class ExampleConditions
|
||||
# Creates an empty set of conditions.
|
||||
# This will effectively run nothing extra while running a test.
|
||||
def self.empty
|
||||
new(
|
||||
[] of TestMetaMethod,
|
||||
[] of TestMetaMethod
|
||||
)
|
||||
end
|
||||
|
||||
# Creates a new set of conditions.
|
||||
def initialize(
|
||||
@pre_conditions : Array(TestMetaMethod),
|
||||
@post_conditions : Array(TestMetaMethod)
|
||||
)
|
||||
end
|
||||
|
||||
# Runs all pre-condition checks.
|
||||
# These should be run before every test.
|
||||
def run_pre_conditions(wrapper : TestWrapper, example : Example)
|
||||
@pre_conditions.each do |hook|
|
||||
wrapper.call(hook, example)
|
||||
end
|
||||
end
|
||||
|
||||
# Runs all post-condition checks.
|
||||
# These should be run after every test.
|
||||
def run_post_conditions(wrapper : TestWrapper, example : Example)
|
||||
@post_conditions.each do |hook|
|
||||
wrapper.call(hook, example)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
|
@ -1,75 +0,0 @@
|
|||
module Spectator
|
||||
alias TestMetaMethod = ::SpectatorTest, Example ->
|
||||
|
||||
# Collection of hooks that run at various times throughout testing.
|
||||
# A hook is just a `Proc` (code block) that runs at a specified time.
|
||||
class ExampleHooks
|
||||
# Creates an empty set of hooks.
|
||||
# This will effectively run nothing extra while running a test.
|
||||
def self.empty
|
||||
new(
|
||||
[] of ->,
|
||||
[] of TestMetaMethod,
|
||||
[] of ->,
|
||||
[] of TestMetaMethod,
|
||||
[] of ::SpectatorTest, Proc(Nil) ->
|
||||
)
|
||||
end
|
||||
|
||||
# Creates a new set of hooks.
|
||||
def initialize(
|
||||
@before_all : Array(->),
|
||||
@before_each : Array(TestMetaMethod),
|
||||
@after_all : Array(->),
|
||||
@after_each : Array(TestMetaMethod),
|
||||
@around_each : Array(::SpectatorTest, Proc(Nil) ->)
|
||||
)
|
||||
end
|
||||
|
||||
# Runs all "before-all" hooks.
|
||||
# These hooks should be run once before all examples in the group start.
|
||||
def run_before_all
|
||||
@before_all.each &.call
|
||||
end
|
||||
|
||||
# Runs all "before-each" hooks.
|
||||
# These hooks should be run every time before each example in a group.
|
||||
def run_before_each(wrapper : TestWrapper, example : Example)
|
||||
@before_each.each do |hook|
|
||||
wrapper.call(hook, example)
|
||||
end
|
||||
end
|
||||
|
||||
# Runs all "after-all" hooks.
|
||||
# These hooks should be run once after all examples in group finish.
|
||||
def run_after_all
|
||||
@after_all.each &.call
|
||||
end
|
||||
|
||||
# Runs all "after-all" hooks.
|
||||
# These hooks should be run every time after each example in a group.
|
||||
def run_after_each(wrapper : TestWrapper, example : Example)
|
||||
@after_each.each do |hook|
|
||||
wrapper.call(hook, example)
|
||||
end
|
||||
end
|
||||
|
||||
# Creates a proc that runs the "around-each" hooks
|
||||
# in addition to a block passed to this method.
|
||||
# To call the block and all "around-each" hooks,
|
||||
# just invoke `Proc#call` on the returned proc.
|
||||
def wrap_around_each(test, block : ->)
|
||||
wrapper = block
|
||||
# Must wrap in reverse order,
|
||||
# otherwise hooks will run in the wrong order.
|
||||
@around_each.reverse_each do |hook|
|
||||
wrapper = wrap_foo(test, hook, wrapper)
|
||||
end
|
||||
wrapper
|
||||
end
|
||||
|
||||
private def wrap_foo(test, hook, wrapper)
|
||||
->{ hook.call(test, wrapper) }
|
||||
end
|
||||
end
|
||||
end
|
|
@ -1,54 +0,0 @@
|
|||
require "./example_group"
|
||||
|
||||
module Spectator
|
||||
# A collection of examples and other example groups.
|
||||
# This group can be nested under other groups.
|
||||
class NestedExampleGroup < ExampleGroup
|
||||
# Description from the user of the group's contents.
|
||||
# This is a symbol when referencing a type.
|
||||
getter description : Symbol | String
|
||||
|
||||
getter source : Source
|
||||
|
||||
# Group that this is nested in.
|
||||
getter parent : ExampleGroup
|
||||
|
||||
# Creates a new example group.
|
||||
# The *description* argument is a description from the user.
|
||||
# The *parent* should contain this group.
|
||||
# After creating this group, the parent's children should be updated.
|
||||
# The parent's children must contain this group,
|
||||
# otherwise there may be unexpected behavior.
|
||||
# The *hooks* are stored to be triggered later.
|
||||
def initialize(@description, @source, @parent, context)
|
||||
super(context)
|
||||
end
|
||||
|
||||
# Indicates wheter the group references a type.
|
||||
def symbolic? : Bool
|
||||
@description.is_a?(Symbol)
|
||||
end
|
||||
|
||||
# Creates a string representation of the group.
|
||||
# The string consists of `#description` appended to the parent.
|
||||
# This results in a string like:
|
||||
# ```text
|
||||
# Foo#bar does something
|
||||
# ```
|
||||
# for the following structure:
|
||||
# ```
|
||||
# describe Foo do
|
||||
# describe "#bar" do
|
||||
# it "does something" do
|
||||
# # ...
|
||||
# end
|
||||
# end
|
||||
# end
|
||||
# ```
|
||||
def to_s(io)
|
||||
parent.to_s(io)
|
||||
io << ' ' unless (symbolic? || parent.is_a?(RootExampleGroup)) && parent.symbolic?
|
||||
io << description
|
||||
end
|
||||
end
|
||||
end
|
|
@ -1,12 +0,0 @@
|
|||
require "./example"
|
||||
|
||||
module Spectator
|
||||
# Common class for all examples marked as pending.
|
||||
# This class will not run example code.
|
||||
class PendingExample < Example
|
||||
# Returns a pending result.
|
||||
private def run_impl : Result
|
||||
PendingResult.new(self)
|
||||
end
|
||||
end
|
||||
end
|
|
@ -1,28 +0,0 @@
|
|||
require "./example_group"
|
||||
|
||||
module Spectator
|
||||
# Top-most group of examples and sub-groups.
|
||||
# The root has no parent.
|
||||
class RootExampleGroup < ExampleGroup
|
||||
# Dummy value - this should never be used.
|
||||
def description : Symbol | String
|
||||
:root
|
||||
end
|
||||
|
||||
def source : Source
|
||||
Source.new(__FILE__, __LINE__)
|
||||
end
|
||||
|
||||
# Indicates that the group is symbolic.
|
||||
def symbolic? : Bool
|
||||
true
|
||||
end
|
||||
|
||||
# Does nothing.
|
||||
# This prevents the root group
|
||||
# from showing up in output.
|
||||
def to_s(io)
|
||||
# ...
|
||||
end
|
||||
end
|
||||
end
|
|
@ -1,82 +0,0 @@
|
|||
require "./example"
|
||||
|
||||
module Spectator
|
||||
# Includes all the logic for running example hooks,
|
||||
# the example code, and capturing a result.
|
||||
class RunnableExample < Example
|
||||
# Runs the example, hooks, and captures the result
|
||||
# and translates to a usable result.
|
||||
def run_impl : Result
|
||||
result = capture_result
|
||||
expectations = Harness.current.expectations
|
||||
translate_result(result, expectations)
|
||||
end
|
||||
|
||||
# Runs all hooks and the example code.
|
||||
# A captured result is returned.
|
||||
private def capture_result
|
||||
context = group.context
|
||||
ResultCapture.new.tap do |result|
|
||||
context.run_before_hooks(self)
|
||||
run_example(result)
|
||||
@finished = true
|
||||
context.run_after_hooks(self)
|
||||
run_deferred(result) unless result.error
|
||||
end
|
||||
end
|
||||
|
||||
# Runs the test code and captures the result.
|
||||
private def run_example(result)
|
||||
context = group.context
|
||||
wrapper = test_wrapper.around_hook(context)
|
||||
|
||||
# Capture how long it takes to run the test code.
|
||||
result.elapsed = Time.measure do
|
||||
begin
|
||||
context.run_pre_conditions(self)
|
||||
wrapper.call
|
||||
context.run_post_conditions(self)
|
||||
rescue ex # Catch all errors and handle them later.
|
||||
result.error = ex
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
# Runs the deferred blocks of code and captures the result.
|
||||
private def run_deferred(result)
|
||||
result.elapsed += Time.measure do
|
||||
begin
|
||||
Harness.current.run_deferred
|
||||
rescue ex # Catch all errors and handle them later.
|
||||
result.error = ex
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
# Creates a result instance from captured result information.
|
||||
private def translate_result(result, expectations)
|
||||
case (error = result.error)
|
||||
when Nil
|
||||
# If no errors occurred, then the example ran successfully.
|
||||
SuccessfulResult.new(self, result.elapsed, expectations)
|
||||
when ExpectationFailed
|
||||
# If a required expectation fails, then a `ExpectationRailed` exception will be raised.
|
||||
FailedResult.new(self, result.elapsed, expectations, error)
|
||||
else
|
||||
# Any other exception that is raised is unexpected and is an errored result.
|
||||
ErroredResult.new(self, result.elapsed, expectations, error)
|
||||
end
|
||||
end
|
||||
|
||||
# Utility class for storing parts of the result while the example is running.
|
||||
private class ResultCapture
|
||||
# Length of time that it took to run the test code.
|
||||
# This does not include hooks.
|
||||
property elapsed = Time::Span.zero
|
||||
|
||||
# The error that occurred while running the test code.
|
||||
# If no error occurred, this will be nil.
|
||||
property error : Exception?
|
||||
end
|
||||
end
|
||||
end
|
|
@ -1,64 +0,0 @@
|
|||
require "./typed_value_wrapper"
|
||||
require "./value_wrapper"
|
||||
|
||||
module Spectator
|
||||
# Collection of test values supplied to examples.
|
||||
# Each value is labeled by a symbol that the example knows.
|
||||
# The values also come with a name that can be given to humans.
|
||||
struct TestValues
|
||||
# Creates an empty set of sample values.
|
||||
def self.empty
|
||||
new({} of Symbol => Entry)
|
||||
end
|
||||
|
||||
# Creates a collection of sample values.
|
||||
protected def initialize(@values = {} of Symbol => Entry)
|
||||
end
|
||||
|
||||
# Adds a new value by duplicating the current set and adding to it.
|
||||
# The new sample values with the additional value is returned.
|
||||
# The original set of sample values is not modified.
|
||||
def add(id : Symbol, name : String, value) : TestValues
|
||||
wrapper = TypedValueWrapper.new(value)
|
||||
TestValues.new(@values.merge({
|
||||
id => Entry.new(name, wrapper),
|
||||
}))
|
||||
end
|
||||
|
||||
# Retrieves the wrapper for a value.
|
||||
# The symbol for the value is used for retrieval.
|
||||
def get_wrapper(id : Symbol)
|
||||
@values[id].wrapper
|
||||
end
|
||||
|
||||
# Retrieves a value.
|
||||
# The symbol for the value is used for retrieval.
|
||||
# The value's type must be provided so that the wrapper can be cast.
|
||||
def get_value(id : Symbol, value_type : T.class) : T forall T
|
||||
get_wrapper(id).as(TypedValueWrapper(T)).value
|
||||
end
|
||||
|
||||
# Iterates over all values and yields them.
|
||||
def each
|
||||
@values.each_value do |entry|
|
||||
yield entry
|
||||
end
|
||||
end
|
||||
|
||||
# Represents a single value in the set.
|
||||
private struct Entry
|
||||
# Human-friendly name for the value.
|
||||
getter name : String
|
||||
|
||||
# Wrapper for the value.
|
||||
getter wrapper : ValueWrapper
|
||||
|
||||
# Creates a new value entry.
|
||||
def initialize(@name, @wrapper)
|
||||
end
|
||||
end
|
||||
|
||||
# This must be after `Entry` is defined.
|
||||
include Enumerable(Entry)
|
||||
end
|
||||
end
|
Loading…
Reference in a new issue