cucumber 0.4.4 → 0.4.5.rc1

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 (90) hide show
  1. data/.gitignore +2 -1
  2. data/Caliper.yml +5 -0
  3. data/History.txt +24 -1
  4. data/Rakefile +1 -1
  5. data/VERSION.yml +2 -2
  6. data/cucumber.gemspec +18 -27
  7. data/cucumber.yml +10 -4
  8. data/examples/i18n/README.textile +1 -1
  9. data/examples/i18n/bg/features/consecutive_calculations.feature +1 -1
  10. data/examples/i18n/bg/features/division.feature +1 -1
  11. data/examples/i18n/en-lol/Rakefile +1 -3
  12. data/examples/i18n/en/features/division.feature +4 -4
  13. data/examples/i18n/et/features/jagamine.feature +1 -1
  14. data/examples/i18n/fr/features/addition2.feature +17 -0
  15. data/examples/i18n/fr/features/step_definitions/calculatrice_steps.rb +13 -0
  16. data/examples/i18n/ja/features/step_definitons/calculator_steps.rb +3 -3
  17. data/examples/i18n/lt/features/addition.feature +2 -2
  18. data/examples/i18n/lt/features/division.feature +1 -1
  19. data/examples/i18n/zh-CN/Rakefile +1 -3
  20. data/examples/i18n/zh-TW/Rakefile +1 -3
  21. data/examples/tcl/README.textile +11 -0
  22. data/examples/tcl/Rakefile +6 -0
  23. data/examples/tcl/features/fibonnacci.feature +17 -0
  24. data/examples/tcl/features/step_definitions/fib_steps.rb +7 -0
  25. data/examples/tcl/features/support/env.rb +6 -0
  26. data/examples/tcl/src/fib.tcl +3 -0
  27. data/examples/tickets/features/177/1.feature +3 -4
  28. data/examples/tickets/features/177/2.feature +2 -3
  29. data/examples/tickets/features/241.feature +2 -3
  30. data/examples/tickets/features/301/filter_background_tagged_hooks.feature +1 -1
  31. data/features/cucumber_cli.feature +4 -2
  32. data/features/custom_formatter.feature +32 -31
  33. data/features/html_formatter/a.html +319 -102
  34. data/features/language_help.feature +12 -14
  35. data/features/support/env.rb +1 -1
  36. data/features/transform.feature +17 -3
  37. data/gem_tasks/features.rake +3 -1
  38. data/lib/cucumber/ast/scenario_outline.rb +1 -1
  39. data/lib/cucumber/ast/step_invocation.rb +2 -2
  40. data/lib/cucumber/cli/configuration.rb +2 -17
  41. data/lib/cucumber/cli/language_help_formatter.rb +1 -1
  42. data/lib/cucumber/cli/options.rb +5 -4
  43. data/lib/cucumber/formatter/cucumber.css +198 -82
  44. data/lib/cucumber/formatter/cucumber.sass +173 -71
  45. data/lib/cucumber/formatter/html.rb +371 -195
  46. data/lib/cucumber/formatter/io.rb +33 -0
  47. data/lib/cucumber/formatter/junit.rb +16 -7
  48. data/lib/cucumber/formatter/pdf.rb +5 -5
  49. data/lib/cucumber/formatter/pretty.rb +6 -8
  50. data/lib/cucumber/formatter/progress.rb +4 -2
  51. data/lib/cucumber/formatter/rerun.rb +4 -2
  52. data/lib/cucumber/formatter/steps.rb +2 -2
  53. data/lib/cucumber/formatter/tag_cloud.rb +6 -2
  54. data/lib/cucumber/formatter/usage.rb +2 -2
  55. data/lib/cucumber/languages.yml +205 -281
  56. data/lib/cucumber/parser/feature.rb +348 -82
  57. data/lib/cucumber/parser/feature.tt +47 -11
  58. data/lib/cucumber/parser/i18n.tt +7 -17
  59. data/lib/cucumber/parser/natural_language.rb +45 -18
  60. data/lib/cucumber/rb_support/rb_transform.rb +1 -1
  61. data/lib/cucumber/step_mother.rb +2 -3
  62. data/lib/cucumber/webrat/element_locator.rb +9 -5
  63. data/spec/cucumber/cli/options_spec.rb +0 -3
  64. data/spec/cucumber/formatter/html_spec.rb +15 -2
  65. data/spec/cucumber/formatter/junit_spec.rb +3 -0
  66. data/spec/cucumber/treetop_parser/fit_scenario.feature +2 -2
  67. data/spec/cucumber/treetop_parser/given_scenario.feature +1 -1
  68. data/spec/cucumber/treetop_parser/multiple_tables.feature +2 -2
  69. data/spec/cucumber/treetop_parser/test_dos.feature +1 -1
  70. metadata +17 -26
  71. data/Manifest.txt +0 -0
  72. data/lib/cucumber/rails/action_controller.rb +0 -38
  73. data/lib/cucumber/rails/active_record.rb +0 -30
  74. data/lib/cucumber/rails/rspec.rb +0 -10
  75. data/lib/cucumber/rails/test_unit.rb +0 -9
  76. data/lib/cucumber/rails/world.rb +0 -30
  77. data/rails_generators/cucumber/USAGE +0 -11
  78. data/rails_generators/cucumber/cucumber_generator.rb +0 -117
  79. data/rails_generators/cucumber/templates/cucumber +0 -17
  80. data/rails_generators/cucumber/templates/cucumber.rake +0 -46
  81. data/rails_generators/cucumber/templates/cucumber_environment.rb +0 -30
  82. data/rails_generators/cucumber/templates/env.rb +0 -49
  83. data/rails_generators/cucumber/templates/paths.rb +0 -27
  84. data/rails_generators/cucumber/templates/spork_env.rb +0 -57
  85. data/rails_generators/cucumber/templates/version_check.rb +0 -31
  86. data/rails_generators/cucumber/templates/webrat_steps.rb +0 -241
  87. data/rails_generators/feature/USAGE +0 -12
  88. data/rails_generators/feature/feature_generator.rb +0 -40
  89. data/rails_generators/feature/templates/feature.erb +0 -31
  90. data/rails_generators/feature/templates/steps.erb +0 -14
