cucumber-rails 0.4.0.beta.1 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (49) hide show
  1. data/.rvmrc +1 -1
  2. data/HACKING.rdoc +6 -8
  3. data/History.txt +18 -2
  4. data/README.rdoc +8 -10
  5. data/cucumber-rails.gemspec +10 -6
  6. data/dev_tasks/cucumber.rake +1 -1
  7. data/features/allow_rescue.feature +61 -0
  8. data/features/inspect_query_string.feature +36 -0
  9. data/features/install_cucumber_rails.feature +16 -0
  10. data/features/mongoid.feature +53 -0
  11. data/features/named_selectors.feature +33 -0
  12. data/features/no_database.feature +69 -0
  13. data/features/rerun_profile.feature +1 -2
  14. data/features/rest_api.feature +46 -0
  15. data/features/routing.feature +21 -0
  16. data/features/select_dates.feature +25 -0
  17. data/features/step_definitions/cucumber_rails_steps.rb +65 -4
  18. data/features/support/env.rb +5 -1
  19. data/generators/cucumber/cucumber_generator.rb +1 -27
  20. data/lib/cucumber/rails.rb +3 -20
  21. data/lib/cucumber/rails/capybara.rb +7 -0
  22. data/lib/cucumber/rails/capybara/select_dates_and_times.rb +21 -14
  23. data/lib/cucumber/rails/hooks.rb +3 -0
  24. data/lib/cucumber/rails/hooks/database_cleaner.rb +16 -3
  25. data/lib/cucumber/rails/rspec.rb +2 -0
  26. data/lib/cucumber/rails/version.rb +14 -9
  27. data/lib/cucumber/rails/world.rb +6 -0
  28. data/lib/cucumber/rails2.rb +1 -1
  29. data/lib/cucumber/rails3.rb +7 -7
  30. data/lib/generators/cucumber/install/install_base.rb +11 -51
  31. data/templates/install/config/cucumber.yml.erb +1 -1
  32. data/templates/install/step_definitions/capybara_steps.rb.erb +63 -85
  33. data/templates/install/step_definitions/web_steps_cs.rb.erb +11 -20
  34. data/templates/install/step_definitions/web_steps_da.rb.erb +11 -20
  35. data/templates/install/step_definitions/web_steps_es.rb.erb +11 -20
  36. data/templates/install/step_definitions/web_steps_ja.rb.erb +1 -0
  37. data/templates/install/step_definitions/web_steps_ko.rb.erb +1 -0
  38. data/templates/install/step_definitions/web_steps_no.rb.erb +11 -20
  39. data/templates/install/step_definitions/web_steps_pt-BR.rb.erb +11 -20
  40. data/templates/install/step_definitions/webrat_steps.rb.erb +11 -10
  41. data/templates/install/support/_rails_each_run.rb.erb +3 -19
  42. data/templates/install/support/edit_warning.txt +19 -5
  43. data/templates/install/support/selectors.rb +39 -0
  44. data/templates/install/tasks/cucumber.rake.erb +4 -0
  45. metadata +100 -82
  46. data/features/rails2.feature +0 -45
  47. data/features/rails3.feature +0 -123
  48. data/features/support/matchers/files.rb +0 -17
  49. data/spec/generators/cucumber/install/install_base_spec.rb +0 -75
