cucumber 0.5.1 → 0.5.2

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.
@@ -1,3 +1,13 @@
1
+ == 0.5.2 2009-12-22
2
+
3
+ === New Features
4
+ * On JRuby/Cuke4Duke, --require DIR will put DIR on the $CLASSPATH, making it easier to load step def classes (Aslak Hellesøy)
5
+ * New --jars option that will load jar files. Only available on JRuby. Practical for Cuke4Duke. (Aslak Hellesøy)
6
+
7
+ === Bugfixes
8
+ * Add #embed back to html formatter (#547 Brandon Faloona)
9
+ * Refactored wire protocol code and added configurable timeout to allow for long running step definitions. (#546 Matt Wynne)
10
+
1
11
  == 0.5.1 2009-12-16
2
12
 
3
13
  Small bugfix release.
data/Rakefile CHANGED
@@ -21,6 +21,7 @@ begin
21
21
  gem.add_dependency 'polyglot', '>= 0.2.9'
22
22
  gem.add_dependency 'builder', '>= 2.1.2'
23
23
  gem.add_dependency 'diff-lcs', '>= 1.1.2'
24
+ gem.add_dependency 'json_pure', '>= 1.2.0'
24
25
 
25
26
  gem.add_development_dependency 'nokogiri', '>= 1.4.0'
26
27
  gem.add_development_dependency 'prawn', '>= 0.5.1'
@@ -1,4 +1,4 @@
1
1
  ---
2
- :patch: 1
2
+ :patch: 2
3
3
  :major: 0
4
4
  :minor: 5
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{cucumber}
8
- s.version = "0.5.1"
8
+ s.version = "0.5.2"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Aslak Helles\303\270y"]
12
- s.date = %q{2009-12-16}
12
+ s.date = %q{2009-12-22}
13
13
  s.default_executable = %q{cucumber}
14
14
  s.description = %q{A BDD tool written in Ruby}
15
15
  s.email = %q{cukes@googlegroups.com}
@@ -314,6 +314,7 @@ Gem::Specification.new do |s|
314
314
  "examples/tickets/features/tickets.feature",
315
315
  "examples/watir/README.textile",
316
316
  "examples/watir/Rakefile",
317
+ "examples/watir/cucumber.yml",
317
318
  "examples/watir/features/search.feature",
318
319
  "examples/watir/features/step_definitions/search_steps.rb",
319
320
  "examples/watir/features/support/env.rb",
@@ -367,6 +368,7 @@ Gem::Specification.new do |s|
367
368
  "features/usage_and_stepdefs_formatter.feature",
368
369
  "features/wire_protocol.feature",
369
370
  "features/wire_protocol_table_diffing.feature",
371
+ "features/wire_protocol_timeouts.feature",
370
372
  "features/work_in_progress.feature",
371
373
  "gem_tasks/contributors.rake",
372
374
  "gem_tasks/environment.rake",
@@ -470,12 +472,14 @@ Gem::Specification.new do |s|
470
472
  "lib/cucumber/step_mother.rb",
471
473
  "lib/cucumber/webrat/element_locator.rb",
472
474
  "lib/cucumber/webrat/table_locator.rb",
475
+ "lib/cucumber/wire_support/configuration.rb",
473
476
  "lib/cucumber/wire_support/connection.rb",
474
477
  "lib/cucumber/wire_support/request_handler.rb",
475
478
  "lib/cucumber/wire_support/wire_exception.rb",
476
479
  "lib/cucumber/wire_support/wire_language.rb",
477
480
  "lib/cucumber/wire_support/wire_packet.rb",
478
481
  "lib/cucumber/wire_support/wire_protocol.rb",
482
+ "lib/cucumber/wire_support/wire_protocol/requests.rb",
479
483
  "lib/cucumber/wire_support/wire_step_definition.rb",
480
484
  "spec/cucumber/ast/background_spec.rb",
481
485
  "spec/cucumber/ast/feature_element_spec.rb",
@@ -525,6 +529,7 @@ Gem::Specification.new do |s|
525
529
  "spec/cucumber/treetop_parser/test_dos.feature",
526
530
  "spec/cucumber/treetop_parser/with_comments.feature",
527
531
  "spec/cucumber/treetop_parser/with_tags.feature",
532
+ "spec/cucumber/wire_support/configuration_spec.rb",
528
533
  "spec/cucumber/wire_support/wire_exception_spec.rb",
529
534
  "spec/cucumber/wire_support/wire_language_spec.rb",
530
535
  "spec/cucumber/wire_support/wire_packet_spec.rb",
@@ -539,7 +544,7 @@ Gem::Specification.new do |s|
539
544
 
540
545
  (::) U P G R A D I N G (::)
541
546
 
542
- Thank you for installing cucumber-0.5.1.
547
+ Thank you for installing cucumber-0.5.2.
543
548
  Please be sure to read http://wiki.github.com/aslakhellesoy/cucumber/upgrading
544
549
  for important information about this release. Happy cuking!
545
550
 
@@ -586,6 +591,7 @@ for important information about this release. Happy cuking!
586
591
  "spec/cucumber/rb_support/regexp_argument_matcher_spec.rb",
587
592
  "spec/cucumber/step_match_spec.rb",
588
593
  "spec/cucumber/step_mother_spec.rb",
594
+ "spec/cucumber/wire_support/configuration_spec.rb",
589
595
  "spec/cucumber/wire_support/wire_exception_spec.rb",
590
596
  "spec/cucumber/wire_support/wire_language_spec.rb",
591
597
  "spec/cucumber/wire_support/wire_packet_spec.rb",
@@ -716,6 +722,7 @@ for important information about this release. Happy cuking!
716
722
  s.add_runtime_dependency(%q<polyglot>, [">= 0.2.9"])
717
723
  s.add_runtime_dependency(%q<builder>, [">= 2.1.2"])
718
724
  s.add_runtime_dependency(%q<diff-lcs>, [">= 1.1.2"])
725
+ s.add_runtime_dependency(%q<json_pure>, [">= 1.2.0"])
719
726
  s.add_development_dependency(%q<nokogiri>, [">= 1.4.0"])
720
727
  s.add_development_dependency(%q<prawn>, [">= 0.5.1"])
721
728
  s.add_development_dependency(%q<rspec>, [">= 1.2.9"])
@@ -726,6 +733,7 @@ for important information about this release. Happy cuking!
726
733
  s.add_dependency(%q<polyglot>, [">= 0.2.9"])
727
734
  s.add_dependency(%q<builder>, [">= 2.1.2"])
728
735
  s.add_dependency(%q<diff-lcs>, [">= 1.1.2"])
736
+ s.add_dependency(%q<json_pure>, [">= 1.2.0"])
729
737
  s.add_dependency(%q<nokogiri>, [">= 1.4.0"])
730
738
  s.add_dependency(%q<prawn>, [">= 0.5.1"])
731
739
  s.add_dependency(%q<rspec>, [">= 1.2.9"])
@@ -737,6 +745,7 @@ for important information about this release. Happy cuking!
737
745
  s.add_dependency(%q<polyglot>, [">= 0.2.9"])
738
746
  s.add_dependency(%q<builder>, [">= 2.1.2"])
739
747
  s.add_dependency(%q<diff-lcs>, [">= 1.1.2"])
748
+ s.add_dependency(%q<json_pure>, [">= 1.2.0"])
740
749
  s.add_dependency(%q<nokogiri>, [">= 1.4.0"])
741
750
  s.add_dependency(%q<prawn>, [">= 0.5.1"])
742
751
  s.add_dependency(%q<rspec>, [">= 1.2.9"])
@@ -7,4 +7,6 @@ end
7
7
 
8
8
  Cucumber::Rake::Task.new(:cucumber_screenshot) do |t|
9
9
  t.cucumber_opts = %w{--format html --out report.html}
10
- end
10
+ end
11
+
12
+ task :default => :cucumber
@@ -0,0 +1 @@
1
+ default: --format html --out report.html --format pretty
@@ -8,5 +8,5 @@ Feature: Search
8
8
  When I search for "cucumber github"
9
9
  Then I should see
10
10
  """
11
- BDD that talks to domain experts first and code second
11
+ written in Ruby
12
12
  """
@@ -1,14 +1,32 @@
1
- Given /^there is a wire server running on port (\d+) which understands the following protocol:$/ do |port, table|
1
+ Given /^there is a wire server (running |)on port (\d+) which understands the following protocol:$/ do |running, port, table|
2
2
  protocol = table.hashes
3
- in_current_dir do
3
+ @server = FakeWireServer.new(port.to_i, protocol)
4
+ start_wire_server if running.strip == "running"
5
+ end
6
+
7
+ Given /^the wire server takes (.*) seconds to respond to the invoke message$/ do |timeout|
8
+ @server.delay_response(:invoke, timeout.to_f)
9
+ start_wire_server
10
+ end
11
+
12
+ module WireHelper
13
+ def start_wire_server
4
14
  @wire_pid = fork do
5
- @server = FakeWireServer.new(port.to_i, protocol)
6
15
  @server.run
7
16
  end
8
17
  end
18
+
19
+ def stop_wire_server
20
+ return unless @wire_pid
21
+ Process.kill('KILL', @wire_pid)
22
+ Process.wait
23
+ end
24
+ end
25
+
26
+ Before('@wire') do
27
+ extend(WireHelper)
9
28
  end
10
29
 
11
30
  After('@wire') do
12
- Process.kill('KILL', @wire_pid)
13
- Process.wait
31
+ stop_wire_server
14
32
  end
@@ -4,12 +4,17 @@ require 'json'
4
4
  class FakeWireServer
5
5
  def initialize(port, protocol_table)
6
6
  @port, @protocol_table = port, protocol_table
7
+ @delays = {}
7
8
  end
8
9
 
9
10
  def run
10
11
  @server = TCPServer.open(@port)
11
12
  loop { handle_connections }
12
13
  end
14
+
15
+ def delay_response(message, delay)
16
+ @delays[message] = delay
17
+ end
13
18
 
14
19
  private
15
20
 
@@ -19,7 +24,7 @@ class FakeWireServer
19
24
 
20
25
  def open_session_on(socket)
21
26
  begin
22
- SocketSession.new(socket, @protocol_table).start
27
+ SocketSession.new(socket, @protocol_table, @delays).start
23
28
  rescue Exception => e
24
29
  raise e
25
30
  ensure
@@ -28,9 +33,10 @@ class FakeWireServer
28
33
  end
29
34
 
30
35
  class SocketSession
31
- def initialize(socket, protocol)
36
+ def initialize(socket, protocol, delays)
32
37
  @socket = socket
33
38
  @protocol = protocol
39
+ @delays = delays
34
40
  end
35
41
 
36
42
  def start
@@ -43,11 +49,14 @@ class FakeWireServer
43
49
 
44
50
  def handle(data)
45
51
  if protocol_entry = response_to(data.strip)
52
+ sleep delay(data)
46
53
  send_response(protocol_entry['response'])
47
54
  else
48
55
  serialized_exception = { :message => "Not understood: #{data}", :backtrace => [] }
49
56
  send_response(['fail', serialized_exception ].to_json)
50
57
  end
58
+ rescue => e
59
+ send_response(['fail', { :message => e.message, :backtrace => e.backtrace, :exception => e.class } ].to_json)
51
60
  end
52
61
 
53
62
  def response_to(data)
@@ -59,5 +68,10 @@ class FakeWireServer
59
68
  def send_response(response)
60
69
  @socket.puts response + "\n"
61
70
  end
71
+
72
+ def delay(data)
73
+ message = JSON.parse(data.strip)[0]
74
+ @delays[message.to_sym] || 0
75
+ end
62
76
  end
63
77
  end
@@ -0,0 +1,62 @@
1
+ @wire
2
+ Feature: Wire protocol timeouts
3
+ We don't want Cucumber to hang forever on a wire server that's not even there,
4
+ but equally we need to give the user the flexibility to allow step definitions
5
+ to take a while to execute, if that's what they need.
6
+
7
+ Background:
8
+ Given a standard Cucumber project directory structure
9
+ And a file named "features/wired.feature" with:
10
+ """
11
+ Scenario: Wired
12
+ Given we're all wired
13
+
14
+ """
15
+
16
+ Scenario: Try to talk to a server that's not there
17
+ Given a file named "features/step_definitions/some_remote_place.wire" with:
18
+ """
19
+ host: localhost
20
+ port: 54321
21
+
22
+ """
23
+ When I run cucumber -f progress
24
+ Then STDERR should match
25
+ """
26
+ Unable to contact the wire server at localhost:54321
27
+ """
28
+
29
+ Scenario: Invoke a step definition that takes longer than its timeout
30
+ Given a file named "features/step_definitions/some_remote_place.wire" with:
31
+ """
32
+ host: localhost
33
+ port: 54321
34
+ timeout:
35
+ invoke: 0.1
36
+
37
+ """
38
+ And there is a wire server on port 54321 which understands the following protocol:
39
+ | request | response |
40
+ | ["step_matches",{"name_to_match":"we're all wired"}] | ["step_matches",[{"id":"1", "args":[{"val":"wired", "pos":10}]}]] |
41
+ | ["begin_scenario",null] | ["success",null] |
42
+ | ["invoke",{"id":"1","args":["wired"]}] | ["success",null] |
43
+ | ["end_scenario",null] | ["success",null] |
44
+ And the wire server takes 0.2 seconds to respond to the invoke message
45
+ When I run cucumber -f pretty
46
+ Then STDERR should be empty
47
+ And it should fail with
48
+ """
49
+
50
+
51
+ Scenario: Wired # features/wired.feature:1
52
+ Given we're all wired # Unknown
53
+ Timed out calling wire server with message 'invoke' (Timeout::Error)
54
+ features/wired.feature:2:in `Given we're all wired'
55
+
56
+ Failing Scenarios:
57
+ cucumber features/wired.feature:1 # Scenario: Wired
58
+
59
+ 1 scenario (1 failed)
60
+ 1 step (1 failed)
61
+
62
+ """
@@ -55,11 +55,6 @@ module Cucumber
55
55
  @conversion_procs = conversion_procs
56
56
  end
57
57
 
58
- # JSON representation
59
- def to_json
60
- raw.to_json
61
- end
62
-
63
58
  # Creates a copy of this table, inheriting any column mappings.
64
59
  # registered with #map_headers!
65
60
  #
@@ -116,7 +116,18 @@ module Cucumber
116
116
  "loaded first.",
117
117
  "This option can be specified multiple times.") do |v|