@@ -0,0 +1,33 @@
1
+ require 'cucumber/formatter/color_io'
2
+
3
+ module Cucumber
4
+ module Formatter
5
+ module Io
6
+ def ensure_io(path_or_io, name)
7
+ return nil if path_or_io.nil?
8
+ return path_or_io if ColorIO === path_or_io || path_or_io.respond_to?(:write)
9
+ file = File.open(path_or_io, Cucumber.file_mode('w'))
10
+ at_exit do
11
+ unless file.closed?
12
+ file.flush
13
+ file.close
14
+ end
15
+ end
16
+ file
17
+ end
18
+
19
+ def ensure_file(path, name)
20
+ raise "You *must* specify --out FILE for the #{name} formatter" unless String === path
21
+ raise "I can't write #{name} to a directory - it has to be a file" if File.directory?(path)
22
+ ensure_io(path, name)
23
+ end
24
+
25
+ def ensure_dir(path, name)
26
+ raise "You *must* specify --out DIR for the #{name} formatter" unless String === path
27
+ raise "I can't write #{name} reports to a file - it has to be a directory" if File.file?(path)
28
+ FileUtils.mkdir_p(path) unless File.directory?(path)
29
+ path
30
+ end
31
+ end
32
+ end
33
+ end
@@ -1,9 +1,13 @@
1
1
  require 'cucumber/formatter/ordered_xml_markup'
2
+ require 'cucumber/formatter/io'
3
+ require 'fileutils'
2
4
 
3
5
  module Cucumber
4
6
  module Formatter
5
7
  # The formatter used for <tt>--format junit</tt>
6
8
  class Junit
9
+ include Io
10
+
7
11
  class UnNamedFeatureError < StandardError
8
12
  def initialize(feature_file)
9
13
  super("The feature in '#{feature_file}' does not have a name. The JUnit XML format requires a name for the testsuite element.")
@@ -11,8 +15,7 @@ module Cucumber
11
15
  end
12
16
 
13
17
  def initialize(step_mother, io, options)
14
- raise "You *must* specify --out DIR for the junit formatter" unless String === io && File.directory?(io)
15
- @reportdir = io
18
+ @reportdir = ensure_dir(io, "junit")
16
19
  @options = options
17
20
  end
18
21
 
@@ -56,8 +59,9 @@ module Cucumber
56
59
  scenario_name = name.strip.delete(".\r\n")
57
60
  scenario_name = "Unnamed scenario" if name.blank?
58
61
  @scenario = scenario_name
59
- @outline = keyword.include?('Scenario Outline')
60
- @output = "Scenario#{ " outline" if @outline}: #{@scenario}\n\n"
62
+ description = "Scenario"
63
+ description << " outline" if keyword.include?('Scenario Outline')
64
+ @output = "#{description}: #{@scenario}\n\n"
61
65
  end
62
66
 
63
67
  def before_steps(steps)
@@ -65,7 +69,7 @@ module Cucumber
65
69
  end
66
70
 
67
71
  def after_steps(steps)
68
- return if @in_background || @outline
72
+ return if @in_background || @in_examples
69
73
 
70
74
  duration = Time.now - @steps_start
71
75
  if steps.failed?
@@ -77,16 +81,21 @@ module Cucumber
77
81
 
78
82
  def before_examples(*args)
79
83
  @header_row = true
84
+ @in_examples = true
85
+ end
86
+
87
+ def after_examples(*args)
88
+ @in_examples = false
80
89
  end
81
90
 
82
91
  def before_table_row(table_row)
83
- return unless @outline
92
+ return unless @in_examples
84
93
 
85
94
  @table_start = Time.now
86
95
  end
87
96
 
88
97
  def after_table_row(table_row)
89
- return unless @outline
98
+ return unless @in_examples
90
99
  duration = Time.now - @table_start
91
100
  unless @header_row
92
101
  name_suffix = " (outline example : #{table_row.name})"
@@ -1,4 +1,5 @@
1
1
  require 'cucumber/formatter/console'
2
+ require 'cucumber/formatter/io'
2
3
  require 'fileutils'
3
4
  require 'prawn'
4
5
  require "prawn/layout"
@@ -13,11 +14,12 @@ module Cucumber
13
14
  class Pdf
14
15
  include FileUtils
15
16
  include Console
17
+ include Io
16
18
  attr_writer :indent
17
19
 
