turnip_formatter 0.0.6 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/Guardfile +4 -0
- data/README.md +25 -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/rspec/core/formatters/turnip_formatter.rb +22 -1
- data/lib/turnip_formatter/formatter.css +146 -90
- data/lib/turnip_formatter/formatter.scss +134 -70
- data/lib/turnip_formatter/scenario.rb +4 -0
- data/lib/turnip_formatter/template/tab/feature_statistics.rb +78 -0
- data/lib/turnip_formatter/template/tab/speed_statistics.rb +61 -0
- data/lib/turnip_formatter/template/tab/tag_statistics.rb +101 -0
- data/lib/turnip_formatter/template.rb +79 -9
- data/lib/turnip_formatter/version.rb +1 -1
- data/spec/examples/features/battle3.feature +1 -0
- data/spec/examples/features/songs.feature +9 -0
- data/spec/rspec/core/formatters/turnip_formatter_spec.rb +26 -11
- data/spec/turnip_formatter/template/tab/feature_statistics_spec.rb +87 -0
- data/spec/turnip_formatter/template/tab/speed_statistics_spec.rb +56 -0
- data/spec/turnip_formatter/template/tab/tag_statistics_spec.rb +88 -0
- metadata +18 -4
data/Guardfile
CHANGED
data/README.md
CHANGED
@@ -43,6 +43,31 @@ Run this command.
|
|
43
43
|
|
44
44
|
$ rspec -r turnip_formatter --format RSpecTurnipFormatter --out report.html
|
45
45
|
|
46
|
+
|
47
|
+
Screenshot
|
48
|
+
--------------------
|
49
|
+
|
50
|
+
### Step overview
|
51
|
+
|
52
|
+
![Tab steps](https://github.com/gongo/turnip_formatter/raw/master/images/tab_steps.png)
|
53
|
+
|
54
|
+
expand:
|
55
|
+
|
56
|
+
![Expand tab steps](https://github.com/gongo/turnip_formatter/raw/master/images/tab_steps_expanding.png)
|
57
|
+
|
58
|
+
### Speed Statistics
|
59
|
+
|
60
|
+
![Expand tab steps](https://github.com/gongo/turnip_formatter/raw/master/images/tab_speed_statistics.png)
|
61
|
+
|
62
|
+
### Feature Statistics
|
63
|
+
|
64
|
+
![Expand tab steps](https://github.com/gongo/turnip_formatter/raw/master/images/tab_feature_statistics.png)
|
65
|
+
|
66
|
+
### Tag Statistics
|
67
|
+
|
68
|
+
![Expand tab steps](https://github.com/gongo/turnip_formatter/raw/master/images/tab_tag_statistics.png)
|
69
|
+
|
70
|
+
|
46
71
|
Example
|
47
72
|
--------------------
|
48
73
|
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
@@ -10,36 +10,56 @@ module RSpec
|
|
10
10
|
module Core
|
11
11
|
module Formatters
|
12
12
|
class TurnipFormatter < BaseFormatter
|
13
|
+
attr_reader :passed_scenarios, :failed_scenarios, :pending_scenarios
|
14
|
+
attr_reader :scenarios
|
13
15
|
|
14
16
|
def initialize(output)
|
15
17
|
super(output)
|
16
18
|
@template = ::TurnipFormatter::Template.new
|
19
|
+
@passed_scenarios = []
|
20
|
+
@failed_scenarios = []
|
21
|
+
@pending_scenarios = []
|
22
|
+
@scenarios = []
|
17
23
|
end
|
18
24
|
|
19
25
|
def start(example_count)
|
20
26
|
super(example_count)
|
21
27
|
output.puts @template.print_header
|
28
|
+
output.puts @template.print_main_header
|
22
29
|
end
|
23
30
|
|
24
31
|
def dump_summary(duration, example_count, failure_count, pending_count)
|
25
|
-
output.puts @template.
|
32
|
+
output.puts @template.print_main_footer(example_count, failure_count, pending_count, duration)
|
33
|
+
output.puts @template.print_tab_speed_statsitics(passed_scenarios)
|
34
|
+
output.puts @template.print_tab_feature_statsitics(scenarios)
|
35
|
+
output.puts @template.print_tab_tag_statsitics(scenarios)
|
36
|
+
output.puts @template.print_footer
|
26
37
|
end
|
27
38
|
|
28
39
|
def example_passed(example)
|
29
40
|
super(example)
|
41
|
+
|
30
42
|
scenario = ::TurnipFormatter::Scenario::Pass.new(example)
|
43
|
+
@passed_scenarios << scenario
|
44
|
+
|
31
45
|
output_scenario(scenario)
|
32
46
|
end
|
33
47
|
|
34
48
|
def example_pending(example)
|
35
49
|
super(example)
|
50
|
+
|
36
51
|
scenario = ::TurnipFormatter::Scenario::Pending.new(example)
|
52
|
+
@pending_scenarios << scenario
|
53
|
+
|
37
54
|
output_scenario(scenario)
|
38
55
|
end
|
39
56
|
|
40
57
|
def example_failed(example)
|
41
58
|
super(example)
|
59
|
+
|
42
60
|
scenario = ::TurnipFormatter::Scenario::Failure.new(example)
|
61
|
+
@failed_scenarios << scenario
|
62
|
+
|
43
63
|
output_scenario(scenario)
|
44
64
|
end
|
45
65
|
|
@@ -47,6 +67,7 @@ module RSpec
|
|
47
67
|
|
48
68
|
def output_scenario(scenario)
|
49
69
|
scenario.validation
|
70
|
+
@scenarios << scenario
|
50
71
|
output.puts @template.print_scenario(scenario)
|
51
72
|
rescue => e
|
52
73
|
output_runtime_error(e)
|
@@ -2,162 +2,218 @@ body {
|
|
2
2
|
background-color: #586e75; }
|
3
3
|
|
4
4
|
div#report {
|
5
|
-
width: 90%;
|
6
5
|
margin: 0 auto;
|
7
6
|
padding: 2em;
|
8
7
|
background: black;
|
9
|
-
color: #
|
8
|
+
color: #509b49; }
|
10
9
|
|
11
10
|
footer {
|
12
|
-
width: 90%;
|
13
11
|
margin: 0 auto;
|
14
12
|
padding: 2em;
|
15
13
|
background: black;
|
16
|
-
color: #
|
14
|
+
color: #509b49;
|
17
15
|
text-align: right; }
|
18
16
|
|
19
17
|
div#main {
|
20
|
-
width: 90%;
|
21
18
|
margin: 0 auto;
|
22
19
|
padding: 2em;
|
23
20
|
background-color: #fff9f9; }
|
21
|
+
div#main .ui-tabs-nav {
|
22
|
+
border-width: 0;
|
23
|
+
padding: 0; }
|
24
|
+
div#main .ui-tabs-panel {
|
25
|
+
border: 1px solid #7a7b7d; }
|
24
26
|
|
25
|
-
section.scenario {
|
27
|
+
div#steps-statistics section.scenario {
|
26
28
|
margin: 1em 0em;
|
27
29
|
padding-left: 1em;
|
28
30
|
border: 2px solid green; }
|
29
|
-
section.scenario > header {
|
31
|
+
div#steps-statistics section.scenario > header {
|
30
32
|
margin: 1em 0em; }
|
31
|
-
section.scenario > header:hover {
|
33
|
+
div#steps-statistics section.scenario > header:hover {
|
32
34
|
text-decoration: underline;
|
33
35
|
cursor: pointer; }
|
34
|
-
section.scenario > header span.scenario_name {
|
36
|
+
div#steps-statistics section.scenario > header span.scenario_name {
|
35
37
|
font-weight: bold;
|
36
38
|
font-size: 14px; }
|
37
|
-
section.scenario > header span.feature_name {
|
39
|
+
div#steps-statistics section.scenario > header span.feature_name {
|
38
40
|
font-size: 13px;
|
39
41
|
color: #839496; }
|
40
|
-
section.scenario > header span.permalink {
|
42
|
+
div#steps-statistics section.scenario > header span.permalink {
|
41
43
|
margin-right: 1em;
|
42
44
|
font-size: 15px; }
|
43
|
-
section.scenario > header span.permalink a {
|
45
|
+
div#steps-statistics section.scenario > header span.permalink a {
|
44
46
|
color: #268bd2; }
|
45
|
-
section.scenario > ul.tags {
|
47
|
+
div#steps-statistics section.scenario > ul.tags {
|
46
48
|
font-size: 12px; }
|
47
|
-
section.scenario > ul.tags li {
|
49
|
+
div#steps-statistics section.scenario > ul.tags li {
|
48
50
|
color: #839496;
|
49
51
|
display: inline; }
|
50
|
-
section.scenario.passed {
|
51
|
-
border-color:
|
52
|
-
section.scenario.passed > header .scenario_name {
|
53
|
-
color: #
|
54
|
-
section.scenario.passed > header .scenario_name:before {
|
52
|
+
div#steps-statistics section.scenario.passed {
|
53
|
+
border-color: #509b49; }
|
54
|
+
div#steps-statistics section.scenario.passed > header .scenario_name {
|
55
|
+
color: #509b49; }
|
56
|
+
div#steps-statistics section.scenario.passed > header .scenario_name:before {
|
55
57
|
content: "\2713\20"; }
|
56
|
-
section.scenario.failed {
|
57
|
-
border-color: #
|
58
|
-
section.scenario.failed > header .scenario_name {
|
59
|
-
color: #
|
60
|
-
section.scenario.failed > header .scenario_name:before {
|
58
|
+
div#steps-statistics section.scenario.failed {
|
59
|
+
border-color: #ed1c24; }
|
60
|
+
div#steps-statistics section.scenario.failed > header .scenario_name {
|
61
|
+
color: #ed1c24; }
|
62
|
+
div#steps-statistics section.scenario.failed > header .scenario_name:before {
|
61
63
|
content: "\2717\20"; }
|
62
|
-
section.scenario.pending {
|
63
|
-
border-color: #
|
64
|
-
section.scenario.pending > header .scenario_name {
|
65
|
-
color: #
|
66
|
-
section.scenario.pending > header .scenario_name:before {
|
64
|
+
div#steps-statistics section.scenario.pending {
|
65
|
+
border-color: #d6a921; }
|
66
|
+
div#steps-statistics section.scenario.pending > header .scenario_name {
|
67
|
+
color: #d6a921; }
|
68
|
+
div#steps-statistics section.scenario.pending > header .scenario_name:before {
|
67
69
|
content: "\d8\20"; }
|
68
|
-
section.scenario ul.steps {
|
70
|
+
div#steps-statistics section.scenario ul.steps {
|
69
71
|
font-size: 12px;
|
70
72
|
list-style-type: none; }
|
71
|
-
section.scenario ul.steps li.step {
|
73
|
+
div#steps-statistics section.scenario ul.steps li.step {
|
72
74
|
padding: 0.5em;
|
73
75
|
font-weight: bold;
|
74
76
|
margin: 0.5em 0em; }
|
75
|
-
section.scenario ul.steps li.step > span {
|
77
|
+
div#steps-statistics section.scenario ul.steps li.step > span {
|
78
|
+
border: 1px solid #509b49;
|
76
79
|
padding: 0.5em;
|
77
80
|
background-color: #eeffee;
|
78
|
-
|
79
|
-
|
80
|
-
section.scenario ul.steps li.step > span:hover {
|
81
|
+
color: #509b49; }
|
82
|
+
div#steps-statistics section.scenario ul.steps li.step > span:hover {
|
81
83
|
border-width: 3px; }
|
82
|
-
section.scenario ul.steps li.step > span ~ * {
|
84
|
+
div#steps-statistics section.scenario ul.steps li.step > span ~ * {
|
83
85
|
margin-left: 2em; }
|
84
|
-
section.scenario ul.steps li.step
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
margin-left: 2em; }
|
126
|
-
section.scenario ul.steps table.step_outline {
|
86
|
+
div#steps-statistics section.scenario ul.steps li.step.failure {
|
87
|
+
/* skip/pending step style */ }
|
88
|
+
div#steps-statistics section.scenario ul.steps li.step.failure > span {
|
89
|
+
border: 1px solid #ed1c24;
|
90
|
+
padding: 0.5em;
|
91
|
+
background-color: #ffdddd;
|
92
|
+
color: #ed1c24; }
|
93
|
+
div#steps-statistics section.scenario ul.steps li.step.failure > span:hover {
|
94
|
+
border-width: 3px; }
|
95
|
+
div#steps-statistics section.scenario ul.steps li.step.failure > span ~ * {
|
96
|
+
margin-left: 2em; }
|
97
|
+
div#steps-statistics section.scenario ul.steps li.step.failure > div.args {
|
98
|
+
font-size: 11px;
|
99
|
+
padding: 1em;
|
100
|
+
background-color: #ffdddd;
|
101
|
+
border: 1px solid #ed1c24; }
|
102
|
+
div#steps-statistics section.scenario ul.steps li.step.failure ~ li > span {
|
103
|
+
background-color: #dddddd;
|
104
|
+
border-color: #7a7b7d;
|
105
|
+
color: #7a7b7d; }
|
106
|
+
div#steps-statistics section.scenario ul.steps li.step.pending {
|
107
|
+
/* skip/pending step style */ }
|
108
|
+
div#steps-statistics section.scenario ul.steps li.step.pending > span {
|
109
|
+
border: 1px solid #d6a921;
|
110
|
+
padding: 0.5em;
|
111
|
+
background-color: #ffffdd;
|
112
|
+
color: #d6a921; }
|
113
|
+
div#steps-statistics section.scenario ul.steps li.step.pending > span:hover {
|
114
|
+
border-width: 3px; }
|
115
|
+
div#steps-statistics section.scenario ul.steps li.step.pending > span ~ * {
|
116
|
+
margin-left: 2em; }
|
117
|
+
div#steps-statistics section.scenario ul.steps li.step.pending > div.args {
|
118
|
+
font-size: 11px;
|
119
|
+
padding: 1em;
|
120
|
+
background-color: #ffffdd;
|
121
|
+
border: 1px solid #d6a921; }
|
122
|
+
div#steps-statistics section.scenario ul.steps li.step.pending ~ li > span {
|
123
|
+
background-color: #dddddd;
|
124
|
+
border-color: #7a7b7d;
|
125
|
+
color: #7a7b7d; }
|
126
|
+
div#steps-statistics section.scenario ul.steps table.step_outline {
|
127
127
|
margin-top: 2em; }
|
128
|
-
section.scenario ul.steps table.step_outline tr:nth-child(odd) {
|
128
|
+
div#steps-statistics section.scenario ul.steps table.step_outline tr:nth-child(odd) {
|
129
129
|
background-color: #ddddcc; }
|
130
|
-
section.scenario ul.steps table.step_outline tr:nth-child(even) {
|
130
|
+
div#steps-statistics section.scenario ul.steps table.step_outline tr:nth-child(even) {
|
131
131
|
background-color: #ccccdd; }
|
132
|
-
section.scenario ul.steps table.step_outline td {
|
132
|
+
div#steps-statistics section.scenario ul.steps table.step_outline td {
|
133
133
|
border: 2px solid black;
|
134
134
|
padding: 0.3em 1em; }
|
135
|
-
section.scenario ul.steps pre.multiline {
|
135
|
+
div#steps-statistics section.scenario ul.steps pre.multiline {
|
136
136
|
margin-top: 2em;
|
137
137
|
font-size: 13px;
|
138
138
|
color: #586e75; }
|
139
|
-
section.scenario ul.steps div.step_exception {
|
140
|
-
margin: 1em 0em
|
139
|
+
div#steps-statistics section.scenario ul.steps div.step_exception {
|
140
|
+
margin: 1em 0em;
|
141
141
|
padding: 1em 0em 1em 1em;
|
142
142
|
border: 1px solid #999999;
|
143
143
|
background-color: #eee8d5;
|
144
144
|
color: #586e75; }
|
145
|
-
section.scenario ul.steps div.step_exception > pre {
|
145
|
+
div#steps-statistics section.scenario ul.steps div.step_exception > pre {
|
146
146
|
margin-left: 1em; }
|
147
|
-
section.scenario ul.steps pre.source {
|
147
|
+
div#steps-statistics section.scenario ul.steps pre.source {
|
148
148
|
font-size: 12px;
|
149
149
|
font-family: monospace;
|
150
150
|
background-color: #073642;
|
151
151
|
color: #dddddd; }
|
152
|
-
section.scenario ul.steps pre.source code.ruby {
|
152
|
+
div#steps-statistics section.scenario ul.steps pre.source code.ruby {
|
153
153
|
padding: 0.1em 0 0.2em 0; }
|
154
|
-
section.scenario ul.steps pre.source code.ruby .linenum {
|
154
|
+
div#steps-statistics section.scenario ul.steps pre.source code.ruby .linenum {
|
155
155
|
width: 75px;
|
156
156
|
color: #fffbd3;
|
157
157
|
padding-right: 1em; }
|
158
|
-
section.scenario ul.steps pre.source code.ruby .offending {
|
158
|
+
div#steps-statistics section.scenario ul.steps pre.source code.ruby .offending {
|
159
159
|
background-color: gray; }
|
160
160
|
|
161
|
+
div#speed-statistics table,
|
162
|
+
div#feature-statistics table,
|
163
|
+
div#tag-statistics table {
|
164
|
+
width: 100%;
|
165
|
+
margin: 1em 0em; }
|
166
|
+
div#speed-statistics table thead th,
|
167
|
+
div#feature-statistics table thead th,
|
168
|
+
div#tag-statistics table thead th {
|
169
|
+
border-bottom: 1px solid #7a7b7d; }
|
170
|
+
div#speed-statistics table tbody tr:nth-child(odd),
|
171
|
+
div#feature-statistics table tbody tr:nth-child(odd),
|
172
|
+
div#tag-statistics table tbody tr:nth-child(odd) {
|
173
|
+
background-color: #FFFFFF; }
|
174
|
+
div#speed-statistics table tbody tr:nth-child(even),
|
175
|
+
div#feature-statistics table tbody tr:nth-child(even),
|
176
|
+
div#tag-statistics table tbody tr:nth-child(even) {
|
177
|
+
background-color: #dddddd; }
|
178
|
+
div#speed-statistics table tbody td,
|
179
|
+
div#feature-statistics table tbody td,
|
180
|
+
div#tag-statistics table tbody td {
|
181
|
+
border: 1px solid #7a7b7d;
|
182
|
+
padding: 0.3em 1em; }
|
183
|
+
div#speed-statistics table tbody td.passed,
|
184
|
+
div#feature-statistics table tbody td.passed,
|
185
|
+
div#tag-statistics table tbody td.passed {
|
186
|
+
background-color: #eeffee;
|
187
|
+
color: #509b49; }
|
188
|
+
div#speed-statistics table tbody td.failed,
|
189
|
+
div#feature-statistics table tbody td.failed,
|
190
|
+
div#tag-statistics table tbody td.failed {
|
191
|
+
background-color: #ffdddd;
|
192
|
+
color: #ed1c24; }
|
193
|
+
div#speed-statistics table tbody td.pending,
|
194
|
+
div#feature-statistics table tbody td.pending,
|
195
|
+
div#tag-statistics table tbody td.pending {
|
196
|
+
background-color: #ffffdd;
|
197
|
+
color: #d6a921; }
|
198
|
+
|
199
|
+
div#speed-statistics .tablesorter-header {
|
200
|
+
background-position: center right;
|
201
|
+
background-repeat: no-repeat;
|
202
|
+
cursor: pointer;
|
203
|
+
background-image: url("data:image/gif;base64,R0lGODlhFQAJAIAAACMtMP///yH5BAEAAAEALAAAAAAVAAkAAAIXjI+AywnaYnhUMoqt3gZXPmVg94yJVQAAOw=="); }
|
204
|
+
div#speed-statistics .tablesorter-header.sorter-false {
|
205
|
+
background: none; }
|
206
|
+
div#speed-statistics .tablesorter-headerAsc {
|
207
|
+
background-position: center right;
|
208
|
+
background-repeat: no-repeat;
|
209
|
+
cursor: pointer;
|
210
|
+
background-image: url("data:image/gif;base64,R0lGODlhFQAEAIAAACMtMP///yH5BAEAAAEALAAAAAAVAAQAAAINjI8Bya2wnINUMopZAQA7"); }
|
211
|
+
div#speed-statistics .tablesorter-headerDesc {
|
212
|
+
background-position: center right;
|
213
|
+
background-repeat: no-repeat;
|
214
|
+
cursor: pointer;
|
215
|
+
background-image: url("data:image/gif;base64,R0lGODlhFQAEAIAAACMtMP///yH5BAEAAAEALAAAAAAVAAQAAAINjB+gC+jP2ptn0WskLQA7"); }
|
216
|
+
|
161
217
|
section.exception {
|
162
218
|
margin: 1em 0em;
|
163
219
|
border: 2px solid #268bd2;
|