@@ -0,0 +1,21 @@
1
+ Feature: Routing
2
+
3
+ Scenario: Visit undefined route
4
+ Given a project without ActiveRecord
5
+ And I remove the file "public/index.html"
6
+ And I write to "features/tests.feature" with:
7
+ """
8
+ Feature: Tests
9
+ Scenario: Tests
10
+ When I go to the home page
11
+ """
12
+ And I run `rake cucumber`
13
+ Then it should fail with:
14
+ """
15
+ 1 scenario (1 failed)
16
+ 1 step (1 failed)
17
+ """
18
+ And the stdout should contain:
19
+ """
20
+ No route matches "/" (ActionController::RoutingError)
21
+ """
@@ -0,0 +1,25 @@
1
+ Feature: Select dates
2
+
3
+ Background: A simple calendar app
4
+ Given I have created a new Rails 3 app "rails-3-app" with cucumber-rails support
5
+ And I successfully run `bundle exec rails g scaffold appointment name:string when:datetime`
6
+
7
+ Scenario: Select dates
8
+ Given I write to "features/create_appointment.feature" with:
9
+ """
10
+ Feature: Create appointments
11
+ Scenario: Constitution on May 17
12
+ Given I am on the new appointment page
13
+ And I fill in "Norway's constitution" for "Name"
14
+ And I select "2009-02-20 15:10:00 UTC" as the "When" date and time
15
+ And I press "Create Appointment"
16
+ Then I should see "Norway's constitution"
17
+ And I should see "2009-02-20 15:10:00 UTC"
18
+ """
19
+ When I run `bundle exec rake db:migrate cucumber`
20
+ Then it should pass with:
21
+ """
22
+ 1 scenario (1 passed)
23
+ 6 steps (6 passed)
24
+ """
25
+
@@ -1,13 +1,74 @@
1
1
  Given /^I have created a new Rails 3 app "([^"]*)" with cucumber\-rails support$/ do |app_name|
2
2
  steps %Q{
3
- When I successfully run "rails new rails-3-app"
3
+ When I successfully run `rails new #{app_name}`
4
4
  Then it should pass with:
5
5
  """
6
6
  README
7
7
  """
8
8
  And I cd to "#{app_name}"
9
- And I successfully run "rails generate cucumber:install"
10
- And I successfully run "bundle install"
11
- And I successfully run "rake db:migrate"
9
+ And I append to "Gemfile" with:
10
+ """
11
+ gem "cucumber-rails", :group => :test, :path => "../../.."
12
+ gem "capybara", :group => :test
13
+ gem "rspec-rails", :group => :test
14
+ gem "database_cleaner", :group => :test
15
+ """
16
+ And I successfully run `bundle exec rails generate cucumber:install`
12
17
  }
13
18
  end
19
+
20
+ Given /^a project without ActiveRecord$/ do
21
+ steps %Q{
22
+ Given I successfully run `rails new cuke-app`
23
+ And I cd to "cuke-app"
24
+ And I append to "Gemfile" with:
25
+ """
26
+ gem "cucumber-rails", :group => :test, :path => "../../.."
27
+ gem "capybara", :group => :test
28
+ gem "rspec-rails", :group => :test
29
+ """
30
+ And I successfully run `bundle exec rails generate cucumber:install`
31
+ And I overwrite "features/support/env.rb" with:
32
+ """
33
+ require 'cucumber/rails'
34
+ """
35
+
36
+ And I write to "config/application.rb" with:
37
+ """
38
+ require File.expand_path('../boot', __FILE__)
39
+
40
+ require 'action_controller/railtie'
41
+ require 'action_mailer/railtie'
42
+ require 'active_resource/railtie'
43
+ require 'rails/test_unit/railtie'
44
+
45
+ Bundler.require(:default, Rails.env) if defined?(Bundler)
46
+
47
+ module CukeApp
48
+ class Application < Rails::Application
49
+ config.encoding = "utf-8"
50
+ config.filter_parameters += [:password]
51
+ end
52
+ end
53
+ """
54
+ And I remove the file "config/database.yml"
55
+ }
56
+ end
57
+
58
+ And /^a cukes resource$/ do
59
+ steps %Q{
60
+ Given I write to "config/routes.rb" with:
61
+ """
62
+ CukeApp::Application.routes.draw do
63
+ resources :cukes
64
+ end
65
+ """
66
+ And I write to "app/controllers/cukes_controller.rb" with:
67
+ """
68
+ class CukesController < ApplicationController
69
+ def index
70
+ end
71
+ end
72
+ """
73
+ }
74
+ end
@@ -1,6 +1,10 @@
1
- ENV['CUCUMBER_RAILS_TEST'] = 'yeah baby'
2
1
  $:.unshift(File.dirname(__FILE__) + '/../../lib')
