Generate context one or more times

This is necessary for iterative (sample) groups so they don't share a 
context.
This commit is contained in:
Michael Miller 2021-06-19 11:33:26 -06:00
parent 4b8d28c916
commit 44ade24fb7
No known key found for this signature in database
GPG key ID: FB9F12F7C646A4AD
2 changed files with 4 additions and 3 deletions

View file

@ -52,7 +52,7 @@ module Spectator::DSL
::Spectator::DSL::Builder.add_example( ::Spectator::DSL::Builder.add_example(
_spectator_example_name(\{{what}}), _spectator_example_name(\{{what}}),
::Spectator::Location.new(\{{block.filename}}, \{{block.line_number}}, \{{block.end_line_number}}), ::Spectator::Location.new(\{{block.filename}}, \{{block.line_number}}, \{{block.end_line_number}}),
new.as(::Spectator::Context), -> { new.as(::Spectator::Context) },
\%metadata \%metadata
) do |example| ) do |example|
example.with_context(\{{@type.name}}) do example.with_context(\{{@type.name}}) do

View file

@ -109,7 +109,7 @@ module Spectator
# #
# The *location* optionally defined where the example originates in source code. # The *location* optionally defined where the example originates in source code.
# #
# The *context* is an instance of the context the test code should run in. # The *context_builder* is a proc that creates a context the test code should run in.
# See `Context` for more information. # See `Context` for more information.
# #
# A set of *metadata* can be used for filtering and modifying example behavior. # A set of *metadata* can be used for filtering and modifying example behavior.
@ -119,9 +119,10 @@ module Spectator
# It will be yielded two arguments - the example created by this method, and the *context* argument. # It will be yielded two arguments - the example created by this method, and the *context* argument.
# The return value of the block is ignored. # The return value of the block is ignored.
# It is expected that the test code runs when the block is called. # It is expected that the test code runs when the block is called.
def add_example(name, location, context, metadata = Metadata.new, &block : Example -> _) def add_example(name, location, context_builder, metadata = Metadata.new, &block : Example -> _)
Log.trace { "Add example: #{name} @ #{location}; metadata: #{metadata}" } Log.trace { "Add example: #{name} @ #{location}; metadata: #{metadata}" }
current_group.create_child do |group| current_group.create_child do |group|
context = context_builder.call
Example.new(context, block, name, location, group, metadata) Example.new(context, block, name, location, group, metadata)
end end
end end