cucumber 0.5.1 → 0.5.2

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