aslakhellesoy-cucumber 0.3.3.2 → 0.3.3.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. data/History.txt +10 -1
  2. data/Manifest.txt +4 -0
  3. data/bin/cucumber +11 -1
  4. data/examples/cs/Rakefile +1 -1
  5. data/examples/dos_line_endings/Rakefile +1 -1
  6. data/examples/i18n/ar/Rakefile +1 -1
  7. data/examples/i18n/bg/Rakefile +1 -1
  8. data/examples/i18n/cat/Rakefile +6 -0
  9. data/examples/i18n/cat/features/step_definitons/calculator_steps.rb +21 -0
  10. data/examples/i18n/cat/features/suma.feature +16 -0
  11. data/examples/i18n/cat/lib/calculadora.rb +16 -0
  12. data/examples/i18n/da/Rakefile +1 -1
  13. data/examples/i18n/de/Rakefile +1 -1
  14. data/examples/i18n/en-lol/Rakefile +1 -1
  15. data/examples/i18n/en/Rakefile +1 -1
  16. data/examples/i18n/es/Rakefile +1 -1
  17. data/examples/i18n/et/Rakefile +1 -1
  18. data/examples/i18n/fi/Rakefile +1 -1
  19. data/examples/i18n/fr/Rakefile +1 -1
  20. data/examples/i18n/he/Rakefile +1 -1
  21. data/examples/i18n/hu/Rakefile +1 -1
  22. data/examples/i18n/id/Rakefile +1 -1
  23. data/examples/i18n/it/Rakefile +1 -1
  24. data/examples/i18n/ja/Rakefile +1 -1
  25. data/examples/i18n/ko/Rakefile +1 -1
  26. data/examples/i18n/lt/Rakefile +1 -1
  27. data/examples/i18n/lt/features/addition.feature +2 -3
  28. data/examples/i18n/lv/Rakefile +1 -1
  29. data/examples/i18n/no/Rakefile +1 -1
  30. data/examples/i18n/pt/Rakefile +1 -1
  31. data/examples/i18n/pt/features/support/env.rb +6 -0
  32. data/examples/i18n/ro/Rakefile +1 -1
  33. data/examples/i18n/ru/Rakefile +1 -1
  34. data/examples/i18n/se/Rakefile +1 -1
  35. data/examples/i18n/sk/Rakefile +1 -1
  36. data/examples/i18n/zh-CN/Rakefile +1 -1
  37. data/examples/i18n/zh-TW/Rakefile +1 -1
  38. data/examples/java/Rakefile +2 -1
  39. data/examples/selenium/Rakefile +1 -1
  40. data/examples/selenium_webrat/Rakefile +1 -1
  41. data/examples/sinatra/Rakefile +1 -1
  42. data/examples/test_unit/Rakefile +1 -1
  43. data/examples/tickets/Rakefile +3 -3
  44. data/examples/watir/Rakefile +1 -1
  45. data/features/rake_task.feature +4 -4
  46. data/features/step_definitions/cucumber_steps.rb +4 -2
  47. data/gem_tasks/features.rake +5 -1
  48. data/lib/cucumber/cli/configuration.rb +16 -24
  49. data/lib/cucumber/cli/main.rb +0 -2
  50. data/lib/cucumber/languages.yml +7 -5
  51. data/lib/cucumber/rake/task.rb +92 -24
  52. data/lib/cucumber/version.rb +1 -1
  53. data/rails_generators/cucumber/templates/cucumber.rake +1 -1
  54. data/spec/cucumber/cli/configuration_spec.rb +9 -18
  55. metadata +7 -2
@@ -1,11 +1,20 @@
1
1
  == 0.3.4 (In Git)
2
2
 
3
+ Hooray - speed improvements when using Rake!
4
+
3
5
  === Bugfixes