118
118
  @options[:require] << v
119
+ if(Cucumber::JRUBY && File.directory?(v))
120
+ $CLASSPATH << v
121
+ end
119
122
  end
123
+
124
+ if(Cucumber::JRUBY)
125
+ opts.on("-j DIR", "--jars DIR",
126
+ "Load all the jars under DIR") do |jars|
127
+ Dir["#{jars}/**/*.jar"].each {|jar| require jar}
128
+ end
129
+ end
130
+
120
131
  opts.on("--i18n LANG",
121
132
  "List keywords for in a particular language",
122
133
  %{Run with "--i18n help" to see all languages}) do |lang|
@@ -21,6 +21,22 @@ module Cucumber
21
21
  @header_red = nil
22
22
  end
23
23
 
24
+ def embed(file, mime_type)
25
+ case(mime_type)
26
+ when /^image\/(png|gif|jpg|jpeg)/
27
+ embed_image(file)
28
+ end
29
+ end
30
+
31
+ def embed_image(file)
32
+ id = file.hash
33
+ @builder.span(:class => 'embed') do |pre|
34
+ pre << %{<a href="" onclick="img=document.getElementById('#{id}'); img.style.display = (img.style.display == 'none' ? 'block' : 'none');return false">Screenshot</a><br>&nbsp;
35
+ <img id="#{id}" style="display: none" src="#{file}"/>}
36
+ end
37
+ end
38
+
39
+
24
40
  def before_features(features)