18
- def initialize(step_mother, io, options)
20
+ def initialize(step_mother, path_or_io, options)
19
21
  @step_mother = step_mother
20
- raise "You *must* specify --out FILE for the pdf formatter" unless File === io
22
+ @file = ensure_file(path_or_io, "pdf")
21
23
 
22
24
  if(options[:dry_run])
23
25
  @status_colors = { :passed => BLACK, :skipped => BLACK, :undefined => BLACK, :failed => BLACK}
@@ -28,12 +30,10 @@ module Cucumber
28
30
  @pdf = Prawn::Document.new
29
31
  @scrap = Prawn::Document.new
30
32
  @doc = @scrap
31
- @io = io
32
33
  @options = options
33
34
  @exceptions = []
34
35
  @indent = 0
35
36
  @buffer = []
36
- puts "writing to #{io.path}"
37
37
  load_cover_page_image
38
38
  @pdf.text "\n\n\nCucumber features", :align => :center, :size => 32
39
39
  @pdf.text "Generated: #{Time.now.strftime("%Y-%m-%d %H:%M")}", :size => 10, :at => [0, 24]
@@ -66,7 +66,7 @@ module Cucumber
66
66
  end
67
67
 
68
68
  def after_features(features)
69
- @pdf.render_file(@io.path)
69
+ @pdf.render_file(@file.path)
70
70
  puts "\ndone"
71
71
  end
72
72
 
@@ -1,4 +1,5 @@
1
1
  require 'cucumber/formatter/console'
2
+ require 'cucumber/formatter/io'
2
3
  require 'fileutils'
3
4
 
4
5
  module Cucumber
@@ -13,11 +14,12 @@ module Cucumber
13
14
  class Pretty
14
15
  include FileUtils
15
16
  include Console
17
+ include Io
16
18
  attr_writer :indent
17
19
  attr_reader :step_mother
18
20
 
19
- def initialize(step_mother, io, options)
20
- @step_mother, @io, @options = step_mother, io, options
21
+ def initialize(step_mother, path_or_io, options)
22
+ @step_mother, @io, @options = step_mother, ensure_io(path_or_io, "pretty"), options
21
23
  @exceptions = []
22
24
  @indent = 0
23
25
  @prefixes = options[:prefixes] || {}
@@ -35,14 +37,10 @@ module Cucumber
35
37
  file = File.join(@options[:autoformat], feature.file)
36
38
  dir = File.dirname(file)
37
39
  mkdir_p(dir) unless File.directory?(dir)
38
- @io = File.open(file, Cucumber.file_mode('w'))
40
+ @io = ensure_file(file, "pretty")
39
41
  end
40
42
  end
41
43
 
42
- def after_feature(*args)
43
- @io.close if @options[:autoformat]
44
- end
45
-
46
44
  def comment_line(comment_line)
47
45
  @io.puts(comment_line.indent(@indent))
48
46
  @io.flush
@@ -188,7 +186,7 @@ module Cucumber
188
186
  print_table_row_announcements
189
187
  @io.puts
190
188
  if table_row.exception && !@exceptions.include?(table_row.exception)
191
- print_exception(table_row.exception, :failed, @indent)
189
+ print_exception(table_row.exception, table_row.status, @indent)
192
190
  end
193
191
  end
194
192
 
@@ -1,14 +1,16 @@
1
1
  require 'cucumber/formatter/console'
2
+ require 'cucumber/formatter/io'
2
3
 
3
4
  module Cucumber
4
5
  module Formatter
5
6
  # The formatter used for <tt>--format progress</tt>
6
7
  class Progress
7
8
  include Console
9
+ include Io
8
10
  attr_reader :step_mother
9
11
 
10
- def initialize(step_mother, io, options)
11
- @step_mother, @io, @options = step_mother, io, options
12
+ def initialize(step_mother, path_or_io, options)
13
+ @step_mother, @io, @options = step_mother, ensure_io(path_or_io, "progress"), options
12
14
  end
13
15
 
14
16
  def after_features(features)
@@ -11,8 +11,10 @@ module Cucumber
11
11
  # to run the next time, simply passing the output string on the command line.
12
12
  #
13
13
  class Rerun
14
- def initialize(step_mother, io, options)
15
- @io = io
14
+ include Io
15
+
16
+ def initialize(step_mother, path_or_io, options)
17
+ @io = ensure_io(path_or_io, "rerun")
16
18
  @options = options
17
19
  @file_names = []
18
20
  @file_colon_lines = Hash.new{|h,k| h[k] = []}
@@ -3,8 +3,8 @@ module Cucumber
3
3
  # The formatter used for <tt>--format steps</tt>
4
4
  class Steps
5
5
 
6
- def initialize(step_mother, io, options)
7
- @io = io
6
+ def initialize(step_mother, path_or_io, options)
7
+ @io = ensure_io(path_or_io, "steps")
8
8
  @options = options
9
9
  @step_definition_files = collect_steps(step_mother)
10
10
  end
@@ -1,10 +1,14 @@
1
+ require 'cucumber/formatter/io'
2
+
1
3
  module Cucumber
2
4
  module Formatter
3
5
  # The formatter used for <tt>--format tag_cloud</tt>
4
6
  # Custom formatter that prints a tag cloud as a table.
5
7
  class TagCloud
