turnip_formatter 0.2.11 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 29acbac39ffbed20aa935ee2325695f68b9348b7
|
4
|
+
data.tar.gz: 71a9a4eda76d0420a31bd6dab1dbd142b6a3b039
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 561db6c050c5ad0432f528bdaefe8a46af59e5f1e382b7816a81bd0bc10f688eba031072b4799434c1c3ac36e1c02f7a795cfd7bd40f1e8e6335fa4e33c4bfa7
|
7
|
+
data.tar.gz: 98b1d901dcb4d3a3f42654d505f50962b7f88d96d4cbe65ae006e4ea7bdeb739b2fce7a3750d4f00d7858c3f024589de3bb9394c0abd2fe2a6205b11d05434fd
|
data/.travis.yml
CHANGED
data/README.md
CHANGED
@@ -14,6 +14,7 @@ Requirements
|
|
14
14
|
* Ruby
|
15
15
|
* `~> 1.9.3`
|
16
16
|
* `~> 2.0.0`
|
17
|
+
* `~> 2.1.0`
|
17
18
|
|
18
19
|
Installation
|
19
20
|
--------------------
|
@@ -44,34 +45,29 @@ Run this command.
|
|
44
45
|
$ rspec -r turnip_formatter --format RSpecTurnipFormatter --out report.html
|
45
46
|
|
46
47
|
|
47
|
-
|
48
|
+
Example
|
48
49
|
--------------------
|
49
50
|
|
50
|
-
|
51
|
-
|
52
|
-

|
53
|
-
|
54
|
-
expand:
|
55
|
-
|
56
|
-

|
57
|
-
|
58
|
-
### Speed Statistics
|
59
|
-
|
60
|
-

|
61
|
-
|
62
|
-
### Feature Statistics
|
63
|
-
|
64
|
-

|
51
|
+
See:
|
65
52
|
|
66
|
-
|
53
|
+
- Feature and Steps
|
54
|
+
- https://github.com/gongo/turnip_formatter/tree/master/example
|
55
|
+
- Report
|
56
|
+
- http://gongo.github.io/turnip_formatter/examples/report.html
|
67
57
|
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
Example
|
58
|
+
Configuration
|
72
59
|
--------------------
|
73
60
|
|
74
|
-
|
61
|
+
```ruby
|
62
|
+
TurnipFormatter.configure do |config|
|
63
|
+
config.title = 'My Report' # <h1>My Report</h1>
|
64
|
+
config.add_stylesheet File.dirname(__FILE__) + '/foo.css' # <style>..</style>
|
65
|
+
config.add_javascript File.dirname(__FILE__) + '/bar.js' # <script>..</script>
|
66
|
+
|
67
|
+
config.add_stylesheet 'http://cdn.example.com/hoge.css' # <link rel="..">
|
68
|
+
config.add_javascript '//cdn.example.com/fuga.js' # <script src="..">
|
69
|
+
end
|
70
|
+
```
|
75
71
|
|
76
72
|
Add-on
|
77
73
|
--------------------
|
data/example/README.md
CHANGED
@@ -20,7 +20,7 @@ Scenario: normal monster
|
|
20
20
|
And Fanfare
|
21
21
|
```
|
22
22
|
|
23
|
-

|
24
24
|
|
25
25
|
### Failed step
|
26
26
|
|
@@ -36,7 +36,7 @@ Scenario: strong monster
|
|
36
36
|
And Fanfare
|
37
37
|
```
|
38
38
|
|
39
|
-

|
40
40
|
|
41
41
|
### Pending step and specify tag
|
42
42
|
|
@@ -61,9 +61,7 @@ Scenario: strong monster
|
|
61
61
|
And Fanfare
|
62
62
|
```
|
63
63
|
|
64
|
-

|
64
|
+

|
67
65
|
|
68
66
|
### Background
|
69
67
|
|
@@ -86,7 +84,7 @@ Feature: Battle a monster with weapon
|
|
86
84
|
And Fanfare
|
87
85
|
```
|
88
86
|
|
89
|
-