25
41
  @step_count = get_step_count(features)
26
42
 
@@ -14,11 +14,11 @@
14
14
  scenario: Scenario
15
15
  scenario_outline: Scenario Outline
16
16
  examples: Examples|Scenarios
17
- given: *|Given
18
- when: *|When
19
- then: *|Then
20
- and: *|And
21
- but: *|But
17
+ given: "*|Given"
18
+ when: "*|When"
19
+ then: "*|Then"
20
+ and: "*|And"
21
+ but: "*|But"
22
22
 
23
23
  # Please help us keeping the languages below uptodate. The parsers for a language
24
24
  # that is missing a keyword will expect the English word until the missing word(s)
@@ -34,11 +34,11 @@
34
34
  scenario: سيناريو
35
35
  scenario_outline: سيناريو مخطط
36
36
  examples: امثلة
37
- given: *|بفرض
38
- when: *|متى|عندما
39
- then: *|اذاً|ثم
40
- and: *|و
41
- but: *|لكن
37
+ given: "*|بفرض"
38
+ when: "*|متى|عندما"
39
+ then: "*|اذاً|ثم"
40
+ and: "*|و"
41
+ but: "*|لكن"
42
42
  "bg":
43
43
  name: Bulgarian
44
44
  native: български
@@ -47,11 +47,11 @@
47
47
  scenario: Сценарий
