lib/lopata/scenario.rb in lopata-0.1.13 vs lib/lopata/scenario.rb in lopata-0.1.14
- old
+ new
@@ -1,136 +1,136 @@
-require 'rspec/expectations'
-
-# Scenario runtime class.
-#
-# All the scenarios are running in context of separate Lopata::Scenario object.
-#
-class Lopata::Scenario
- include RSpec::Matchers
-
- # @private
- attr_reader :execution
-
- # @private
- def initialize(execution)
- @execution = execution
- end
-
- # Marks current step as pending
- # @example
- # it 'pending step' do
- # pending
- # expect(1).to eq 2
- # end
- #
- # Pending steps wont be failed
- def pending(message = nil)
- execution.current_step.pending!(message)
- end
-
- # @return [Hash] metadata available for current step
- # @note The metadata keys also availalbe as methods (via method_missing)
- def metadata
- execution.metadata
- end
-
- private
-
- # @private
- def method_missing(method, *args, &block)
- if execution.let_methods.include?(method)
- instance_exec(*args, &execution.let_methods[method])
- elsif metadata.keys.include?(method)
- metadata[method]
- else
- super
- end
- end
-
- # @private
- def respond_to_missing?(method, *)
- execution.let_methods.include?(method) or metadata.keys.include?(method) or super
- end
-
- # @private
- # Scenario execution and live-cycle information
- class Execution
- attr_reader :scenario, :status, :steps, :title, :current_step
-
- def initialize(title, options_title, metadata = {})
- @title = [title, options_title].compact.reject(&:empty?).join(' ')
- @metadata = metadata
- @let_methods = {}
- @status = :not_runned
- @steps = []
- @scenario = Lopata::Scenario.new(self)
- end
-
- def run
- @status = :running
- sort_steps
- world.notify_observers(:scenario_started, self)
- steps.each(&method(:run_step))
- @status = steps.any?(&:failed?) ? :failed : :passed
- world.notify_observers(:scenario_finished, self)
- cleanup
- end
-
- def run_step(step)
- return if step.skipped?
- @current_step = step
- step.run(scenario)
- skip_rest if step.failed? && step.skip_rest_on_failure?
- @current_step = nil
- end
-
- def world
- Lopata.world
- end
-
- def failed?
- status == :failed
- end
-
- def sort_steps
- @steps = steps.reject(&:teardown_group?) + steps.select(&:teardown_group?)
- end
-
- def skip_rest
- steps.select { |s| s.status == :not_runned && !s.teardown? }.each(&:skip!)
- end
-
- def metadata
- if current_step
- @metadata.merge(current_step.metadata)
- else
- @metadata
- end
- end
-
- def let_methods
- if current_step
- @let_methods.merge(current_step.let_methods)
- else
- @let_methods
- end
- end
-
- def let(method_name, &block)
- # define_singleton_method method_name, &block
- base =
- if current_step && !current_step.groups.empty?
- current_step.groups.last.let_methods
- else
- @let_methods
- end
- base[method_name] = block
- end
-
- def cleanup
- @title = nil
- @metadata = nil
- @steps = nil
- @scenario = nil
- end
- end
-end
+require 'rspec/expectations'
+
+# Scenario runtime class.
+#
+# All the scenarios are running in context of separate Lopata::Scenario object.
+#
+class Lopata::Scenario
+ include RSpec::Matchers
+
+ # @private
+ attr_reader :execution
+
+ # @private
+ def initialize(execution)
+ @execution = execution
+ end
+
+ # Marks current step as pending
+ # @example
+ # it 'pending step' do
+ # pending
+ # expect(1).to eq 2
+ # end
+ #
+ # Pending steps wont be failed
+ def pending(message = nil)
+ execution.current_step.pending!(message)
+ end
+
+ # @return [Hash] metadata available for current step
+ # @note The metadata keys also availalbe as methods (via method_missing)
+ def metadata
+ execution.metadata
+ end
+
+ private
+
+ # @private
+ def method_missing(method, *args, &block)
+ if execution.let_methods.include?(method)
+ instance_exec(*args, &execution.let_methods[method])
+ elsif metadata.keys.include?(method)
+ metadata[method]
+ else
+ super
+ end
+ end
+
+ # @private
+ def respond_to_missing?(method, *)
+ execution.let_methods.include?(method) or metadata.keys.include?(method) or super
+ end
+
+ # @private
+ # Scenario execution and live-cycle information
+ class Execution
+ attr_reader :scenario, :status, :steps, :title, :current_step
+
+ def initialize(title, options_title, metadata = {})
+ @title = [title, options_title].compact.reject(&:empty?).join(' ')
+ @metadata = metadata
+ @let_methods = {}
+ @status = :not_runned
+ @steps = []
+ @scenario = Lopata::Scenario.new(self)
+ end
+
+ def run
+ @status = :running
+ sort_steps
+ world.notify_observers(:scenario_started, self)
+ steps.each(&method(:run_step))
+ @status = steps.any?(&:failed?) ? :failed : :passed
+ world.notify_observers(:scenario_finished, self)
+ cleanup
+ end
+
+ def run_step(step)
+ return if step.skipped?
+ @current_step = step
+ step.run(scenario)
+ skip_rest if step.failed? && step.skip_rest_on_failure?
+ @current_step = nil
+ end
+
+ def world
+ Lopata.world
+ end
+
+ def failed?
+ status == :failed
+ end
+
+ def sort_steps
+ @steps = steps.reject(&:teardown_group?) + steps.select(&:teardown_group?)
+ end
+
+ def skip_rest
+ steps.select { |s| s.status == :not_runned && !s.teardown? }.each(&:skip!)
+ end
+
+ def metadata
+ if current_step
+ @metadata.merge(current_step.metadata)
+ else
+ @metadata
+ end
+ end
+
+ def let_methods
+ if current_step
+ @let_methods.merge(current_step.let_methods)
+ else
+ @let_methods
+ end
+ end
+
+ def let(method_name, &block)
+ # define_singleton_method method_name, &block
+ base =
+ if current_step && !current_step.groups.empty?
+ current_step.groups.last.let_methods
+ else
+ @let_methods
+ end
+ base[method_name] = block
+ end
+
+ def cleanup
+ @title = nil
+ @metadata = nil
+ @steps = nil
+ @scenario = nil
+ end
+ end
+end