class Cucumber::Runtime
def accept_options?(factory)
def accept_options?(factory) factory.instance_method(:initialize).arity > 1 end
def begin_scenario(test_case)
def begin_scenario(test_case) @support_code.fire_hook(:begin_scenario, test_case) end
def configure(new_configuration)
def configure(new_configuration) @configuration = Configuration.new(new_configuration) @support_code.configure(@configuration) end
def create_formatter(factory, formatter_options, path_or_io, cli_options)
def create_formatter(factory, formatter_options, path_or_io, cli_options) if !legacy_formatter?(factory) if accept_options?(factory) return factory.new(@configuration, formatter_options) if path_or_io.nil? return factory.new(@configuration.with_options(out_stream: path_or_io), formatter_options) else return factory.new(@configuration) if path_or_io.nil? return factory.new(@configuration.with_options(out_stream: path_or_io)) end end results = Formatter::LegacyApi::Results.new runtime_facade = Formatter::LegacyApi::RuntimeFacade.new(results, @support_code, @configuration) formatter = factory.new(runtime_facade, path_or_io, cli_options) Formatter::LegacyApi::Adapter.new( Formatter::IgnoreMissingMessages.new(formatter), results, @configuration ) end
def doc_string(string_without_triple_quotes, content_type = '', _line_offset = 0)
Returns Ast::DocString for +string_without_triple_quotes+.
def doc_string(string_without_triple_quotes, content_type = '', _line_offset = 0) location = Core::Ast::Location.of_caller Core::Ast::DocString.new(string_without_triple_quotes, content_type, location) end
def dry_run?
def dry_run? @configuration.dry_run? end
def end_scenario(_scenario)
def end_scenario(_scenario) @support_code.fire_hook(:end_scenario) end
def fail_fast_report
def fail_fast_report @fail_fast_report ||= Formatter::FailFast.new(@configuration) end
def failure?
def failure? if @configuration.wip? summary_report.test_cases.total_passed > 0 else !summary_report.ok?(@configuration.strict) end end
def feature_files
def feature_files filespecs.files end
def features
def features @features ||= feature_files.map do |path| source = NormalisedEncodingFile.read(path) @configuration.notify :gherkin_source_read, path, source Cucumber::Core::Gherkin::Document.new(path, source) end end
def features_paths
def features_paths @configuration.paths end
def filespecs
def filespecs @filespecs ||= FileSpecs.new(@configuration.feature_files) end
def filters
def filters tag_expressions = @configuration.tag_expressions name_regexps = @configuration.name_regexps tag_limits = @configuration.tag_limits [].tap do |filters| filters << Filters::TagLimits.new(tag_limits) if tag_limits.any? filters << Cucumber::Core::Test::TagFilter.new(tag_expressions) filters << Cucumber::Core::Test::NameFilter.new(name_regexps) filters << Cucumber::Core::Test::LocationsFilter.new(filespecs.locations) filters << Filters::Randomizer.new(@configuration.seed) if @configuration.randomize? # TODO: can we just use Glue::RegistryAndMore's step definitions directly? step_match_search = StepMatchSearch.new(@support_code.registry.method(:step_matches), @configuration) filters << Filters::ActivateSteps.new(step_match_search, @configuration) @configuration.filters.each do |filter| filters << filter end unless configuration.dry_run? filters << Filters::ApplyAfterStepHooks.new(@support_code) filters << Filters::ApplyBeforeHooks.new(@support_code) filters << Filters::ApplyAfterHooks.new(@support_code) filters << Filters::ApplyAroundHooks.new(@support_code) filters << Filters::BroadcastTestRunStartedEvent.new(@configuration) filters << Filters::Quit.new filters << Filters::Retry.new(@configuration) # need to do this last so it becomes the first test step filters << Filters::PrepareWorld.new(self) end end end
def fire_after_configuration_hook #:nodoc
def fire_after_configuration_hook #:nodoc @support_code.fire_hook(:after_configuration, @configuration) end
def formatters
def formatters @formatters ||= @configuration.formatter_factories do |factory, formatter_options, path_or_io, options| create_formatter(factory, formatter_options, path_or_io, options) end end
def initialize(configuration = Configuration.default)
def initialize(configuration = Configuration.default) @configuration = Configuration.new(configuration) @support_code = SupportCode.new(self, @configuration) @results = Formatter::LegacyApi::Results.new end
def install_wire_plugin
def install_wire_plugin Cucumber::Wire::Plugin.new(@configuration).install if @configuration.all_files_to_load.any? { |f| f =~ %r{\.wire$} } end
def legacy_formatter?(factory)
def legacy_formatter?(factory) factory.instance_method(:initialize).arity > 2 end
def load_step_definitions
def load_step_definitions files = @configuration.support_to_load + @configuration.step_defs_to_load @support_code.load_files!(files) end
def log
def log Cucumber.logger end
def report
def report return @report if @report reports = [summary_report] + formatters reports << fail_fast_report if @configuration.fail_fast? @report ||= Formatter::Fanout.new(reports) end
def run!
def run! load_step_definitions install_wire_plugin fire_after_configuration_hook # TODO: can we remove this state? self.visitor = report receiver = Test::Runner.new(@configuration.event_bus) compile features, receiver, filters @configuration.notify :test_run_finished end
def scenarios(status = nil)
def scenarios(status = nil) @results.scenarios(status) end
def steps(status = nil)
def steps(status = nil) @results.steps(status) end
def summary_report
def summary_report @summary_report ||= Core::Report::Summary.new(@configuration.event_bus) end
def unmatched_step_definitions
def unmatched_step_definitions @support_code.unmatched_step_definitions end