48
48
  scenario_outline: Рамка на сценарий
49
49
  examples: Примери
50
- given: *|Дадено
51
- when: *|Когато
52
- then: *|То
53
- and: *|И
54
- but: *|Но
50
+ given: "*|Дадено"
51
+ when: "*|Когато"
52
+ then: "*|То"
53
+ and: "*|И"
54
+ but: "*|Но"
55
55
  "cat":
56
56
  name: Catalan
57
57
  native: català
@@ -60,11 +60,11 @@
60
60
  scenario: Escenari
61
61
  scenario_outline: Esquema de l'escenari
62
62
  examples: Exemples
63
- given: *|Donat|Donada
64
- when: *|Quan
65
- then: *|Aleshores
66
- and: *|I
67
- but: *|Però
63
+ given: "*|Donat|Donada"
64
+ when: "*|Quan"
65
+ then: "*|Aleshores"
66
+ and: "*|I"
67
+ but: "*|Però"
68
68
  "cy":
69
69
  name: Welsh
70
70
  native: Cymraeg
@@ -73,11 +73,11 @@
73
73
  scenario: Scenario
74
74
  scenario_outline: Scenario Amlinellol
75
75
  examples: Enghreifftiau
76
- given: *|anrhegedig a
77
- when: *|Pryd
78
- then: *|Yna
79
- and: *|A
80
- but: *|Ond
76
+ given: "*|anrhegedig a"
77
+ when: "*|Pryd"
78
+ then: "*|Yna"
79
+ and: "*|A"
80
+ but: "*|Ond"
81
81
  "cs":
82
82
  name: Czech
83
83
  native: Česky
@@ -86,11 +86,11 @@
86
86
  scenario: Scénář
87
87
  scenario_outline: Náčrt Scénáře|Osnova scénáře
88
88
  examples: Příklady
89
- given: *|Pokud
90
- when: *|Když
91
- then: *|Pak
92
- and: *|A|A také
93
- but: *|Ale
89
+ given: "*|Pokud"
90
+ when: "*|Když"
91
+ then: "*|Pak"
92
+ and: "*|A|A také"
93
+ but: "*|Ale"
94
94
  "da":
95
95
  name: Danish
96
96
  native: dansk