6
- def initialize(step_mother, io, options)
7
- @io = io
8
+ include Io
9
+
10
+ def initialize(step_mother, path_or_io, options)
11
+ @io = ensure_io(path_or_io, "tag_cloud")
8
12
  @options = options
9
13
  @counts = Hash.new{|h,k| h[k] = 0}
10
14
  end
@@ -10,9 +10,9 @@ module Cucumber
10
10
  attr_accessor :mean_duration, :status
11
11
  end
12
12
 
13
- def initialize(step_mother, io, options)
13
+ def initialize(step_mother, path_or_io, options)
14
14
  @step_mother = step_mother
15
- @io = io
15
+ @io = ensure_io(path_or_io, "usage")
16
16
  @options = options
17
17
  @stepdef_to_match = Hash.new{|h,stepdef_key| h[stepdef_key] = []}
18
18
  end
@@ -9,18 +9,16 @@
9
9
  "en":
10
10
  name: English
11
11
  native: English
12
- encoding: UTF-8
13
12
  feature: Feature
14
13
  background: Background
15
14
  scenario: Scenario
16
15
  scenario_outline: Scenario Outline
17
16
  examples: Examples|Scenarios
18
- given: Given
19
- when: When
20
- then: Then
21
- and: And
22
- but: But
23
- space_after_keyword: true
17
+ given: *|Given
18
+ when: *|When
19
+ then: *|Then
20
+ and: *|And
21
+ but: *|But
24
22
 
25
23
  # Please help us keeping the languages below uptodate. The parsers for a language
26
24
  # that is missing a keyword will expect the English word until the missing word(s)
@@ -31,581 +29,507 @@
31
29
  "ar":
32
30
  name: Arabic
33
31
  native: العربية
34
- encoding: UTF-8
35
32
  feature: خاصية
36
33
  background: الخلفية
37
34
  scenario: سيناريو
38
35
  scenario_outline: سيناريو مخطط
39
36
  examples: امثلة
40
- given: بفرض
41
- when: متى|عندما
42
- then: اذاً|ثم
43
- and: و
44
- but: لكن
45
- space_after_keyword: true
37
+ given: *|بفرض
38
+ when: *|متى|عندما
39
+ then: *|اذاً|ثم
40
+ and: *|و
41
+ but: *|لكن
46
42
  "bg":
47
43
  name: Bulgarian
48
44
  native: български
49
- encoding: UTF-8
50
45
  feature: Функционалност
51
46
  background: Предистория
52
47
  scenario: Сценарий
53
48
  scenario_outline: Рамка на сценарий
54
49
  examples: Примери
55
- given: Дадено
56
- when: Когато
57
- then: То
58
- and: И
59
- but: Но
60
- space_after_keyword: true
50
+ given: *|Дадено
51
+ when: *|Когато
52
+ then: *|То
53
+ and: *|И
54
+ but: *|Но
61
55
  "cat":
62
56
  name: Catalan
63
57
  native: català
64
- encoding: UTF-8
65
58
  background: Rerefons|Antecedents
66
59
  feature: Característica
67
60
  scenario: Escenari
68
- scenario_outline: Esquema de l\'escenari
61
+ scenario_outline: Esquema de l'escenari
69
62
  examples: Exemples
70
- given: Donat|Donada
71
- when: Quan
72
- then: Aleshores
73
- and: I
74
- but: Però
75
- space_after_keyword: true
63
+ given: *|Donat|Donada
64
+ when: *|Quan
65
+ then: *|Aleshores
66
+ and: *|I
67
+ but: *|Però
76
68
  "cy":
77
69
  name: Welsh
78
70
  native: Cymraeg
79
- encoding: UTF-8
71
+ background: Cefndir
80
72
  feature: Arwedd
81
73
  scenario: Scenario
74
+ scenario_outline: Scenario Amlinellol
82
75
  examples: Enghreifftiau
83
- given: anrhegedig a
84
- when: Pryd
85
- then: Yna
86
- and: A
87
- but: Ond
88
- space_after_keyword: true
76
+ given: *|anrhegedig a
77
+ when: *|Pryd
78
+ then: *|Yna
79
+ and: *|A
80
+ but: *|Ond
89
81
  "cs":
90
82
  name: Czech
91
83
  native: Česky
92
- encoding: UTF-8
93
84
  feature: Požadavek
94
85
  background: Pozadí|Kontext
95
86
  scenario: Scénář
96
87
  scenario_outline: Náčrt Scénáře|Osnova scénáře
97
88
  examples: Příklady
98
- given: Pokud
99
- when: Když
100
- then: Pak
101
- and: A|A také
102
- but: Ale
103
- space_after_keyword: true
89
+ given: *|Pokud
90
+ when: *|Když
91
+ then: *|Pak
92
+ and: *|A|A také
93
+ but: *|Ale
104
94
  "da":
105
95
  name: Danish
106
96
  native: dansk
107
- encoding: UTF-8
108
97
  feature: Egenskab
109
98
  background: Baggrund
110
99
  scenario: Scenarie
111
100
  scenario_outline: Abstrakt Scenario
112
101
  examples: Eksempler
113
- given: Givet
114
- when: Når
115
- then: Så
116
- and: Og
117
- but: Men
118
- space_after_keyword: true
102
+ given: *|Givet
103
+ when: *|Når
104
+ then: *|
105
+ and: *|Og
106
+ but: *|Men
119
107
  "de":
