|
- # frozen_string_literal: true
-
- module Cucumber
- module Formatter
- module SpecHelperDsl
- attr_reader :feature_content, :step_defs, :feature_filename
-
- def define_feature(string, feature_file = 'spec.feature')
- @feature_content = string
- @feature_filename = feature_file
- end
-
- def define_steps(&block)
- @step_defs = block
- end
- end
-
- require 'cucumber/core'
- module SpecHelper
- include Core
-
- def run_defined_feature
- define_steps
- actual_runtime.visitor = Fanout.new([@formatter])
- receiver = Test::Runner.new(event_bus)
-
- event_bus.gherkin_source_read(gherkin_doc.uri, gherkin_doc.body)
-
- compile [gherkin_doc], receiver, filters, event_bus
-
- event_bus.test_run_finished
- end
-
- def filters
- # TODO: Remove duplication with runtime.rb#filters
- [
- Filters::ActivateSteps.new(
- StepMatchSearch.new(actual_runtime.support_code.registry.method(:step_matches), actual_runtime.configuration),
- actual_runtime.configuration
- ),
- Filters::ApplyAfterStepHooks.new(actual_runtime.support_code),
- Filters::ApplyBeforeHooks.new(actual_runtime.support_code),
- Filters::ApplyAfterHooks.new(actual_runtime.support_code),
- Filters::ApplyAroundHooks.new(actual_runtime.support_code),
- Filters::BroadcastTestCaseReadyEvent.new(actual_runtime.configuration),
- Filters::BroadcastTestRunStartedEvent.new(actual_runtime.configuration),
- Filters::PrepareWorld.new(actual_runtime)
- ]
- end
-
- require 'cucumber/core/gherkin/document'
- def gherkin_doc
- Core::Gherkin::Document.new(self.class.feature_filename, gherkin)
- end
-
- def gherkin
- self.class.feature_content || raise('No feature content defined!')
- end
-
- def actual_runtime
- @actual_runtime ||= Runtime.new(options)
- end
-
- def event_bus
- actual_runtime.configuration.event_bus
- end
-
- def define_steps
- step_defs = self.class.step_defs
-
- return unless step_defs
-
- dsl = Object.new
- dsl.extend Glue::Dsl
- dsl.instance_exec &step_defs
- end
-
- def options
- {}
- end
- end
- end
- end
|