@@ -99,11 +99,11 @@
99
99
  scenario: Scenarie
100
100
  scenario_outline: Abstrakt Scenario
101
101
  examples: Eksempler
102
- given: *|Givet
103
- when: *|Når
104
- then: *|Så
105
- and: *|Og
106
- but: *|Men
102
+ given: "*|Givet"
103
+ when: "*|Når"
104
+ then: "*|Så"
105
+ and: "*|Og"
106
+ but: "*|Men"
107
107
  "de":
108
108
  name: German
109
109
  native: Deutsch
@@ -112,11 +112,11 @@
112
112
  scenario: Szenario
113
113
  scenario_outline: Szenariogrundriss
114
114
  examples: Beispiele
115
- given: *|Gegeben sei
116
- when: *|Wenn
117
- then: *|Dann
118
- and: *|Und
119
- but: *|Aber
115
+ given: "*|Gegeben sei"
116
+ when: "*|Wenn"
117
+ then: "*|Dann"
118
+ and: "*|Und"
119
+ but: "*|Aber"
120
120
  "en-au":
121
121
  name: Australian
122
122
  native: Australian
@@ -125,11 +125,11 @@
125
125
  scenario: Mate
126
126
  scenario_outline: Blokes
127
127
  examples: Cobber
128
- given: *|Ya know how
129
- when: *|When
130
- then: *|Ya gotta
131
- and: *|N
132
- but: *|Cept
128
+ given: "*|Ya know how"
129
+ when: "*|When"
130
+ then: "*|Ya gotta"
131
+ and: "*|N"
132
+ but: "*|Cept"
133
133
  "en-lol":
134
134
  name: LOLCAT
135
135
  native: LOLCAT
@@ -138,11 +138,11 @@
138
138
  scenario: MISHUN
139
139
  scenario_outline: MISHUN SRSLY
140
140
  examples: EXAMPLZ
141
- given: *|I CAN HAZ
142
- when: *|WEN
143
- then: *|DEN
144
- and: *|AN
145
- but: *|BUT
141
+ given: "*|I CAN HAZ"
142
+ when: "*|WEN"
143
+ then: "*|DEN"
144
+ and: "*|AN"
145
+ but: "*|BUT"
146
146
  "en-tx":
147
147
  name: Texan
148
148
  native: Texan
@@ -151,11 +151,11 @@
151
151
  scenario: Scenario
152
152
  scenario_outline: All y'all
153
153
  examples: Examples
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
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"
159
159
  "es":
160
160
  name: Spanish
161
161
  native: español
@@ -164,11 +164,11 @@
164
164
  scenario: Escenario
165
165
  scenario_outline: Esquema del escenario
166
166
  examples: Ejemplos
167
- given: *|Dado
168
- when: *|Cuando
169
- then: *|Entonces
170
- and: *|Y
171
- but: *|Pero
167
+ given: "*|Dado"
168
+ when: "*|Cuando"
169
+ then: "*|Entonces"
170
+ and: "*|Y"
171
+ but: "*|Pero"
172
172
  "et":
173
173
  name: Estonian
174
174
  native: eesti keel
@@ -177,11 +177,11 @@
177
177
  scenario: Stsenaarium
178
178
  scenario_outline: Raamstsenaarium
179
179
  examples: Juhtumid
180
- given: *|Eeldades
181
- when: *|Kui
182
- then: *|Siis
183
- and: *|Ja
184
- but: *|Kuid
180
+ given: "*|Eeldades"
181
+ when: "*|Kui"
182
+ then: "*|Siis"
183
+ and: "*|Ja"
184
+ but: "*|Kuid"
185
185
  "fi":
186
186
  name: Finnish
187
187
  native: suomi
@@ -190,11 +190,11 @@
190
190
  scenario: Tapaus
191
191
  scenario_outline: Tapausaihio
192
192
  examples: Tapaukset
193
- given: *|Oletetaan
194
- when: *|Kun
195
- then: *|Niin
196
- and: *|Ja
197
- but: *|Mutta
193
+ given: "*|Oletetaan"
194
+ when: "*|Kun"
195
+ then: "*|Niin"
196
+ and: "*|Ja"
197
+ but: "*|Mutta"
198
198
  "fr":
199
199
  name: French
200
200
  native: français
@@ -203,11 +203,11 @@
203
203
  scenario: Scénario
204
204
  scenario_outline: Plan du scénario|Plan du Scénario
205
205
  examples: Exemples
206
- given: *|Soit|Etant donné
207
- when: *|Quand|Lorsque|Lorsqu'<
208
- then: *|Alors
209
- and: *|Et
210
- but: *|Mais
206
+ given: "*|Soit|Etant donné"
207
+ when: "*|Quand|Lorsque|Lorsqu'<"
208
+ then: "*|Alors"
209
+ and: "*|Et"
210
+ but: "*|Mais"
211
211
  "he":
212
212
  name: Hebrew
213
213
  native: עברית
@@ -216,11 +216,11 @@
216
216
  scenario: תרחיש