120
108
  name: German
121
109
  native: Deutsch
122
- encoding: UTF-8
123
110
  feature: Funktionalität
124
111
  background: Grundlage
125
112
  scenario: Szenario
126
113
  scenario_outline: Szenariogrundriss
127
114
  examples: Beispiele
128
- given: Gegeben sei
129
- when: Wenn
130
- then: Dann
131
- and: Und
132
- but: Aber
133
- space_after_keyword: true
115
+ given: *|Gegeben sei
116
+ when: *|Wenn
117
+ then: *|Dann
118
+ and: *|Und
119
+ but: *|Aber
134
120
  "en-au":
135
121
  name: Australian
136
122
  native: Australian
137
- encoding: UTF-8
138
123
  feature: Crikey
139
124
  background: Background
140
125
  scenario: Mate
141
126
  scenario_outline: Blokes
142
127
  examples: Cobber
143
- given: Ya know how
144
- when: When
145
- then: Ya gotta
146
- and: N
147
- but: Cept
148
- space_after_keyword: true
128
+ given: *|Ya know how
129
+ when: *|When
130
+ then: *|Ya gotta
131
+ and: *|N
132
+ but: *|Cept
149
133
  "en-lol":
150
134
  name: LOLCAT
151
135
  native: LOLCAT
152
- encoding: UTF-8
153
136
  feature: OH HAI
154
137
  background: B4
155
138
  scenario: MISHUN
156
139
  scenario_outline: MISHUN SRSLY
157
140
  examples: EXAMPLZ
158
- given: I CAN HAZ
159
- when: WEN
160
- then: DEN
161
- and: AN
162
- but: BUT
163
- space_after_keyword: true
141
+ given: *|I CAN HAZ
142
+ when: *|WEN
143
+ then: *|DEN
144
+ and: *|AN
145
+ but: *|BUT
164
146
  "en-tx":
165
147
  name: Texan
166
148
  native: Texan
167
- encoding: UTF-8
168
149
  feature: Feature
169
150
  background: Background
170
151
  scenario: Scenario
171
- scenario_outline: All y\'all
152
+ scenario_outline: All y'all
172
153
  examples: Examples
173
- given: Given y\'all
174
- when: When y\'all
175
- then: Then y\'all
176
- and: And y\'all
177
- but: But y\'all
178
- space_after_keyword: true
154
+ given: *|Given y'all
155
+ when: *|When y'all
156
+ then: *|Then y'all
157
+ and: *|And y'all
158
+ but: *|But y'all
179
159
  "es":
180
160
  name: Spanish
181
161
  native: español
182
- encoding: UTF-8
183
162
  background: Antecedentes
184
163
  feature: Característica
185
164
  scenario: Escenario
186
165
  scenario_outline: Esquema del escenario
187
166
  examples: Ejemplos
188
- given: Dado
189
- when: Cuando
190
- then: Entonces
191
- and: Y
192
- but: Pero
193
- space_after_keyword: true
167
+ given: *|Dado
168
+ when: *|Cuando
169
+ then: *|Entonces
170
+ and: *|Y
171
+ but: *|Pero
194
172
  "et":
195
173
  name: Estonian
196
174
  native: eesti keel
197
- encoding: UTF-8
198
175
  feature: Omadus
199
176
  background: Taust
200
177
  scenario: Stsenaarium
201
178
  scenario_outline: Raamstsenaarium
202
179
  examples: Juhtumid
203
- given: Eeldades
204
- when: Kui
205
- then: Siis
206
- and: Ja
207
- but: Kuid
208
- space_after_keyword: true
180
+ given: *|Eeldades
181
+ when: *|Kui
182
+ then: *|Siis
183
+ and: *|Ja
184
+ but: *|Kuid
209
185
  "fi":
210
186
  name: Finnish
211
187
  native: suomi
212
- encoding: UTF-8
213
188
  feature: Ominaisuus
214
189
  background: Tausta
215
190
  scenario: Tapaus
216
191
  scenario_outline: Tapausaihio
217
192
  examples: Tapaukset
218
- given: Oletetaan
219
- when: Kun
220
- then: Niin
221
- and: Ja
222
- but: Mutta
223
- space_after_keyword: true
193
+ given: *|Oletetaan
194
+ when: *|Kun
195
+ then: *|Niin
196
+ and: *|Ja
197
+ but: *|Mutta
224
198
  "fr":
225
199
  name: French
226
200
  native: français
227
- encoding: UTF-8
228
201
  feature: Fonctionnalité
229
202
  background: Contexte
230
203
  scenario: Scénario
231
- scenario_outline: Plan du Scénario
204
+ scenario_outline: Plan du scénario|Plan du Scénario
232
205
  examples: Exemples
233
- given: Soit
234
- when: Lorsque
235
- then: Alors
236
- and: Et
237
- but: Mais
238
- space_after_keyword: true
206
+ given: *|Soit|Etant donné
207
+ when: *|Quand|Lorsque|Lorsqu'<
208
+ then: *|Alors
209
+ and: *|Et
210
+ but: *|Mais
239
211
  "he":
240
212
  name: Hebrew
241
213
  native: עברית
242
- encoding: UTF-8
243
214
  feature: תכונה
244
215
  background: רקע
245
216
  scenario: תרחיש
