cucumber-in-the-yard 1.7.0 → 1.7.1
Sign up to get free protection for your applications and to get access to all the features.
- 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>
|