cucumber-in-the-yard 1.7.0 → 1.7.1
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 +7 -0
- data/example/child_feature/scenario.feature +4 -2
- data/lib/city.rb +1 -3
- data/lib/cucumber/city_builder.rb +10 -6
- data/lib/templates/default/feature/html/feature.erb +26 -16
- data/lib/templates/default/feature/html/no_steps_defined.erb +1 -1
- data/lib/templates/default/feature/html/outline.erb +7 -38
- data/lib/templates/default/feature/html/scenario.erb +49 -38
- data/lib/templates/default/feature/html/steps.erb +24 -22
- data/lib/templates/default/feature/setup.rb +6 -1
- data/lib/templates/default/featuretags/html/namespace.erb +5 -1
- data/lib/templates/default/featuretags/html/setup.rb +1 -1
- data/lib/templates/default/fulldoc/html/css/common.css +25 -11
- data/lib/templates/default/fulldoc/html/full_list_features.erb +7 -3
- data/lib/templates/default/fulldoc/html/js/cucumber.js +108 -28
- data/lib/templates/default/steptransformers/html/transformers.erb +1 -1
- data/lib/templates/default/steptransformers/html/undefined_steps.erb +1 -1
- data/lib/templates/default/tag/html/scenario.erb +5 -1
- data/lib/yard/code_objects/cucumber/scenario.rb +2 -2
- data/lib/yard/code_objects/cucumber/scenario_outline.rb +1 -1
- data/lib/yard/code_objects/cucumber/step.rb +2 -2
- metadata +9 -7
- data/lib/templates/default/feature/html/background.erb +0 -92
data/History.txt
CHANGED
@@ -1,3 +1,10 @@
|
|
1
|
+
=== 1.7.1 / 2010-11-28
|
2
|
+
|
3
|
+
* Feature file with layout enhancements
|
4
|
+
* Scenarios are now linked/linkable
|
5
|
+
* FIX Scenario Outline error on CentOS, Ruby 1.8.7
|
6
|
+
* FIX Requiring Cucumber before Gherkin so that correct gherkin is loaded
|
7
|
+
|
1
8
|
=== 1.7.0 / 2010-11-18
|
2
9
|
|
3
10
|
* Dynamic Tag Union / Intersection
|
@@ -39,9 +39,11 @@ Feature: Scenario
|
|
39
39
|
Oh what a bother!
|
40
40
|
"""
|
41
41
|
|
42
|
+
# Comments before the scenario
|
42
43
|
@seventh @comments
|
43
|
-
Scenario: Scenario with comments and
|
44
|
-
|
44
|
+
Scenario: Scenario with comments and a description
|
45
|
+
There once was a need for information to be displayed alongside all the
|
46
|
+
entities that I hoped to test
|
45
47
|
# First Comment
|
46
48
|
Given this first step
|
47
49
|
# Second Comment
|
data/lib/city.rb
CHANGED
@@ -1,13 +1,11 @@
|
|
1
|
-
require 'gherkin/rubify'
|
2
1
|
require 'cucumber/parser/gherkin_builder'
|
3
2
|
require 'gherkin/parser/parser'
|
4
3
|
require 'gherkin/formatter/tag_count_formatter'
|
5
4
|
|
6
5
|
module CucumberInTheYARD
|
7
|
-
VERSION = '1.7.
|
6
|
+
VERSION = '1.7.1' unless defined?(CucumberInTheYARD::VERSION)
|
8
7
|
end
|
9
8
|
|
10
|
-
|
11
9
|
require File.dirname(__FILE__) + "/yard/code_objects/cucumber/base.rb"
|
12
10
|
require File.dirname(__FILE__) + "/yard/code_objects/cucumber/namespace_object.rb"
|
13
11
|
require File.dirname(__FILE__) + "/yard/code_objects/cucumber/feature.rb"
|
@@ -34,7 +34,8 @@ module Cucumber
|
|
34
34
|
end
|
35
35
|
|
36
36
|
def feature(feature)
|
37
|
-
#log.debug
|
37
|
+
#log.debug "FEATURE"
|
38
|
+
|
38
39
|
@feature = YARD::CodeObjects::Cucumber::Feature.new(@namespace,File.basename(@file.gsub('.feature','').gsub('.','_'))) do |f|
|
39
40
|
f.comments = feature.comments.map{|comment| comment.value}.join("\n")
|
40
41
|
f.description = feature.description
|
@@ -48,7 +49,8 @@ module Cucumber
|
|
48
49
|
end
|
49
50
|
|
50
51
|
def background(background)
|
51
|
-
#log.debug "BACKGROUND
|
52
|
+
#log.debug "BACKGROUND"
|
53
|
+
|
52
54
|
@background = YARD::CodeObjects::Cucumber::Scenario.new(@feature,"background") do |b|
|
53
55
|
b.comments = background.comments.map{|comment| comment.value}.join("\n")
|
54
56
|
b.description = background.description
|
@@ -64,6 +66,7 @@ module Cucumber
|
|
64
66
|
|
65
67
|
def scenario(statement)
|
66
68
|
#log.debug "SCENARIO"
|
69
|
+
|
67
70
|
scenario = YARD::CodeObjects::Cucumber::Scenario.new(@feature,"scenario_#{@feature.scenarios.length + 1}") do |s|
|
68
71
|
s.comments = statement.comments.map{|comment| comment.value}.join("\n")
|
69
72
|
s.description = statement.description
|
@@ -81,7 +84,7 @@ module Cucumber
|
|
81
84
|
|
82
85
|
def scenario_outline(statement)
|
83
86
|
#log.debug "SCENARIO OUTLINE"
|
84
|
-
|
87
|
+
|
85
88
|
outline = YARD::CodeObjects::Cucumber::ScenarioOutline.new(@feature,"scenario_#{@feature.scenarios.length + 1}") do |s|
|
86
89
|
s.comments = statement.comments.map{|comment| comment.value}.join("\n")
|
87
90
|
s.description = statement.description
|
@@ -116,8 +119,6 @@ module Cucumber
|
|
116
119
|
s.add_file(@file,@step_container.line_number)
|
117
120
|
s.keyword = @step_container.keyword
|
118
121
|
s.value = "#{@step_container.value} (#{@step_container.scenarios.length + 1})"
|
119
|
-
|
120
|
-
#TODO: Should scenario instances have their own tag instances?
|
121
122
|
end
|
122
123
|
|
123
124
|
@step_container.steps.each do |step|
|
@@ -151,13 +152,16 @@ module Cucumber
|
|
151
152
|
end
|
152
153
|
|
153
154
|
def step(step)
|
154
|
-
#log.debug "STEP
|
155
|
+
#log.debug "STEP"
|
156
|
+
|
155
157
|
@table_owner = YARD::CodeObjects::Cucumber::Step.new(@step_container,"#{step.line}") do |s|
|
156
158
|
s.keyword = step.keyword
|
157
159
|
s.value = step.name
|
158
160
|
s.add_file(@file,step.line)
|
159
161
|
end
|
160
162
|
|
163
|
+
@table_owner.comments = step.comments.map{|comment| comment.value}.join("\n")
|
164
|
+
|
161
165
|
multiline_arg = rubify(step.multiline_arg)
|
162
166
|
|
163
167
|
case(multiline_arg)
|
@@ -1,22 +1,32 @@
|
|
1
|
+
<script type="text/javascript" charset="utf-8">
|
2
|
+
$(function() {
|
3
|
+
$(".developer").hide();
|
4
|
+
});
|
5
|
+
</script>
|
6
|
+
|
1
7
|
<div class="feature">
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
</div>
|
8
|
+
<div class="title">
|
9
|
+
<span class="pre"><%= @feature.keyword %>:</span>
|
10
|
+
<span class="name"><%= @feature.value %></span>
|
6
11
|
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
<% @feature.tags.each do |tag| %>
|
11
|
-
<a href="<%= url_for tag %>"><%= tag.value %></a>
|
12
|
-
<% end %>
|
13
|
-
</div>
|
14
|
-
</div>
|
12
|
+
<div id="view">[More Detail]</div>
|
13
|
+
<div id="expand">[Collapse All]</div>
|
14
|
+
</div>
|
15
15
|
|
16
|
-
|
17
|
-
|
18
|
-
|
16
|
+
<div class="meta">
|
17
|
+
<div class="file developer"><%= h(@feature.file) %></div>
|
18
|
+
<div style="clear: right;"></div>
|
19
|
+
<div class="tags developer">
|
20
|
+
<% @feature.tags.each do |tag| %>
|
21
|
+
<a href="<%= url_for tag %>"><%= tag.value %></a>
|
22
|
+
<% end %>
|
23
|
+
</div>
|
24
|
+
</div>
|
25
|
+
|
26
|
+
<div class="description">
|
27
|
+
<%= @feature.description %>
|
28
|
+
</div>
|
19
29
|
|
20
|
-
|
30
|
+
<%= yieldall %>
|
21
31
|
</div>
|
22
32
|
|
@@ -1 +1 @@
|
|
1
|
-
<
|
1
|
+
<div class="none">No Steps Defined</div>
|
@@ -1,56 +1,25 @@
|
|
1
1
|
<% @scenario.scenarios.each_with_index do |scenario,example_index| %>
|
2
|
-
<div
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
<div <%= "id='#{@id}Example#{example_index + 1}Step#{index}'" %> class="step <%= (index + 1) % 2 == 0 ? 'even' : 'odd' %>">
|
8
|
-
<span class="predicate"><%= step.keyword %></span>
|
9
|
-
|
10
|
-
<% if step.definition %>
|
11
|
-
<span class="defined">
|
12
|
-
<%= highlight_matches(step) %>
|
13
|
-
<div class="details">
|
14
|
-
<a href="<%= url_for step.definition %>"><div class="valid"> </div></a>
|
15
|
-
</div>
|
16
|
-
</span>
|
17
|
-
<% else %>
|
18
|
-
<span class="undefined">
|
19
|
-
<%= h step.value %>
|
20
|
-
<div class="details">
|
21
|
-
<a href="<%= url_for YARD::CodeObjects::Cucumber::CUCUMBER_STEPTRANSFORM_NAMESPACE %>#undefined_steps">
|
22
|
-
<div class="invalid"> </div>
|
23
|
-
</a>
|
24
|
-
</div>
|
25
|
-
</span>
|
26
|
-
<% end %>
|
27
|
-
|
2
|
+
<div style="display: none;" class="steps <%= "example#{example_index + 1}" %>">
|
3
|
+
<% @scenario_outline = @scenario ; @scenario = scenario ; @steps = scenario.steps %>
|
4
|
+
<%= erb(:steps) %>
|
5
|
+
<% @scenario = @scenario_outline %>
|
28
6
|
</div>
|
29
|
-
|
30
|
-
<%= erb(:table) if step.has_table? %>
|
31
|
-
<%= erb(:pystring) if step.has_text? %>
|
32
|
-
|
33
|
-
|
34
|
-
<% end %>
|
35
|
-
</div>
|
36
7
|
<% end %>
|
37
8
|
|
38
|
-
|
39
9
|
<div class="outline">
|
40
10
|
<div class="keyword"> <%= h @scenario.example_keyword %> </div>
|
41
11
|
<table>
|
42
12
|
<thead>
|
43
13
|
<tr>
|
44
14
|
<% @scenario.example_headers.each_with_index do |header,header_index| %>
|
45
|
-
|
15
|
+
<th><%= h(header) %></th>
|
46
16
|
<% end %>
|
47
17
|
</tr>
|
48
18
|
</thead>
|
49
19
|
<% @scenario.example_data.each_with_index do |row,row_index| %>
|
50
|
-
<tr class="<%= (row_index + 1) % 2 == 0 ?
|
51
|
-
onclick="<%= "toggleScenarioExample('#{@id}',#{row_index + 1});" %>">
|
20
|
+
<tr class="<%= (row_index + 1) % 2 == 0 ? "even example#{row_index +1}" : "odd example#{row_index +1}" %>">
|
52
21
|
<% row.each_with_index do |column,column_index| %>
|
53
|
-
|
22
|
+
<td><%= h(column.to_s.strip) %></td>
|
54
23
|
<% end %>
|
55
24
|
</tr>
|
56
25
|
<% end %>
|
@@ -1,41 +1,52 @@
|
|
1
|
-
<
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
</
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
<% unless @scenario.description.empty? %>
|
31
|
-
<div class="description">
|
32
|
-
<%= h @scenario.description %>
|
33
|
-
</div>
|
34
|
-
<% end %>
|
35
|
-
|
36
|
-
<div id="<%= @id %>Steps" class="steps">
|
37
|
-
<%= @scenario.steps.empty? ? erb(:no_steps_defined) : erb(:steps) %>
|
1
|
+
<div class="scenario">
|
2
|
+
<a name="<%= @id %>" />
|
3
|
+
<div class="title">
|
4
|
+
<a class="toggle"> - </a>
|
5
|
+
<span class="pre"><%= @scenario.keyword %>:</span>
|
6
|
+
<span class="name"><%= h @scenario.value %></span>
|
7
|
+
</div>
|
8
|
+
|
9
|
+
<% if @scenario.description.length > 0 %>
|
10
|
+
<div class="description">
|
11
|
+
<%= h @scenario.description %>
|
12
|
+
</div>
|
13
|
+
<% end %>
|
14
|
+
|
15
|
+
<% if @scenario.comments.length > 0 %>
|
16
|
+
<div class="comments developer">
|
17
|
+
<%= h @scenario.comments %>
|
18
|
+
</div>
|
19
|
+
<% end %>
|
20
|
+
|
21
|
+
<div class="details">
|
22
|
+
<div class="meta developer">
|
23
|
+
<div class="file"><%= @scenario.location %></div>
|
24
|
+
<% unless @scenario.tags.empty? %>
|
25
|
+
<div style="clear:right;"></div>
|
26
|
+
<div class="tags">
|
27
|
+
<% @scenario.tags.each do |tag| %>
|
28
|
+
<a href="<%= url_for tag %>"><%= tag.value %></a>
|
29
|
+
<% end %>
|
38
30
|
</div>
|
31
|
+
<% end%>
|
32
|
+
<div style="clear: both;"></div>
|
33
|
+
</div>
|
34
|
+
|
35
|
+
<div class="steps">
|
36
|
+
<% if @scenario.steps.empty? %>
|
37
|
+
<%= erb(:no_steps_defined) %>
|
38
|
+
<% else %>
|
39
|
+
<%= @steps = @scenario.steps ; erb(:steps) %>
|
40
|
+
<% end %>
|
41
|
+
</div>
|
42
|
+
|
43
|
+
|
44
|
+
<%= erb(:outline) if @scenario.outline? %>
|
45
|
+
|
46
|
+
</div>
|
39
47
|
|
40
|
-
|
48
|
+
<div class="attributes" style="display:none;">
|
49
|
+
<input type="hidden" name="collapsed" value="false">
|
50
|
+
</div>
|
51
|
+
|
41
52
|
</div>
|
@@ -1,31 +1,33 @@
|
|
1
|
-
<% @
|
1
|
+
<% @steps.each_with_index do |step,index| %>
|
2
2
|
<% @step = step %>
|
3
3
|
|
4
|
-
|
5
|
-
<div
|
4
|
+
<% if step.comments && step.comments.length > 0 %>
|
5
|
+
<div class="comments developer"><%= h step.comments %></div>
|
6
|
+
<% end %>
|
7
|
+
<div class="step <%= (index + 1) % 2 == 0 ? 'even' : 'odd' %>">
|
6
8
|
<span class="predicate"><%= step.keyword %></span>
|
7
9
|
|
8
10
|
<% if @scenario.outline? %>
|
9
|
-
<%= step.value %>
|
11
|
+
<%= h step.value %>
|
10
12
|
<% else %>
|
11
13
|
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
14
|
+
<% if step.definition %>
|
15
|
+
<span class="defined">
|
16
|
+
<%= highlight_matches(step) %>
|
17
|
+
<div class="definition developer">
|
18
|
+
<a href="<%= url_for step.definition %>"><div class="valid"> </div></a>
|
19
|
+
</div>
|
20
|
+
</span>
|
21
|
+
<% else %>
|
22
|
+
<span class="undefined">
|
23
|
+
<%= h step.value %>
|
24
|
+
<div class="definition developer">
|
25
|
+
<a href="<%= url_for YARD::CodeObjects::Cucumber::CUCUMBER_STEPTRANSFORM_NAMESPACE %>#undefined_steps">
|
26
|
+
<div class="invalid"> </div>
|
27
|
+
</a>
|
28
|
+
</div>
|
29
|
+
</span>
|
30
|
+
<% end %>
|
29
31
|
|
30
32
|
<% end %>
|
31
33
|
</div>
|
@@ -34,4 +36,4 @@
|
|
34
36
|
<%= erb(:pystring) if step.has_text? %>
|
35
37
|
|
36
38
|
|
37
|
-
|
39
|
+
<% end %>
|
@@ -4,7 +4,6 @@ def init
|
|
4
4
|
|
5
5
|
sections.push :feature
|
6
6
|
|
7
|
-
sections.push :background if object.background
|
8
7
|
sections.push :scenarios if object.scenarios
|
9
8
|
|
10
9
|
end
|
@@ -18,6 +17,12 @@ end
|
|
18
17
|
def scenarios
|
19
18
|
scenarios = ""
|
20
19
|
|
20
|
+
if @feature.background
|
21
|
+
@scenario = @feature.background
|
22
|
+
@id = "background"
|
23
|
+
scenarios += erb(:scenario)
|
24
|
+
end
|
25
|
+
|
21
26
|
@feature.scenarios.each_with_index do |scenario,index|
|
22
27
|
@scenario = scenario
|
23
28
|
@id = "scenario#{index}"
|
@@ -77,7 +77,11 @@
|
|
77
77
|
<% n = 1 %>
|
78
78
|
<% scenarios.each_with_index do |scenario,index| %>
|
79
79
|
<li class="scenario r<%= n %> <%= scenario.tags.collect{|t| t.value }.join(" ") %>">
|
80
|
-
|
80
|
+
<span class='object_link'>
|
81
|
+
<a href="<%= url_for(scenario.feature,"scenario#{scenario.feature.scenarios.index(scenario) }") %>">
|
82
|
+
<%= h scenario.value %>
|
83
|
+
</a>
|
84
|
+
</span>
|
81
85
|
<% itags = scenario.tags.collect{|t| tagify(t) }.join(", ") %>
|
82
86
|
<% if itags && itags != "" %>
|
83
87
|
- <small><%= itags %></small>
|
@@ -25,7 +25,7 @@ def features
|
|
25
25
|
end
|
26
26
|
|
27
27
|
def scenarios
|
28
|
-
@scenarios ||=
|
28
|
+
@scenarios ||= features.collect {|f| f.scenarios.reject {|s| s.background? } }.flatten.sort {|x,y| x.value <=> y.value }
|
29
29
|
end
|
30
30
|
|
31
31
|
def tagify(tag)
|
@@ -4,15 +4,19 @@
|
|
4
4
|
.tags { font-family: monospace; font-size: 14px; }
|
5
5
|
.title { padding: 10px; font-size: 24px; }
|
6
6
|
|
7
|
+
#view, #expand { float: right; font-size: 13px; color: gray; vertical-align: bottom; }
|
8
|
+
|
7
9
|
.feature > .title, .tag > .title, .requirements > .title { margin: 20px 20px 10px 20px; padding-left: 0px; border-bottom: 1px solid #E3E3E3; }
|
8
|
-
.meta .file { float: right; margin-right: 20px; }
|
9
|
-
.title .pre {
|
10
|
+
.meta .file { float: right; margin-top: 5px; margin-right: 20px; }
|
11
|
+
.title .pre { color: #696969; }
|
10
12
|
.title .name { font-weight: bold; color: #3F3F3F; }
|
11
13
|
|
12
14
|
.meta { margin-left: 30px; color: gray; }
|
13
15
|
.scenario .meta .tags { margin-left: 0px; }
|
16
|
+
.feature .meta .tags { float: right; margin-right: 20px; }
|
17
|
+
|
14
18
|
|
15
|
-
.feature .description, .requirements .summary
|
19
|
+
.feature .description, .requirements .summary {
|
16
20
|
margin: 10px 20px 0px 30px;
|
17
21
|
padding: 10px 20px 20px 10px;
|
18
22
|
color: #343332;
|
@@ -20,13 +24,15 @@
|
|
20
24
|
}
|
21
25
|
|
22
26
|
.summary .name, .tags .name { color: gray; }
|
23
|
-
.summary .tags {}
|
24
27
|
|
25
28
|
.odd { background-color: #F0F6F9; }
|
26
29
|
.even { background-color: #FFFFFF; }
|
30
|
+
.selected { background-color: #FFCC80; }
|
31
|
+
|
27
32
|
|
28
33
|
#background, #features, #scenarios { margin-top: 10px; margin-left: 20px; }
|
29
34
|
|
35
|
+
|
30
36
|
#directory { margin-top: 20px; margin-left: 20px; }
|
31
37
|
|
32
38
|
.scenario { margin-top: 40px; margin-left: 20px; }
|
@@ -44,6 +50,8 @@
|
|
44
50
|
|
45
51
|
#background .title .pre { color: #346F97; }
|
46
52
|
.requirements .tags { margin-left: 50px; margin-right: 30px; }
|
53
|
+
.scenario .tags { float: right; margin-right: 20px; margin-top: 5px; }
|
54
|
+
|
47
55
|
|
48
56
|
* ul.alpha { font-size: 1.1em; }
|
49
57
|
* ul.alpha { padding-bottom: 10px; list-style: none; }
|
@@ -53,7 +61,7 @@
|
|
53
61
|
|
54
62
|
|
55
63
|
.scenario .steps, #background .steps {
|
56
|
-
margin:
|
64
|
+
margin: 0px 20px 0px 30px;
|
57
65
|
font-size: 12px;
|
58
66
|
}
|
59
67
|
|
@@ -67,18 +75,25 @@
|
|
67
75
|
|
68
76
|
|
69
77
|
#background .title .name {}
|
70
|
-
#background .description {}
|
71
78
|
|
72
79
|
.scenario .title .name {}
|
73
|
-
|
80
|
+
|
81
|
+
#background .description, .scenario .description {
|
82
|
+
padding: 10px;
|
83
|
+
color: #444444;
|
84
|
+
margin-right: 20px;
|
85
|
+
margin-left: 20px;
|
86
|
+
}
|
87
|
+
|
88
|
+
.comments { margin-left: 25px; color: gray; padding: 5px; font-size: 13px; }
|
89
|
+
.scenario .steps .comments { margin-left: 0px; }
|
74
90
|
|
75
91
|
.scenario .title .pre { color: #00AAD2; }
|
76
|
-
.scenario .tags { margin-left: 30px; margin-top: 10px; }
|
77
92
|
|
78
93
|
.step .predicate { color: #5D5C5B; }
|
79
94
|
/*.step .undefined { border-bottom: 1px dashed #E99494; }*/
|
80
95
|
.step .defined {}
|
81
|
-
.step .
|
96
|
+
.step .definition { float: right; color: #343332; }
|
82
97
|
.step .details .pre {}
|
83
98
|
.step .details .name { font-family: monospace; color: black; }
|
84
99
|
.step .defined .match { color: #346F97; }
|
@@ -101,6 +116,7 @@
|
|
101
116
|
font-size: 16px;
|
102
117
|
}
|
103
118
|
|
119
|
+
|
104
120
|
.multiline table tr, .outline table tr {
|
105
121
|
padding: 4px;
|
106
122
|
}
|
@@ -168,7 +184,6 @@
|
|
168
184
|
}
|
169
185
|
|
170
186
|
.valid {
|
171
|
-
margin: 0px auto 10px auto;
|
172
187
|
width: 15px;
|
173
188
|
height: 15px;
|
174
189
|
background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAAPCAIAAAC0tAIdAAAACXBIWXMAAA86AAAPOgGXOdvCAAABVklEQVQoFS2RO1IEMQxEJY+zzSDZlCNwAQIOxJm4DReAnICIIuFTW7U7lsxreTUzHltqtVqyPzw/HQ+3Oaebpc16EospszJ+OfP7/NePh5vHu/sRMfHw2RwxLjHOcQnlJHg42L9+vncIImOPQTbQOXPPHBmRE3o5RQMZwexmvig5pxFTMkqoLllaSZa/5ewgAoA4QEgrgXqXc9ELvbs1iItVNMCh4RgW1GzWoAaHEXV3lJjzwFeiqXD1OAjXUrjmzMw70MbrqFI5WBaTUKUbnDcW4TUTpIugcmBjg5wliRblb0gSoMO1ApxKkWrzXadmtrl6K98UN/takaLJMEGmFMtHmtMRHXCma8kXWd0cN5L7HHtdPIIJ1fAlFevcDcrFJ2JmPFYdVimTJOnQFZq45S9Xeb1tbettU6+a9WqnemLeX6ffl483BcjFdN01eyFFVHK0/FxO/9H/ezlUKYH7AAAAAElFTkSuQmCC) no-repeat center;
|
@@ -176,7 +191,6 @@
|
|
176
191
|
}
|
177
192
|
|
178
193
|
.invalid {
|
179
|
-
margin: 0px auto 10px auto;
|
180
194
|
width: 15px;
|
181
195
|
height: 15px;
|
182
196
|
background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAAPCAIAAAC0tAIdAAAACXBIWXMAAA86AAAPOgGXOdvCAAABWUlEQVQoFS2SvVEEMQyFJdkspFcCVAAVUREZXVAHHRAwZOQwQ3YM67X4nnwe3+3afn+S18/P9366s5yZ042R6c3c3bRKDw+WwZxf791Pt/3hMcev5QBpFtauPLoBYrYr6zcem/Xr8frUbc4c59zPPoekQeSesTm47IaD74kfTjnDbNqxC5pTzrJfQcCFBQClIh7bIdDc9S+6E8WIQXTl9somfA1S4iJVbUnJmyOhJT+51AMRkXVArMtBdUNLGcpmaReDdSIGHw4m2iyNIiMslTWqBvMuZSVZB4QhMRRp6IUjzYuPctvq3TpWumq2sIfNw/KQ3DwomfIv6aVBT+ZQMFKxhB8uLfhlzkO3Sstlwh1ja3+oEKVuqipGHhMztEGvvlZEQHwyMKPD1NDtrrpBR3jbalv90hWzo05FBr1vlKGXtvGF9fz5HG8vFRpK1a5yV0/KVuZSzO+Pf3G6tVs/+L00AAAAAElFTkSuQmCC) no-repeat center;
|
@@ -12,10 +12,14 @@
|
|
12
12
|
<% n = n == 2 ? 1 : 2 %>
|
13
13
|
<% if feature.scenarios %>
|
14
14
|
<ul>
|
15
|
-
<% feature.scenarios.
|
15
|
+
<% feature.scenarios.each_with_index do |scenario,index| %>
|
16
16
|
<li class="r<%= n %>">
|
17
|
-
|
18
|
-
|
17
|
+
<span class='object_link'>
|
18
|
+
<a href="<%= url_for(scenario.feature,"scenario#{index}") %>">
|
19
|
+
<%= h scenario.value %>
|
20
|
+
</a>
|
21
|
+
</span>
|
22
|
+
<small><%= scenario.location %></small>
|
19
23
|
</li>
|
20
24
|
<% n = n == 2 ? 1 : 2 %>
|
21
25
|
<% end %>
|
@@ -10,27 +10,105 @@ function cucumberSearchFrameLinks() {
|
|
10
10
|
$(cucumberSearchFrameLinks);
|
11
11
|
|
12
12
|
|
13
|
+
$(function() {
|
14
|
+
|
15
|
+
//
|
16
|
+
// Feature Page - Scenarios
|
17
|
+
//
|
18
|
+
$('.scenario div.title').click(function(eventObject) {
|
19
|
+
if (typeof eventObject.currentTarget !== "undefined") {
|
20
|
+
toggleScenario( $($(eventObject.currentTarget).parent()) );
|
21
|
+
}
|
22
|
+
});
|
13
23
|
|
14
|
-
|
15
|
-
|
16
|
-
|
24
|
+
//
|
25
|
+
// Developer View
|
26
|
+
// Click + Developer View = toggle the expansion of all tags, location, and comments
|
27
|
+
//
|
28
|
+
$('#view').click(function(eventObject) {
|
29
|
+
|
30
|
+
if (typeof eventObject.currentTarget !== "undefined") {
|
31
|
+
var view = eventObject.currentTarget;
|
32
|
+
|
33
|
+
if (view.innerHTML === '[More Detail]') {
|
34
|
+
$('.developer').show(500);
|
35
|
+
view.innerHTML = '[Less Detail]';
|
36
|
+
} else {
|
37
|
+
$('.developer').hide(500);
|
38
|
+
// Already hidden elements with .developer sub-elements were not getting message
|
39
|
+
$('.developer').each(function() { $(this).css('display','none'); });
|
40
|
+
view.innerHTML = '[More Detail]';
|
41
|
+
}
|
42
|
+
}
|
43
|
+
});
|
17
44
|
|
18
|
-
|
19
|
-
|
45
|
+
//
|
46
|
+
// Expand/Collapse All
|
47
|
+
//
|
48
|
+
$('#expand').click(function(eventObject) {
|
49
|
+
|
50
|
+
if (typeof eventObject.currentTarget !== "undefined") {
|
51
|
+
if (eventObject.currentTarget.innerHTML === '[Expand All]') {
|
52
|
+
eventObject.currentTarget.innerHTML = '[Collapse All]';
|
53
|
+
$('div.scenario > div.details:hidden').each(function() {
|
54
|
+
toggleScenario( $($(this).parent()) );
|
55
|
+
});
|
56
|
+
} else {
|
57
|
+
eventObject.currentTarget.innerHTML = '[Expand All]';
|
58
|
+
$('div.scenario > div.details:visible').each(function() {
|
59
|
+
toggleScenario( $($(this).parent()) );
|
60
|
+
});
|
61
|
+
}
|
62
|
+
}
|
20
63
|
});
|
21
64
|
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
65
|
+
//
|
66
|
+
// Scenario Outlines - Toggle Examples
|
67
|
+
//
|
68
|
+
$('.outline table tr').click(function(eventObject) {
|
69
|
+
|
70
|
+
if (typeof eventObject.currentTarget !== "undefined") {
|
71
|
+
var exampleRow = $(eventObject.currentTarget);
|
72
|
+
var exampleClass = eventObject.currentTarget.className.match(/example\d+/)[0];
|
73
|
+
var example = exampleRow.closest('div.details').find('.' + exampleClass);
|
74
|
+
|
75
|
+
var currentExample = null;
|
76
|
+
|
77
|
+
$('.outline table tr').each(function() { $(this).removeClass('selected'); });
|
78
|
+
|
79
|
+
if ( example[0].style.display == 'none' ) {
|
80
|
+
currentExample = example[0];
|
81
|
+
exampleRow.addClass('selected');
|
82
|
+
} else {
|
83
|
+
currentExample = exampleRow.closest('div.details').find('.steps')[0];
|
84
|
+
}
|
85
|
+
|
86
|
+
// hide everything
|
87
|
+
exampleRow.closest('div.details').find('.steps').each(function() { $(this).hide(); });
|
88
|
+
|
89
|
+
// show the selected
|
90
|
+
$(currentExample).show();
|
91
|
+
}
|
92
|
+
});
|
27
93
|
|
28
|
-
$('#' + id + ' .steps').each(function(index) {
|
29
|
-
this.style.display = 'none';
|
30
|
-
});
|
31
94
|
|
32
|
-
|
95
|
+
});
|
96
|
+
|
33
97
|
|
98
|
+
function toggleScenario(scenario) {
|
99
|
+
|
100
|
+
var state = scenario.find(".attributes input[name='collapsed']")[0];
|
101
|
+
|
102
|
+
if (state.value === 'true') {
|
103
|
+
scenario.find("div.details").each(function() { $(this).show(500); });
|
104
|
+
state.value = "false";
|
105
|
+
scenario.find('a.toggle').each(function() { this.innerHTML = ' - '; });
|
106
|
+
|
107
|
+
} else {
|
108
|
+
scenario.find("div.details").each(function() { $(this).hide(500); });
|
109
|
+
state.value = "true";
|
110
|
+
scenario.find('a.toggle').each(function() { this.innerHTML = ' + '; });
|
111
|
+
}
|
34
112
|
}
|
35
113
|
|
36
114
|
|
@@ -54,7 +132,9 @@ function determineTagsUsedInFormula(tagString) {
|
|
54
132
|
tagGroup.forEach(function(tag, index, array) {
|
55
133
|
//console.log("Tag Group: " + tag);
|
56
134
|
var validTags = removeInvalidTags(tag)
|
57
|
-
if (validTags != "") {
|
135
|
+
if (validTags != "") {
|
136
|
+
returnTags.push(validTags);
|
137
|
+
}
|
58
138
|
});
|
59
139
|
}
|
60
140
|
|
@@ -84,27 +164,27 @@ function displayExampleCommandLine(tags) {
|
|
84
164
|
|
85
165
|
function hideEmptySections() {
|
86
166
|
|
87
|
-
|
167
|
+
["feature","scenario"].forEach(function(section,index,sections) {
|
88
168
|
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
169
|
+
if ( $("." + section + ":visible").length == 0 ) {
|
170
|
+
$("#" + section + "s")[0].style.display = "none";
|
171
|
+
} else {
|
172
|
+
$("#" + section + "s")[0].style.display = "block";
|
173
|
+
}
|
94
174
|
|
95
|
-
|
175
|
+
});
|
96
176
|
}
|
97
177
|
|
98
178
|
function fixSectionRowAlternations() {
|
99
179
|
|
100
|
-
|
180
|
+
["feature","scenario"].forEach(function(section,index,sections) {
|
101
181
|
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
182
|
+
$("." + section + ":visible")
|
183
|
+
$("." + section + ":visible").each(function(index) {
|
184
|
+
$(this).removeClass("r1 r2").addClass("r" + ((index % 2) + 1));
|
185
|
+
});
|
106
186
|
|
107
|
-
|
187
|
+
});
|
108
188
|
}
|
109
189
|
|
110
190
|
function displayQualifyingFeaturesAndScenarios(tags) {
|
@@ -33,7 +33,7 @@
|
|
33
33
|
<span class="defined">
|
34
34
|
<%= link_transformed_step(step) %>
|
35
35
|
</span>
|
36
|
-
<div class="
|
36
|
+
<div class="definition"><a href="<%= url_for step.scenario.feature %>"><%= h(step.location) %></a></div>
|
37
37
|
</div>
|
38
38
|
<% end %>
|
39
39
|
<% else %>
|
@@ -15,7 +15,11 @@
|
|
15
15
|
<ul>
|
16
16
|
<% objects.each do |obj| %>
|
17
17
|
<li>
|
18
|
-
|
18
|
+
<span class='object_link'>
|
19
|
+
<a href="<%= url_for(obj.feature,"scenario#{obj.feature.scenarios.index(obj) }") %>">
|
20
|
+
<%= h obj.value %>
|
21
|
+
</a>
|
22
|
+
</span>
|
19
23
|
<% if !obj.namespace.root? %>
|
20
24
|
<small>(<%= obj.namespace.file %>)</small>
|
21
25
|
<% end %>
|
@@ -3,12 +3,12 @@
|
|
3
3
|
module YARD::CodeObjects::Cucumber
|
4
4
|
|
5
5
|
class Scenario < NamespaceObject
|
6
|
-
|
6
|
+
|
7
7
|
attr_accessor :value, :comments, :keyword, :description, :steps, :tags, :feature
|
8
8
|
|
9
9
|
def initialize(namespace,name)
|
10
10
|
super(namespace,name.to_s.strip)
|
11
|
-
@
|
11
|
+
@comments = @description = @keyword = @value = @feature = nil
|
12
12
|
@steps = []
|
13
13
|
@tags = []
|
14
14
|
end
|
@@ -4,7 +4,7 @@ module YARD::CodeObjects::Cucumber
|
|
4
4
|
|
5
5
|
class ScenarioOutline < NamespaceObject
|
6
6
|
|
7
|
-
attr_accessor :value, :comments, :description, :steps, :tags, :feature
|
7
|
+
attr_accessor :value, :comments, :keyword, :description, :steps, :tags, :feature
|
8
8
|
attr_accessor :scenarios, :examples
|
9
9
|
|
10
10
|
def initialize(namespace,name)
|
@@ -4,11 +4,11 @@ module YARD::CodeObjects::Cucumber
|
|
4
4
|
|
5
5
|
class Step < Base
|
6
6
|
|
7
|
-
attr_accessor :definition, :examples, :keyword, :scenario, :table, :text, :transforms, :value
|
7
|
+
attr_accessor :comments, :definition, :examples, :keyword, :scenario, :table, :text, :transforms, :value
|
8
8
|
|
9
9
|
def initialize(namespace,name)
|
10
10
|
super(namespace,name.to_s.strip)
|
11
|
-
@definition = @description = @keyword = @table = @text = @value = nil
|
11
|
+
@comments = @definition = @description = @keyword = @table = @text = @value = nil
|
12
12
|
@examples = {}
|
13
13
|
@transforms = []
|
14
14
|
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cucumber-in-the-yard
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 9
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 1
|
8
8
|
- 7
|
9
|
-
-
|
10
|
-
version: 1.7.
|
9
|
+
- 1
|
10
|
+
version: 1.7.1
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Franklin Webber
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2010-11-
|
18
|
+
date: 2010-11-28 00:00:00 -08:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -98,7 +98,6 @@ files:
|
|
98
98
|
- lib/docserver/default/layout/html/headers.erb
|
99
99
|
- lib/docserver/doc_server/full_list/html/full_list.erb
|
100
100
|
- lib/docserver/doc_server/full_list/html/setup.rb
|
101
|
-
- lib/templates/default/feature/html/background.erb
|
102
101
|
- lib/templates/default/feature/html/feature.erb
|
103
102
|
- lib/templates/default/feature/html/no_steps_defined.erb
|
104
103
|
- lib/templates/default/feature/html/outline.erb
|
@@ -164,11 +163,14 @@ post_install_message: |+
|
|
164
163
|
|
165
164
|
(::) (::) (::) (::) (::) (::) (::) (::) (::) (::) (::) (::) (::) (::) (::)
|
166
165
|
|
167
|
-
Thank you for installing Cucumber-In-The-YARD 1.7.
|
166
|
+
Thank you for installing Cucumber-In-The-YARD 1.7.1 / 2010-11-28.
|
168
167
|
|
169
168
|
Changes:
|
170
169
|
|
171
|
-
*
|
170
|
+
* Feature file with layout enhancements
|
171
|
+
* Scenarios are now linked/linkable
|
172
|
+
* FIX Scenario Outline error on CentOS, Ruby 1.8.7
|
173
|
+
* FIX Requiring Cucumber before Gherkin so that correct gherkin is loaded
|
172
174
|
|
173
175
|
|
174
176
|
(::) (::) (::) (::) (::) (::) (::) (::) (::) (::) (::) (::) (::) (::) (::)
|
@@ -1,92 +0,0 @@
|
|
1
|
-
|
2
|
-
<script type="text/javascript" charset="utf-8">
|
3
|
-
$(function() {
|
4
|
-
$('#background .toggle').click(function() {
|
5
|
-
$("#backgroundSteps").toggle('blind');
|
6
|
-
|
7
|
-
var stateIndicator = $('#background a.toggle')[0]
|
8
|
-
|
9
|
-
stateIndicator.innerHTML = (stateIndicator.innerHTML === '+' ? '-' : '+');
|
10
|
-
return false;
|
11
|
-
});
|
12
|
-
});
|
13
|
-
</script>
|
14
|
-
|
15
|
-
<div id="background">
|
16
|
-
<div class="title">
|
17
|
-
<a class="toggle">-</a>
|
18
|
-
<span class="pre">Background</span>
|
19
|
-
</div>
|
20
|
-
<% unless @feature.background.description.empty? %>
|
21
|
-
<div class="description">
|
22
|
-
<%= h(@feature.background.description) %>
|
23
|
-
</div>
|
24
|
-
<% end %>
|
25
|
-
|
26
|
-
<!-- Background and scenario should have the same display with some minor changes -->
|
27
|
-
|
28
|
-
<div id="backgroundSteps" class="steps">
|
29
|
-
<% if @feature.background.steps %>
|
30
|
-
<% @feature.background.steps.each_with_index do |step,index| %>
|
31
|
-
<div <%= "id='backgroundStep#{index}'" %> class="step <%= (index + 1) % 2 == 0 ? 'even' : 'odd' %>">
|
32
|
-
<span class="predicate"><%= step.keyword %></span>
|
33
|
-
|
34
|
-
<% if step.definition %>
|
35
|
-
<script type="text/javascript" charset="utf-8">
|
36
|
-
$('<%= "#backgroundStep#{index}" %>').hover(
|
37
|
-
function () { $('<%= "#backgroundStep#{index} div.details" %>').toggle('slide'); },
|
38
|
-
function () { $('<%= "#backgroundStep#{index} div.details" %>').toggle('slide'); }
|
39
|
-
);
|
40
|
-
|
41
|
-
$('<%= "#backgroundStep#{index} div.details" %>').show();
|
42
|
-
|
43
|
-
</script>
|
44
|
-
<span class="defined">
|
45
|
-
<a href="steptransformers.html#<%= step.definition.name %>"><%= h(step.value) %></a>
|
46
|
-
<div class="details" style="display: none;">
|
47
|
-
(<%= h( step.definition.location ) %>)
|
48
|
-
</div>
|
49
|
-
</span>
|
50
|
-
<% else %>
|
51
|
-
<span class="undefined"><%= h(step.value) %></span>
|
52
|
-
<% end %>
|
53
|
-
|
54
|
-
</div>
|
55
|
-
|
56
|
-
<% if step.has_table? %>
|
57
|
-
<div class="multiline">
|
58
|
-
<table style="">
|
59
|
-
|
60
|
-
<thead>
|
61
|
-
<tr>
|
62
|
-
<% step.table.first.each_with_index do |column,column_index| %>
|
63
|
-
<th class="<%= (column_index + 1) % 2 == 0 ? 'even' : 'odd' %>"><%= h(column.strip) %></th>
|
64
|
-
<% end %>
|
65
|
-
</tr>
|
66
|
-
</thead>
|
67
|
-
|
68
|
-
<% step.table[1..-1].each_with_index do |row,row_index| %>
|
69
|
-
<tr class="<%= (row_index + 1) % 2 == 0 ? 'even' : 'odd' %>">
|
70
|
-
<% row.each_with_index do |column,column_index| %>
|
71
|
-
<td><%= h(column.strip) %></td>
|
72
|
-
<% end %>
|
73
|
-
</tr>
|
74
|
-
<% end %>
|
75
|
-
</table>
|
76
|
-
</div>
|
77
|
-
<% end %>
|
78
|
-
|
79
|
-
<% if step.has_text? %>
|
80
|
-
<div class="text">
|
81
|
-
<%= h(step.text) %>
|
82
|
-
</div>
|
83
|
-
<% end %>
|
84
|
-
|
85
|
-
|
86
|
-
<% end %>
|
87
|
-
<% else %>
|
88
|
-
<span>No Steps Defined</span>
|
89
|
-
<% end %>
|
90
|
-
</div>
|
91
|
-
|
92
|
-
</div>
|