246
217
  scenario_outline: תבנית תרחיש
247
218
  examples: דוגמאות
248
- given: בהינתן
249
- when: כאשר
250
- then: אז|אזי
251
- and: וגם
252
- but: אבל
253
- space_after_keyword: true
219
+ given: *|בהינתן
220
+ when: *|כאשר
221
+ then: *|אז|אזי
222
+ and: *|וגם
223
+ but: *|אבל
254
224
  "hr":
255
225
  name: Croatian
256
226
  native: hrvatski
257
- encoding: UTF-8
258
227
  feature: Osobina|Mogućnost|Mogucnost
259
228
  background: Pozadina
260
229
  scenario: Scenarij
261
230
  scenario_outline: Skica|Koncept
262
231
  examples: Primjeri|Scenariji
263
- given: Zadan|Zadani|Zadano
264
- when: Kada|Kad
265
- then: Onda
266
- and: I
267
- but: Ali
268
- space_after_keyword: true
232
+ given: *|Zadan|Zadani|Zadano
233
+ when: *|Kada|Kad
234
+ then: *|Onda
235
+ and: *|I
236
+ but: *|Ali
269
237
  "hu":
270
238
  name: Hungarian
271
239
  native: magyar
272
- encoding: UTF-8
273
240
  feature: Jellemző
274
241
  background: Háttér
275
242
  scenario: Forgatókönyv
276
243
  scenario_outline: Forgatókönyv vázlat
277
244
  examples: Példák
278
- given: Ha
279
- when: Majd
280
- then: Akkor
281
- and: És
282
- but: De
283
- space_after_keyword: true
245
+ given: *|Ha
246
+ when: *|Majd
247
+ then: *|Akkor
248
+ and: *|És
249
+ but: *|De
284
250
  "id":
285
251
  name: Indonesian
286
252
  native: Bahasa Indonesia
287
- encoding: UTF-8
288
253
  feature: Fitur
289
254
  background: Dasar
290
255
  scenario: Skenario
291
256
  scenario_outline: Skenario konsep
292
257
  examples: Contoh
293
- given: Dengan
294
- when: Ketika
295
- then: Maka
296
- and: Dan
297
- but: Tapi
298
- space_after_keyword: true
258
+ given: *|Dengan
259
+ when: *|Ketika
260
+ then: *|Maka
261
+ and: *|Dan
262
+ but: *|Tapi
299
263
  "it":
300
264
  name: Italian
301
265
  native: italiano
302
- encoding: UTF-8
303
266
  feature: Funzionalità
304
267
  background: Contesto
305
268
  scenario: Scenario
306
269
  scenario_outline: Schema dello scenario
307
270
  examples: Esempi
308
- given: Dato
309
- when: Quando
310
- then: Allora
311
- and: E
312
- but: Ma
313
- space_after_keyword: true
271
+ given: *|Dato
272
+ when: *|Quando
273
+ then: *|Allora
274
+ and: *|E
275
+ but: *|Ma
314
276
  "ja":
315
277
  name: Japanese
316
278
  native: 日本語
317
- encoding: UTF-8
318
279
  feature: フィーチャ|機能
319
280
  background: 背景
320
281
  scenario: シナリオ
321
282
  scenario_outline: シナリオアウトライン|シナリオテンプレート|テンプレ|シナリオテンプレ
322
283
  examples: 例|サンプル
323
- given: 前提
324
- when: もし
325
- then: ならば
326
- and: かつ
327
- but: しかし|但し|ただし
328
- space_after_keyword: false
284
+ given: *|前提<
285
+ when: *|もし<
286
+ then: *|ならば<
287
+ and: *|かつ<
288
+ but: *|しかし<|但し<|ただし<
329
289
  "ko":
330
290
  name: Korean
331
291
  native: 한국어
332
- encoding: UTF-8
333
292
  background: 배경
334
293
  feature: 기능
335
294
  scenario: 시나리오
336
295
  scenario_outline: 시나리오 개요
337
296
  examples: 예
338
- given: 조건
339
- when: 만일
340
- then: 그러면
341
- and: 그리고
342
- but: 하지만
343
- space_after_keyword: false
297
+ given: *|조건<
298
+ when: *|만일<
299
+ then: *|그러면<
300
+ and: *|그리고<
301
+ but: *|하지만<
344
302
  "lt":
345
303
  name: Lithuanian
346
304
  native: lietuvių kalba
347
- encoding: UTF-8
348
305
  feature: Savybė
349
306
  background: Kontekstas
350
307
  scenario: Scenarijus
351
308
  scenario_outline: Scenarijaus šablonas
352
309
  examples: Pavyzdžiai|Scenarijai|Variantai
353
- given: Duota
354
- when: Kai
355
- then: Tada
356
- and: Ir
357
- but: Bet
358
- space_after_keyword: true
310
+ given: *|Duota
311
+ when: *|Kai
312
+ then: *|Tada
313
+ and: *|Ir
314
+ but: *|Bet
359
315
  "lv":
360
316
  name: Latvian
361
317
  native: latviešu
362
- encoding: UTF-8
363
318
  feature: Funkcionalitāte|Fīča
364
319
  background: Konteksts|Situācija
365
320
  scenario: Scenārijs
366
321
  scenario_outline: Scenārijs pēc parauga