217
217
  scenario_outline: תבנית תרחיש
218
218
  examples: דוגמאות
219
- given: *|בהינתן
220
- when: *|כאשר
221
- then: *|אז|אזי
222
- and: *|וגם
223
- but: *|אבל
219
+ given: "*|בהינתן"
220
+ when: "*|כאשר"
221
+ then: "*|אז|אזי"
222
+ and: "*|וגם"
223
+ but: "*|אבל"
224
224
  "hr":
225
225
  name: Croatian
226
226
  native: hrvatski
@@ -229,11 +229,11 @@
229
229
  scenario: Scenarij
230
230
  scenario_outline: Skica|Koncept
231
231
  examples: Primjeri|Scenariji
232
- given: *|Zadan|Zadani|Zadano
233
- when: *|Kada|Kad
234
- then: *|Onda
235
- and: *|I
236
- but: *|Ali
232
+ given: "*|Zadan|Zadani|Zadano"
233
+ when: "*|Kada|Kad"
234
+ then: "*|Onda"
235
+ and: "*|I"
236
+ but: "*|Ali"
237
237
  "hu":
238
238
  name: Hungarian
239
239
  native: magyar
@@ -242,11 +242,11 @@
242
242
  scenario: Forgatókönyv
243
243
  scenario_outline: Forgatókönyv vázlat
244
244
  examples: Példák
245
- given: *|Ha
246
- when: *|Majd
247
- then: *|Akkor
248
- and: *|És
249
- but: *|De
245
+ given: "*|Ha"
246
+ when: "*|Majd"
247
+ then: "*|Akkor"
248
+ and: "*|És"
249
+ but: "*|De"
250
250
  "id":
251
251
  name: Indonesian
252
252
  native: Bahasa Indonesia
@@ -255,11 +255,11 @@
255
255
  scenario: Skenario
256
256
  scenario_outline: Skenario konsep
257
257
  examples: Contoh
258
- given: *|Dengan
259
- when: *|Ketika
260
- then: *|Maka
261
- and: *|Dan
262
- but: *|Tapi
258
+ given: "*|Dengan"
259
+ when: "*|Ketika"
260
+ then: "*|Maka"
261
+ and: "*|Dan"
262
+ but: "*|Tapi"
263
263
  "it":
264
264
  name: Italian
265
265
  native: italiano
@@ -268,11 +268,11 @@
268
268
  scenario: Scenario
269
269
  scenario_outline: Schema dello scenario
270
270
  examples: Esempi
271
- given: *|Dato
272
- when: *|Quando
273
- then: *|Allora
274
- and: *|E
275
- but: *|Ma
271
+ given: "*|Dato"
272
+ when: "*|Quando"
273
+ then: "*|Allora"
274
+ and: "*|E"
275
+ but: "*|Ma"
276
276
  "ja":
277
277
  name: Japanese
278
278
  native: 日本語
@@ -281,11 +281,11 @@
281
281
  scenario: シナリオ
282
282
  scenario_outline: シナリオアウトライン|シナリオテンプレート|テンプレ|シナリオテンプレ
283
283
  examples: 例|サンプル
284
- given: *|前提<
285
- when: *|もし<
286
- then: *|ならば<
287
- and: *|かつ<
288
- but: *|しかし<|但し<|ただし<
284
+ given: "*|前提<"
285
+ when: "*|もし<"
286
+ then: "*|ならば<"
287
+ and: "*|かつ<"
288
+ but: "*|しかし<|但し<|ただし<"
289
289
  "ko":
290
290
  name: Korean
291
291
  native: 한국어
@@ -294,11 +294,11 @@
294
294
  scenario: 시나리오
295
295
  scenario_outline: 시나리오 개요
296
296
  examples: 예
297
- given: *|조건<
298
- when: *|만일<
299
- then: *|그러면<
300
- and: *|그리고<
301
- but: *|하지만<
297
+ given: "*|조건<"
298
+ when: "*|만일<"
299
+ then: "*|그러면<"
300
+ and: "*|그리고<"
301
+ but: "*|하지만<"
302
302
  "lt":
303
303
  name: Lithuanian
304
304
  native: lietuvių kalba
@@ -307,11 +307,11 @@
307
307
  scenario: Scenarijus
308
308
  scenario_outline: Scenarijaus šablonas
309
309
  examples: Pavyzdžiai|Scenarijai|Variantai
310
- given: *|Duota
311
- when: *|Kai
312
- then: *|Tada
313
- and: *|Ir
314
- but: *|Bet
310
+ given: "*|Duota"
311
+ when: "*|Kai"
312
+ then: "*|Tada"
313
+ and: "*|Ir"
314
+ but: "*|Bet"
315
315
  "lv":
316
316
  name: Latvian
317
317
  native: latviešu
@@ -320,11 +320,11 @@
320
320
  scenario: Scenārijs
321
321
  scenario_outline: Scenārijs pēc parauga
322
322
  examples: Piemēri|Paraugs
