cucumber 0.4.4 → 0.4.5.rc1

Sign up to get free protection for your applications and to get access to all the features.
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: *|但是<