367
322
  examples: Piemēri|Paraugs
368
- given: Kad
369
- when: Ja
370
- then: Tad
371
- and: Un
372
- but: Bet
373
- space_after_keyword: true
323
+ given: *|Kad
324
+ when: *|Ja
325
+ then: *|Tad
326
+ and: *|Un
327
+ but: *|Bet
374
328
  "nl":
375
329
  name: Dutch
376
330
  native: Nederlands
377
- encoding: UTF-8
378
331
  feature: Functionaliteit
379
332
  background: Achtergrond
380
333
  scenario: Scenario
381
334
  scenario_outline: Abstract Scenario
382
335
  examples: Voorbeelden
383
- given: Gegeven
384
- when: Als
385
- then: Dan
386
- and: En
387
- but: Maar
388
- space_after_keyword: true
336
+ given: *|Gegeven
337
+ when: *|Als
338
+ then: *|Dan
339
+ and: *|En
340
+ but: *|Maar
389
341
  "no":
390
342
  name: Norwegian
391
343
  native: norsk
392
- encoding: UTF-8
393
344
  feature: Egenskap
394
345
  background: Bakgrunn
395
346
  scenario: Scenario
396
347
  scenario_outline: Abstrakt Scenario
397
348
  examples: Eksempler
398
- given: Gitt
399
- when: Når
400
- then: Så
401
- and: Og
402
- but: Men
403
- space_after_keyword: true
349
+ given: *|Gitt
350
+ when: *|Når
351
+ then: *|
352
+ and: *|Og
353
+ but: *|Men
404
354
  "pl":
405
355
  name: Polish
406
356
  native: polski
407
- encoding: UTF-8
408
357
  feature: Właściwość
409
358
  background: Założenia
410
359
  scenario: Scenariusz
411
360
  scenario_outline: Szablon scenariusza
412
361
  examples: Przykłady
413
- given: Zakładając
414
- when: Jeżeli
415
- then: Wtedy
416
- and: Oraz
417
- but: Ale
418
- space_after_keyword: true
362
+ given: *|Zakładając
363
+ when: *|Jeżeli
364
+ then: *|Wtedy
365
+ and: *|Oraz
366
+ but: *|Ale
419
367
  "pt":
420
368
  name: Portuguese
421
369
  native: português
422
- encoding: UTF-8
423
370
  background: Contexto
424
371
  feature: Funcionalidade
425
372
  scenario: Cenário|Cenario
426
373
  scenario_outline: Esquema do Cenário|Esquema do Cenario
427
374
  examples: Exemplos
428
- given: Dado
429
- when: Quando
430
- then: Então|Entao
431
- and: E
432
- but: Mas
433
- space_after_keyword: true
375
+ given: *|Dado
376
+ when: *|Quando
377
+ then: *|Então|Entao
378
+ and: *|E
379
+ but: *|Mas
434
380
  "ro":
435
381
  name: Romanian
436
382
  native: română
437
- encoding: UTF-8
438
383
  background: Conditii
439
384
  feature: Functionalitate
440
385
  scenario: Scenariu
441
386
  scenario_outline: Scenariul de sablon
442
387
  examples: Exemplele
443
- given: Daca
444
- when: Cand
445
- then: Atunci
446
- and: Si
447
- but: Dar
448
- space_after_keyword: true
388
+ given: *|Daca
389
+ when: *|Cand
390
+ then: *|Atunci
391
+ and: *|Si
392
+ but: *|Dar
449
393
  "ro2":
450
394
  name: Romanian (diacritical)
451
395
  native: română (diacritical)
452
- encoding: UTF-8
453
396
  background: Condiţii
454
397
  feature: Funcționalitate
455
398
  scenario: Scenariu
456
399
  scenario_outline: Scenariul de şablon
457
400
  examples: Exemplele
458
- given: Dacă
459
- when: Când
460
- then: Atunci
461
- and: Și
462
- but: Dar
463
- space_after_keyword: true
401
+ given: *|Dacă
402
+ when: *|Când
403
+ then: *|Atunci
404
+ and: *|Și
405
+ but: *|Dar
464
406
  "ru":
465
407
  name: Russian
466
408
  native: русский
467
- encoding: UTF-8
468
409
  feature: Функционал
469
410
  background: Предыстория
470
411
  scenario: Сценарий
471
412
  scenario_outline: Структура сценария
472
413
  examples: Значения
473
- given: Допустим
474
- when: Если
475
- then: То
476
- and: И|К тому же
477
- but: Но|А
478
- space_after_keyword: true
414
+ given: *|Допустим
415
+ when: *|Если
416
+ then: *|То
417
+ and: *|И|К тому же
418
+ but: *|Но|А
479
419
  "se":
480
420
  name: Swedish
481
421
  native: Svenska
482
- encoding: UTF-8
483
422
  feature: Egenskap
484
423
  background: Bakgrund
485
424
  scenario: Scenario
486
425
  scenario_outline: Abstrakt Scenario
487
426
  examples: Exempel
488
- given: Givet
489
- when: När
490
- then: Så
491
- and: Och
492
- but: Men
493
- space_after_keyword: true
427
+ given: *|Givet
428
+ when: *|När
429
+ then: *|
430
+ and: *|Och
431
+ but: *|Men
494
432
  "sk":
495
433
  name: Slovak
