cucumber 0.1.7 → 0.1.8

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 (80) hide show
  1. data/History.txt +81 -0
  2. data/Manifest.txt +30 -9
  3. data/README.txt +1 -2
  4. data/bin/cucumber +1 -1
  5. data/examples/calculator/README.txt +5 -0
  6. data/examples/calculator/Rakefile +1 -2
  7. data/examples/calculator/features/addition.feature +1 -0
  8. data/examples/chinese_simplified_calculator/Rakefile +6 -0
  9. data/examples/chinese_simplified_calculator/features/addition.feature +17 -0
  10. data/examples/chinese_simplified_calculator/features/steps/calculator_steps.rb +24 -0
  11. data/examples/chinese_simplified_calculator/lib/calculator.rb +10 -0
  12. data/examples/java/features/steps/hello_steps.rb +1 -1
  13. data/examples/swedish_calculator/Rakefile +5 -0
  14. data/examples/swedish_calculator/features/steps/kalkulator_steps.rb +22 -0
  15. data/examples/swedish_calculator/features/summering.feature +17 -0
  16. data/examples/swedish_calculator/lib/kalkulator.rb +11 -0
  17. data/examples/tickets/Rakefile +8 -1
  18. data/examples/tickets/cucumber.yml +2 -0
  19. data/examples/tickets/features/steps/tickets_steps.rb +15 -0
  20. data/examples/tickets/features/tickets.feature +12 -1
  21. data/gem_tasks/treetop.rake +35 -23
  22. data/lib/cucumber.rb +1 -0
  23. data/lib/cucumber/cli.rb +19 -5
  24. data/lib/cucumber/core_ext/proc.rb +8 -5
  25. data/lib/cucumber/executor.rb +7 -1
  26. data/lib/cucumber/formatters.rb +1 -1
  27. data/lib/cucumber/formatters/html_formatter.rb +6 -3
  28. data/lib/cucumber/formatters/pretty_formatter.rb +29 -7
  29. data/lib/cucumber/formatters/profile_formatter.rb +92 -0
  30. data/lib/cucumber/languages.yml +39 -12
  31. data/lib/cucumber/model.rb +1 -0
  32. data/lib/cucumber/model/table.rb +28 -0
  33. data/lib/cucumber/rails/world.rb +1 -3
  34. data/lib/cucumber/rake/task.rb +1 -1
  35. data/lib/cucumber/tree/feature.rb +8 -2
  36. data/lib/cucumber/tree/scenario.rb +23 -6
  37. data/lib/cucumber/tree/step.rb +5 -4
  38. data/lib/cucumber/treetop_parser/feature.treetop.erb +54 -12
  39. data/lib/cucumber/treetop_parser/feature_da.rb +415 -74
  40. data/lib/cucumber/treetop_parser/feature_de.rb +415 -74
  41. data/lib/cucumber/treetop_parser/feature_en.rb +415 -74
  42. data/lib/cucumber/treetop_parser/feature_es.rb +415 -74
  43. data/lib/cucumber/treetop_parser/feature_et.rb +415 -74
  44. data/lib/cucumber/treetop_parser/feature_fr.rb +415 -74
  45. data/lib/cucumber/treetop_parser/feature_nl.rb +1593 -0
  46. data/lib/cucumber/treetop_parser/feature_no.rb +415 -74
  47. data/lib/cucumber/treetop_parser/feature_pt.rb +415 -74
  48. data/lib/cucumber/treetop_parser/feature_ru.rb +415 -74
  49. data/lib/cucumber/treetop_parser/feature_se.rb +419 -78
  50. data/lib/cucumber/treetop_parser/feature_zh-CN.rb +1593 -0
  51. data/lib/cucumber/version.rb +1 -1
  52. data/{generators → rails_generators}/cucumber/cucumber_generator.rb +0 -0
  53. data/{generators → rails_generators}/cucumber/templates/common_webrat.rb +1 -10
  54. data/{generators → rails_generators}/cucumber/templates/cucumber +0 -0
  55. data/{generators → rails_generators}/cucumber/templates/cucumber.rake +0 -0
  56. data/{generators → rails_generators}/cucumber/templates/env.rb +0 -0
  57. data/{generators → rails_generators}/feature/feature_generator.rb +0 -0
  58. data/{generators → rails_generators}/feature/templates/feature.erb +1 -0
  59. data/{generators → rails_generators}/feature/templates/steps.erb +0 -0
  60. data/spec/cucumber/cli_spec.rb +11 -3
  61. data/spec/cucumber/core_ext/proc_spec.rb +6 -0
  62. data/spec/cucumber/formatters/html_formatter_spec.rb +16 -1
  63. data/spec/cucumber/formatters/pretty_formatter_spec.rb +54 -25
  64. data/spec/cucumber/formatters/profile_formatter_spec.rb +193 -0
  65. data/spec/cucumber/model/table_spec.rb +20 -0
  66. data/spec/cucumber/rails/stubs/mini_rails.rb +17 -0
  67. data/spec/cucumber/rails/stubs/test_help.rb +1 -0
  68. data/spec/cucumber/rails/world_spec.rb +11 -0
  69. data/spec/cucumber/tree/feature_spec.rb +12 -0
  70. data/spec/cucumber/tree/scenario_spec.rb +22 -0
  71. data/spec/cucumber/tree/step_spec.rb +12 -2
  72. data/spec/cucumber/treetop_parser/empty_scenario.feature +1 -1
  73. data/spec/cucumber/treetop_parser/feature_parser_spec.rb +18 -0
  74. data/spec/cucumber/treetop_parser/fit_scenario.feature +1 -0
  75. data/spec/cucumber/treetop_parser/multiline_steps.feature +13 -0
  76. data/spec/cucumber/treetop_parser/multiple_tables.feature +2 -0
  77. data/spec/cucumber/treetop_parser/test_dos.feature +1 -0
  78. data/spec/cucumber/treetop_parser/with_comments.feature +6 -2
  79. metadata +34 -12
  80. data/examples/calculator/cucumber.yml +0 -1
