turnip_formatter 0.2.11 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +2 -0
- data/README.md +18 -22
- data/example/README.md +6 -8
- data/example/images/background.png +0 -0
- data/example/images/basic_step.png +0 -0
- data/example/images/failed_step.png +0 -0
- data/example/images/multiline.png +0 -0
- data/example/images/outline.png +0 -0
- data/example/images/pending_step.png +0 -0
- data/example/spec/bar.js +1 -0
- data/example/spec/foo.css +3 -0
- data/example/spec/spec_helper.rb +7 -2
- data/lib/rspec/core/formatters/turnip_formatter.rb +32 -19
- data/lib/turnip_formatter/printer/index.rb +6 -9
- data/lib/turnip_formatter/printer/scenario.rb +4 -2
- data/lib/turnip_formatter/printer/step.rb +16 -14
- data/lib/turnip_formatter/printer/step_extra_args.rb +2 -0
- data/lib/turnip_formatter/printer/tab_speed_statistics.rb +2 -1
- data/lib/turnip_formatter/printer/tab_tag_statistics.rb +5 -6
- data/lib/turnip_formatter/printer.rb +6 -11
- data/lib/turnip_formatter/scenario/base.rb +98 -0
- data/lib/turnip_formatter/scenario/failure.rb +19 -21
- data/lib/turnip_formatter/scenario/pass.rb +2 -13
- data/lib/turnip_formatter/scenario/pending.rb +19 -25
- data/lib/turnip_formatter/step.rb +8 -38
- data/lib/turnip_formatter/step_template/base.rb +34 -0
- data/lib/turnip_formatter/step_template/exception.rb +59 -50
- data/lib/turnip_formatter/step_template/source.rb +36 -34
- data/lib/turnip_formatter/template/exception.haml +8 -0
- data/lib/turnip_formatter/template/index.haml +88 -0
- data/lib/turnip_formatter/template/runtime_exception.haml +13 -0
- data/lib/turnip_formatter/template/scenario.haml +14 -0
- data/lib/turnip_formatter/template/step.haml +6 -0
- data/lib/turnip_formatter/template/step_multiline.haml +1 -0
- data/lib/turnip_formatter/template/step_outline.haml +6 -0
- data/lib/turnip_formatter/template/tab_feature_statistics.haml +18 -0
- data/lib/turnip_formatter/template/tab_speed_statistics.haml +16 -0
- data/lib/turnip_formatter/template/tab_tag_statistics.haml +18 -0
- data/lib/turnip_formatter/template/turnip_formatter.js +8 -25
- data/lib/turnip_formatter/template/turnip_formatter.scss +102 -174
- data/lib/turnip_formatter/template.rb +65 -39
- data/lib/turnip_formatter/version.rb +1 -1
- data/lib/turnip_formatter.rb +45 -7
- data/spec/spec_helper.rb +6 -1
- data/spec/support/example_helper.rb +36 -0
- data/spec/support/step_helper.rb +27 -0
- data/spec/turnip_formatter/printer/index_spec.rb +10 -10
- data/spec/turnip_formatter/printer/scenario_spec.rb +29 -23
- data/spec/turnip_formatter/printer/step_extra_args_spec.rb +6 -6
- data/spec/turnip_formatter/printer/step_spec.rb +36 -69
- data/spec/turnip_formatter/printer/tab_feature_statistics_spec.rb +1 -4
- data/spec/turnip_formatter/printer/tab_speed_statistics_spec.rb +1 -4
- data/spec/turnip_formatter/printer/tab_tag_statistics_spec.rb +1 -4
- data/spec/turnip_formatter/scenario/base_spec.rb +67 -0
- data/spec/turnip_formatter/scenario/failure_spec.rb +16 -38
- data/spec/turnip_formatter/scenario/pending_spec.rb +16 -39
- data/spec/turnip_formatter/step_template/base_spec.rb +82 -0
- data/spec/turnip_formatter/step_template/exception_spec.rb +25 -17
- data/spec/turnip_formatter/step_template/source_spec.rb +10 -13
- data/turnip_formatter.gemspec +15 -11
- metadata +83 -41
- data/example/images/tag_step.png +0 -0
- data/images/tab_feature_statistics.png +0 -0
- data/images/tab_speed_statistics.png +0 -0
- data/images/tab_steps.png +0 -0
- data/images/tab_steps_expanding.png +0 -0
- data/images/tab_tag_statistics.png +0 -0
- data/lib/turnip_formatter/ext/turnip/builder.rb +0 -47
- data/lib/turnip_formatter/scenario.rb +0 -89
- data/lib/turnip_formatter/step/dsl.rb +0 -33
- data/lib/turnip_formatter/step/failure.rb +0 -19
- data/lib/turnip_formatter/step/pending.rb +0 -19
- data/lib/turnip_formatter/step_template.rb +0 -8
- data/lib/turnip_formatter/template/exception.erb +0 -10
- data/lib/turnip_formatter/template/exception_backtrace.erb +0 -7
- data/lib/turnip_formatter/template/index.erb +0 -70
- data/lib/turnip_formatter/template/runtime_exception.erb +0 -16
- data/lib/turnip_formatter/template/scenario.erb +0 -25
- data/lib/turnip_formatter/template/section_report.erb +0 -15
- data/lib/turnip_formatter/template/step.erb +0 -4
- data/lib/turnip_formatter/template/step_multiline.erb +0 -1
- data/lib/turnip_formatter/template/step_outline.erb +0 -9
- data/lib/turnip_formatter/template/tab_feature_statistics.erb +0 -24
- data/lib/turnip_formatter/template/tab_speed_statistics.erb +0 -18
- data/lib/turnip_formatter/template/tab_tag_statistics.erb +0 -24
- data/spec/rspec/core/formatters/turnip_formatter_spec.rb +0 -78
- data/spec/support/shared_context_examples.rb +0 -39
- data/spec/turnip_formatter/scenario/pass_spec.rb +0 -54
- data/spec/turnip_formatter/step/failure_spec.rb +0 -64
- data/spec/turnip_formatter/step/pending_spec.rb +0 -63
- data/spec/turnip_formatter/step_spec.rb +0 -86
@@ -1,101 +1,50 @@
|
|
1
|
-
|
2
|
-
$green-front: #509B49;
|
3
|
-
$yellow-front: #D6A921;
|
4
|
-
$red-background: #FFDDDD;
|
5
|
-
$green-background: #EEFFEE;
|
6
|
-
$yellow-background: #FFFFDD;
|
7
|
-
$gray-front: #7A7B7D;
|
8
|
-
$gray-background: #DDDDDD;
|
9
|
-
|
10
|
-
@mixin step_span($front, $back, $with_args: false) {
|
11
|
-
> span {
|
12
|
-
border: 1px solid $front;
|
13
|
-
padding: 0.5em;
|
14
|
-
background-color: $back;
|
15
|
-
color: $front;
|
16
|
-
|
17
|
-
&:hover { border-width: 3px; }
|
18
|
-
~ * { margin-left: 2em; }
|
19
|
-
}
|
20
|
-
|
21
|
-
@if $with_args {
|
1
|
+
@import "bootstrap";
|
22
2
|
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
background-color: $back;
|
27
|
-
border: 1px solid $front;
|
28
|
-
}
|
29
|
-
|
30
|
-
/* skip/pending step style */
|
31
|
-
~ li > span {
|
32
|
-
background-color: $gray-background;
|
33
|
-
border-color: $gray-front;
|
34
|
-
color: $gray-front;
|
35
|
-
}
|
36
|
-
}
|
37
|
-
}
|
3
|
+
article {
|
4
|
+
@extend .panel;
|
5
|
+
@extend .panel-success;
|
38
6
|
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
}
|
7
|
+
header {
|
8
|
+
@extend .panel-heading;
|
9
|
+
}
|
43
10
|
|
44
|
-
|
45
|
-
|
46
|
-
|
11
|
+
section {
|
12
|
+
@extend .panel-body;
|
13
|
+
}
|
47
14
|
}
|
48
15
|
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
16
|
+
#report {
|
17
|
+
#status_display_switch {
|
18
|
+
label {
|
19
|
+
@extend .checkbox-inline;
|
20
|
+
}
|
21
|
+
}
|
53
22
|
}
|
54
23
|
|
55
|
-
footer {
|
56
|
-
@include content_centering;
|
57
|
-
background: black;
|
58
|
-
color: $green-front;
|
59
|
-
text-align: right;
|
60
|
-
}
|
61
24
|
|
62
|
-
div#
|
63
|
-
@
|
64
|
-
background-color: #ffffff;
|
25
|
+
div#steps-statistics section.scenario {
|
26
|
+
@extend .panel;
|
65
27
|
|
66
|
-
|
67
|
-
|
68
|
-
padding: 0;
|
28
|
+
&.passed {
|
29
|
+
@extend .panel-success;
|
69
30
|
}
|
70
31
|
|
71
|
-
|
72
|
-
|
32
|
+
&.failed {
|
33
|
+
@extend .panel-danger;
|
73
34
|
}
|
74
|
-
}
|
75
35
|
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
border: 2px solid green;
|
36
|
+
&.pending {
|
37
|
+
@extend .panel-warning;
|
38
|
+
}
|
80
39
|
|
81
|
-
|
82
|
-
|
40
|
+
div.scenario-title {
|
41
|
+
@extend .panel-heading;
|
83
42
|
|
84
43
|
&:hover {
|
85
44
|
text-decoration: underline;
|
86
45
|
cursor: pointer;
|
87
46
|
}
|
88
47
|
|
89
|
-
span.scenario_name {
|
90
|
-
font-weight: bold;
|
91
|
-
font-size: 14px;
|
92
|
-
}
|
93
|
-
|
94
|
-
span.feature_name {
|
95
|
-
font-size: 13px;
|
96
|
-
color: #839496;
|
97
|
-
}
|
98
|
-
|
99
48
|
span.permalink {
|
100
49
|
margin-right: 1em;
|
101
50
|
font-size: 15px;
|
@@ -103,137 +52,90 @@ div#steps-statistics section.scenario {
|
|
103
52
|
}
|
104
53
|
}
|
105
54
|
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
li {
|
110
|
-
color: #839496;
|
111
|
-
display: inline;
|
112
|
-
}
|
113
|
-
}
|
114
|
-
|
115
|
-
&.passed {
|
116
|
-
border-color: $green-front;
|
117
|
-
|
118
|
-
> header .scenario_name {
|
119
|
-
color: $green-front;
|
120
|
-
&:before { content: "\2713\20"; }
|
121
|
-
}
|
55
|
+
ul.tags {
|
56
|
+
@extend .list-inline;
|
122
57
|
}
|
123
58
|
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
> header .scenario_name {
|
128
|
-
color: $red-front;
|
129
|
-
&:before { content: "\2717\20"; }
|
130
|
-
}
|
131
|
-
}
|
59
|
+
div.steps {
|
60
|
+
@extend .panel-group;
|
132
61
|
|
133
|
-
|
134
|
-
|
62
|
+
div.step {
|
63
|
+
@extend .panel;
|
135
64
|
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
}
|
140
|
-
}
|
141
|
-
|
142
|
-
ul.steps {
|
143
|
-
font-size: 12px;
|
144
|
-
list-style-type: none;
|
145
|
-
|
146
|
-
li.step {
|
147
|
-
padding: 0.5em;
|
148
|
-
font-weight: bold;
|
149
|
-
margin: 0.5em 0em;
|
150
|
-
|
151
|
-
@include step_span($green-front, $green-background);
|
65
|
+
&.passed {
|
66
|
+
@extend .panel-success;
|
67
|
+
}
|
152
68
|
|
153
|
-
&.
|
154
|
-
@
|
69
|
+
&.failed {
|
70
|
+
@extend .panel-danger;
|
155
71
|
}
|
156
72
|
|
157
73
|
&.pending {
|
158
|
-
@
|
74
|
+
@extend .panel-warning;
|
159
75
|
}
|
160
|
-
}
|
161
76
|
|
162
|
-
|
163
|
-
|
77
|
+
&.unexecuted {
|
78
|
+
@extend .panel-info;
|
79
|
+
}
|
164
80
|
|
165
|
-
|
166
|
-
|
81
|
+
div.step-title {
|
82
|
+
@extend .panel-heading;
|
167
83
|
}
|
168
84
|
|
169
|
-
|
170
|
-
|
85
|
+
div.step-body {
|
86
|
+
@extend .panel-body;
|
171
87
|
}
|
172
88
|
|
173
|
-
|
174
|
-
|
175
|
-
|
89
|
+
table.step_outline {
|
90
|
+
margin-top: 2em;
|
91
|
+
@extend .table;
|
92
|
+
@extend .table-striped;
|
93
|
+
@extend .table-bordered;
|
176
94
|
}
|
177
|
-
}
|
178
95
|
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
96
|
+
pre.multiline {
|
97
|
+
margin-top: 2em;
|
98
|
+
font-size: 13px;
|
99
|
+
color: #586e75;
|
100
|
+
}
|
183
101
|
}
|
184
102
|
}
|
185
103
|
}
|
186
104
|
|
187
|
-
@mixin tablesorter-header {
|
188
|
-
background-position: center right;
|
189
|
-
background-repeat: no-repeat;
|
190
|
-
cursor: pointer;
|
191
|
-
}
|
192
|
-
|
193
|
-
div#speed-statistics,
|
194
105
|
div#feature-statistics,
|
195
106
|
div#tag-statistics {
|
196
107
|
table {
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
thead {
|
201
|
-
th {
|
202
|
-
border-bottom: 1px solid $gray-front;
|
203
|
-
}
|
204
|
-
}
|
108
|
+
@extend .table;
|
109
|
+
@extend .table-hover;
|
205
110
|
|
206
|
-
tbody {
|
207
|
-
|
208
|
-
|
111
|
+
tbody td {
|
112
|
+
&.passed {
|
113
|
+
@extend .success;
|
209
114
|
}
|
210
115
|
|
211
|
-
|
212
|
-
|
116
|
+
&.failed {
|
117
|
+
@extend .danger;
|
213
118
|
}
|
214
119
|
|
215
|
-
|
216
|
-
|
217
|
-
padding: 0.3em 1em;
|
218
|
-
|
219
|
-
&.passed {
|
220
|
-
background-color: $green-background;
|
221
|
-
color: $green-front;
|
222
|
-
}
|
223
|
-
&.failed {
|
224
|
-
background-color: $red-background;
|
225
|
-
color: $red-front;
|
226
|
-
}
|
227
|
-
&.pending {
|
228
|
-
background-color: $yellow-background;
|
229
|
-
color: $yellow-front;
|
230
|
-
}
|
120
|
+
&.pending {
|
121
|
+
@extend .warning;
|
231
122
|
}
|
232
123
|
}
|
233
124
|
}
|
234
125
|
}
|
235
126
|
|
127
|
+
@mixin tablesorter-header {
|
128
|
+
background-position: center right;
|
129
|
+
background-repeat: no-repeat;
|
130
|
+
cursor: pointer;
|
131
|
+
}
|
132
|
+
|
236
133
|
div#speed-statistics {
|
134
|
+
table {
|
135
|
+
@extend .table;
|
136
|
+
@extend .table-hover;
|
137
|
+
}
|
138
|
+
|
237
139
|
.tablesorter-header {
|
238
140
|
@include tablesorter-header;
|
239
141
|
background-image: url("data:image/gif;base64,R0lGODlhFQAJAIAAACMtMP///yH5BAEAAAEALAAAAAAVAAkAAAIXjI+AywnaYnhUMoqt3gZXPmVg94yJVQAAOw==");
|
@@ -269,3 +171,29 @@ section.exception {
|
|
269
171
|
font-size: 14px;
|
270
172
|
}
|
271
173
|
}
|
174
|
+
|
175
|
+
// Sticky footer styles
|
176
|
+
// refs: http://getbootstrap.com/examples/sticky-footer/sticky-footer.css
|
177
|
+
|
178
|
+
html {
|
179
|
+
position: relative;
|
180
|
+
min-height: 100%;
|
181
|
+
}
|
182
|
+
|
183
|
+
body {
|
184
|
+
margin-bottom: 80px;
|
185
|
+
}
|
186
|
+
|
187
|
+
footer {
|
188
|
+
@extend .text-right;
|
189
|
+
@extend .container;
|
190
|
+
|
191
|
+
bottom: 0;
|
192
|
+
height: 80px;
|
193
|
+
padding-top: 1em;
|
194
|
+
border-top: 1px solid #dddddd;
|
195
|
+
|
196
|
+
p {
|
197
|
+
@extend .text-muted;
|
198
|
+
}
|
199
|
+
}
|
@@ -1,73 +1,68 @@
|
|
1
1
|
# -*- coding: utf-8 -*-
|
2
2
|
|
3
|
-
require '
|
3
|
+
require 'uri'
|
4
4
|
require 'sass'
|
5
|
+
require 'bootstrap-sass'
|
5
6
|
|
6
7
|
module TurnipFormatter
|
7
8
|
class Template
|
8
9
|
class << self
|
9
10
|
def project_name
|
10
|
-
|
11
|
+
TurnipFormatter.configuration.title
|
11
12
|
end
|
12
13
|
|
13
|
-
def
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
js_file_list << file
|
20
|
-
else
|
21
|
-
js_list << File.read(file)
|
14
|
+
def add_javascript(script)
|
15
|
+
case
|
16
|
+
when local_file?(script)
|
17
|
+
add_javascript_code File.read(script)
|
18
|
+
when remote_url?(script)
|
19
|
+
add_javascript_link script
|
22
20
|
end
|
23
21
|
end
|
24
22
|
|
25
|
-
def
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
css_file_list << file
|
32
|
-
else
|
33
|
-
add_scss_file(file)
|
23
|
+
def add_stylesheet(stylesheet)
|
24
|
+
case
|
25
|
+
when local_file?(stylesheet)
|
26
|
+
add_stylesheet_code File.read(stylesheet)
|
27
|
+
when remote_url?(stylesheet)
|
28
|
+
add_stylesheet_link stylesheet
|
34
29
|
end
|
35
30
|
end
|
36
31
|
|
37
|
-
def
|
38
|
-
|
32
|
+
def render_javascript_codes
|
33
|
+
js_code_list.join("\n")
|
39
34
|
end
|
40
35
|
|
41
|
-
def
|
42
|
-
js_list.join("\n")
|
43
|
-
end
|
44
|
-
|
45
|
-
def js_file_render
|
36
|
+
def render_javascript_links
|
46
37
|
js_file_list.map do |file|
|
47
38
|
"<script src=\"#{file}\" type=\"text/javascript\"></script>"
|
48
39
|
end.join("\n")
|
49
40
|
end
|
50
41
|
|
51
|
-
def
|
52
|
-
|
42
|
+
def render_stylesheet_codes
|
43
|
+
TurnipFormatter.step_templates.each do |template|
|
44
|
+
add_stylesheet_code(template.class.scss)
|
45
|
+
end
|
46
|
+
|
47
|
+
css_code_list.join("\n")
|
53
48
|
end
|
54
49
|
|
55
|
-
def
|
50
|
+
def render_stylesheet_links
|
56
51
|
css_file_list.map do |file|
|
57
52
|
"<link rel=\"stylesheet\" href=\"#{file}\">"
|
58
53
|
end.join("\n")
|
59
54
|
end
|
60
55
|
|
61
|
-
def
|
62
|
-
@
|
56
|
+
def js_code_list
|
57
|
+
@js_code_list ||= []
|
63
58
|
end
|
64
59
|
|
65
60
|
def js_file_list
|
66
61
|
@js_file_list ||= []
|
67
62
|
end
|
68
63
|
|
69
|
-
def
|
70
|
-
@
|
64
|
+
def css_code_list
|
65
|
+
@css_code_list ||= []
|
71
66
|
end
|
72
67
|
|
73
68
|
def css_file_list
|
@@ -77,11 +72,42 @@ module TurnipFormatter
|
|
77
72
|
def scss_option
|
78
73
|
{ syntax: :scss, style: :compressed }
|
79
74
|
end
|
75
|
+
|
76
|
+
private
|
77
|
+
|
78
|
+
def add_javascript_code(code)
|
79
|
+
js_code_list << code
|
80
|
+
end
|
81
|
+
|
82
|
+
def add_javascript_link(link)
|
83
|
+
js_file_list << link
|
84
|
+
end
|
85
|
+
|
86
|
+
def add_stylesheet_code(code)
|
87
|
+
css_code_list << Sass::Engine.new(code, scss_option).render
|
88
|
+
end
|
89
|
+
|
90
|
+
def add_stylesheet_link(file)
|
91
|
+
css_file_list << file
|
92
|
+
end
|
93
|
+
|
94
|
+
def local_file?(path)
|
95
|
+
File.exist? path
|
96
|
+
end
|
97
|
+
|
98
|
+
def remote_url?(path)
|
99
|
+
uri = URI.parse(path)
|
100
|
+
return true if %w(http https).include?(uri.scheme)
|
101
|
+
return true if (uri.scheme.nil? && path.start_with?('//'))
|
102
|
+
false
|
103
|
+
rescue URI::InvalidURIError
|
104
|
+
null
|
105
|
+
end
|
80
106
|
end
|
81
|
-
end
|
82
|
-
end
|
83
107
|
|
84
|
-
(File.dirname(__FILE__) + '/template').tap do |dirname|
|
85
|
-
|
86
|
-
|
108
|
+
(File.dirname(__FILE__) + '/template').tap do |dirname|
|
109
|
+
add_stylesheet(dirname + '/turnip_formatter.scss')
|
110
|
+
add_javascript(dirname + '/turnip_formatter.js')
|
111
|
+
end
|
112
|
+
end
|
87
113
|
end
|
data/lib/turnip_formatter.rb
CHANGED
@@ -1,19 +1,57 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
require "turnip_formatter/version"
|
1
|
+
require 'turnip_formatter/version'
|
4
2
|
require 'turnip'
|
5
3
|
|
6
4
|
module TurnipFormatter
|
5
|
+
class << self
|
6
|
+
attr_accessor :title
|
7
|
+
|
8
|
+
def step_templates
|
9
|
+
@step_templates ||= []
|
10
|
+
end
|
11
|
+
|
12
|
+
def step_templates_for(status)
|
13
|
+
step_templates.reduce([]) do |templates, t|
|
14
|
+
hooks = t.class.hooks
|
15
|
+
return templates unless hooks.key?(status)
|
16
|
+
templates + [t].product(hooks[status])
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def add_stylesheet(stylesheets)
|
21
|
+
stylesheets = [stylesheets] if stylesheets.is_a? String
|
22
|
+
|
23
|
+
stylesheets.each do |s|
|
24
|
+
TurnipFormatter::Template.add_stylesheet(s)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def add_javascript(scripts)
|
29
|
+
scripts = [scripts] if scripts.is_a? String
|
30
|
+
|
31
|
+
scripts.each do |s|
|
32
|
+
TurnipFormatter::Template.add_javascript(s)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
def configure
|
37
|
+
yield self
|
38
|
+
end
|
39
|
+
|
40
|
+
def configuration
|
41
|
+
self
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
7
45
|
require 'rspec/core/formatters/turnip_formatter'
|
8
46
|
require 'turnip_formatter/template'
|
9
|
-
require 'turnip_formatter/step_template'
|
47
|
+
require 'turnip_formatter/step_template/exception'
|
48
|
+
require 'turnip_formatter/step_template/source'
|
10
49
|
require 'turnip_formatter/ext/turnip/rspec'
|
11
|
-
require 'turnip_formatter/ext/turnip/builder'
|
12
50
|
require 'turnip_formatter/printer/index'
|
13
51
|
end
|
14
52
|
|
15
53
|
RSpecTurnipFormatter = RSpec::Core::Formatters::TurnipFormatter
|
16
54
|
|
17
|
-
|
18
|
-
config.
|
55
|
+
TurnipFormatter.configure do |config|
|
56
|
+
config.title = 'Turnip'
|
19
57
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -10,10 +10,15 @@ end
|
|
10
10
|
|
11
11
|
require 'rspec-html-matchers'
|
12
12
|
require 'turnip_formatter'
|
13
|
-
Dir.glob(File.dirname(__FILE__) +
|
13
|
+
Dir.glob(File.dirname(__FILE__) + '/support/**/*.rb') { |f| require(f) }
|
14
14
|
|
15
15
|
class NoopObject
|
16
16
|
def method_missing(name, *args, &block)
|
17
17
|
# nooooooop
|
18
18
|
end
|
19
19
|
end
|
20
|
+
|
21
|
+
RSpec.configure do |config|
|
22
|
+
config.include ExampleHelper
|
23
|
+
config.include StepHelper
|
24
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
module ExampleHelper
|
2
|
+
def passed_example
|
3
|
+
base_example { expect(true).to be true }
|
4
|
+
end
|
5
|
+
|
6
|
+
def failed_example
|
7
|
+
example = base_example { expect(true).to be false }
|
8
|
+
example.exception.backtrace.push ':in step:0 `'
|
9
|
+
example
|
10
|
+
end
|
11
|
+
|
12
|
+
def pending_example
|
13
|
+
example = base_example { pending('Pending') }
|
14
|
+
example.execution_result[:pending_message] = 'No such step(0): '
|
15
|
+
example
|
16
|
+
end
|
17
|
+
|
18
|
+
private
|
19
|
+
|
20
|
+
def base_example(&assertion)
|
21
|
+
group = ::RSpec::Core::ExampleGroup.describe('Feature').describe('Scenario')
|
22
|
+
example = group.example('example', example_metadata, &assertion)
|
23
|
+
group.run(NoopObject.new)
|
24
|
+
example
|
25
|
+
end
|
26
|
+
|
27
|
+
def example_metadata
|
28
|
+
{
|
29
|
+
turnip_formatter: {
|
30
|
+
steps: [ { name: 'Step 1', extra_args: [], keyword: 'When' } ],
|
31
|
+
tags: []
|
32
|
+
},
|
33
|
+
file_path: '/path/to/hoge.feature'
|
34
|
+
}
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'support/example_helper'
|
2
|
+
|
3
|
+
module StepHelper
|
4
|
+
include ExampleHelper
|
5
|
+
|
6
|
+
def passed_step
|
7
|
+
base_step(passed_example)
|
8
|
+
end
|
9
|
+
|
10
|
+
def failed_step
|
11
|
+
base_step(failed_example).tap { |s| s.status = :failed }
|
12
|
+
end
|
13
|
+
|
14
|
+
def pending_step
|
15
|
+
base_step(pending_example).tap { |s| s.status = :pending }
|
16
|
+
end
|
17
|
+
|
18
|
+
private
|
19
|
+
|
20
|
+
def base_step(example)
|
21
|
+
TurnipFormatter::Step.new(example, step_description)
|
22
|
+
end
|
23
|
+
|
24
|
+
def step_description
|
25
|
+
{ name: 'StepName', keyword: 'Keyword', extra_args: ['Docstring'] }
|
26
|
+
end
|
27
|
+
end
|
@@ -5,13 +5,13 @@ module TurnipFormatter::Printer
|
|
5
5
|
describe Index do
|
6
6
|
|
7
7
|
let(:formatter) do
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
8
|
+
{
|
9
|
+
scenarios: [],
|
10
|
+
scenario_files: [],
|
11
|
+
failed_count: 0,
|
12
|
+
pending_count: 0,
|
13
|
+
duration: 0
|
14
|
+
}
|
15
15
|
end
|
16
16
|
|
17
17
|
describe '.print_out' do
|
@@ -22,8 +22,8 @@ module TurnipFormatter::Printer
|
|
22
22
|
|
23
23
|
context 'project_name is changed' do
|
24
24
|
before do
|
25
|
-
@original_project_name =
|
26
|
-
|
25
|
+
@original_project_name = TurnipFormatter.configuration.title
|
26
|
+
TurnipFormatter.configuration.title = 'My Project'
|
27
27
|
end
|
28
28
|
|
29
29
|
describe '.print_out' do
|
@@ -33,7 +33,7 @@ module TurnipFormatter::Printer
|
|
33
33
|
end
|
34
34
|
|
35
35
|
after do
|
36
|
-
|
36
|
+
TurnipFormatter.configuration.title = @original_project_name
|
37
37
|
end
|
38
38
|
end
|
39
39
|
end
|