323
- given: *|Kad
324
- when: *|Ja
325
- then: *|Tad
326
- and: *|Un
327
- but: *|Bet
323
+ given: "*|Kad"
324
+ when: "*|Ja"
325
+ then: "*|Tad"
326
+ and: "*|Un"
327
+ but: "*|Bet"
328
328
  "nl":
329
329
  name: Dutch
330
330
  native: Nederlands
@@ -333,11 +333,11 @@
333
333
  scenario: Scenario
334
334
  scenario_outline: Abstract Scenario
335
335
  examples: Voorbeelden
336
- given: *|Gegeven|Stel
337
- when: *|Als
338
- then: *|Dan
339
- and: *|En
340
- but: *|Maar
336
+ given: "*|Gegeven|Stel"
337
+ when: "*|Als"
338
+ then: "*|Dan"
339
+ and: "*|En"
340
+ but: "*|Maar"
341
341
  "no":
342
342
  name: Norwegian
343
343
  native: norsk
@@ -346,11 +346,11 @@
346
346
  scenario: Scenario
347
347
  scenario_outline: Abstrakt Scenario
348
348
  examples: Eksempler
349
- given: *|Gitt
350
- when: *|Når
351
- then: *|Så
352
- and: *|Og
353
- but: *|Men
349
+ given: "*|Gitt"
350
+ when: "*|Når"
351
+ then: "*|Så"
352
+ and: "*|Og"
353
+ but: "*|Men"
354
354
  "pl":
355
355
  name: Polish
356
356
  native: polski
@@ -359,11 +359,11 @@
359
359
  scenario: Scenariusz
360
360
  scenario_outline: Szablon scenariusza
361
361
  examples: Przykłady
362
- given: *|Zakładając
363
- when: *|Jeżeli
364
- then: *|Wtedy
365
- and: *|Oraz
366
- but: *|Ale
362
+ given: "*|Zakładając"
363
+ when: "*|Jeżeli"
364
+ then: "*|Wtedy"
365
+ and: "*|Oraz"
366
+ but: "*|Ale"
367
367
  "pt":
368
368
  name: Portuguese
369
369
  native: português
@@ -372,11 +372,11 @@
372
372
  scenario: Cenário|Cenario
373
373
  scenario_outline: Esquema do Cenário|Esquema do Cenario
374
374
  examples: Exemplos
375
- given: *|Dado
376
- when: *|Quando
377
- then: *|Então|Entao
378
- and: *|E
379
- but: *|Mas
375
+ given: "*|Dado"
376
+ when: "*|Quando"
377
+ then: "*|Então|Entao"
378
+ and: "*|E"
379
+ but: "*|Mas"
380
380
  "ro":
381
381
  name: Romanian
382
382
  native: română
@@ -385,11 +385,11 @@
385
385
  scenario: Scenariu
386
386
  scenario_outline: Scenariul de sablon
387
387
  examples: Exemplele
388
- given: *|Daca
389
- when: *|Cand
390
- then: *|Atunci
391
- and: *|Si
392
- but: *|Dar
388
+ given: "*|Daca"
389
+ when: "*|Cand"
390
+ then: "*|Atunci"
391
+ and: "*|Si"
392
+ but: "*|Dar"
393
393
  "ro2":
394
394
  name: Romanian (diacritical)
395
395
  native: română (diacritical)
@@ -398,11 +398,11 @@
398
398
  scenario: Scenariu
399
399
  scenario_outline: Scenariul de şablon
400
400
  examples: Exemplele
401
- given: *|Dacă
402
- when: *|Când
403
- then: *|Atunci
404
- and: *|Și
405
- but: *|Dar
401
+ given: "*|Dacă"
402
+ when: "*|Când"
403
+ then: "*|Atunci"
404
+ and: "*|Și"
405
+ but: "*|Dar"
406
406
  "ru":
407
407
  name: Russian
408
408
  native: русский
@@ -411,11 +411,11 @@
411
411
  scenario: Сценарий
412
412
  scenario_outline: Структура сценария
413
413
  examples: Значения
414
- given: *|Допустим
415
- when: *|Если
416
- then: *|То
417
- and: *|И|К тому же
418
- but: *|Но|А
414
+ given: "*|Допустим"
415
+ when: "*|Если"
416
+ then: "*|То"
417
+ and: "*|И|К тому же"
418
+ but: "*|Но|А"
419
419
  "se":
420
420
  name: Swedish
421
421
  native: Svenska
@@ -424,11 +424,11 @@
424
424
  scenario: Scenario
425
425
  scenario_outline: Abstrakt Scenario
426
426
  examples: Exempel
427
- given: *|Givet
428
- when: *|När
429
- then: *|Så
430
- and: *|Och
431
- but: *|Men
427
+ given: "*|Givet"
428
+ when: "*|När"
429
+ then: "*|Så"
430
+ and: "*|Och"
431
+ but: "*|Men"
432
432
  "sk":
433
433
  name: Slovak