4
6
  * Problem with multiple terms in languages.yml (#321 Aslak Hellesøy)
5
7
 
6
8
  === New features
9
+ * Added aliases for Feature and But in Japanese (Leonard Chin)
7
10
  * Support for Catalan (Francesc Esplugas)
8
11
 
12
+ === Changed features
13
+ * Rake task should not shell out (#297 Aslak Hellesøy)
14
+ The Cucumber Rake task will run Cucumber in the same Ruby interpreter as Rake itself
15
+ unless explicitly told to fork a new interpreter. This is to increase speed. You can
16
+ force a new interpreter by setting fork=true or rcov=true in the task.
17
+
9
18
  == 0.3.3 2009-05-10
10
19
 
11
20
  Minor bugfix release, made specially for EuRuKo!
@@ -243,7 +252,7 @@ for multiline arguments are some of the highlights.
243
252
  * Pure Ruby features are no longer supported.
244
253
  * Remove --color option in autotest. Can be added manually in cucumber.yml (#215 Jean-Michel Garnier)
245
254
 
246
- == (0.16.4 aslakhellesoy-cucumber gem on GitHub)
255
+ == (0.1.16.4 aslakhellesoy-cucumber gem on GitHub)
247
256
 
248
257
  Bugfix release.
249
258
 
@@ -29,6 +29,10 @@ examples/i18n/bg/features/step_definitons/calculator_steps.rb
29
29
  examples/i18n/bg/features/support/env.rb
30
30
  examples/i18n/bg/features/support/world.rb
31
31
  examples/i18n/bg/lib/calculator.rb
32
+ examples/i18n/cat/Rakefile
33
+ examples/i18n/cat/features/step_definitons/calculator_steps.rb
34
+ examples/i18n/cat/features/suma.feature
35
+ examples/i18n/cat/lib/calculadora.rb
32
36
  examples/i18n/da/Rakefile
33
37
  examples/i18n/da/features/step_definitons/kalkulator_steps.rb
34
38
  examples/i18n/da/features/summering.feature
@@ -3,4 +3,14 @@
3
3
  $:.unshift(File.dirname(__FILE__ + '.rb') + '/../lib') unless $:.include?(File.dirname(__FILE__ + '.rb') + '/../lib')
4
4
 
5
5
  require 'cucumber/cli/main'
6
- Cucumber::Cli::Main.execute(ARGV.dup) # The dup is to keep ARGV intact, so that tools like ruby-debug can respawn.
6
+ begin
7
+ # The dup is to keep ARGV intact, so that tools like ruby-debug can respawn.
8
+ failure = Cucumber::Cli::Main.execute(ARGV.dup)
9
+ Kernel.exit(failure ? 1 : 0)
10
+ rescue SystemExit => e
11
+ Kernel.exit(e.status)
12
+ rescue Exception => e
13
+ STDERR.puts("#{e.message} (#{e.class})")
14
+ STDERR.puts(e.backtrace.join("\n"))
15
+ Kernel.exit 1
16
+ end
@@ -2,7 +2,7 @@ $:.unshift(File.dirname(__FILE__) + '/../../lib')
2
2
  require 'cucumber/rake/task'
3
3
 
4
4
  Cucumber::Rake::Task.new(:features) do |t|
5
- t.cucumber_opts = "--format pretty"
5
+ t.cucumber_opts = %w{--format pretty}
6
6
  end
7
7
 
8
8
  task :features => :compile
@@ -2,5 +2,5 @@ $:.unshift(File.dirname(__FILE__) + '/../../lib')
2
2
  require 'cucumber/rake/task'
3
3
 
4
4
  Cucumber::Rake::Task.new do |t|
5
- t.cucumber_opts = "--format pretty"
5
+ t.cucumber_opts = %w{--format pretty}
6
6
  end
@@ -2,5 +2,5 @@ $:.unshift(File.dirname(__FILE__) + '/../../../lib')
2
2
  require 'cucumber/rake/task'
3
3
 
4
4
  Cucumber::Rake::Task.new do |t|
5
- t.cucumber_opts = "--language ar"
5
+ t.cucumber_opts = %w{--language ar}
6
6
  end
@@ -2,5 +2,5 @@ $:.unshift(File.dirname(__FILE__) + '/../../../lib')
2
2
  require 'cucumber/rake/task'
3
3
 
4
4
  Cucumber::Rake::Task.new do |t|
5
- t.cucumber_opts = "--language bg"
5
+ t.cucumber_opts = %w{--language bg}
6
6
  end
@@ -0,0 +1,6 @@
1
+ $:.unshift(File.dirname(__FILE__) + '/../../../lib')
2
+ require 'cucumber/rake/task'
3
+
4
+ Cucumber::Rake::Task.new do |t|
5
+ t.cucumber_opts = %w{--language cat}
6
+ end
@@ -0,0 +1,21 @@
1
+ # encoding: utf-8
2
+ require 'spec/expectations'
3
+ $:.unshift(File.dirname(__FILE__) + '/../../lib') # This line is not needed in your own project
4
+ require 'cucumber/formatter/unicode'
5
+ require 'calculadora'
6
+
7
+ Before do
8
+ @calc = Calculadora.new
9
+ end
10
+
11
+ Donat /que he introduït (\d+) a la calculadora/ do |n|
12
+ @calc.push n.to_i
13
+ end
14
+
15
+ Quan /premo el (\w+)/ do |op|
16
+ @result = @calc.send op
17
+ end
18
+
19
+ Aleshores /el resultat ha de ser (\d+) a la pantalla/ do |result|
20
+ @result.should == result.to_f
21
+ end
@@ -0,0 +1,16 @@
1
+ Característica: Suma
2
+ Per evitar fer errors tontos
3
+ Com un matemàtic idiota
4
+ Vull saber la suma dels números
5
+
6
+ Esquema de l'escenari: Sumar dos números
7
+ Donat que he introduït <entrada_1> a la calculadora
8
+ I que he introduït <entrada_2> a la calculadora
9
+ Quan premo el <botó>
10
+ Aleshores el resultat ha de ser <resultat> a la pantalla
11
+
12
+ Exemples:
13
+ | entrada_1 | entrada_2 | botó | resultat |
14
+ | 20 | 30 | add | 50 |
15
+ | 2 | 5 | add | 7 |
16
+ | 0 | 40 | add | 40 |
@@ -0,0 +1,16 @@
1
+ class Calculadora
2
+
3
+ def push(n)
4
+ @args ||= []
5
+ @args << n
6
+ end
7
+
8
+ def add
9
+ @args.inject(0){|n,sum| sum+=n}
10
+ end
11
+
12
+ def divide
13
+ @args[0].to_f / @args[1].to_f
14
+ end
15
+
16
+ end
@@ -2,5 +2,5 @@ $:.unshift(File.dirname(__FILE__) + '/../../../lib')
2
2
  require 'cucumber/rake/task'
3
3
 
4
4
  Cucumber::Rake::Task.new do |t|
5
- t.cucumber_opts = "--language da"
5
+ t.cucumber_opts = %w{--language da}
6
6
  end
@@ -2,5 +2,5 @@ $:.unshift(File.dirname(__FILE__) + '/../../../lib')
2
2
  require 'cucumber/rake/task'
3
3
 
4
4
  Cucumber::Rake::Task.new do |t|
5
- t.cucumber_opts = "--language de"
5
+ t.cucumber_opts = %w{--language de}
6
6
  end
@@ -2,5 +2,5 @@ $:.unshift(File.dirname(__FILE__) + '/../../../lib')
2
2
  require 'cucumber/rake/task'
3
3
 
4
4
  Cucumber::Rake::Task.new do |t|
5
- t.cucumber_opts = "--language en-lol"
5
+ t.cucumber_opts = %w{--language en-lol}
6
6
  end
@@ -2,5 +2,5 @@ $:.unshift(File.dirname(__FILE__) + '/../../../lib')
2
2
  require 'cucumber/rake/task'
3
3
 
4
4
  Cucumber::Rake::Task.new do |t|
5
- t.cucumber_opts = "--language en"
5
+ t.cucumber_opts = %w{--language en}
6
6
  end
@@ -2,5 +2,5 @@ $:.unshift(File.dirname(__FILE__) + '/../../../lib')
2
2
  require 'cucumber/rake/task'
3
3
 
4
4
  Cucumber::Rake::Task.new do |t|
5
- t.cucumber_opts = "--language es"
5
+ t.cucumber_opts = %w{--language es}
6
6
  end
@@ -2,5 +2,5 @@ $:.unshift(File.dirname(__FILE__) + '/../../../lib')
2
2
  require 'cucumber/rake/task'
3
3
 
4
4
  Cucumber::Rake::Task.new do |t|
5
- t.cucumber_opts = "--language et"
5
+ t.cucumber_opts = %w{--language et}
6
6
  end
@@ -2,5 +2,5 @@ $:.unshift(File.dirname(__FILE__) + '/../../../lib')
2
2
  require 'cucumber/rake/task'
3
3
 
4
4
  Cucumber::Rake::Task.new do |t|
5
- t.cucumber_opts = "--language fi"
5
+ t.cucumber_opts = %w{--language fi}
6
6
  end
@@ -2,5 +2,5 @@ $:.unshift(File.dirname(__FILE__) + '/../../../lib')
2
2
  require 'cucumber/rake/task'
3
3
 
4
4
  Cucumber::Rake::Task.new do |t|
5
- t.cucumber_opts = "--language fr"
5
+ t.cucumber_opts = %w{--language fr}
6
6
  end
@@ -2,5 +2,5 @@ $:.unshift(File.dirname(__FILE__) + '/../../../lib')
2
2
  require 'cucumber/rake/task'
3
3
 
4
4
  Cucumber::Rake::Task.new do |t|
5
- t.cucumber_opts = "--language he"
5
+ t.cucumber_opts = %w{--language he}
6
6
  end
@@ -2,5 +2,5 @@ $:.unshift(File.dirname(__FILE__) + '/../../../lib')
2
2
  require 'cucumber/rake/task'
3
3
 
4
4
  Cucumber::Rake::Task.new do |t|
5
- t.cucumber_opts = "--language hu"
5
+ t.cucumber_opts = %w{--language hu}
6
6
  end
@@ -2,5 +2,5 @@ $:.unshift(File.dirname(__FILE__) + '/../../../lib')
2
2
  require 'cucumber/rake/task'
3
3
 
4
4
  Cucumber::Rake::Task.new do |t|
5
- t.cucumber_opts = "--language id"
5
+ t.cucumber_opts = %w{--language id}
6
6
  end
@@ -2,5 +2,5 @@ $:.unshift(File.dirname(__FILE__) + '/../../../lib')
2
2
  require 'cucumber/rake/task'
3
3
 
4
4
  Cucumber::Rake::Task.new do |t|
5
- t.cucumber_opts = "--language it"
5
+ t.cucumber_opts = %w{--language it}
6
6
  end
@@ -2,5 +2,5 @@ $:.unshift(File.dirname(__FILE__) + '/../../../lib')
2
2
  require 'cucumber/rake/task'
3
3
 
4
4
  Cucumber::Rake::Task.new do |t|
5
- t.cucumber_opts = "--language ja"
5
+ t.cucumber_opts = %w{--language ja}
6
6
  end
@@ -2,5 +2,5 @@ $:.unshift(File.dirname(__FILE__) + '/../../../lib')
2
2
  require 'cucumber/rake/task'
3
3
 
4
4
  Cucumber::Rake::Task.new do |t|
5
- t.cucumber_opts = "--language ko"
5
+ t.cucumber_opts = %w{--language ko}
6
6
  end
@@ -2,5 +2,5 @@ $:.unshift(File.dirname(__FILE__) + '/../../../lib')
2
2
  require 'cucumber/rake/task'
3
3
 
4
4
  Cucumber::Rake::Task.new do |t|
5
- t.cucumber_opts = "--language lt"
5
+ t.cucumber_opts = %w{--language lt}
6
6
  end
@@ -3,14 +3,13 @@ Sąvybė: Sudėtis
3
3
  Kaip matematinis idiotas
4
4
  Aš noriu, kad man pasakytų dviejų skaičių sumą
5
5
 
6
- # Someone please translate this in languages.yml please
7
- Scenario Outline: dviejų skaičių sudėtis
6
+ Scenarijaus šablonas: dviejų skaičių sudėtis
8
7
  Duota aš įvedžiau <įvestis_1> į skaičiuotuvą
9
8
  Ir aš įvedžiau <įvestis_2> į skaičiuotuvą
10
9
  Kai aš paspaudžiu "<mygtukas>"
11
10
  Tada rezultatas ekrane turi būti <išvestis>
12
11
 
13
- Pavyzdžių
12
+ Pavyzdžiai
14
13
  | įvestis_1 | įvestis_2 | mygtukas | išvestis |
15
14
  | 20 | 30 | add | 50 |
16
15
  | 2 | 5 | add | 7 |
@@ -2,5 +2,5 @@ $:.unshift(File.dirname(__FILE__) + '/../../../lib')
2
2
  require 'cucumber/rake/task'
3
3
 
4
4
  Cucumber::Rake::Task.new do |t|
5
- t.cucumber_opts = "--language lv"
5
+ t.cucumber_opts = %w{--language lv}
6
6
  end
@@ -2,5 +2,5 @@ $:.unshift(File.dirname(__FILE__) + '/../../../lib')
2
2
  require 'cucumber/rake/task'
3
3
 
4
4
  Cucumber::Rake::Task.new do |t|
5
- t.cucumber_opts = "--language no"
5
+ t.cucumber_opts = %w{--language no}
6
6
  end
@@ -2,5 +2,5 @@ $:.unshift(File.dirname(__FILE__) + '/../../../lib')
2
2
  require 'cucumber/rake/task'
3
3
 
4
4
  Cucumber::Rake::Task.new do |t|
5
- t.cucumber_opts = "--language pt"
5
+ t.cucumber_opts = %w{--language pt}
6
6
  end
@@ -0,0 +1,6 @@
1
+ # encoding: utf-8
2
+ $KCODE='u' unless Cucumber::RUBY_1_9
3
+ require 'spec/expectations'
4
+ $:.unshift(File.dirname(__FILE__) + '/../../lib') # This line is not needed in your own project
5
+ require 'cucumber/formatter/unicode'
6
+ require 'calculadora'
@@ -2,5 +2,5 @@ $:.unshift(File.dirname(__FILE__) + '/../../../lib')
2
2
  require 'cucumber/rake/task'
3
3
 
4
4
  Cucumber::Rake::Task.new do |t|
5
- t.cucumber_opts = "--language ro"
5
+ t.cucumber_opts = %w{--language ro}
6
6
  end
@@ -2,5 +2,5 @@ $:.unshift(File.dirname(__FILE__) + '/../../../lib')
2
2
  require 'cucumber/rake/task'
3
3
 
4
4
  Cucumber::Rake::Task.new do |t|
5
- t.cucumber_opts = "--language ru"
5
+ t.cucumber_opts = %w{--language ru}
6
6
  end
@@ -2,5 +2,5 @@ $:.unshift(File.dirname(__FILE__) + '/../../../lib')
2
2
  require 'cucumber/rake/task'
3
3
 
4
4
  Cucumber::Rake::Task.new do |t|
5
- t.cucumber_opts = "--language se"
5
+ t.cucumber_opts = %w{--language se}
6
6
  end
@@ -2,5 +2,5 @@ $:.unshift(File.dirname(__FILE__) + '/../../../lib')
2
2
  require 'cucumber/rake/task'
3
3
 
4
4
  Cucumber::Rake::Task.new do |t|
5
- t.cucumber_opts = "--language sk"
5
+ t.cucumber_opts = %w{--language sk}
6
6
  end
@@ -2,5 +2,5 @@ $:.unshift(File.dirname(__FILE__) + '/../../../lib')
2
2
  require 'cucumber/rake/task'
3
3
 
4
4
  Cucumber::Rake::Task.new do |t|
5
- t.cucumber_opts = "--language zh-CN"
5
+ t.cucumber_opts = %w{--language zh-CN}
6
6
  end
@@ -2,5 +2,5 @@ $:.unshift(File.dirname(__FILE__) + '/../../../lib')
2
2
  require 'cucumber/rake/task'
3
3
 
4
4
  Cucumber::Rake::Task.new do |t|
5
- t.cucumber_opts = "--language zh-TW"
5
+ t.cucumber_opts = %w{--language zh-TW}
6
6
  end
@@ -1,8 +1,9 @@
1
1
  $:.unshift(File.dirname(__FILE__) + '/../../lib')
2
2
  require 'cucumber/rake/task'
3
3
 
4
+ raise "This example only works with JRuby" unless Cucumber::JRUBY
4
5
  Cucumber::Rake::Task.new(:features) do |t|
5
- t.cucumber_opts = "--format pretty"
6
+ t.cucumber_opts = %w{--format pretty}
6
7
  end
7
8
 
8
9
  task :features => :compile
@@ -2,5 +2,5 @@ $:.unshift(File.dirname(__FILE__) + '/../../lib')
2
2
  require 'cucumber/rake/task'
3
3
 
4
4
  Cucumber::Rake::Task.new do |t|
5
- t.cucumber_opts = "--format pretty"
5
+ t.cucumber_opts = %w{--format pretty}
6
6
  end
@@ -2,5 +2,5 @@ $:.unshift(File.dirname(__FILE__) + '/../../lib')
2
2
  require 'cucumber/rake/task'
3
3
 
4
4
  Cucumber::Rake::Task.new do |t|
5
- t.cucumber_opts = "--format pretty"
5
+ t.cucumber_opts = %w{--format pretty}
6
6
  end
@@ -2,5 +2,5 @@ $:.unshift(File.dirname(__FILE__) + '/../../lib')
2
2
  require 'cucumber/rake/task'
3
3
 
4
4
  Cucumber::Rake::Task.new do |t|
5
- t.cucumber_opts = "--format pretty"
5
+ t.cucumber_opts = %w{--format pretty}
6
6
  end
@@ -2,5 +2,5 @@ $:.unshift(File.dirname(__FILE__) + '/../../lib')
2
2
  require 'cucumber/rake/task'
3
3
 
4
4
  Cucumber::Rake::Task.new do |t|
5
- t.cucumber_opts = "--format pretty"
5
+ t.cucumber_opts = %w{--format pretty}
6
6
  end
@@ -2,15 +2,15 @@ $:.unshift(File.dirname(__FILE__) + '/../../lib')
2
2
  require 'cucumber/rake/task'
3
3
 
4
4
  Cucumber::Rake::Task.new(:pretty) do |t|
5
- t.cucumber_opts = "--tags ~@intentional_failure --format pretty -q"
5
+ t.cucumber_opts = %w{--tags ~@intentional_failure --format pretty -q}
6
6
  end
7
7
 
8
8
  Cucumber::Rake::Task.new(:html) do |t|
9
- t.cucumber_opts = "--tags ~@intentional_failure --format html --out features.html"
9
+ t.cucumber_opts = %w{--tags ~@intentional_failure --format html --out features.html}
10
10
  end
11
11
 
12
12
  Cucumber::Rake::Task.new(:progress) do |t|
13
- t.cucumber_opts = "--tags ~@intentional_failure --format progress -i -s"
13
+ t.cucumber_opts = %w{--tags ~@intentional_failure --format progress -i -s}
14
14
  end
15
15
 
16
16
  task :default => [:pretty, :html, :progress]
@@ -2,5 +2,5 @@ $:.unshift(File.dirname(__FILE__) + '/../../lib')
2
2
  require 'cucumber/rake/task'
3
3
 
4
4
  Cucumber::Rake::Task.new do |t|
5
- t.cucumber_opts = "--format pretty"
5
+ t.cucumber_opts = %w{--format pretty}
6
6
  end
@@ -47,7 +47,7 @@ Feature: Rake task
47
47
  Scenario: rake task with a defined profile and cucumber_opts
48
48
  Given the following profile is defined:
49
49
  """
50
- bar: features/missing_step_definitions.feature:3
50
+ bar: ['features/missing_step_definitions.feature:3']
51
51
  """
52
52
  And a file named "Rakefile" with:
53
53
  """
@@ -56,7 +56,7 @@ Feature: Rake task
56
56
 
57
57
  Cucumber::Rake::Task.new(:features) do |t|
58
58
  t.profile = "bar"
59
- t.cucumber_opts = "--quiet --no-color"
59
+ t.cucumber_opts = %w{--quiet --no-color}
60
60
  end
61
61
  """
62
62
  When I run rake features
@@ -82,7 +82,7 @@ Feature: Rake task
82
82
  """
83
83
  Given the following profile is defined:
84
84
  """
85
- baz: --quiet --no-color
85
+ baz: ['--quiet', '--no-color']
86
86
  """
87
87
  And a file named "Rakefile" with:
88
88
  """
@@ -138,7 +138,7 @@ Feature: Rake task
138
138
 
139
139
  Cucumber::Rake::Task.new(:features) do |t|
140
140
  t.profile = "no_bomb"
141
- t.cucumber_opts = "--quiet --no-color"
141
+ t.cucumber_opts = %w{--quiet --no-color}
142
142
  end
143
143
  """
144
144
 
@@ -27,14 +27,16 @@ When /^I run cucumber (.*)$/ do |cucumber_opts|
27
27
  end
28
28
 
29
29
  When /^I run rake (.*)$/ do |rake_opts|
30
- run "rake #{rake_opts}"
30
+ run "rake #{rake_opts} --trace"
31
31
  end
32
32
 
33
33
  Then /^it should (fail|pass)$/ do |success|
34
34
  if success == 'fail'
35
35
  last_exit_status.should_not == 0
36
36
  else
37
- last_exit_status.should == 0
37
+ if last_exit_status != 0
38
+ raise "Failed with exit status #{last_exit_status}\nSTDOUT:\n#{last_stdout}\nSTDERR:\n#{last_stderr}"
39
+ end
38
40
  end
39
41
  end
40
42
 
@@ -2,5 +2,9 @@ $:.unshift(File.dirname(__FILE__) + '/../lib')
2
2
  require 'cucumber/rake/task'
3
3
 
4
4
  Cucumber::Rake::Task.new do |t|
5
- t.cucumber_opts = "--format progress"
5
+ t.cucumber_opts = %w{--format progress}
6
+ end
7
+
8
+ Cucumber::Rake::Task.new('pretty') do |t|
9
+ t.cucumber_opts = %w{--format pretty}
6
10
  end
@@ -15,6 +15,7 @@ module Cucumber
15
15
 
16
16
  @paths = []
17
17
  @options = default_options
18
+
18
19
  @active_format = DEFAULT_FORMAT
19
20
  end
20
21
 
@@ -47,7 +48,7 @@ module Cucumber
47
48
  %{Run with "--language help" to see all languages},
48
49
  %{Run with "--language LANG help" to list keywords for LANG}) do |v|
49
50
  if v == 'help'
50
- list_languages
51
+ list_languages_and_exit
51
52
  elsif args==['help']
52
53
  list_keywords_and_exit(v)
53
54
  else
@@ -208,7 +209,8 @@ module Cucumber
208
209
  formatter_class = formatter_class(format)
209
210
  formatter_class.new(step_mother, out, @options)
210
211
  rescue Exception => e
211
- exit_with_error("Error creating formatter: #{format}", e)
212
+ e.message += "\nError creating formatter: #{format}"
213
+ raise e
212
214
  end
213
215
  end
214
216
 
@@ -244,7 +246,6 @@ module Cucumber
244
246
  files
245
247
  end
246
248
 
247
-
248
249
  def feature_files
249
250
  potential_feature_files = @paths.map do |path|
250
251
  path = path.gsub(/\\/, '/') # In case we're on windows. Globs don't work with backslashes.
@@ -278,7 +279,7 @@ module Cucumber
278
279
 
279
280
  def parse_args_from_profile(profile)
280
281
  unless cucumber_yml.has_key?(profile)
281
- return(exit_with_error <<-END_OF_ERROR)
282
+ raise(<<-END_OF_ERROR)
282
283
  Could not find profile: '#{profile}'
283
284
 
284
285
  Defined profiles in cucumber.yml:
@@ -288,16 +289,16 @@ Defined profiles in cucumber.yml:
288
289
 
289
290
  args_from_yml = cucumber_yml[profile] || ''
290
291
 
291
- if !args_from_yml.is_a?(String)
292
- exit_with_error "Profiles must be defined as a String. The '#{profile}' profile was #{args_from_yml.inspect} (#{args_from_yml.class}).\n"
293
- elsif args_from_yml =~ /^\s*$/
294
- exit_with_error "The 'foo' profile in cucumber.yml was blank. Please define the command line arguments for the 'foo' profile in cucumber.yml.\n"
295
- else
296
- parse!(args_from_yml.split(' '))
292
+ case(args_from_yml)
293
+ when String
294
+ raise "The '#{profile}' profile in cucumber.yml was blank. Please define the command line arguments for the 'foo' profile in cucumber.yml.\n" if args_from_yml =~ /^\s*$/
295
+ args_from_yml = args_from_yml.split(' ')
296
+ when Array
297
+ raise "The '#{profile}' profile in cucumber.yml was empty. Please define the command line arguments for the 'foo' profile in cucumber.yml.\n" if args_from_yml.empty?
298
+ else
299
+ raise "The '#{profile}' profile in cucumber.yml was a #{args_from_yml.class}. It must be a String or Array"
297
300
  end
298
-
299
- rescue YmlLoadError => e
300
- exit_with_error(e.message)
301
+ parse!(args_from_yml)
301
302
  end
302
303
 
303
304
  def cucumber_yml
@@ -322,13 +323,13 @@ Defined profiles in cucumber.yml:
322
323
 
323
324
  def list_keywords_and_exit(lang)
324
325
  unless Cucumber::LANGUAGES[lang]
325
- exit_with_error("No language with key #{lang}")
326
+ raise("No language with key #{lang}")
326
327
  end
327
328
  LanguageHelpFormatter.list_keywords(@out_stream, lang)
328
329
  Kernel.exit
329
330
  end
330
331
 
331
- def list_languages
332
+ def list_languages_and_exit
332
333
  LanguageHelpFormatter.list_languages(@out_stream)
333
334
  Kernel.exit
334
335
  end
@@ -347,15 +348,6 @@ Defined profiles in cucumber.yml:
347
348
  :diff_enabled => true
348
349
  }
349
350
  end
350
-
351
- def exit_with_error(error_message, e=nil)
352
- @error_stream.puts(error_message)
353
- if e
354
- @error_stream.puts("#{e.message} (#{e.class})")
355
- @error_stream.puts(e.backtrace.join("\n"))
356
- end
357
- Kernel.exit 1
358
- end
359
351
  end
360
352
 
361
353
  end
@@ -42,8 +42,6 @@ module Cucumber
42
42
 
43
43
  failure = step_mother.steps(:failed).any? ||
44
44
  (configuration.strict? && step_mother.steps(:undefined).any?)
45
-
46
- Kernel.exit(failure ? 1 : 0)
47
45
  end
48
46
 
49
47
  def load_plain_text_features
@@ -168,7 +168,7 @@
168
168
  background: Rerefons
169
169
  feature: Característica
170
170
  scenario: Escenari
171
- scenario_outline: Esquema de l'escenari
171
+ scenario_outline: Esquema de l\'escenari
172
172
  examples: Exemples
173
173
  given: Donat
174
174
  when: Quan
@@ -285,7 +285,7 @@
285
285
  name: Japanese
286
286
  native: 日本語
287
287
  encoding: UTF-8
288
- feature: フィーチャ
288
+ feature: フィーチャ|機能
289
289
  background: 背景
290
290
  scenario: シナリオ
291
291
  scenario_outline: シナリオアウトライン|シナリオテンプレート|テンプレ|シナリオテンプレ
@@ -294,15 +294,17 @@
294
294
  when: もし
295
295
  then: ならば
296
296
  and: かつ
297
- but: しかし
297
+ but: しかし|但し
298
298
  space_after_keyword: false
299
299
  "lt":
300
300
  name: Lithuanian
301
301
  native: lietuvių kalba
302
302
  encoding: UTF-8
303
- feature: Sąvybė
303
+ feature: Savybė
304
+ background: Kontekstas
304
305
  scenario: Scenarijus
305
- examples: Pavyzdžių
306
+ scenario_outline: Scenarijaus šablonas
307
+ examples: Pavyzdžiai|Scenarijai|Variantai
306
308
  given: Duota
307
309
  when: Kai
308
310
  then: Tada
@@ -14,7 +14,7 @@ module Cucumber
14
14
  # To further configure the task, you can pass a block:
15
15
  #
16
16
  # Cucumber::Rake::Task.new do |t|
17
- # t.cucumber_opts = "--format progress"
17
+ # t.cucumber_opts = %w{--format progress}
18
18
  # end
19
19
  #
20
20
  # This task can also be configured to be run with RCov:
@@ -25,7 +25,62 @@ module Cucumber
25
25
  #
26
26
  # See the attributes for additional configuration possibilities.
27
27
  class Task
28
- LIB = File.expand_path(File.dirname(__FILE__) + '/../..') # :nodoc:
28
+ class InProcessCucumberRunner #:nodoc:
29
+ attr_reader :args
30
+
31
+ def initialize(libs, cucumber_opts, feature_files)
32
+ libs.reverse.each{|lib| $:.unshift(lib)}
33
+ @args = (
34
+ cucumber_opts +
35
+ feature_files
36
+ ).flatten.compact
37
+ end
38
+
39
+ def run
40
+ require 'cucumber/cli/main'
41
+ Cucumber::Cli::Main.execute(args)
42
+ end
43
+ end
44
+
45
+ class ForkedCucumberRunner #:nodoc:
46
+ attr_reader :args
47
+
48
+ def initialize(libs, cucumber_bin, cucumber_opts, feature_files)
49
+ @args = (
50
+ ['-I'] + load_path(libs) +
51
+ quoted_binary(cucumber_bin) +
52
+ cucumber_opts +
53
+ feature_files
54
+ ).flatten
55
+ end
56
+
57
+ def load_path(libs)
58
+ ['"%s"' % libs.join(File::PATH_SEPARATOR)]
59
+ end
60
+
61
+ def quoted_binary(cucumber_bin)
62
+ ['"%s"' % cucumber_bin]
63
+ end
64
+
65
+ def run
66
+ ruby(args.join(" ")) # ruby(*args) is broken on Windows
67
+ end
68
+ end
69
+
70
+ class RCovCucumberRunner < ForkedCucumberRunner #:nodoc:
71
+ def initialize(libs, cucumber_bin, cucumber_opts, feature_files, rcov_opts)
72
+ @args = (
73
+ ['-I'] + load_path(libs) +
74
+ ['-S', 'rcov'] + rcov_opts +
75
+ quoted_binary(cucumber_bin) +
76
+ ['--'] +
77
+ cucumber_opts +
78
+ feature_files
79
+ ).flatten
80
+ end
81
+ end
82
+
83
+ LIB = File.expand_path(File.dirname(__FILE__) + '/../..') # :nodoc:
29
84
 
30
85
  # TODO: remove depreated accessors for 0.4.0
31
86
  def self.deprecate_accessor(attribute) # :nodoc:
@@ -40,24 +95,45 @@ module Cucumber
40
95
 
41
96
  # Directories to add to the Ruby $LOAD_PATH
42
97
  attr_accessor :libs
98
+
43
99
  # Name of the cucumber binary to use for running features. Defaults to Cucumber::BINARY
44
100
  attr_accessor :binary
101
+
45
102
  # Array of paths to specific step definition files to use
46
103
  deprecate_accessor :step_list
104
+
47
105
  # File pattern for finding step definitions. Defaults to
48
106
  # 'features/**/*.rb'.
49
107
  deprecate_accessor :step_pattern
108
+
50
109
  # Array of paths to specific features to run.
51
110
  deprecate_accessor :feature_list
111
+
52
112
  # File pattern for finding features to run. Defaults to
53
113
  # 'features/**/*.feature'. Can be overridden by the FEATURE environment variable.
54
114
  deprecate_accessor :feature_pattern
115
+
55
116
  # Extra options to pass to the cucumber binary. Can be overridden by the CUCUMBER_OPTS environment variable.
117
+ # It's recommended to pass an Array, but if it's a String it will be #split by ' '.
56
118
  attr_accessor :cucumber_opts
57
- # Run cucumber with RCov?
119
+ def cucumber_opts=(opts) #:nodoc:
120
+ @cucumber_opts = String === opts ? opts.split(' ') : opts
121
+ end
122
+
123
+ # Run cucumber with RCov? Defaults to false. If you set this to
124
+ # true, +fork+ is implicit.
58
125
  attr_accessor :rcov
59
- # Extra options to pass to rcov
126
+
127
+ # Extra options to pass to rcov.
128
+ # It's recommended to pass an Array, but if it's a String it will be #split by ' '.
60
129
  attr_accessor :rcov_opts
130
+ def rcov_opts=(opts) #:nodoc:
131
+ @rcov_opts = String === opts ? opts.split(' ') : opts
132
+ end
133
+
134
+ # Whether or not to fork a new ruby interpreter. Defaults to false.
135
+ attr_accessor :fork
136
+
61
137
  # Define what profile to be used. When used with cucumber_opts it is simply appended to it. Will be ignored when CUCUMBER_OPTS is used.
62
138
  def profile=(profile)
63
139
  @profile = profile
@@ -69,13 +145,14 @@ module Cucumber
69
145
  end
70
146
  attr_reader :profile
71
147
 
72
- # Define a Rake
148
+ # Define Cucumber Rake task
73
149
  def initialize(task_name = "features", desc = "Run Features with Cucumber")
74
150
  @task_name, @desc = task_name, desc
75
151
  @libs = ['lib']
76
152
  @rcov_opts = %w{--rails --exclude osx\/objc,gems\/}
77
153
 
78
154
  yield self if block_given?
155
+ @fork = true if @rcov
79
156
 
80
157
  @feature_pattern = "features/**/*.feature" if feature_pattern.nil? && feature_list.nil?
81
158
  @step_pattern = "features/**/*.rb" if step_pattern.nil? && step_list.nil?
@@ -89,32 +166,23 @@ module Cucumber
89
166
  def define_task # :nodoc:
90
167
  desc @desc
91
168
  task @task_name do
92
- ruby(arguments_for_ruby_execution.join(" ")) # ruby(*args) is broken on Windows
169
+ runner.run
93
170
  end
94
171
  end
95
172
 
96
- def arguments_for_ruby_execution(task_args = nil) # :nodoc:
97
- lib_args = ['"%s"' % libs.join(File::PATH_SEPARATOR)]
98
- cucumber_bin = ['"%s"' % binary]
99
- cuc_opts = [(ENV['CUCUMBER_OPTS'] || cucumber_opts_with_profile)]
100
-
101
- step_files(task_args).each do |step_file|
102
- cuc_opts << '--require'
103
- cuc_opts << step_file
104
- end
105
-
106
- if rcov
107
- args = (['-I'] + lib_args + ['-S', 'rcov'] + rcov_opts +
108
- cucumber_bin + ['--'] + cuc_opts + feature_files(task_args)).flatten
173
+ def runner(task_args = nil) # :nodoc:
174
+ cucumber_opts = [(ENV['CUCUMBER_OPTS'] || cucumber_opts_with_profile)]
175
+ if(@rcov)
176
+ RCovCucumberRunner.new(libs, binary, cucumber_opts, feature_files(task_args), rcov_opts)
177
+ elsif(@fork)
178
+ ForkedCucumberRunner.new(libs, binary, cucumber_opts, feature_files(task_args))
109
179
  else
110
- args = (['-I'] + lib_args + cucumber_bin + cuc_opts + feature_files(task_args)).flatten
180
+ InProcessCucumberRunner.new(libs, cucumber_opts, feature_files(task_args))
111
181
  end
112
-
113
- args
114
182
  end
115
183
 
116
184
  def cucumber_opts_with_profile # :nodoc:
117
- @profile ? "#{cucumber_opts} --profile #{@profile}" : cucumber_opts
185
+ @profile ? [cucumber_opts, '--profile', @profile] : cucumber_opts
118
186
  end
119
187
 
120
188
  def feature_files(task_args = nil) # :nodoc:
@@ -149,7 +217,7 @@ module Cucumber
149
217
  def define_task # :nodoc:
150
218
  desc @desc
151
219
  task @task_name, :feature_name do |t, args|
152
- ruby(arguments_for_ruby_execution(args).join(" ")) # ruby(*args) is broken on Windows
220
+ runner(args).run
153
221
  end
154
222
  end
155
223
 
@@ -3,7 +3,7 @@ module Cucumber #:nodoc:
3
3
  MAJOR = 0
4
4
  MINOR = 3
5
5
  TINY = 3
6
- PATCH = 2 # Set to nil for official release
6
+ PATCH = 3 # Set to nil for official release
7
7
 
8
8
  STRING = [MAJOR, MINOR, TINY, PATCH].compact.join('.')
9
9
  end
@@ -4,7 +4,7 @@ begin
4
4
  require 'cucumber/rake/task'
5
5
 
6
6
  Cucumber::Rake::Task.new(:features) do |t|
7
- t.cucumber_opts = "--format pretty"
7
+ t.t.cucumber_opts = %w{$1}--format pretty"
8
8
  end
9
9
  task :features => 'db:test:prepare'
10
10
  rescue LoadError
@@ -107,8 +107,6 @@ module Cli
107
107
  given_cucumber_yml_defined_as({'default' => '--require from/yml', 'html_report' => '--format html'})
108
108
 
109
109
  config = Configuration.new(StringIO.new, error = StringIO.new)
110
- config.parse!(%w{--profile i_do_not_exist})
111
-
112
110
  expected_message = <<-END_OF_MESSAGE
113
111
  Could not find profile: 'i_do_not_exist'
114
112
 
@@ -117,16 +115,15 @@ Defined profiles in cucumber.yml:
117
115
  * html_report
118
116
  END_OF_MESSAGE
119
117
 
120
- error.string.should == expected_message
118
+ lambda{config.parse!(%w{--profile i_do_not_exist})}.should raise_error(expected_message)
121
119
  end
122
120
 
123
- it "should provide a helpful error message when a specified profile is not a String" do
121
+ it "should allow array as profile" do
124
122
  given_cucumber_yml_defined_as({'foo' => [1,2,3]})
125
123
 
126
124
  config = Configuration.new(StringIO.new, error = StringIO.new)
127
125
  config.parse!(%w{--profile foo})
128
-
129
- error.string.should == "Profiles must be defined as a String. The 'foo' profile was [1, 2, 3] (Array).\n"
126
+ config.paths.should == [1,2,3]
130
127
  end
131
128
 
132
129
  it "should provide a helpful error message when a specified profile exists but is nil or blank" do
@@ -134,9 +131,8 @@ END_OF_MESSAGE
134
131
  given_cucumber_yml_defined_as({'foo' => bad_input})
135
132
 
136
133
  config = Configuration.new(StringIO.new, error = StringIO.new)
137
- config.parse!(%w{--profile foo})
138
-
139
- error.string.should match(/The 'foo' profile in cucumber.yml was blank. Please define the command line arguments for the 'foo' profile in cucumber.yml./)
134
+ expected_error = /The 'foo' profile in cucumber.yml was blank. Please define the command line arguments for the 'foo' profile in cucumber.yml./
135
+ lambda{config.parse!(%w{--profile foo})}.should raise_error(expected_error)
140
136
  end
141
137
  end
142
138
 
@@ -144,9 +140,8 @@ END_OF_MESSAGE
144
140
  File.should_receive(:exist?).with('cucumber.yml').and_return(false)
145
141
 
146
142
  config = Configuration.new(StringIO.new, error = StringIO.new)
147
- config.parse!(%w{--profile i_do_not_exist})
148
-
149
- error.string.should match(/cucumber.yml was not found. Please refer to cucumber's documentation on defining profiles in cucumber.yml./)
143
+ expected_error = /cucumber.yml was not found. Please refer to cucumber's documentation on defining profiles in cucumber.yml./
144
+ lambda{config.parse!(%w{--profile i_do_not_exist})}.should raise_error(expected_error)
150
145
  end
151
146
 
152
147
  it "should provide a helpful error message when cucumber.yml is blank or malformed" do
@@ -156,9 +151,7 @@ END_OF_MESSAGE
156
151
  given_cucumber_yml_defined_as(bad_input)
157
152
 
158
153
  config = Configuration.new(StringIO.new, error = StringIO.new)
159
- config.parse!([])
160
-
161
- error.string.should match(expected_error_message)
154
+ lambda{config.parse!([])}.should raise_error(expected_error_message)
162
155
  end
163
156
  end
164
157
 
@@ -169,9 +162,7 @@ END_OF_MESSAGE
169
162
  YAML.should_receive(:load).and_raise Exception
170
163
 
171
164
  config = Configuration.new(StringIO.new, error = StringIO.new)
172
- config.parse!([])
173
-
174
- error.string.should match(expected_error_message)
165
+ lambda{config.parse!([])}.should raise_error(expected_error_message)
175
166
  end
176
167
 
177
168
  it "should accept --dry-run option" do
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: aslakhellesoy-cucumber
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.3.2
4
+ version: 0.3.3.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - "Aslak Helles\xC3\xB8y"
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-05-11 00:00:00 -07:00
12
+ date: 2009-05-13 00:00:00 -07:00
13
13
  default_executable: cucumber
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -106,6 +106,10 @@ files:
106
106
  - examples/i18n/bg/features/support/env.rb
107
107
  - examples/i18n/bg/features/support/world.rb
108
108
  - examples/i18n/bg/lib/calculator.rb
109
+ - examples/i18n/cat/Rakefile
110
+ - examples/i18n/cat/features/step_definitons/calculator_steps.rb
111
+ - examples/i18n/cat/features/suma.feature
112
+ - examples/i18n/cat/lib/calculadora.rb
109
113
  - examples/i18n/da/Rakefile
110
114
  - examples/i18n/da/features/step_definitons/kalkulator_steps.rb
111
115
  - examples/i18n/da/features/summering.feature
@@ -191,6 +195,7 @@ files:
191
195
  - examples/i18n/pt/Rakefile
192
196
  - examples/i18n/pt/features/adicao.feature
193
197
  - examples/i18n/pt/features/step_definitions/calculadora_steps.rb
198
+ - examples/i18n/pt/features/support/env.rb
194
199
  - examples/i18n/pt/lib/calculadora.rb
195
200
  - examples/i18n/ro/Rakefile
196
201
  - examples/i18n/ro/features/step_definitons/calculator_steps.rb