class KnapsackPro::Adapters::CucumberAdapter

Constants

TEST_DIR_PATTERN

Public Class Methods

test_path(object) click to toggle source
# File lib/knapsack_pro/adapters/cucumber_adapter.rb, line 8
def self.test_path(object)
  if ::Cucumber::VERSION.to_i >= 2
    test_case = object
    test_case.location.file
  else
    if object.respond_to?(:scenario_outline)
      if object.scenario_outline.respond_to?(:feature)
        # Cucumber < 1.3
        object.scenario_outline.feature.file
      else
        # Cucumber >= 1.3
        object.scenario_outline.file
      end
    else
      if object.respond_to?(:feature)
        # Cucumber < 1.3
        object.feature.file
      else
        # Cucumber >= 1.3
        object.file
      end
    end
  end
end

Public Instance Methods

bind_after_queue_hook() click to toggle source
# File lib/knapsack_pro/adapters/cucumber_adapter.rb, line 68
def bind_after_queue_hook
  ::Kernel.at_exit do
    KnapsackPro::Hooks::Queue.call_after_subset_queue
    KnapsackPro::Report.save_subset_queue_to_file
  end
end
bind_before_queue_hook() click to toggle source
# File lib/knapsack_pro/adapters/cucumber_adapter.rb, line 58
def bind_before_queue_hook
  Around do |object, block|
    unless ENV['KNAPSACK_PRO_BEFORE_QUEUE_HOOK_CALLED']
      KnapsackPro::Hooks::Queue.call_before_queue
      ENV['KNAPSACK_PRO_BEFORE_QUEUE_HOOK_CALLED'] = 'true'
    end
    block.call
  end
end
bind_save_report(latest_error = nil) click to toggle source
# File lib/knapsack_pro/adapters/cucumber_adapter.rb, line 46
def bind_save_report(latest_error = nil)
  ::Kernel.at_exit do
    # $! is latest error message
    latest_error = (latest_error || $!)
    exit_status = latest_error.status if latest_error.is_a?(SystemExit)
    # saving report makes API call which changes exit status
    # from cucumber so we need to preserve cucumber exit status
    KnapsackPro::Report.save
    ::Kernel.exit exit_status if exit_status
  end
end
bind_time_tracker() click to toggle source
# File lib/knapsack_pro/adapters/cucumber_adapter.rb, line 33
def bind_time_tracker
  Around do |object, block|
    KnapsackPro.tracker.current_test_path = KnapsackPro::Adapters::CucumberAdapter.test_path(object)
    KnapsackPro.tracker.start_timer
    block.call
    KnapsackPro.tracker.stop_timer
  end

  ::Kernel.at_exit do
    KnapsackPro.logger.debug(KnapsackPro::Presenter.global_time)
  end
end

Private Instance Methods

Around(*tag_expressions, &proc) click to toggle source
# File lib/knapsack_pro/adapters/cucumber_adapter.rb, line 77
def Around(*tag_expressions, &proc)
  if ::Cucumber::VERSION.to_i >= 3
    ::Cucumber::Glue::Dsl.register_rb_hook('around', tag_expressions, proc)
  else
    ::Cucumber::RbSupport::RbDsl.register_rb_hook('around', tag_expressions, proc)
  end
end