yard-cucumber 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (84) hide show
  1. data/.rspec +3 -0
  2. data/History.txt +190 -0
  3. data/README.md +145 -0
  4. data/Rakefile +17 -0
  5. data/city.gemspec +66 -0
  6. data/example/README.md +8 -0
  7. data/example/child_feature/README.md +21 -0
  8. data/example/child_feature/child.feature +11 -0
  9. data/example/child_feature/grandchild_feature/grandchild.feature +12 -0
  10. data/example/empty.feature +2 -0
  11. data/example/scenario.feature +63 -0
  12. data/example/scenario_outline.feature +80 -0
  13. data/example/step_definitions/example.step.rb +109 -0
  14. data/example/step_definitions/first.step.rb +21 -0
  15. data/example/step_definitions/support/env.rb +7 -0
  16. data/example/step_definitions/support/env_support.rb +12 -0
  17. data/example/step_definitions/support/support.rb +6 -0
  18. data/example/tags.feature +18 -0
  19. data/example/transform.feature +13 -0
  20. data/lib/cucumber/city_builder.rb +209 -0
  21. data/lib/docserver/default/fulldoc/html/js/cucumber.js +85 -0
  22. data/lib/docserver/default/layout/html/headers.erb +13 -0
  23. data/lib/docserver/doc_server/full_list/html/full_list.erb +37 -0
  24. data/lib/docserver/doc_server/full_list/html/setup.rb +18 -0
  25. data/lib/templates/default/feature/html/feature.erb +39 -0
  26. data/lib/templates/default/feature/html/no_steps_defined.erb +1 -0
  27. data/lib/templates/default/feature/html/outline.erb +42 -0
  28. data/lib/templates/default/feature/html/pystring.erb +3 -0
  29. data/lib/templates/default/feature/html/scenario.erb +55 -0
  30. data/lib/templates/default/feature/html/setup.rb +55 -0
  31. data/lib/templates/default/feature/html/steps.erb +39 -0
  32. data/lib/templates/default/feature/html/table.erb +20 -0
  33. data/lib/templates/default/featuredirectory/html/alpha_table.erb +26 -0
  34. data/lib/templates/default/featuredirectory/html/directory.erb +32 -0
  35. data/lib/templates/default/featuredirectory/html/setup.rb +41 -0
  36. data/lib/templates/default/featuretags/html/namespace.erb +131 -0
  37. data/lib/templates/default/featuretags/html/setup.rb +34 -0
  38. data/lib/templates/default/fulldoc/html/css/common.css +214 -0
  39. data/lib/templates/default/fulldoc/html/full_list.erb +36 -0
  40. data/lib/templates/default/fulldoc/html/full_list_features.erb +28 -0
  41. data/lib/templates/default/fulldoc/html/full_list_stepdefinitions.erb +11 -0
  42. data/lib/templates/default/fulldoc/html/full_list_steps.erb +13 -0
  43. data/lib/templates/default/fulldoc/html/full_list_tags.erb +12 -0
  44. data/lib/templates/default/fulldoc/html/index.erb +24 -0
  45. data/lib/templates/default/fulldoc/html/js/cucumber.js +314 -0
  46. data/lib/templates/default/fulldoc/html/setup.rb +72 -0
  47. data/lib/templates/default/layout/html/headers.erb +14 -0
  48. data/lib/templates/default/layout/html/search.erb +7 -0
  49. data/lib/templates/default/requirements/html/alpha_table.erb +26 -0
  50. data/lib/templates/default/requirements/html/requirements.erb +50 -0
  51. data/lib/templates/default/requirements/html/setup.rb +51 -0
  52. data/lib/templates/default/steptransformers/html/header.erb +12 -0
  53. data/lib/templates/default/steptransformers/html/index.erb +10 -0
  54. data/lib/templates/default/steptransformers/html/setup.rb +94 -0
  55. data/lib/templates/default/steptransformers/html/transformers.erb +74 -0
  56. data/lib/templates/default/steptransformers/html/undefinedsteps.erb +26 -0
  57. data/lib/templates/default/tag/html/alpha_table.erb +32 -0
  58. data/lib/templates/default/tag/html/setup.rb +27 -0
  59. data/lib/templates/default/tag/html/tag.erb +35 -0
  60. data/lib/yard/code_objects/cucumber/base.rb +32 -0
  61. data/lib/yard/code_objects/cucumber/feature.rb +18 -0
  62. data/lib/yard/code_objects/cucumber/namespace_object.rb +45 -0
  63. data/lib/yard/code_objects/cucumber/scenario.rb +26 -0
  64. data/lib/yard/code_objects/cucumber/scenario_outline.rb +66 -0
  65. data/lib/yard/code_objects/cucumber/step.rb +35 -0
  66. data/lib/yard/code_objects/cucumber/tag.rb +27 -0
  67. data/lib/yard/code_objects/step_definition.rb +7 -0
  68. data/lib/yard/code_objects/step_transform.rb +7 -0
  69. data/lib/yard/code_objects/step_transformer.rb +51 -0
  70. data/lib/yard/handlers/cucumber/base.rb +22 -0
  71. data/lib/yard/handlers/cucumber/feature_handler.rb +93 -0
  72. data/lib/yard/handlers/legacy/step_definition_handler.rb +46 -0
  73. data/lib/yard/handlers/legacy/step_transform_handler.rb +24 -0
  74. data/lib/yard/handlers/step_definition_handler.rb +22 -0
  75. data/lib/yard/handlers/step_transform_handler.rb +23 -0
  76. data/lib/yard/parser/cucumber/feature.rb +46 -0
  77. data/lib/yard/parser/source_parser.rb +54 -0
  78. data/lib/yard/rake/city_task.rb +12 -0
  79. data/lib/yard/server/adapter.rb +29 -0
  80. data/lib/yard/server/commands/list_command.rb +25 -0
  81. data/lib/yard/server/router.rb +31 -0
  82. data/lib/yard/templates/helpers/base_helper.rb +26 -0
  83. data/lib/yard-cucumber.rb +53 -0
  84. metadata +173 -0