496
434
  native: Slovensky
497
- encoding: UTF-8
498
435
  feature: Požiadavka
499
436
  background: Pozadie
500
437
  scenario: Scenár
501
438
  scenario_outline: Náčrt Scenáru
502
439
  examples: Príklady
503
- given: Pokiaľ
504
- when: Keď
505
- then: Tak
506
- and: A
507
- but: Ale
508
- space_after_keyword: true
440
+ given: *|Pokiaľ
441
+ when: *|Keď
442
+ then: *|Tak
443
+ and: *|A
444
+ but: *|Ale
509
445
  "sr-Latn":
510
446
  name: Serbian_latin
511
447
  native: Srpski_latinica
512
- encoding: UTF-8
513
448
  feature: Funkcionalnost|Mogućnost|Mogucnost|Osobina
514
449
  background: Kontekst|Osnova|Pozadina
515
450
  scenario: Scenario|Primer
516
451
  scenario_outline: Struktura scenarija|Skica|Koncept
517
452
  examples: Primeri|Scenariji
518
- given: Zadato|Zadate|Zatati
519
- when: Kada|Kad
520
- then: Onda
521
- and: I
522
- but: Ali
523
- space_after_keyword: true
453
+ given: *|Zadato|Zadate|Zatati
454
+ when: *|Kada|Kad
455
+ then: *|Onda
456
+ and: *|I
457
+ but: *|Ali
524
458
  "sr":
525
459
  name: Serbian
526
460
  native: Српски
527
- encoding: UTF-8
528
461
  feature: Функционалност|Могућност|Особина
529
462
  background: Контекст|Основа|Позадина
530
463
  scenario: Сценарио|Пример
531
464
  scenario_outline: Структура сценарија|Скица|Концепт
532
465
  examples: Примери|Сценарији
533
- given: Задато|Задате|Задати
534
- when: Када|Кад
535
- then: Онда
536
- and: И
537
- but: Али
538
- space_after_keyword: true
466
+ given: *|Задато|Задате|Задати
467
+ when: *|Када|Кад
468
+ then: *|Онда
469
+ and: *|И
470
+ but: *|Али
539
471
  "tr":
540
472
  name: Turkish
541
473
  native: Türkçe
542
- encoding: UTF-8
543
474
  feature: Özellik
544
475
  background: Geçmiş
545
476
  scenario: Senaryo
546
477
  scenario_outline: Senaryo taslağı
547
478
  examples: Örnekler
548
- given: Diyelim ki
549
- when: Eğer ki
550
- then: O zaman
551
- and: Ve
552
- but: Fakat|Ama
479
+ given: *|Diyelim ki
480
+ when: *|Eğer ki
481
+ then: *|O zaman
482
+ and: *|Ve
483
+ but: *|Fakat|Ama
553
484
  "uz":
554
485
  name: Uzbek
555
486
  native: Узбекча
556
- encoding: UTF-8
557
487
  feature: Функционал
558
488
  background: Тарих
559
489
  scenario: Сценарий
560
490
  scenario_outline: Сценарий структураси
561
491
  examples: Мисоллар
562
- given: Агар
563
- when: Агар
564
- then: Унда
565
- and: Ва
566
- but: Лекин|Бирок|Аммо
492
+ given: *|Агар
493
+ when: *|Агар
494
+ then: *|Унда
495
+ and: *|Ва
496
+ but: *|Лекин|Бирок|Аммо
567
497
  "vi":
568
498
  name: Vietnamese
569
499
  native: Tiếng Việt
570
- encoding: UTF-8
571
500
  feature: Tính năng
572
501
  background: Bối cảnh
573
502
  scenario: Tình huống|Kịch bản
574
503
  scenario_outline: Khung tình huống|Khung kịch bản
575
504
  examples: Dữ liệu
576
- given: Biết|Cho
577
- when: Khi
578
- then: Thì
579
- and: Và
580
- but: Nhưng
581
- space_after_keyword: true
505
+ given: *|Biết|Cho
506
+ when: *|Khi
507
+ then: *|Thì
508
+ and: *|
509
+ but: *|Nhưng
582
510
  "zh-CN":
583
511
  name: Chinese simplified
584
512
  native: 简体中文
585
- encoding: UTF-8
586
513
  feature: 功能
587
514
  background: 背景
588
515
  scenario: 场景
589
516
  scenario_outline: 场景大纲
590
517
  examples: 例子
591
- given: 假如
592
- when:
593
- then: 那么
594
- and: 而且
595
- but: 但是
596
- space_after_keyword: false
518
+ given: *|假如<
519
+ when: *|当<
520
+ then: *|那么<
521
+ and: *|而且<
522
+ but: *|但是<
597
523
  "zh-TW":
598
524
  name: Chinese traditional
599
525
  native: 繁體中文
600
- encoding: UTF-8
601
526
  feature: 功能
602
527
  background: 背景
603
528
  scenario: 場景|劇本
604
529
  scenario_outline: 場景大綱|劇本大綱
605
530
  examples: 例子
606
- given: 假設
607
- when:
608
- then: 那麼
609
- and: 而且|並且
610
- but: 但是
611
- space_after_keyword: false
531
+ given: *|假設<
532
+ when: *|當<
533
+ then: *|那麼<
534
+ and: *|而且<|並且<
535
+ but: *|但是<