434
434
  native: Slovensky
@@ -437,11 +437,11 @@
437
437
  scenario: Scenár
438
438
  scenario_outline: Náčrt Scenáru
439
439
  examples: Príklady
440
- given: *|Pokiaľ
441
- when: *|Keď
442
- then: *|Tak
443
- and: *|A
444
- but: *|Ale
440
+ given: "*|Pokiaľ"
441
+ when: "*|Keď"
442
+ then: "*|Tak"
443
+ and: "*|A"
444
+ but: "*|Ale"
445
445
  "sr-Latn":
446
446
  name: Serbian_latin
447
447
  native: Srpski_latinica
@@ -450,11 +450,11 @@
450
450
  scenario: Scenario|Primer
451
451
  scenario_outline: Struktura scenarija|Skica|Koncept
452
452
  examples: Primeri|Scenariji
453
- given: *|Zadato|Zadate|Zatati
454
- when: *|Kada|Kad
455
- then: *|Onda
456
- and: *|I
457
- but: *|Ali
453
+ given: "*|Zadato|Zadate|Zatati"
454
+ when: "*|Kada|Kad"
455
+ then: "*|Onda"
456
+ and: "*|I"
457
+ but: "*|Ali"
458
458
  "sr":
459
459
  name: Serbian
460
460
  native: Српски
@@ -463,11 +463,11 @@
463
463
  scenario: Сценарио|Пример
464
464
  scenario_outline: Структура сценарија|Скица|Концепт
465
465
  examples: Примери|Сценарији
466
- given: *|Задато|Задате|Задати
467
- when: *|Када|Кад
468
- then: *|Онда
469
- and: *|И
470
- but: *|Али
466
+ given: "*|Задато|Задате|Задати"
467
+ when: "*|Када|Кад"
468
+ then: "*|Онда"
469
+ and: "*|И"
470
+ but: "*|Али"
471
471
  "tr":
472
472
  name: Turkish
473
473
  native: Türkçe
@@ -476,11 +476,11 @@
476
476
  scenario: Senaryo
477
477
  scenario_outline: Senaryo taslağı
478
478
  examples: Örnekler
479
- given: *|Diyelim ki
480
- when: *|Eğer ki
481
- then: *|O zaman
482
- and: *|Ve
483
- but: *|Fakat|Ama
479
+ given: "*|Diyelim ki"
480
+ when: "*|Eğer ki"
481
+ then: "*|O zaman"
482
+ and: "*|Ve"
483
+ but: "*|Fakat|Ama"
484
484
  "uz":
485
485
  name: Uzbek
486
486
  native: Узбекча
@@ -489,11 +489,11 @@
489
489
  scenario: Сценарий
490
490
  scenario_outline: Сценарий структураси
491
491
  examples: Мисоллар
492
- given: *|Агар
493
- when: *|Агар
494
- then: *|Унда
495
- and: *|Ва
496
- but: *|Лекин|Бирок|Аммо
492
+ given: "*|Агар"
493
+ when: "*|Агар"
494
+ then: "*|Унда"
495
+ and: "*|Ва"
496
+ but: "*|Лекин|Бирок|Аммо"
497
497
  "vi":
498
498
  name: Vietnamese
499
499
  native: Tiếng Việt
@@ -502,11 +502,11 @@
502
502
  scenario: Tình huống|Kịch bản
503
503
  scenario_outline: Khung tình huống|Khung kịch bản
504
504
  examples: Dữ liệu
505
- given: *|Biết|Cho
506
- when: *|Khi
507
- then: *|Thì
508
- and: *|Và
509
- but: *|Nhưng
505
+ given: "*|Biết|Cho"
506
+ when: "*|Khi"
507
+ then: "*|Thì"
508
+ and: "*|Và"
509
+ but: "*|Nhưng"
510
510
  "zh-CN":
511
511
  name: Chinese simplified
512
512
  native: 简体中文
@@ -515,11 +515,11 @@
515
515
  scenario: 场景
516
516
  scenario_outline: 场景大纲
517
517
  examples: 例子
518
- given: *|假如<
519
- when: *|当<
520
- then: *|那么<
521
- and: *|而且<
522
- but: *|但是<
518
+ given: "*|假如<"
519
+ when: "*|当<"
520
+ then: "*|那么<"
521
+ and: "*|而且<"
522
+ but: "*|但是<"
523
523
  "zh-TW":
524
524
  name: Chinese traditional
525
525
  native: 繁體中文
@@ -528,8 +528,8 @@
528
528
  scenario: 場景|劇本
529
529
  scenario_outline: 場景大綱|劇本大綱
530
530
  examples: 例子
531
- given: *|假設<
532
- when: *|當<
533
- then: *|那麼<
534
- and: *|而且<|並且<
535
- but: *|但是<
531
+ given: "*|假設<"
532
+ when: "*|當<"
533
+ then: "*|那麼<"
534
+ and: "*|而且<|並且<"
535
+ but: "*|但是<"