@@ -1,3 +1,84 @@
1
+ == 0.1.8 2008-10-18
2
+
3
+ This release extends the support for tables. PLEASE NOTE THAT TABLES ARE STILL EXPERIMENTAL.
4
+ In previous releases it has been possible to use tables to define "more examples" of a scenario i
5
+ n a FIT-style column fixture kind of way. Now you can also use tables as arguments to steps.
6
+
7
+ Tables used to define more examples after a scenario must now be prefixed. In English it looks like this:
8
+
9
+ Feature: Addition
10
+ In order to avoid silly mistakes
11
+ As a math idiot
12
+ I want to be told the sum of two numbers
13
+
14
+ Scenario: Add two numbers
15
+ Given I have entered 50 into the calculator
16
+ And I have entered 70 into the calculator
17
+ When I press add
18
+ Then the result should be 120 on the screen
19
+ And the result class should be Fixnum
20
+
21
+ More Examples:
22
+ | input_1 | input_2 | button | output | class |
23
+ | 20 | 30 | add | 50 | Fixnum |
24
+ | 2 | 5 | add | 7 | Fixnum |
25
+ | 0 | 40 | add | 40 | Fixnum |
26
+
27
+ Languages that are not updated yet will have to use "More Examples" until we get the translations.
28
+
29
+ Tables can also be used as arguments to individual steps. In fact, steps now support a single argument
30
+ that can span several lines. This can be a table or a string.
31
+
32
+ Example:
33
+
34
+ Given the following people exist:
35
+ | name | email | phone |
36
+ | Aslak | aslak@email.com | 123 |
37
+ | Joe | joe@email.com | 234 |
38
+ | Bryan | bryan@email.org | 234 |
39
+ When I search for email.com
40
+ Then I should see:
41
+ | name | email | phone |
42
+ | Aslak | aslak@email.com | 123 |
43
+ | Joe | joe@email.com | 234 |
44
+ And I should see:
45
+ "Some text
46
+ on several lines"
47
+
48
+ The step definitions for such multiline steps must define an extra block argument for the argument:
49
+
50
+ Given /the following people exist:/ do |people_table|
51
+ # people_table is of type Cucumber::Model::Table
52
+ # See RDoc for more info
53
+ end
54
+
55
+ Then /I should see:/ do |string|
56
+ # string is a plain old ruby String with leading spaces on each line removed
57
+ end
58
+
59
+ === New features
60
+ * Added profile formatter. (#35, Joseph Wilk)
61
+ * Added support for Chinese Simplified. (Liming Lian)
62
+ * Added support for Dutch. (Sjoerd Tieleman)
63
+ * Multiline steps are now supported. (#4, Aslak Hellesøy)
64
+ * Tables used to define more examples for a scenario must be prefixed "More Examples" (see languages.yml for other languages)
65
+ * Show the file and line number for scenarios as a comment when displaying with the pretty formatter. (#40, Joseph Wilk)
66
+ * Show the file for the feature as a comment when displaying with the pretty formatter. (#40, Joseph Wilk)
67
+ * Show the feature file and line for pending steps as a comment when displaying with the pretty formatter. (#40, Joseph Wilk)
68
+
69
+ === Bugfixes
70
+ * Fixed speling errors in Spanish (Daniel Cadenas)
71
+ * ActionMailer delivery_method should not be set to test (#41, Luke Melia)
72
+ * Reverse incorrectly ordered args in webrat select step (#43, David Chelimsky)
73
+ * Support comments above the first scenario (#31, Aslak Hellesøy)
74
+ * Fixed the HTML Formatter to use actual values for FIT table headers (#30, Joseph Wilk)
75
+
76
+ === Removed features
77
+ * Removed the /^I go to (.*)$/ step from common_webrat.rb - it's not language agnostic and provides little value.
78
+
79
+ === New features
80
+ * Added new --out option to make it easier to specify output from Rake and cucumber.yml
81
+
1
82
  == 0.1.7
2
83
 
3
84
  This release fixes a few bugs and adds some new features. The most notable features are:
@@ -8,8 +8,8 @@ bin/cucumber
8
8
  config/hoe.rb
9
9
  config/requirements.rb
10
10
  cucumber.yml
11
+ examples/calculator/README.txt
11
12
  examples/calculator/Rakefile
12
- examples/calculator/cucumber.yml
13
13
  examples/calculator/features/addition.feature
14
14
  examples/calculator/features/division.feature
15
15
  examples/calculator/features/steps/calculator_steps.rb
@@ -20,6 +20,10 @@ examples/calculator_ruby_features/features/steps/calculator_steps.rb
20
20
  examples/calculatrice_francaise_avec_soit_scenario/Rakefile
21
21
  examples/calculatrice_francaise_avec_soit_scenario/features/addition.feature
22
22
  examples/calculatrice_francaise_avec_soit_scenario/features/calculatrice_steps.rb
23
+ examples/chinese_simplified_calculator/Rakefile
24
+ examples/chinese_simplified_calculator/features/addition.feature
25
+ examples/chinese_simplified_calculator/features/steps/calculator_steps.rb
26
+ examples/chinese_simplified_calculator/lib/calculator.rb
23
27
  examples/cs/README.textile
24
28
  examples/cs/Rakefile
25
29
  examples/cs/features/hello.feature
@@ -57,7 +61,12 @@ examples/spanish_calculator/Rakefile
57
61
  examples/spanish_calculator/features/adicion.feature
58
62
  examples/spanish_calculator/features/steps/calculador_steps.rb
59
63
  examples/spanish_calculator/lib/Calculador.rb
64
+ examples/swedish_calculator/Rakefile
65
+ examples/swedish_calculator/features/steps/kalkulator_steps.rb
66
+ examples/swedish_calculator/features/summering.feature
67
+ examples/swedish_calculator/lib/kalkulator.rb
60
68
  examples/tickets/Rakefile
69
+ examples/tickets/cucumber.yml
61
70
  examples/tickets/features/steps/tickets_steps.rb
62
71
  examples/tickets/features/tickets.feature
63
72
  examples/watir/Rakefile
@@ -73,14 +82,6 @@ gem_tasks/flog.rake
73
82
  gem_tasks/gemspec.rake
74
83
  gem_tasks/rspec.rake
75
84
  gem_tasks/treetop.rake
76
- generators/cucumber/cucumber_generator.rb
77
- generators/cucumber/templates/common_webrat.rb
78
- generators/cucumber/templates/cucumber
79
- generators/cucumber/templates/cucumber.rake
80
- generators/cucumber/templates/env.rb
81
- generators/feature/feature_generator.rb
82
- generators/feature/templates/feature.erb
83
- generators/feature/templates/steps.erb
84
85
  lib/cucumber.rb
85
86
  lib/cucumber/cli.rb
86
87
  lib/cucumber/core_ext/proc.rb
@@ -93,8 +94,11 @@ lib/cucumber/formatters/cucumber.js
93
94
  lib/cucumber/formatters/html_formatter.rb
94
95
  lib/cucumber/formatters/jquery.js
95
96
  lib/cucumber/formatters/pretty_formatter.rb
97
+ lib/cucumber/formatters/profile_formatter.rb
96
98
  lib/cucumber/formatters/progress_formatter.rb
97
99
  lib/cucumber/languages.yml
100
+ lib/cucumber/model.rb
101
+ lib/cucumber/model/table.rb
98
102
  lib/cucumber/rails/rspec.rb
99
103
  lib/cucumber/rails/world.rb
100
104
  lib/cucumber/rake/task.rb
@@ -115,12 +119,22 @@ lib/cucumber/treetop_parser/feature_en.rb
115
119
  lib/cucumber/treetop_parser/feature_es.rb
116
120
  lib/cucumber/treetop_parser/feature_et.rb
117
121
  lib/cucumber/treetop_parser/feature_fr.rb
122
+ lib/cucumber/treetop_parser/feature_nl.rb
118
123
  lib/cucumber/treetop_parser/feature_no.rb
119
124
  lib/cucumber/treetop_parser/feature_parser.rb
120
125
  lib/cucumber/treetop_parser/feature_pt.rb
121
126
  lib/cucumber/treetop_parser/feature_ru.rb
122
127
  lib/cucumber/treetop_parser/feature_se.rb
128
+ lib/cucumber/treetop_parser/feature_zh-CN.rb
123
129
  lib/cucumber/version.rb
130
+ rails_generators/cucumber/cucumber_generator.rb
131
+ rails_generators/cucumber/templates/common_webrat.rb
132
+ rails_generators/cucumber/templates/cucumber
133
+ rails_generators/cucumber/templates/cucumber.rake
134
+ rails_generators/cucumber/templates/env.rb
135
+ rails_generators/feature/feature_generator.rb
136
+ rails_generators/feature/templates/feature.erb
137
+ rails_generators/feature/templates/steps.erb
124
138
  script/console
125
139
  script/console.cmd
126
140
  script/destroy
@@ -138,9 +152,15 @@ spec/cucumber/formatters/ansicolor_spec.rb
138
152
  spec/cucumber/formatters/features.html
139
153
  spec/cucumber/formatters/html_formatter_spec.rb
140
154
  spec/cucumber/formatters/pretty_formatter_spec.rb
155
+ spec/cucumber/formatters/profile_formatter_spec.rb
141
156
  spec/cucumber/formatters/progress_formatter_spec.rb
157
+ spec/cucumber/model/table_spec.rb
158
+ spec/cucumber/rails/stubs/mini_rails.rb
159
+ spec/cucumber/rails/stubs/test_help.rb
160
+ spec/cucumber/rails/world_spec.rb
142
161
  spec/cucumber/sell_cucumbers.feature
143
162
  spec/cucumber/step_mother_spec.rb
163
+ spec/cucumber/tree/feature_spec.rb
144
164
  spec/cucumber/tree/scenario_spec.rb
145
165
  spec/cucumber/tree/step_spec.rb
146
166
  spec/cucumber/treetop_parser/empty_feature.feature
@@ -148,6 +168,7 @@ spec/cucumber/treetop_parser/empty_scenario.feature
148
168
  spec/cucumber/treetop_parser/feature_parser_spec.rb
149
169
  spec/cucumber/treetop_parser/fit_scenario.feature
150
170
  spec/cucumber/treetop_parser/given_scenario.feature
171
+ spec/cucumber/treetop_parser/multiline_steps.feature
151
172
  spec/cucumber/treetop_parser/multiple_tables.feature
152
173
  spec/cucumber/treetop_parser/spaces.feature
153
174
  spec/cucumber/treetop_parser/test_dos.feature
data/README.txt CHANGED
@@ -13,8 +13,7 @@ Documentation: http://github.com/aslakhellesoy/cucumber/wikis/home
13
13
 
14
14
  == INSTALL:
15
15
 
16
- * gem sources --add http://gems.github.com/
17
- * gem install aslakhellesoy-cucumber
16
+ * gem install cucumber
18
17
 
19
18
  == LICENSE:
20
19
 
@@ -1,4 +1,4 @@
1
1
  #!/usr/bin/env ruby
2
- $:.unshift(File.dirname(__FILE__) + '/../lib/') unless $:.include?(File.dirname(__FILE__) + '/../lib/')
2
+ $:.unshift(File.dirname(__FILE__) + '/../lib') unless $:.include?(File.dirname(__FILE__) + '/../lib')
3
3
  require 'cucumber/cli'
4
4
  Cucumber::CLI.execute
@@ -0,0 +1,5 @@
1
+ Run the features with
2
+
3
+ rake features
4
+
5
+ There is a bug in the calculator. Can you spot it and fix it?
@@ -1,6 +1,5 @@
1
- $:.unshift(File.dirname(__FILE__) + '/../../lib')
1
+ $:.unshift(File.dirname(__FILE__) + '/../../lib') # If you're running off a Cucumber gem you can skip this line
2
2
  require 'cucumber/rake/task'
3
3
 
4
4
  Cucumber::Rake::Task.new do |t|
5
- t.cucumber_opts = "--profile default"
6
5
  end
@@ -10,6 +10,7 @@ Feature: Addition
10
10
  Then the result should be 120 on the screen
11
11
  And the result class should be Fixnum
12
12
 
13
+ More Examples:
13
14
  | input_1 | input_2 | button | output | class |
14
15
  | 20 | 30 | add | 50 | Fixnum |
15
16
  | 2 | 5 | add | 7 | Fixnum |
@@ -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 = "--format pretty --language zh-CN"
6
+ end
@@ -0,0 +1,17 @@
1
+ 功能:加法
2
+ 为了避免一些愚蠢的错误
3
+ 作为一个数学白痴
4
+ 我希望有人告诉我数字相加的结果
5
+
6
+ 场景: 两个数相加
7
+ 假如我已经在计算器里输入6
8
+ 而且我已经在计算器里输入7
9
+ 当我按相加按钮
10
+ 那么我应该在屏幕上看到的结果是13
11
+
12
+ 场景: 三个数相加
13
+ 假如我已经在计算器里输入6
14
+ 而且我已经在计算器里输入7
15
+ 而且我已经在计算器里输入1
16
+ 当我按相加按钮
17
+ 那么我应该在屏幕上看到的结果是14
@@ -0,0 +1,24 @@
1
+ require 'spec'
2
+ $:.unshift(File.dirname(__FILE__) + '/../../lib')
3
+ require 'calculator'
4
+
5
+ Before do
6
+ @calc = Calculator.new
7
+ end
8
+
9
+ After do
10
+ end
11
+
12
+ Given "我已经在计算器里输入$n" do |n|
13
+ @calc.push n.to_i
14
+ end
15
+
16
+ When /我按(.*)按钮/ do |op|
17
+ if op == '相加'
18
+ @result = @calc.send "add"
19
+ end
20
+ end
21
+
22
+ Then /我应该在屏幕上看到的结果是(.*)/ do |result|
23
+ @result.should == result.to_f
24
+ end
@@ -0,0 +1,10 @@
1
+ class Calculator
2
+ def push(n)
3
+ @args ||= []
4
+ @args << n
5
+ end
6
+
7
+ def add
8
+ @args.inject(0){|n,sum| sum+=n}
9
+ end
10
+ end
@@ -20,6 +20,6 @@ Then /I should remember (\w+) as a friend/ do |name|
20
20
  @hello.friend?(name).should == true
21
21
  end
22
22
 
23
- Then /I should get (\w+)'s phone number/ do |name|
23
+ Then /I should get (\w+)'s phone number/ do |name| #'
24
24
  @hello.getPhoneNumber(name).should_not == nil
25
25
  end
@@ -0,0 +1,5 @@
1
+ require 'cucumber/rake/task'
2
+
3
+ Cucumber::Rake::Task.new do |t|
4
+ t.cucumber_opts = "--format pretty --language se"
5
+ end
@@ -0,0 +1,22 @@
1
+ require 'spec'
2
+ $:.unshift(File.dirname(__FILE__) + '/../../lib')
3
+ require 'kalkulator'
4
+
5
+ Before do
6
+ @calc = Kalkulator.new
7
+ end
8
+
9
+ After do
10
+ end
11
+
12
+ Given /att jag har knappat in (\d+)/ do |n|
13
+ @calc.push n.to_i
14
+ end
15
+
16
+ When 'jag summerar' do
17
+ @result = @calc.add
18
+ end
19
+
20
+ Then /ska resultatet vara (\d+)/ do |result|
21
+ @result.should == result.to_i
22
+ end
@@ -0,0 +1,17 @@
1
+ Egenskap: Summering
2
+ För att slippa att göra dumma fel
3
+ Som räknare
4
+ Vill jag kunna lägga samman
5
+
6
+ Scenario: två tal
7
+ Givet att jag har knappat in 5
8
+ Och att jag har knappat in 7
9
+ När jag summerar
10
+ Så ska resultatet vara 12
11
+
12
+ Scenario: tre tal
13
+ Givet att jag har knappat in 5
14
+ Och att jag har knappat in 4
15
+ Och att jag har knappat in 3
16
+ När jag summerar
17
+ Så ska resultatet vara 12
@@ -0,0 +1,11 @@
1
+ class Kalkulator
2
+ def push(n)
3
+ @args ||= []
4
+ @args << n
5
+ end
6
+
7
+ def add
8
+ #@args[0] + @args[1]
9
+ @args.inject(0){|n,sum| sum+=n}
10
+ end
11
+ end
@@ -1,4 +1,11 @@
1
1
  $:.unshift(File.dirname(__FILE__) + '/../../lib')
2
2
  require 'cucumber/rake/task'
3
3
 
4
- Cucumber::Rake::Task.new
4
+ # Try these:
5
+ #
6
+ # rake features
7
+ # rake features PROFILE=html
8
+ Cucumber::Rake::Task.new do |t|
9
+ profile = ENV['PROFILE'] || 'default'
10
+ t.cucumber_opts = "--profile #{profile}"
11
+ end
@@ -0,0 +1,2 @@
1
+ default: --format pretty
2
+ html: --format html --out features.html
@@ -15,3 +15,18 @@ end
15
15
  Then "nested step should be executed" do
16
16
  @magic.should == 'mushroom'
17
17
  end
18
+
19
+ Given /^the following table$/ do |table|
20
+ @table = table
21
+ end
22
+
23
+ Then /^I should be (\w+) in (\w+)$/ do |key, value|
24
+ hash = @table.hashes[0]
25
+ hash[key].should == value
26
+ end
27
+
28
+ Then /^I shoule see a multiline string like$/ do |s|
29
+ s.should == %{A string
30
+ that spans
31
+ several lines}
32
+ end
@@ -8,4 +8,15 @@ Feature: Cucumber
8
8
 
9
9
  Scenario: Call step from step
10
10
  Given nested step is called
11
- Then nested step should be executed
11
+ Then nested step should be executed
12
+
13
+ Scenario: Reading a table
14
+ Given the following table
15
+ | born | working |
16
+ | Oslo | London |
17
+ Then I should be working in London
18
+ And I should be born in Oslo
19
+ And I shoule see a multiline string like
20
+ "A string
21
+ that spans
22
+ several lines"
@@ -1,37 +1,49 @@
1
1
  class FeatureCompiler
2
- def compile
2
+ def initialize
3
3
  require 'yaml'
4
4
  require 'erb'
5
- tt = PLATFORM =~ /mswin|mingw/ ? 'tt.bat' : 'tt'
5
+
6
+ @tt = PLATFORM =~ /mswin|mingw/ ? 'tt.bat' : 'tt'
6
7
 
7
- template = ERB.new(IO.read(File.dirname(__FILE__) + '/../lib/cucumber/treetop_parser/feature.treetop.erb'))
8
- langs = YAML.load_file(File.dirname(__FILE__) + '/../lib/cucumber/languages.yml')
9
-
10
- langs.each do |lang, words|
11
- grammar_file = File.dirname(__FILE__) + "/../lib/cucumber/treetop_parser/feature_#{lang}.treetop"
12
- ruby_file = File.dirname(__FILE__) + "/../lib/cucumber/treetop_parser/feature_#{lang}.rb"
13
- grammar = template.result(binding)
14
- File.open(grammar_file, "wb") do |io|
15
- io.write(grammar)
16
- end
17
- sh "#{tt} #{grammar_file}"
18
- FileUtils.rm(grammar_file)
19
-
20
- # Change code so it isn't part of RDoc
21
- lines = IO.read(ruby_file).split("\n")
22
- lines.each do |line|
23
- if line =~ /\s*(def|class|module)/
24
- line << " #:nodoc:"
25
- end
8
+ @template = ERB.new(IO.read(File.dirname(__FILE__) + '/../lib/cucumber/treetop_parser/feature.treetop.erb'))
9
+ @langs = YAML.load_file(File.dirname(__FILE__) + '/../lib/cucumber/languages.yml')
10
+ end
11
+
12
+ def compile_all
13
+ @langs.keys.each do |lang|
14
+ compile(lang)
15
+ end
16
+ end
17
+
18
+ def compile(lang)
19
+ words = @langs['en'].merge(@langs[lang]) # Use English words if languages.yml is missing a word
20
+ grammar_file = File.dirname(__FILE__) + "/../lib/cucumber/treetop_parser/feature_#{lang}.treetop"
21
+ ruby_file = File.dirname(__FILE__) + "/../lib/cucumber/treetop_parser/feature_#{lang}.rb"
22
+ grammar = @template.result(binding)
23
+ File.open(grammar_file, "wb") do |io|
24
+ io.write(grammar)
25
+ end
26
+ sh "#{@tt} #{grammar_file}"
27
+ FileUtils.rm(grammar_file)
28
+
29
+ # Change code so it isn't part of RDoc
30
+ lines = IO.read(ruby_file).split("\n")
31
+ lines.each do |line|
32
+ if line =~ /\s*(def|class|module)/
33
+ line << " #:nodoc:"
26
34
  end
27
- File.open(ruby_file, 'wb'){|io| io.write(lines.join("\n"))}
28
35
  end
36
+ File.open(ruby_file, 'wb'){|io| io.write(lines.join("\n"))}
29
37
  end
30
38
  end
31
39
 
32
40
  namespace :treetop do
33
41
  desc 'Compile the grammar for all languages in languages.yml'
34
42
  task :compile do
35
- FeatureCompiler.new.compile
43
+ FeatureCompiler.new.compile_all
44
+ end
45
+
46
+ task :compile_en do
47
+ FeatureCompiler.new.compile('en')
36
48
  end
37
49
  end