|
90
88
|
|
91
89
|
### Outline
|
92
90
|
|
@@ -109,7 +107,7 @@ Feature: Battle monsters
|
|
109
107
|
Then I could not escape
|
110
108
|
```
|
111
109
|
|
112
|
-

|
113
111
|
|
114
112
|
### Multiline
|
115
113
|
|
@@ -124,4 +122,4 @@ Feature: A feature with multiline strings
|
|
124
122
|
Then the song should have 2 lines
|
125
123
|
```
|
126
124
|
|
127
|
-

|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
data/example/images/outline.png
CHANGED
Binary file
|
Binary file
|
data/example/spec/bar.js
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
alert('a');
|
data/example/spec/spec_helper.rb
CHANGED
@@ -1,8 +1,13 @@
|
|
1
1
|
require 'turnip_formatter'
|
2
2
|
|
3
3
|
RSpec.configure do |config|
|
4
|
-
config.project_name = "My project"
|
5
4
|
config.add_formatter RSpecTurnipFormatter, 'report.html'
|
6
5
|
end
|
7
6
|
|
8
|
-
Dir.glob(File.dirname(__FILE__) +
|
7
|
+
Dir.glob(File.dirname(__FILE__) + '/steps/**/*steps.rb') { |f| load f, true }
|
8
|
+
|
9
|
+
# TurnipFormatter.configure do |config|
|
10
|
+
# config.title = 'My Report'
|
11
|
+
# config.add_stylesheet File.dirname(__FILE__) + '/foo.css'
|
12
|
+
# config.add_javascript File.dirname(__FILE__) + '/bar.js'
|
13
|
+
# end
|
@@ -5,50 +5,63 @@ require 'turnip_formatter/scenario/pass'
|
|
5
5
|
require 'turnip_formatter/scenario/failure'
|
6
6
|
require 'turnip_formatter/scenario/pending'
|
7
7
|
require 'turnip_formatter/printer/index'
|
8
|
+
require 'turnip_formatter/printer/scenario'
|
8
9
|
|
9
10
|
module RSpec
|
10
11
|
module Core
|
11
12
|
module Formatters
|
12
13
|
class TurnipFormatter < BaseFormatter
|
13
|
-
attr_reader :
|
14
|
-
|
14
|
+
attr_reader :scenarios, :scenario_output_files
|
15
|
+
|
16
|
+
SCENARIO_TEMPORARY_OUTPUT_DIR = File.expand_path('./turnip_tmp')
|
15
17
|
|
16
18
|
def initialize(output)
|
17
19
|
super(output)
|
18
|
-
@passed_scenarios = []
|
19
|
-
@failed_scenarios = []
|
20
|
-
@pending_scenarios = []
|
21
20
|
@scenarios = []
|
21
|
+
@scenario_output_files = []
|
22
|
+
|
23
|
+
FileUtils.mkdir_p(SCENARIO_TEMPORARY_OUTPUT_DIR)
|
22
24
|
end
|
23
25
|
|
24
26
|
def dump_summary(duration, example_count, failure_count, pending_count)
|
25
|
-
|
26
|
-
|
27
|
+
print_params = {
|
28
|
+
scenarios: scenarios,
|
29
|
+
failed_count: failure_count,
|
30
|
+
pending_count: pending_count,
|
31
|
+
total_time: duration,
|
32
|
+
scenario_files: scenario_output_files
|
33
|
+
}
|
34
|
+
output.puts ::TurnipFormatter::Printer::Index.print_out(print_params)
|
35
|
+
FileUtils.rm_rf(SCENARIO_TEMPORARY_OUTPUT_DIR)
|
27
36
|
end
|
28
37
|
|
29
38
|
def example_passed(example)
|
30
|
-
super(example)
|
31
|
-
|
32
39
|
scenario = ::TurnipFormatter::Scenario::Pass.new(example)
|
33
|
-
|
34
|
-
@scenarios << scenario
|
40
|
+
output_scenario(scenario)
|
35
41
|
end
|
36
42
|
|
37
43
|
def example_pending(example)
|
38
|
-
super(example)
|
39
|
-
|
40
44
|
scenario = ::TurnipFormatter::Scenario::Pending.new(example)
|
41
|
-
|
42
|
-
@scenarios << scenario
|
45
|
+
output_scenario(scenario)
|
43
46
|
end
|
44
47
|
|
45
48
|
def example_failed(example)
|
46
|
-
super(example)
|
47
|
-
|
48
49
|
scenario = ::TurnipFormatter::Scenario::Failure.new(example)
|
49
|
-
|
50
|
-
@scenarios << scenario
|
50
|
+
output_scenario(scenario)
|
51
51
|
end
|
52
|
+
|
53
|
+
private
|
54
|
+
|
55
|
+
def output_scenario(scenario)
|
56
|
+
filepath = SCENARIO_TEMPORARY_OUTPUT_DIR + "/#{scenario.id}.html"
|
57
|
+
|
58
|
+
File.open(filepath, 'w') do |io|
|
59
|
+
io.puts ::TurnipFormatter::Printer::Scenario.print_out(scenario)
|
60
|
+
end
|
61
|
+
|
62
|
+
@scenario_output_files << filepath
|
63
|
+
@scenarios << scenario
|
64
|
+
end
|
52
65
|
end
|
53
66
|
end
|
54
67
|
end
|
@@ -10,16 +10,13 @@ module TurnipFormatter
|
|
10
10
|
class << self
|
11
11
|
include TurnipFormatter::Printer
|
12
12
|
|
13
|
-
|
14
|
-
# @param RSpec::Core::Formatters::TurnipFormatter formatter
|
15
|
-
#
|
16
|
-
def print_out(formatter)
|
13
|
+
def print_out(params)
|
17
14
|
render_template(:index, {
|
18
|
-
scenarios:
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
15
|
+
scenarios: params[:scenarios],
|
16
|
+
failed_count: params[:failed_count],
|
17
|
+
pending_count: params[:pending_count],
|
18
|
+
total_time: params[:total_time],
|
19
|
+
scenario_files: params[:scenario_files]
|
23
20
|
}
|
24
21
|
)
|
25
22
|
end
|
@@ -9,8 +9,10 @@ module TurnipFormatter
|
|
9
9
|
include TurnipFormatter::Printer
|
10
10
|
|
11
11
|
def print_out(scenario)
|
12
|
-
|
13
|
-
|
12
|
+
#
|
13
|
+
# TODO output for scenario.valid? == false
|
14
|
+
#
|
15
|
+
render_template(:scenario, scenario: scenario) if scenario.valid?
|
14
16
|
rescue => e
|
15
17
|
TurnipFormatter::Printer::RuntimeError.print_out(scenario.example, e)
|
16
18
|
end
|
@@ -8,24 +8,26 @@ module TurnipFormatter
|
|
8
8
|
include TurnipFormatter::Printer
|
9
9
|
|
10
10
|
def print_out(step)
|
11
|
-
|
11
|
+
step_templates = TurnipFormatter.step_templates_for(step.status)
|
12
|
+
|
13
|
+
render_template(:step,
|
14
|
+
{
|
15
|
+
step: step,
|
16
|
+
has_args_or_documents: has_args_or_documents?(step, step_templates),
|
17
|
+
step_docs: documents(step, step_templates)
|
18
|
+
}
|
19
|
+
)
|
12
20
|
end
|
13
21
|
|
14
22
|
private
|
15
23
|
|
16
|
-
def
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
# +Step::Failure.add_template+
|
24
|
-
# +Step::Pending.add_template+
|
25
|
-
# be called.
|
26
|
-
#
|
27
|
-
template[:klass].build(template[:value])
|
28
|
-
end
|
24
|
+
def has_args_or_documents?(step, templates)
|
25
|
+
(step.extra_args.length + templates.length) > 0
|
26
|
+
end
|
27
|
+
|
28
|
+
def documents(step, templates)
|
29
|
+
templates.map do |template, method|
|
30
|
+
template.send(method, step.example)
|
29
31
|
end.join("\n")
|
30
32
|
end
|
31
33
|
end
|
@@ -9,7 +9,8 @@ module TurnipFormatter
|
|
9
9
|
class << self
|
10
10
|
include TurnipFormatter::Printer
|
11
11
|
|
12
|
-
def print_out(
|
12
|
+
def print_out(scenarios)
|
13
|
+
passed_scenarios = scenarios.select { |s| s.status == 'passed' }
|
13
14
|
results = speed_analysis(passed_scenarios)
|
14
15
|
render_template(:tab_speed_statistics, { analysis_results: results })
|
15
16
|
end
|
@@ -28,9 +28,9 @@ module TurnipFormatter
|
|
28
28
|
info = OpenStruct.new(
|
29
29
|
name: name,
|
30
30
|
scenario_count: scenarios.size,
|
31
|
-
passed_count: status_group[
|
32
|
-
failed_count: status_group[
|
33
|
-
pending_count: status_group[
|
31
|
+
passed_count: status_group['passed'].size,
|
32
|
+
failed_count: status_group['failed'].size,
|
33
|
+
pending_count: status_group['pending'].size,
|
34
34
|
status: 'failed'
|
35
35
|
)
|
36
36
|
|
@@ -57,8 +57,7 @@ module TurnipFormatter
|
|
57
57
|
#
|
58
58
|
def group_by_tag(scenarios)
|
59
59
|
scenarios.map do |scenario|
|
60
|
-
|
61
|
-
scenario.validation
|
60
|
+
if scenario.valid?
|
62
61
|
if scenario.tags.empty?
|
63
62
|
{ name: 'turnip', scenario: scenario }
|
64
63
|
else
|
@@ -66,7 +65,7 @@ module TurnipFormatter
|
|
66
65
|
{ name: '@' + tag, scenario: scenario }
|
67
66
|
end
|
68
67
|
end
|
69
|
-
|
68
|
+
else
|
70
69
|
{ name: 'runtime error', scenario: scenario }
|
71
70
|
end
|
72
71
|
end.flatten.group_by { |s| s[:name] }.sort
|
@@ -1,32 +1,27 @@
|
|
1
|
+
require 'tilt'
|
2
|
+
|
1
3
|
module TurnipFormatter
|
2
4
|
module Printer
|
3
|
-
include ERB::Util
|
4
|
-
|
5
5
|
#
|
6
6
|
# @example
|
7
7
|
# render_template(:main, { name: 'user' })
|
8
|
-
# # =>
|
8
|
+
# # => Tilt.new('/path/to/main.erb') render { name: 'user' }
|
9
9
|
#
|
10
10
|
def render_template(name, params = {})
|
11
|
-
render_template_list(name).
|
11
|
+
render_template_list(name).render(self, params)
|
12
12
|
end
|
13
13
|
|
14
14
|
private
|
15
15
|
|
16
16
|
def render_template_list(name)
|
17
17
|
if templates[name].nil?
|
18
|
-
path = File.dirname(__FILE__) + "/template/#{name
|
19
|
-
templates[name] =
|
18
|
+
path = File.dirname(__FILE__) + "/template/#{name}.haml"
|
19
|
+
templates[name] = Tilt.new(path)
|
20
20
|
end
|
21
21
|
|
22
22
|
templates[name]
|
23
23
|
end
|
24
24
|
|
25
|
-
def template_params_binding(params)
|
26
|
-
code = params.keys.map { |k| "#{k} = params[#{k.inspect}];" }.join
|
27
|
-
eval(code + ";binding")
|
28
|
-
end
|
29
|
-
|
30
25
|
def templates
|
31
26
|
@templates ||= {}
|
32
27
|
end
|
@@ -0,0 +1,98 @@
|
|
1
|
+
require 'turnip_formatter/step'
|
2
|
+
|
3
|
+
module TurnipFormatter
|
4
|
+
module Scenario
|
5
|
+
class Base
|
6
|
+
include RSpec::Core::BacktraceFormatter
|
7
|
+
|
8
|
+
attr_reader :errors
|
9
|
+
|
10
|
+
#
|
11
|
+
# @param [RSpec::Core::Example] example
|
12
|
+
#
|
13
|
+
def initialize(example)
|
14
|
+
@example = example
|
15
|
+
@errors = []
|
16
|
+
|
17
|
+
validation
|
18
|
+
clean_backtrace
|
19
|
+
end
|
20
|
+
|
21
|
+
def valid?
|
22
|
+
errors.empty?
|
23
|
+
end
|
24
|
+
|
25
|
+
def steps
|
26
|
+
@steps ||= raw_steps.map do |step|
|
27
|
+
TurnipFormatter::Step.new(example, step)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def id
|
32
|
+
'scenario_' + object_id.to_s
|
33
|
+
end
|
34
|
+
|
35
|
+
#
|
36
|
+
# @return [String] scenario name
|
37
|
+
#
|
38
|
+
def name
|
39
|
+
example.example_group.description
|
40
|
+
end
|
41
|
+
|
42
|
+
#
|
43
|
+
# @return [String] scenario status ('passed', 'failed' or 'pending')
|
44
|
+
#
|
45
|
+
def status
|
46
|
+
example.execution_result[:status]
|
47
|
+
end
|
48
|
+
|
49
|
+
#
|
50
|
+
# @return [String] scenario run time
|
51
|
+
#
|
52
|
+
def run_time
|
53
|
+
example.execution_result[:run_time]
|
54
|
+
end
|
55
|
+
|
56
|
+
def feature_info
|
57
|
+
path = RSpec::Core::Metadata.relative_path(feature_file_path)
|
58
|
+
"\"#{feature_name}\" in #{path}"
|
59
|
+
end
|
60
|
+
|
61
|
+
def feature_name
|
62
|
+
example.example_group.metadata[:example_group][:example_group][:description]
|
63
|
+
end
|
64
|
+
|
65
|
+
def tags
|
66
|
+
example.metadata[:turnip_formatter][:tags]
|
67
|
+
end
|
68
|
+
|
69
|
+
def example
|
70
|
+
@example
|
71
|
+
end
|
72
|
+
|
73
|
+
protected
|
74
|
+
|
75
|
+
def validation
|
76
|
+
unless example.metadata.key?(:turnip_formatter)
|
77
|
+
@errors << 'has no steps information'
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
private
|
82
|
+
|
83
|
+
def feature_file_path
|
84
|
+
example.metadata[:file_path]
|
85
|
+
end
|
86
|
+
|
87
|
+
def raw_steps
|
88
|
+
example.metadata[:turnip_formatter][:steps]
|
89
|
+
end
|
90
|
+
|
91
|
+
def clean_backtrace
|
92
|
+
return if example.exception.nil?
|
93
|
+
formatted = format_backtrace(example.exception.backtrace, example.metadata)
|
94
|
+
example.exception.set_backtrace(formatted)
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
@@ -1,36 +1,34 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
require 'turnip_formatter/scenario'
|
4
|
-
require 'turnip_formatter/step/failure'
|
1
|
+
require 'turnip_formatter/scenario/base'
|
5
2
|
|
6
3
|
module TurnipFormatter
|
7
4
|
module Scenario
|
8
|
-
class
|
9
|
-
class NoExistFailedStepInformationError < ::StandardError; end
|
10
|
-
|
11
|
-
class Failure
|
12
|
-
include TurnipFormatter::Scenario
|
13
|
-
|
5
|
+
class Failure < Base
|
14
6
|
def steps
|
15
7
|
steps = super
|
16
|
-
steps[offending_line].
|
8
|
+
steps[@offending_line].status = :failed
|
9
|
+
steps[(@offending_line + 1)..-1].each do |step|
|
10
|
+
step.status = :unexecuted
|
11
|
+
end
|
17
12
|
steps
|
18
13
|
end
|
19
14
|
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
15
|
+
protected
|
16
|
+
|
17
|
+
def validation
|
18
|
+
if failed_message =~ /:in step:(?<stepno>\d+) `/
|
19
|
+
@offending_line = $~[:stepno].to_i
|
20
|
+
else
|
21
|
+
@errors << 'has no failed step information'
|
22
|
+
end
|
23
|
+
|
24
|
+
super
|
25
|
+
end
|
25
26
|
|
26
27
|
private
|
27
28
|
|
28
|
-
|
29
|
-
|
30
|
-
raise NoExistFailedStepInformationError
|
29
|
+
def failed_message
|
30
|
+
example.exception.backtrace.last
|
31
31
|
end
|
32
|
-
$~[:stepno].to_i
|
33
|
-
end
|
34
32
|
end
|
35
33
|
end
|
36
34
|
end
|
@@ -1,19 +1,8 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
require 'turnip_formatter/scenario'
|
4
|
-
require 'turnip_formatter/step/pending'
|
1
|
+
require 'turnip_formatter/scenario/base'
|
5
2
|
|
6
3
|
module TurnipFormatter
|
7
4
|
module Scenario
|
8
|
-
class
|
9
|
-
|
10
|
-
class Pass
|
11
|
-
include TurnipFormatter::Scenario
|
12
|
-
|
13
|
-
def validation
|
14
|
-
raise NotPassedScenarioError if status != 'passed'
|
15
|
-
super
|
16
|
-
end
|
5
|
+
class Pass < Base
|
17
6
|
end
|
18
7
|
end
|
19
8
|
end
|
@@ -1,40 +1,34 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
require 'turnip_formatter/scenario'
|
4
|
-
require 'turnip_formatter/step/pending'
|
1
|
+
require 'turnip_formatter/scenario/base'
|
5
2
|
|
6
3
|
module TurnipFormatter
|
7
4
|
module Scenario
|
8
|
-
class
|
9
|
-
class NoExistPendingStepInformationError < ::StandardError; end
|
10
|
-
|
11
|
-
class Pending
|
12
|
-
include TurnipFormatter::Scenario
|
13
|
-
|
5
|
+
class Pending < Base
|
14
6
|
def steps
|
15
7
|
steps = super
|
16
|
-
steps[offending_line].
|
8
|
+
steps[@offending_line].status = :pending
|
9
|
+
steps[(@offending_line + 1)..-1].each do |step|
|
10
|
+
step.status = :unexecuted
|
11
|
+
end
|
17
12
|
steps
|
18
13
|
end
|
19
14
|
|
20
|
-
|
21
|
-
raise NotPendingScenarioError if status != 'pending'
|
22
|
-
offending_line
|
23
|
-
super
|
24
|
-
end
|
15
|
+
protected
|
25
16
|
|
26
|
-
|
17
|
+
def validation
|
18
|
+
if pending_message =~ /^No such step\((?<stepno>\d+)\): /
|
19
|
+
@offending_line = $~[:stepno].to_i
|
20
|
+
else
|
21
|
+
@errors << 'has no pending step information'
|
22
|
+
end
|
27
23
|
|
28
|
-
|
29
|
-
unless pending_message =~ /^No such step\((?<stepno>\d+)\): /
|
30
|
-
raise NoExistPendingStepInformationError
|
24
|
+
super
|
31
25
|
end
|
32
|
-
$~[:stepno].to_i
|
33
|
-
end
|
34
26
|
|
35
|
-
|
36
|
-
|
37
|
-
|
27
|
+
private
|
28
|
+
|
29
|
+
def pending_message
|
30
|
+
example.execution_result[:pending_message]
|
31
|
+
end
|
38
32
|
end
|
39
33
|
end
|
40
34
|
end
|