class Riot::Situation
A {Riot::Situation} is virtually a stack frame for a single context run. The intent is for all blocks to be evaluated against an instance of a Situation. Given the following superfluous context:
context "Foo" do # block-1 setup do # block-2 {:bar => "baz"} end asserts "its hash" do # block-3 topic end.equals do # block-4 {:bar => "baz"} end end # Foo
In this example, block-1 will be evaluated against a {Riot::Context} instance. Whereas block-2, block-3, and block-4 will all be evaluated against the same Situation instance. Situation instances (situations) are bound to a single context run; they are not shared across context runs, regardless of their position in the test tree structure.
What is gained from doing it this way is:
-
variables, methods, etc. set in one situation do not contaminate any others
-
variables, methods, etc. defined during a context run do not stick with the context itself
-
which means that testing state is independent of the test definitions themselves
Public Instance Methods
Anonymously evaluates any block given to it against the current instance of
self
. This is how {Riot::Assertion assertion} and
{Riot::AssertionMacro assertion macro} blocks are evaluated, for instance.
@param [lambda] &block the block to evaluate against self
@return [Object] whatever the block would have returned
# File lib/riot/situation.rb, line 60 def evaluate(&block) self.instance_eval(&block) end
This is where a defined helper is born. A method is defined against the
current instance of self
. This method will not be defined on
any other instances of Situation created
afterwards.
@param [Symbol, String] name the name of the helper being defined @param [lambda] &block the code to execute whennever the helper is called
# File lib/riot/situation.rb, line 50 def helper(name, &block) (class << self; self; end).send(:define_method, name, &block) end
This is where a setup block is actually evaluated and the
topic
tracked.
@param [lambda] &block a setup block @return [Object] the current topic value
# File lib/riot/situation.rb, line 41 def setup(&block) @_topic = self.instance_eval(&block) end
Returns the currrently tracked value of topic
@return [Object] whatever the topic is currently set to
# File lib/riot/situation.rb, line 33 def topic @_topic ||= nil end