yard-cucumber 2.1.3 → 2.1.4
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.
- data/History.txt +4 -0
- data/example/scenario_outline.feature +15 -1
- data/example/scenario_outline_multi.feature +15 -0
- data/example/step_definitions/struct.rb +11 -0
- data/lib/cucumber/city_builder.rb +30 -12
- data/lib/templates/default/feature/html/outline.erb +33 -25
- data/lib/templates/default/fulldoc/html/css/cucumber.css +9 -1
- data/lib/yard/code_objects/cucumber/scenario_outline.rb +34 -25
- data/lib/yard-cucumber.rb +1 -1
- metadata +5 -3
data/History.txt
CHANGED
@@ -77,4 +77,18 @@ Feature: Displaying Scenario Outlines
|
|
77
77
|
And I expect <denomination> to be replaced by the example denomination
|
78
78
|
|
79
79
|
Examples:
|
80
|
-
| name | price | denomination |
|
80
|
+
| name | price | denomination |
|
81
|
+
|
82
|
+
Scenario Outline: Multiple Example Table
|
83
|
+
Given that <Customer> is a valid customer
|
84
|
+
And that the product, named '<Product>', is a valid product
|
85
|
+
When the customer has purchased the product
|
86
|
+
Then I expect the customer to be a member of the '<Product>' group
|
87
|
+
|
88
|
+
Examples: Example group A
|
89
|
+
| Customer | Product |
|
90
|
+
| Customer A | Product A |
|
91
|
+
|
92
|
+
Examples: Example group B
|
93
|
+
| Customer | Product |
|
94
|
+
| Customer B | Product A |
|
@@ -0,0 +1,15 @@
|
|
1
|
+
Feature: My Feature
|
2
|
+
|
3
|
+
Scenario Outline: Multiple Example Table
|
4
|
+
Given that <Customer> is a valid customer
|
5
|
+
And that the product, named '<Product>', is a valid product
|
6
|
+
When the customer has purchased the product
|
7
|
+
Then I expect the customer to be a member of the '<Product>' group
|
8
|
+
|
9
|
+
Examples: Example group A
|
10
|
+
| Customer | Product |
|
11
|
+
| Customer A | Product A |
|
12
|
+
|
13
|
+
Examples: Example group B
|
14
|
+
| Customer | Product |
|
15
|
+
| Customer B | Product A |
|
@@ -0,0 +1,11 @@
|
|
1
|
+
#
|
2
|
+
# @see https://github.com/burtlo/yard-cucumber/issues/18
|
3
|
+
#
|
4
|
+
CustomerUsageBehavior = Struct.new(:weight, :days, :time, :location, :other_party, :usage_type, :direction, :quantity)
|
5
|
+
|
6
|
+
|
7
|
+
class CustomerProfile
|
8
|
+
def generate_winner(max=@total_weight)
|
9
|
+
# blah
|
10
|
+
end
|
11
|
+
end
|
@@ -186,16 +186,24 @@ module Cucumber
|
|
186
186
|
#
|
187
187
|
def examples(examples)
|
188
188
|
#log.debug "EXAMPLES"
|
189
|
-
|
190
|
-
|
189
|
+
|
190
|
+
example = YARD::CodeObjects::Cucumber::ScenarioOutline::Examples.new(:keyword => examples.keyword,
|
191
191
|
:name => examples.name,
|
192
192
|
:line => examples.line,
|
193
193
|
:comments => examples.comments.map{|comment| comment.value}.join("\n"),
|
194
|
-
:rows => matrix(examples.rows)
|
194
|
+
:rows => matrix(examples.rows))
|
195
|
+
|
196
|
+
|
197
|
+
# add the example to the step containers list of examples
|
195
198
|
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
+
@step_container.examples << example
|
200
|
+
|
201
|
+
# For each example data row we want to generate a new scenario using our
|
202
|
+
# current scenario as the template.
|
203
|
+
|
204
|
+
example.data.length.times do |row_index|
|
205
|
+
|
206
|
+
# Generate a copy of the scenario.
|
199
207
|
|
200
208
|
scenario = YARD::CodeObjects::Cucumber::Scenario.new(@step_container,"example_#{@step_container.scenarios.length + 1}") do |s|
|
201
209
|
s.comments = @step_container.comments
|
@@ -205,6 +213,8 @@ module Cucumber
|
|
205
213
|
s.value = "#{@step_container.value} (#{@step_container.scenarios.length + 1})"
|
206
214
|
end
|
207
215
|
|
216
|
+
# Generate a copy of the scenario steps.
|
217
|
+
|
208
218
|
@step_container.steps.each do |step|
|
209
219
|
step_instance = YARD::CodeObjects::Cucumber::Step.new(scenario,step.line_number) do |s|
|
210
220
|
s.keyword = step.keyword.dup
|
@@ -215,23 +225,29 @@ module Cucumber
|
|
215
225
|
s.table = clone_table(step.table) if step.has_table?
|
216
226
|
end
|
217
227
|
|
218
|
-
|
228
|
+
# Look at the particular data for the example row and do a simple
|
229
|
+
# find and replace of the <key> with the associated values.
|
230
|
+
|
231
|
+
example.values_for_row(row_index).each do |key,text|
|
219
232
|
text ||= "" #handle empty cells in the example table
|
220
233
|
step_instance.value.gsub!("<#{key}>",text)
|
221
234
|
step_instance.text.gsub!("<#{key}>",text) if step_instance.has_text?
|
222
235
|
step_instance.table.each{|row| row.each{|col| col.gsub!("<#{key}>",text)}} if step_instance.has_table?
|
223
236
|
end
|
224
|
-
|
237
|
+
|
238
|
+
# Connect these steps that we created to the scenario we created
|
239
|
+
# and then add the steps to the scenario created.
|
240
|
+
|
225
241
|
step_instance.scenario = scenario
|
226
242
|
scenario.steps << step_instance
|
227
243
|
end
|
228
244
|
|
229
|
-
#
|
230
|
-
#
|
231
|
-
|
245
|
+
# Add the scenario to the list of scenarios maintained by the feature
|
246
|
+
# and add the feature to the scenario
|
247
|
+
|
232
248
|
scenario.feature = @feature
|
233
249
|
@step_container.scenarios << scenario
|
234
|
-
|
250
|
+
|
235
251
|
end
|
236
252
|
|
237
253
|
end
|
@@ -261,6 +277,8 @@ module Cucumber
|
|
261
277
|
rubify(step.rows)
|
262
278
|
end
|
263
279
|
|
280
|
+
log.debug "Step: #{multiline_arg}"
|
281
|
+
|
264
282
|
case(multiline_arg)
|
265
283
|
when gherkin_multiline_string_class
|
266
284
|
@table_owner.text = multiline_arg.value
|
@@ -9,32 +9,40 @@
|
|
9
9
|
<div class="outline">
|
10
10
|
|
11
11
|
<% if @scenario.examples? %>
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
12
|
+
|
13
|
+
<% @scenario.examples.each_with_index do |example,example_index| %>
|
14
|
+
<div class="keyword">
|
15
|
+
<%= h example.keyword %><%= example.name != "" ? ':' : '' %>
|
16
|
+
</div>
|
17
|
+
<div class="example-group-name"><%= h example.name %></div>
|
18
|
+
<br style="clear: both;"/>
|
19
|
+
<table>
|
20
|
+
<thead>
|
21
|
+
<tr>
|
22
|
+
<% example.headers.each_with_index do |header,header_index| %>
|
23
|
+
<th><%= h(header) %></th>
|
24
|
+
<% end %>
|
25
|
+
</tr>
|
26
|
+
</thead>
|
27
|
+
<% unless example.data.empty? %>
|
28
|
+
<% example.data.each_with_index do |row,row_index| %>
|
29
|
+
<tr class="<%= (row_index + 1) % 2 == 0 ? "even example#{example_index+1}-#{row_index +1}" : "odd example#{example_index+1}-#{row_index +1}" %>">
|
30
|
+
<% row.each_with_index do |column,column_index| %>
|
31
|
+
<td><%= h(column.to_s.strip) %></td>
|
32
|
+
<% end %>
|
33
|
+
</tr>
|
34
|
+
<% end %>
|
35
|
+
<% else %>
|
36
|
+
<!-- Scenario Outline example table is empty -->
|
37
|
+
<tr class="odd">
|
38
|
+
<td colspan="<%= example.headers.length %>" style="text-align: center;">
|
39
|
+
No Examples Defined
|
40
|
+
</td>
|
41
|
+
</tr>
|
18
42
|
<% end %>
|
19
|
-
</
|
20
|
-
|
21
|
-
|
22
|
-
<% @scenario.example_data.each_with_index do |row,row_index| %>
|
23
|
-
<tr class="<%= (row_index + 1) % 2 == 0 ? "even example#{row_index +1}" : "odd example#{row_index +1}" %>">
|
24
|
-
<% row.each_with_index do |column,column_index| %>
|
25
|
-
<td><%= h(column.to_s.strip) %></td>
|
26
|
-
<% end %>
|
27
|
-
</tr>
|
28
|
-
<% end %>
|
29
|
-
<% else %>
|
30
|
-
<!-- Scenario Outline example table is empty -->
|
31
|
-
<tr class="odd">
|
32
|
-
<td colspan="<%= @scenario.example_headers.length %>" style="text-align: center;">
|
33
|
-
No Examples Defined
|
34
|
-
</td>
|
35
|
-
</tr>
|
36
|
-
<% end %>
|
37
|
-
</table>
|
43
|
+
</table>
|
44
|
+
<% end %>
|
45
|
+
|
38
46
|
<% else %>
|
39
47
|
<div class="keyword">No Example Table Defined</div>
|
40
48
|
<div class="keyword suggestion developer">[!] Did you mean to create a Scenario?</div>
|
@@ -123,11 +123,19 @@ div.undefined { padding: 6px; }
|
|
123
123
|
margin-left: 40px;
|
124
124
|
}
|
125
125
|
.outline .keyword {
|
126
|
+
float: left;
|
127
|
+
margin-top: 20px;
|
126
128
|
padding: 4px;
|
127
129
|
font-weight: bold;
|
128
130
|
font-size: 16px;
|
129
131
|
}
|
130
|
-
|
132
|
+
.outline .example-group-name {
|
133
|
+
float: left;
|
134
|
+
margin-top: 20px;
|
135
|
+
padding: 4px 4px 4px 20px;
|
136
|
+
font-size: 14px;
|
137
|
+
color: #343332;
|
138
|
+
}
|
131
139
|
.multiline table tr, .outline table tr {
|
132
140
|
padding: 4px;
|
133
141
|
}
|
@@ -13,7 +13,7 @@ module YARD::CodeObjects::Cucumber
|
|
13
13
|
@steps = []
|
14
14
|
@tags = []
|
15
15
|
@scenarios = []
|
16
|
-
@examples =
|
16
|
+
@examples = []
|
17
17
|
end
|
18
18
|
|
19
19
|
def background?
|
@@ -25,40 +25,49 @@ module YARD::CodeObjects::Cucumber
|
|
25
25
|
end
|
26
26
|
|
27
27
|
def examples?
|
28
|
-
|
29
|
-
end
|
30
|
-
|
31
|
-
def example_keyword
|
32
|
-
@examples[:keyword]
|
28
|
+
@examples.find {|example| example.rows }
|
33
29
|
end
|
34
30
|
|
35
|
-
def example_headers
|
36
|
-
@examples[:rows].first
|
37
|
-
end
|
38
31
|
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
32
|
+
class Examples
|
33
|
+
|
34
|
+
attr_accessor :name, :line, :keyword, :comments, :rows
|
35
|
+
|
36
|
+
# The first row of the rows contains the headers for the table
|
37
|
+
def headers
|
38
|
+
rows.first
|
39
|
+
end
|
40
|
+
|
41
|
+
# The data of the table starts at the second row. When there is no data then
|
42
|
+
# return a empty string.
|
43
|
+
def data
|
44
|
+
rows ? rows[1..-1] : ""
|
45
|
+
end
|
46
|
+
|
47
|
+
def values_for_row(row)
|
48
|
+
hash = {}
|
43
49
|
|
44
|
-
|
45
|
-
|
50
|
+
headers.each_with_index do |header,index|
|
51
|
+
hash[header] = data[row][index]
|
52
|
+
end
|
46
53
|
|
47
|
-
|
48
|
-
hash[header] = example_data[row][index]
|
54
|
+
hash
|
49
55
|
end
|
56
|
+
|
57
|
+
def to_hash
|
58
|
+
hash = {}
|
50
59
|
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
60
|
+
rows.each_with_index do |header,index|
|
61
|
+
hash[header] = rows.collect {|row| row[index] }
|
62
|
+
end
|
63
|
+
|
64
|
+
hash
|
65
|
+
end
|
56
66
|
|
57
|
-
|
58
|
-
|
67
|
+
def initialize(parameters = {})
|
68
|
+
parameters.each {|key,value| send("#{key.to_sym}=",value) if respond_to? "#{key.to_sym}=" }
|
59
69
|
end
|
60
70
|
|
61
|
-
hash
|
62
71
|
end
|
63
72
|
|
64
73
|
end
|
data/lib/yard-cucumber.rb
CHANGED
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: yard-cucumber
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 2.1.
|
5
|
+
version: 2.1.4
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Franklin Webber
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2011-
|
13
|
+
date: 2011-10-10 00:00:00 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: gherkin
|
@@ -68,9 +68,11 @@ files:
|
|
68
68
|
- example/french.feature
|
69
69
|
- example/scenario.feature
|
70
70
|
- example/scenario_outline.feature
|
71
|
+
- example/scenario_outline_multi.feature
|
71
72
|
- example/step_definitions/example.step.rb
|
72
73
|
- example/step_definitions/first.step.rb
|
73
74
|
- example/step_definitions/french_steps.rb
|
75
|
+
- example/step_definitions/struct.rb
|
74
76
|
- example/step_definitions/support/env.rb
|
75
77
|
- example/step_definitions/support/env_support.rb
|
76
78
|
- example/step_definitions/support/support.rb
|
@@ -139,7 +141,7 @@ homepage: http://github.com/burtlo/yard-cucumber
|
|
139
141
|
licenses: []
|
140
142
|
|
141
143
|
post_install_message: "\n\
|
142
|
-
(::) (::) (::) (::) (::) (::) (::) (::) (::) (::) (::) (::) (::) (::) (::)\n\n Thank you for installing yard-cucumber 2.1.
|
144
|
+
(::) (::) (::) (::) (::) (::) (::) (::) (::) (::) (::) (::) (::) (::) (::)\n\n Thank you for installing yard-cucumber 2.1.4 / 2011-10-10.\n \n Changes:\n \n * Support for multiple scenario outlines (Thanks @jmerrifield)\n \n\n\
|
143
145
|
(::) (::) (::) (::) (::) (::) (::) (::) (::) (::) (::) (::) (::) (::) (::)\n\n"
|
144
146
|
rdoc_options:
|
145
147
|
- --charset=UTF-8
|