@@ -0,0 +1,109 @@
1
+
2
+ Transform /^#{CUSTOMER}$/ do |customer|
3
+ "a transformed customer"
4
+ end
5
+
6
+ Transform /^an? customer$/ do |customer|
7
+ "a transformed customer"
8
+ end
9
+
10
+ Transform /^the customer$/ do |customer|
11
+ "the transformed customer"
12
+ end
13
+
14
+ Transform /^(#{ORDER}) customer$/ do |order|
15
+ "#{order} customer"
16
+ end
17
+
18
+ Transform /^#{TEDDY_BEAR}$/ do |teddy|
19
+ "the tranformed teddy bear"
20
+ end
21
+
22
+ #
23
+ # This is a complicated Transform with a comment
24
+ #
25
+ Transform /^((?:\d{1,2}[\/-]){2}(?:\d\d){1,2})?\s*(\w{3})?\s*(\d{1,2}:\d{2}\s*(?:AM|PM)?)$/ do |date,day,time|
26
+ "#{date} #{day} #{time}"
27
+ end
28
+
29
+ Given /^that (#{CUSTOMER}) is a valid customer$/ do |customer|
30
+ pending "Customer #{customer} validation"
31
+ end
32
+
33
+ #
34
+ # This comment will likely blow {things up}!
35
+ #
36
+ When /^a customer logs in as username '([^']+)' with password '([^']+)'$/ do |username,password|
37
+ Given "that the customer is a valid customer"
38
+ pending "Customer logs in with #{username} and #{password}"
39
+ end
40
+
41
+ Then /^I expect them to have logged in (successfully|miserably)$/ do |success|
42
+ pending "Validation that the customer has logged in #{success}"
43
+ end
44
+
45
+ When /^the customer logs out$/ do
46
+ pending
47
+ end
48
+
49
+ Then /^I expect the customer to be shown the logout page$/ do
50
+ pending
51
+ end
52
+
53
+ And /^this (third) defined step definition$/ do |number|
54
+ pending
55
+ end
56
+
57
+ And /^the customer has the following details:$/ do |table|
58
+ pending "Table of data #{table.hashes}"
59
+ end
60
+
61
+ And /^edits their the (biography) to state:$/ do |section,text|
62
+ pending "text_field not present for #{section} #{bio} for this release"
63
+ end
64
+
65
+ Then /I expect (#{CUSTOMER}) to be a member of the '([^']+)' group/ do |customer,product|
66
+ pending "Customer #{customer} with product #{product}"
67
+ end
68
+
69
+ #
70
+ # Complicated step definition with optional parameters
71
+ #
72
+ Given /^(?:I create )?an? (?:(active|deactive|inactive|simulated)d?)? ?project(?:[\s,]*(?:with)? ?(?:an?|the)? (?:(?:the size? (?:at|of)? ?(\d+)|named? (?:of )?'([^']+)'|start date (?:of )?((?:(?:\d{1,2}[\/-]){2}(?:\d\d){1,2}))|end date (?:of )?((?:(?:\d{1,2}[\/-]){2}(?:\d\d){1,2}))|user range (?:of )?(\d+-\d+)|description (?:of )?'([^']+)'|nicknamed? (?:of )?'([^']+)')[,\s]*)* ?)?$/ do |state,size,name,start_date,end_date,user_range,description,nickname|
73
+ pending "#{state} #{size} #{name} #{start_date} #{end_date} #{user_range} #{description} #{nickname}"
74
+ end
75
+
76
+
77
+ #
78
+ # The highlighting replacement uses a span which had trouble when blindly using
79
+ # a gsub replacement.
80
+ #
81
+ Given /(a|\d+) ducks? that ha(?:s|ve) (a|\d+) bills?/ do |duck_count,bills_count|
82
+ pending
83
+ end
84
+
85
+ Then /I expect the (duck|bird) to (\w+)/ do |animal,verb|
86
+ pending
87
+ end
88
+
89
+ #
90
+ # This double-quoted step definition caused some problems when being rendered
91
+ #
92
+ When /^searching the log for the exact match of the message "([^"]+)"$/ do |message|
93
+ pending message
94
+ end
95
+
96
+ #
97
+ #
98
+ #
99
+ When /^the step definition has HTML escaped characters like: "([^"]+)"$/ do |characters|
100
+ pending characters
101
+ end
102
+
103
+
104
+ #
105
+ # Some details about the helper method that might be picked up in the documentation.
106
+ #
107
+ def a_helper_method
108
+ puts "performs some operation"
109
+ end
@@ -0,0 +1,21 @@
1
+ Transform /^#{ORDER}$/ do |order|
2
+ order
3
+ end
4
+
5
+ Transform /^background$/ do |background|
6
+ "background"
7
+ end
8
+
9
+ #
10
+ # This step transform converts "scenario" to "scenario"
11
+ #
12
+ Transform /^scenario$/ do |scenario|
13
+ "scenario"
14
+ end
15
+
16
+ #
17
+ # This step definition is all about steps
18
+ #
19
+ Given /^this (scenario|background|#{ORDER}) step$/ do |step|
20
+ pending "step #{order}"
21
+ end
@@ -0,0 +1,7 @@
1
+
2
+ module Environment
3
+ module Database
4
+ class Connection
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,12 @@
1
+
2
+ class SupportClass
3
+
4
+ end
5
+
6
+ module Web
7
+ module Interface
8
+ class CachedReference
9
+
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,6 @@
1
+
2
+ ORDER = /(?:first|second|third)/
3
+
4
+ TEDDY_BEAR = /teddy bear/
5
+
6
+ CUSTOMER = /(?:(?:an?|the|#{ORDER}) customer|#{TEDDY_BEAR})/
@@ -0,0 +1,18 @@
1
+ @tags
2
+ Feature: Tags
3
+ As a developer of the test suite I expect that various tags will be supported
4
+
5
+ @tag
6
+ Scenario: Basic Tag
7
+
8
+ @tag123456
9
+ Scenario: Tag With Numbers
10
+
11
+ @tag_with_underscore
12
+ Scenario: Tag With Underscore
13
+
14
+ @tag-with-dash
15
+ Scenario: Tag With Dash
16
+
17
+ @tag+with+plus
18
+ Scenario: Tag With Plus
@@ -0,0 +1,13 @@
1
+ @scenarios @bvt
2
+ Feature: Step Transforms
3
+ As a developer of the test suite I expect that step transforms are documented correctly
4
+
5
+ @first
6
+ Scenario: Step with step transformation
7
+ Given this scenario step
8
+ Then I expect that the step, on the step transformer page, will link to the step transform
9
+
10
+ @second
11
+ Scenario: Step Transform uses a constant
12
+ Given this first step
13
+ Then I expect that the step, on the step transformer page, will link to the step transform
@@ -0,0 +1,209 @@
1
+
2
+ module Cucumber
3
+ module Parser
4
+ class CityBuilder
5
+ include Gherkin::Rubify
6
+
7
+ def initialize(file)
8
+ @namespace = YARD::CodeObjects::Cucumber::CUCUMBER_NAMESPACE
9
+ find_or_create_namespace(file)
10
+ @file = file
11
+ end
12
+
13
+ def ast
14
+ @feature || @multiline_arg
15
+ end
16
+
17
+ def find_or_create_namespace(file)
18
+ @namespace = YARD::CodeObjects::Cucumber::CUCUMBER_NAMESPACE
19
+
20
+ File.dirname(file).split('/').each do |directory|
21
+ @namespace = @namespace.children.find {|child| child.is_a?(YARD::CodeObjects::Cucumber::FeatureDirectory) && child.name.to_s == directory } ||
22
+ @namespace = YARD::CodeObjects::Cucumber::FeatureDirectory.new(@namespace,directory) {|dir| dir.add_file(directory)}
23
+ end
24
+
25
+ if @namespace.description == "" && File.exists?("#{File.dirname(file)}/README.md")
26
+ @namespace.description = File.read("#{File.dirname(file)}/README.md")
27
+ end
28
+ end
29
+
30
+ def find_or_create_tag(tag_name,parent)
31
+ #log.debug "Processing tag #{tag_name}"
32
+ tag_code_object = YARD::Registry.all(:tag).find {|tag| tag.value == tag_name } ||
33
+ YARD::CodeObjects::Cucumber::Tag.new(YARD::CodeObjects::Cucumber::CUCUMBER_TAG_NAMESPACE,tag_name.gsub('@','')) {|t| t.owners = [] ; t.value = tag_name }
34
+
35
+ tag_code_object.add_file(@file,parent.line)
36
+
37
+ parent.tags << tag_code_object unless parent.tags.find {|tag| tag == tag_code_object }
38
+ tag_code_object.owners << parent unless tag_code_object.owners.find {|owner| owner == parent}
39
+ end
40
+
41
+ def feature(feature)
42
+ #log.debug "FEATURE"
43
+
44
+ @feature = YARD::CodeObjects::Cucumber::Feature.new(@namespace,File.basename(@file.gsub('.feature','').gsub('.','_'))) do |f|
45
+ f.comments = feature.comments.map{|comment| comment.value}.join("\n")
46
+ f.description = feature.description
47
+ f.add_file(@file,feature.line)
48
+ f.keyword = feature.keyword
49
+ f.value = feature.name
50
+ f.tags = []
51
+
52
+ feature.tags.each {|feature_tag| find_or_create_tag(feature_tag.name,f) }
53
+ end
54
+ end
55
+
56
+ def background(background)
57
+ #log.debug "BACKGROUND"
58
+
59
+ @background = YARD::CodeObjects::Cucumber::Scenario.new(@feature,"background") do |b|
60
+ b.comments = background.comments.map{|comment| comment.value}.join("\n")
61
+ b.description = background.description
62
+ b.keyword = background.keyword
63
+ b.value = background.name
64
+ b.add_file(@file,background.line)
65
+ end
66
+
67
+ @feature.background = @background
68
+ @background.feature = @feature
69
+ @step_container = @background
70
+ end
71
+
72
+ def scenario(statement)
73
+ #log.debug "SCENARIO"
74
+
75
+ scenario = YARD::CodeObjects::Cucumber::Scenario.new(@feature,"scenario_#{@feature.scenarios.length + 1}") do |s|
76
+ s.comments = statement.comments.map{|comment| comment.value}.join("\n")
77
+ s.description = statement.description
78
+ s.add_file(@file,statement.line)
79
+ s.keyword = statement.keyword
80
+ s.value = statement.name
81
+
82
+ statement.tags.each {|scenario_tag| find_or_create_tag(scenario_tag.name,s) }
83
+ end
84
+
85
+ scenario.feature = @feature
86
+ @feature.scenarios << scenario
87
+ @step_container = scenario
88
+ end
89
+
90
+ def scenario_outline(statement)
91
+ #log.debug "SCENARIO OUTLINE"
92
+
93
+ outline = YARD::CodeObjects::Cucumber::ScenarioOutline.new(@feature,"scenario_#{@feature.scenarios.length + 1}") do |s|
94
+ s.comments = statement.comments.map{|comment| comment.value}.join("\n")
95
+ s.description = statement.description
96
+ s.add_file(@file,statement.line)
97
+ s.keyword = statement.keyword
98
+ s.value = statement.name
99
+
100
+ statement.tags.each {|scenario_tag| find_or_create_tag(scenario_tag.name,s) }
101
+ end
102
+
103
+ outline.feature = @feature
104
+ @feature.scenarios << outline
105
+ @step_container = outline
106
+ end
107
+
108
+ def examples(examples)
109
+ #log.debug "EXAMPLES"
110
+
111
+ @step_container.examples = { :keyword => examples.keyword,
112
+ :name => examples.name,
113
+ :line => examples.line,
114
+ :comments => examples.comments.map{|comment| comment.value}.join("\n"),
115
+ :rows => matrix(examples.rows) }
116
+
117
+ # For each example generate a scenario and steps
118
+
119
+ @step_container.example_data.length.times do |row_index|
120
+
121
+ scenario = YARD::CodeObjects::Cucumber::Scenario.new(@step_container,"example_#{@step_container.scenarios.length + 1}") do |s|
122
+ s.comments = @step_container.comments
123
+ s.description = @step_container.description
124
+ s.add_file(@file,@step_container.line_number)
125
+ s.keyword = @step_container.keyword
126
+ s.value = "#{@step_container.value} (#{@step_container.scenarios.length + 1})"
127
+ end
128
+
129
+ @step_container.steps.each do |step|
130
+ step_instance = YARD::CodeObjects::Cucumber::Step.new(scenario,step.line_number) do |s|
131
+ s.keyword = step.keyword.dup
132
+ s.value = step.value.dup
133
+ s.add_file(@file,step.line_number)
134
+
135
+ s.text = step.text.dup if step.has_text?
136
+ s.table = clone_table(step.table) if step.has_table?
137
+ end
138
+
139
+ @step_container.example_values_for_row(row_index).each do |key,text|
140
+ text ||= "" #handle empty cells in the example table
141
+ step_instance.value.gsub!("<#{key}>",text)
142
+ step_instance.text.gsub!("<#{key}>",text) if step_instance.has_text?
143
+ step_instance.table.each{|row| row.each{|col| col.gsub!("<#{key}>",text)}} if step_instance.has_table?
144
+ end
145
+
146
+ step_instance.scenario = scenario
147
+ scenario.steps << step_instance
148
+ end
149
+
150
+ # Scenario instances of an outline link to the feature but are not linked from the feature
151
+ # @feature.scenarios << scenario
152
+
153
+ scenario.feature = @feature
154
+ @step_container.scenarios << scenario
155
+
156
+ end
157
+
158
+ end
159
+
160
+ def step(step)
161
+ #log.debug "STEP"
162
+
163
+ @table_owner = YARD::CodeObjects::Cucumber::Step.new(@step_container,"#{step.line}") do |s|
164
+ s.keyword = step.keyword
165
+ s.value = step.name
166
+ s.add_file(@file,step.line)
167
+ end
168
+
169
+ @table_owner.comments = step.comments.map{|comment| comment.value}.join("\n")
170
+
171
+ multiline_arg = rubify(step.multiline_arg)
172
+
173
+ case(multiline_arg)
174
+ when Gherkin::Formatter::Model::PyString
175
+ @table_owner.text = multiline_arg.value
176
+ when Array
177
+ #log.info "Matrix: #{matrix(multiline_arg).collect{|row| row.collect{|cell| cell.class } }.flatten.join("\n")}"
178
+ @table_owner.table = matrix(multiline_arg)
179
+ end
180
+
181
+ @table_owner.scenario = @step_container
182
+ @step_container.steps << @table_owner
183
+ end
184
+
185
+ def eof
186
+ end
187
+
188
+ def syntax_error(state, event, legal_events, line)
189
+ # raise "SYNTAX ERROR"
190
+ end
191
+
192
+ private
193
+ def matrix(gherkin_table)
194
+ gherkin_table.map do |gherkin_row|
195
+ row = gherkin_row.cells
196
+ class << row
197
+ attr_accessor :line
198
+ end
199
+ row.line = gherkin_row.line
200
+ row
201
+ end
202
+ end
203
+
204
+ def clone_table(base)
205
+ base.map {|row| row.map {|cell| cell.dup }}
206
+ end
207
+ end
208
+ end
209
+ end
@@ -0,0 +1,85 @@
1
+ function cucumberSearchFrameLinks() {
2
+ $('#features_list_link').click(function() {
3
+ toggleSearchFrame(this, '/' + library + '/features');
4
+ });
5
+ $('#tags_list_link').click(function() {
6
+ toggleSearchFrame(this, '/' + library + '/tags');
7
+ });
8
+ }
9
+
10
+ $(cucumberSearchFrameLinks);
11
+
12
+
13
+
14
+ function toggleScenarioExample(id,example) {
15
+
16
+ var element = $("#" + id + "Example" + example + "Steps")[0];
17
+
18
+ $('#' + id + ' tr').each(function(index) {
19
+ this.style.backgroundColor = (index % 2 == 0 ? '#FFFFFF' : '#F0F6F9' );
20
+ });
21
+
22
+ if (element.style.display != 'none') {
23
+ element = $("#" + id + "Steps")[0];
24
+ } else {
25
+ $('#' + id + ' .outline * tr')[example].style.backgroundColor = '#FFCC80';
26
+ }
27
+
28
+ $('#' + id + ' .steps').each(function(index) {
29
+ this.style.display = 'none';
30
+ });
31
+
32
+ element.style.display = 'block';
33
+
34
+ }
35
+
36
+ function determine_tags_used_in_formula(tag_string) {
37
+ //$("#tag_debug")[0].innerHTML = "";
38
+
39
+ tag_string = tag_string.replace(/^(\s+)|(\s+)$/,'').replace(/\s{2,}/,' ');
40
+
41
+ var tags = tag_string.match(/@\w+/g);
42
+
43
+ var return_tags = [];
44
+
45
+ if (tags != null) {
46
+ tags.forEach(function(tag, index, array) {
47
+ //$("#tag_debug")[0].innerHTML += tag + " ";
48
+ if (tag_list.indexOf(tag) != -1) { return_tags.push(tag); }
49
+ });
50
+ }
51
+
52
+ return return_tags;
53
+ }
54
+
55
+
56
+ function display_example_command_line(tags) {
57
+ $("#command_example")[0].innerHTML = "cucumber ";
58
+
59
+ if (tags.length > 0) {
60
+ $("#command_example")[0].innerHTML += "--tags " + tags.join(" --tags ");
61
+ }
62
+ }
63
+
64
+ function display_qualifying_features_and_scenarios(tags) {
65
+ //$("#tag_debug")[0].innerHTML = "";
66
+
67
+ if (tags.length > 0) {
68
+
69
+ $(".feature,.scenario").each(function(feature){
70
+ this.style.display = "none";
71
+ });
72
+
73
+ $(".feature.\\" + tags.join(".\\") + ",.scenario.\\" + tags.join(".\\")).each(function(feature) {
74
+ //$("#tag_debug")[0].innerHTML += feature + " " + this;
75
+ this.style.display = "block";
76
+ });
77
+
78
+
79
+ } else {
80
+ $(".feature,.scenario").each(function(feature){
81
+ this.style.display = "block";
82
+ });
83
+ }
84
+
85
+ }
@@ -0,0 +1,13 @@
1
+ <meta name="Content-Type" content="text/html; charset=UTF-8" />
2
+ <title><%= @page_title %></title>
3
+ <link rel="stylesheet" href="/css/style.css" type="text/css" media="screen" charset="utf-8" />
4
+ <link rel="stylesheet" href="/css/custom.css" type="text/css" media="screen" charset="utf-8" />
5
+ <link rel="stylesheet" href="/css/common.css" type="text/css" media="screen" charset="utf-8" />
6
+ <script type="text/javascript" charset="utf-8" src="/js/jquery.js"></script>
7
+ <script type="text/javascript" charset="utf-8" src="/js/autocomplete.js"></script>
8
+ <script type="text/javascript" charset="utf-8" src="/js/app.js"></script>
9
+ <script type="text/javascript" charset="utf-8" src="/js/live.js"></script>
10
+ <script type="text/javascript" charset="utf-8" src="/js/cucumber.js"></script>
11
+ <script type="text/javascript" charset="utf-8">
12
+ library = '<%= base_path(router.list_prefix) %>';
13
+ </script>
@@ -0,0 +1,37 @@
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
3
+ <html>
4
+ <head>
5
+ <meta name="Content-Type" content="text/html; charset=<%= charset %>" />
6
+ <link rel="stylesheet" href="/css/full_list.css" type="text/css" media="screen" charset="utf-8" />
7
+ <link rel="stylesheet" href="/css/common.css" type="text/css" media="screen" charset="utf-8" />
8
+ <script type="text/javascript" charset="utf-8" src="/js/jquery.js"></script>
9
+ <script type="text/javascript" charset="utf-8" src="/js/full_list.js"></script>
10
+ <base id="base_target" target="_parent" />
11
+ </head>
12
+ <body>
13
+ <script type="text/javascript" charset="utf-8">
14
+ if (window.top.frames.main) {
15
+ document.getElementById('base_target').target = 'main';
16
+ document.body.className = 'frames';
17
+ }
18
+ </script>
19
+ <div id="content">
20
+ <h1 id="full_list_header"><%= @list_title %></h1>
21
+ <div id="nav">
22
+ <a target="_self" href="/<%= base_path(router.list_prefix) %>/features">Features</a> |
23
+ <a target="_self" href="/<%= base_path(router.list_prefix) %>/tags">Tags</a> |
24
+ <a target="_self" href="/<%= base_path(router.list_prefix) %>/class">Classes</a> |
25
+ <a target="_self" href="/<%= base_path(router.list_prefix) %>/methods">Methods</a> |
26
+ <a target="_self" href="/<%= base_path(router.list_prefix) %>/files">Files</a>
27
+ </div>
28
+ <div id="search">Search: <input type="text" /></div>
29
+
30
+
31
+ <ul id="full_list" class="<%= @list_class || @list_type %>">
32
+ <%= erb "full_list_#{@list_type}" %>
33
+ </ul>
34
+ </div>
35
+ </body>
36
+ </html>
37
+
@@ -0,0 +1,18 @@
1
+ include T('default/fulldoc/html')
2
+
3
+ def init
4
+ # This is the css class type; here we just default to class
5
+ @list_class = "class"
6
+ case @list_type.to_sym
7
+ when :features; @list_title = "Features"
8
+ when :tags; @list_title = "Tags"
9
+ when :class; @list_title = "Class List"
10
+ when :methods; @list_title = "Method List"
11
+ when :files; @list_title = "File List"
12
+ end
13
+ sections :full_list
14
+ end
15
+
16
+ def all_features_link
17
+ linkify YARD::CodeObjects::Cucumber::CUCUMBER_NAMESPACE, "All Features"
18
+ end
@@ -0,0 +1,39 @@
1
+ <script type="text/javascript" charset="utf-8">
2
+ $(function() {
3
+ $(".developer").hide();
4
+ $(".scenario .title").css('cursor','pointer');
5
+ });
6
+ </script>
7
+
8
+ <div class="feature">
9
+ <div class="title">
10
+ <a id="view" class="control" href="#">[More Detail]</a>
11
+ <a id="expand" class="control" href="#">[Collapse All]</a>
12
+ <div style="clear: right;"></div>
13
+ <span class="pre"><%= @feature.keyword %>:</span>
14
+ <span class="name"><%= @feature.value %></span>
15
+ </div>
16
+
17
+ <% if @feature.comments.length > 0 %>
18
+ <div class="comments developer">
19
+ <%= htmlify_with_newlines @feature.comments %>
20
+ </div>
21
+ <% end %>
22
+
23
+ <div class="description">
24
+ <%= htmlify_with_newlines @feature.description %>
25
+ </div>
26
+
27
+ <div class="meta">
28
+ <div class="file developer"><%= h(@feature.file) %></div>
29
+ <div style="clear: right;"></div>
30
+ <div class="tags developer">
31
+ <% @feature.tags.each do |tag| %>
32
+ <a href="<%= url_for tag %>"><%= tag.value %></a>
33
+ <% end %>
34
+ </div>
35
+ </div>
36
+
37
+ <%= yieldall %>
38
+ </div>
39
+
@@ -0,0 +1 @@
1
+ <div class="none">No Steps Defined</div>
@@ -0,0 +1,42 @@
1
+ <% @scenario.scenarios.each_with_index do |scenario,example_index| %>
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 %>
6
+ </div>
7
+ <% end %>
8
+
9
+ <div class="outline">
10
+
11
+ <% if @scenario.examples? %>
12
+ <div class="keyword"> <%= h @scenario.example_keyword %></div>
13
+ <table>
14
+ <thead>
15
+ <tr>
16
+ <% @scenario.example_headers.each_with_index do |header,header_index| %>
17
+ <th><%= h(header) %></th>
18
+ <% end %>
19
+ </tr>
20
+ </thead>
21
+ <% unless @scenario.example_data.empty? %>
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>
38
+ <% else %>
39
+ <div class="keyword">No Example Table Defined</div>
40
+ <div class="keyword suggestion developer">[!] Did you mean to create a Scenario?</div>
41
+ <% end %>
42
+ </div>
@@ -0,0 +1,3 @@
1
+ <div class="text">
2
+ <%= htmlify_with_newlines @step.text %>
3
+ </div>