3
2
  require 'rubygems'
4
3
  require 'bundler/setup'
5
4
  require 'rspec/expectations'
6
5
  require 'aruba/cucumber'
6
+
7
+ Before do
8
+ @aruba_timeout_seconds = 60 # A long time needed some times to install gems (bundle install)
9
+ unset_bundler_env_vars
10
+ end
@@ -4,8 +4,6 @@ require File.expand_path(File.join(File.dirname(__FILE__), '../../lib/generators
4
4
  class CucumberGenerator < Rails::Generator::Base
5
5
  include Cucumber::Generators::InstallBase
6
6
 
7
- attr_accessor :driver
8
- attr_accessor :framework
9
7
  attr_reader :language, :template_dir
10
8
 
11
9
  def initialize(runtime_args, runtime_options = {})
@@ -19,14 +17,6 @@ class CucumberGenerator < Rails::Generator::Base
19
17
  end
20
18
  end
21
19
 
22
- def framework
23
- options[:framework] ||= detect_current_framework || detect_default_framework
24
- end
25
-
26
- def driver
27
- options[:driver] ||= detect_current_driver || detect_default_driver
28
- end
29
-
30
20
  def self.gem_root
31
21
  File.expand_path('../../../', __FILE__)
32
22
  end
@@ -48,23 +38,7 @@ class CucumberGenerator < Rails::Generator::Base
48
38
  def add_options!(opt)
49
39
  opt.separator ''
50
40
  opt.separator 'Options:'
51
- opt.on('--webrat', 'Setup cucumber for use with webrat') do
52
- options[:driver] = :webrat
53
- end
54
-
55
- opt.on('--capybara', 'Setup cucumber for use with capybara') do
56
- options[:driver] = :capybara
57
- end
58
-
59
- opt.on('--rspec', "Setup cucumber for use with RSpec") do
60
- options[:framework] = :rspec
61
- end
62
-
63
- opt.on('--testunit', "Setup cucumber for use with test/unit") do
64
- options[:framework] = :testunit
65
- end
66
-
67
- opt.on('--spork', 'Setup cucumber for use with Spork') do
41
+ opt.on('--spork', 'Use Spork to run features') do
68
42
  options[:spork] = true
69
43
  end
70
44
  end
@@ -4,26 +4,9 @@ if Rails.version.to_f < 3.0
4
4
  else
5
5
  require 'cucumber/rails3'
6
6
  end
7
-
8
- require 'cucumber/rails/world'
9
- require 'cucumber/rails/hooks/database_cleaner'
10
- require 'cucumber/rails/hooks/allow_rescue'
11
-
12
- if defined?(Capybara)
13
- require 'capybara/rails'
14
- require 'capybara/cucumber'
15
- require 'capybara/session'
16
- require 'cucumber/rails/capybara/javascript_emulation'
17
- require 'cucumber/rails/capybara/select_dates_and_times'
18
- end
19
7
 
20
- if defined?(Webrat)
21
- end
8
+ require 'cucumber/rails/world'
9
+ require 'cucumber/rails/hooks'
10
+ require 'cucumber/rails/capybara'
22
11
 
23
12
  require 'cucumber/web/tableish'
24
-
25
- if !defined?(ActiveRecord::Base)
26
- module Cucumber::Rails
27
- def World.fixture_table_names; []; end # Workaround for projects that don't use ActiveRecord
28
- end
29
- end
@@ -0,0 +1,7 @@
1
+ if defined?(Capybara)
2
+ require 'capybara/rails'
3
+ require 'capybara/cucumber'
4
+ require 'capybara/session'
5
+ require 'cucumber/rails/capybara/javascript_emulation'
6
+ require 'cucumber/rails/capybara/select_dates_and_times'
7
+ end
@@ -3,26 +3,33 @@ module Cucumber
3
3
  module Capybara
4
4
  module SelectDatesAndTimes
5
5
  def select_date(field, options = {})
6
- date = Date.parse(options[:with])
7
- within(:xpath, ::Capybara::XPath.fieldset(field).append(%Q{//p[label[contains(., "#{field}")]]})) do
8
- find(:xpath, '//select[contains(@id, "_1i")]').select(date.year)
9
- find(:xpath, '//select[contains(@id, "_2i")]').select(date.strftime('%B'))
10
- find(:xpath, '//select[contains(@id, "_3i")]').select(date.day)
11
- end
6
+ date = Date.parse(options[:with])
7
+ base_dom_id = get_base_dom_id_from_label_tag(field)
8
+
9
+ find(:xpath, "//select[@id='#{base_dom_id}_1i']").select(date.year.to_s)
10
+ find(:xpath, "//select[@id='#{base_dom_id}_2i']").select(date.strftime('%B'))
11
+ find(:xpath, "//select[@id='#{base_dom_id}_3i']").select(date.day.to_s)
12
12
  end
13
13
 
14
14
  def select_time(field, options = {})
15
- time = Time.parse(options[:with])
16
- within(:xpath, ::Capybara::XPath.fieldset(field).append(%Q{//p[label[contains(., "#{field}")]]})) do
17
- find(:xpath, '//select[contains(@id, "_4i")]').select(time.hour.to_s.rjust(2,'0'))
18
- find(:xpath, '//select[contains(@id, "_5i")]').select(time.min.to_s.rjust(2,'0'))
19
- end
15
+ time = Time.zone.parse(options[:with])
16
+ base_dom_id = get_base_dom_id_from_label_tag(field)
17
+
18
+ find(:xpath, "//select[@id='#{base_dom_id}_4i']").select(time.hour.to_s.rjust(2, '0'))
19
+ find(:xpath, "//select[@id='#{base_dom_id}_5i']").select(time.min.to_s.rjust(2, '0'))
20
20
  end
21
21
 
22
22
  def select_datetime(field, options = {})
23
23
  select_date(field, options)
24
24
  select_time(field, options)
25
25
  end
26
+
27
+ private
28
+
29
+ # @example "event_starts_at_"
30
+ def get_base_dom_id_from_label_tag(field)
31
+ find(:xpath, "//label[contains(., '#{field}')]")['for'].gsub(/(1i)$/, '')
32
+ end
26
33
  end
27
34
  end
28
35
  end
@@ -30,14 +37,14 @@ end
30
37
 
31
38
  World(::Cucumber::Rails::Capybara::SelectDatesAndTimes)
32
39
 
33
- When /^(?:|I )select "([^"]*)" as the "([^"]*)" time$/ do |time, selector|
40
+ When /^(?:|I )select "([^"]+)" as the "([^"]+)" time$/ do |time, selector|
34
41
  select_time(selector, :with => time)
35
42
  end
36
43
 
37
- When /^(?:|I )select "([^"]*)" as the "([^"]*)" date$/ do |date, selector|
44
+ When /^(?:|I )select "([^"]+)" as the "([^"]+)" date$/ do |date, selector|
38
45
  select_date(selector, :with => date)
39
46
  end
40
47
 
41
- When /^(?:|I )select "([^"]*)" as the "([^"]*)" date and time$/ do |datetime, selector|
48
+ When /^(?:|I )select "([^"]+)" as the "([^"]+)" date and time$/ do |datetime, selector|
42
49
  select_datetime(selector, :with => datetime)
43
50
  end
@@ -0,0 +1,3 @@
1
+ require 'cucumber/rails/hooks/database_cleaner'
2
+ require 'cucumber/rails/hooks/allow_rescue'
3
+ require 'cucumber/rails/hooks/mail'
@@ -1,19 +1,32 @@
1
+ # Default setup for DatabaseCleaner that will work for most projects.
2
+ # If you need your own setup, roll your own.
1
3
  begin
2
4
  require 'database_cleaner'
3
5
 
4
6
  Before do
5
- $__cucumber_global_use_txn = !!Cucumber::Rails::World.use_transactional_fixtures if $__cucumber_global_use_txn.nil?
7
+ begin
8
+ $__cucumber_global_database_cleaner_strategy ||= DatabaseCleaner.connections[0].strategy # There is no accessor on the DatabaseCleaner
9
+ rescue DatabaseCleaner::NoStrategySetError => e
10
+ e.message << "\nYou can set the strategy in your features/support/env.rb"
11
+ end
6
12
  end
7
13
 
8
14
  Before('~@no-txn', '~@selenium', '~@culerity', '~@celerity', '~@javascript') do
9
- Cucumber::Rails::World.use_transactional_fixtures = $__cucumber_global_use_txn
15
+ DatabaseCleaner.strategy = :truncation
10
16
  end
11
17
 
12
18
  Before('@no-txn,@selenium,@culerity,@celerity,@javascript') do
13
- Cucumber::Rails::World.use_transactional_fixtures = false
19
+ DatabaseCleaner.strategy = $__cucumber_global_database_cleaner_strategy
14
20
  end
15
21
 
16
22
  Before do
23
+ # TODO: May have to patch DatabaseCleaner's Transaction class to do what we used to do:
24
+ # run_callbacks :setup if respond_to?(:run_callbacks)
25
+ # IIRC There was a cucumber-rails ticket that added that to support multiple connections...
26
+ # Similar in After (use run_callbacks :teardown if respond_to?(:run_callbacks))
27
+ #
28
+ # May also have to add this to Transaction:
29
+ # include ActiveSupport::Testing::SetupAndTeardown if ActiveSupport::Testing.const_defined?("SetupAndTeardown")
17
30
  DatabaseCleaner.start
18
31
  end
19
32
 
@@ -1,3 +1,5 @@
1
+ require 'cucumber/rails/world'
2
+
1
3
  begin
2
4
  require 'rspec/rails/matchers'
3
5
 
@@ -1,15 +1,20 @@
1
1
  module Cucumber
2
2
  module Rails
3
- VERSION = '0.4.0.beta.1'
3
+ VERSION = '0.4.0'
4
4
  DEPS = {
5
- 'cucumber' => '~> 0.10.0',
6
- 'rails' => '~> 3.0.3',
7
- 'capybara' => '~> 0.4.0',
8
- 'webrat' => '~> 0.7.2',
9
- 'rspec-rails' => '~> 2.2.0',
10
- 'database_cleaner' => '~> 0.6.0',
11
- 'sqlite3-ruby' => '~> 1.3.2',
12
- 'aruba' => '~> 0.2.7'
5
+ 'aruba' => '>= 0.3.4',
6
+ 'cucumber' => '>= 0.10.1',
7
+
8
+ 'bundler' => '>= 1.0.10',
9
+ 'rack-test' => '>= 0.5.7',
10
+ 'nokogiri' => '>= 1.4.4',
11
+ 'rails' => '>= 3.0.3',
12
+ 'capybara' => '>= 0.4.1',
13
+ 'webrat' => '>= 0.7.3',
14
+ 'rspec-rails' => '>= 2.2.0',
15
+ 'database_cleaner' => '>= 0.6.0',
16
+ 'sqlite3-ruby' => '>= 1.3.3',
17
+ 'mongoid' => '>= 2.0.0.rc.7'
13
18
  }
14
19
  end
15
20
  end
@@ -1,10 +1,16 @@
1
1
  module Cucumber #:nodoc:
2
2
  module Rails #:nodoc:
3
3
  class World < ActionController::IntegrationTest #:nodoc:
4
+ include Rack::Test::Methods
4
5
  include ActiveSupport::Testing::SetupAndTeardown if ActiveSupport::Testing.const_defined?("SetupAndTeardown")
6
+
5
7
  def initialize #:nodoc:
6
8
  @_result = Test::Unit::TestResult.new if defined?(Test::Unit::TestResult)
7
9
  end
10
+
11
+ if !defined?(ActiveRecord::Base)
12
+ def self.fixture_table_names; []; end # Workaround for projects that don't use ActiveRecord
13
+ end
8
14
  end
9
15
  end
10
16
  end
@@ -12,5 +12,5 @@ else
12
12
  end
13
13
 
14
14
  if !Rails.configuration.cache_classes
15
- warn "WARNING: You have set Rails' config.cache_classes to false (most likely in config/environments/cucumber.rb). This setting is known to break Cucumber's use_transactional_fixtures method. Set config.cache_classes to true if you want to use transactional fixtures. For more information see https://rspec.lighthouseapp.com/projects/16211/tickets/165."
15
+ warn "WARNING: You have set Rails' config.cache_classes to false (most likely in config/environments/cucumber.rb). This setting is known to cause problems with database transactions. Set config.cache_classes to true if you want to use transactions. For more information see https://rspec.lighthouseapp.com/projects/16211/tickets/165."
16
16
  end
@@ -1,16 +1,16 @@
1
1
  require 'cucumber/rails3/application'
2
2
  ENV["RAILS_ENV"] ||= "test"
3
- env = caller.detect{|f| f =~ /\/env\.rb:/}
4
- require File.expand_path(File.dirname(env) + '/../../config/environment')
3
+ ENV["RAILS_ROOT"] ||= File.expand_path(File.dirname(caller.detect{|f| f =~ /\/env\.rb:/}) + '/../..')
4
+ require File.expand_path(ENV["RAILS_ROOT"] + '/config/environment')
5
5
  require 'cucumber/rails3/action_controller'
6
6
 
7
7
  if defined?(ActiveRecord::Base)
8
- require 'rails/test_help'
8
+ require 'rails/test_help'
9
9
  else
10
- require 'action_controller/test_process'
11
- require 'action_controller/integration'
10
+ require 'action_dispatch/testing/test_process'
11
+ require 'action_dispatch/testing/integration'
12
12
  end
13
13
 
14
14
  if !Rails.application.config.cache_classes
15
- warn "WARNING: You have set Rails' config.cache_classes to false (most likely in config/environments/test.rb). This setting is known to break Cucumber's use_transactional_fixtures method. Set config.cache_classes to true if you want to use transactional fixtures. For more information see https://rspec.lighthouseapp.com/projects/16211/tickets/165."
16
- end
15
+ warn "WARNING: You have set Rails' config.cache_classes to false (most likely in config/environments/cucumber.rb). This setting is known to cause problems with database transactions. Set config.cache_classes to true if you want to use transactions. For more information see https://rspec.lighthouseapp.com/projects/16211/tickets/165."
16
+ end
@@ -1,5 +1,5 @@
1
1
  require 'rbconfig'
2
- #require 'cucumber/rails/version'
2
+ require 'cucumber/rails/version'
3
3
 
4
4
  module Cucumber
5
5
  module Generators
@@ -14,13 +14,6 @@ module Cucumber
14
14
  create_feature_support(m)
15
15
  create_tasks(m)
16
16
  create_database(m) unless options[:skip_database]
17
-
18
- cucumber_rails_options = {:group => :test}
19
- cucumber_rails_options[:path] = '../../..' if ENV['CUCUMBER_RAILS_TEST']
20
- add_gem('cucumber-rails', Cucumber::Rails::VERSION, cucumber_rails_options)
21
- add_gem(driver_from_options.to_s, Cucumber::Rails::DEPS[driver_from_options.to_s], :group => :test)
22
- add_gem(framework_from_options.to_s, Cucumber::Rails::DEPS[framework_from_options.to_s], :group => :test)
23
- add_gem('database_cleaner', Cucumber::Rails::DEPS['database_cleaner'], :group => :test)
24
17
  end
25
18
 
26
19
  # Checks and prints the limitations
@@ -73,22 +66,18 @@ module Cucumber
73
66
  def create_feature_support(m)
74
67
  if rails2?
75
68
  m.directory 'features/support'
76
- m.file 'support/paths.rb', 'features/support/paths.rb'
77
-
78
- if spork?
79
- m.template 'support/rails_spork.rb.erb', 'features/support/env.rb'
80
- else
81
- m.template 'support/rails.rb.erb', 'features/support/env.rb'
82
- end
69
+ m.file 'support/paths.rb', 'features/support/paths.rb'
70
+ m.file 'support/selectors.rb', 'features/support/selectors.rb'
83
71
  else
84
72
  m.empty_directory 'features/support'
85
- m.copy_file 'support/paths.rb', 'features/support/paths.rb'
73
+ m.copy_file 'support/paths.rb', 'features/support/paths.rb'
74
+ m.copy_file 'support/selectors.rb', 'features/support/selectors.rb'
75
+ end
86
76
 
87
- if spork?
88
- m.template 'support/rails_spork.rb.erb', 'features/support/env.rb'
89
- else
90
- m.template 'support/rails.rb.erb', 'features/support/env.rb'
91
- end
77
+ if spork?
78
+ m.template 'support/rails_spork.rb.erb', 'features/support/env.rb'
79
+ else
80
+ m.template 'support/rails.rb.erb', 'features/support/env.rb'
92
81
  end
93
82
  end
94
83
 
@@ -103,6 +92,7 @@ module Cucumber
103
92
  end
104
93
 
105
94
  def create_database(m)
95
+ return unless File.exist?('config/database.yml')
106
96
  unless File.read('config/database.yml').include? 'cucumber:'
107
97
  m.gsub_file 'config/database.yml', /^test:.*\n/, "test: &test\n"
108
98
  m.gsub_file 'config/database.yml', /\z/, "\ncucumber:\n <<: *test"
@@ -121,26 +111,6 @@ module Cucumber
121
111
  end
122
112
  end
123
113
 
124
- def detect_current_driver
125
- detect_in_env([['capybara', :capybara], ['webrat', :webrat]])
126
- end
127
-
128
- def detect_default_driver
129
- @default_driver = first_loadable([['capybara', :capybara], ['webrat', :webrat]])
130
- raise "I don't know which driver you want. Use --capybara or --webrat, or gem install capybara or webrat." unless @default_driver
131
- @default_driver
132
- end
133
-
134
- def detect_current_framework
135
- detect_in_env([['spec', :rspec]]) || :testunit
136
- end
137
-
138
- def detect_default_framework
139
- # TODO need to check this - defaulting to :testunit has been moved from first_loadable
140
- # It's unlikely that we don't have test/unit since it comes with Ruby
141
- @default_framework ||= first_loadable([['rspec', :rspec]])
142
- end
143
-
144
114
  def spork?
145
115
  options[:spork]
146
116
  end
@@ -162,16 +132,6 @@ module Cucumber
162
132
  IO.read(File.join(self.class.gem_root, 'VERSION')).chomp
163
133
  end
164
134
 
165
- def first_loadable(libraries)
166
- require 'rubygems'
167
-
168
- libraries.each do |lib_name, lib_key|
169
- return lib_key if Gem.available?(lib_name)
170
- end
171
-
172
- nil
173
- end
174
-
175
135
  def detect_in_env(choices)
176
136
  return nil unless File.file?("features/support/env.rb")
177
137