turnip_formatter 0.3.0 → 0.3.1
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 +4 -0
- data/lib/rspec/core/formatters/turnip_formatter/for_rspec2.rb +47 -0
- data/lib/rspec/core/formatters/turnip_formatter/for_rspec3.rb +52 -0
- data/lib/rspec/core/formatters/turnip_formatter.rb +13 -27
- data/lib/turnip_formatter/ext/turnip/rspec.rb +9 -3
- data/lib/turnip_formatter/helper.rb +22 -0
- data/lib/turnip_formatter/printer/runtime_error.rb +0 -2
- data/lib/turnip_formatter/scenario/base.rb +31 -20
- data/lib/turnip_formatter/scenario/pending.rb +2 -1
- data/lib/turnip_formatter/step_template/exception.rb +7 -9
- data/lib/turnip_formatter/version.rb +1 -1
- data/lib/turnip_formatter.rb +1 -0
- data/spec/gemfiles/Gemfile-rspec-2.14.x +4 -0
- data/spec/gemfiles/Gemfile-rspec-2.99.x +4 -0
- data/spec/gemfiles/Gemfile-rspec-3.0.x +4 -0
- data/spec/support/example_helper.rb +15 -5
- data/spec/turnip_formatter/scenario/pending_spec.rb +1 -1
- data/turnip_formatter.gemspec +1 -1
- metadata +19 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ea1f372fc6ecf5a43d8f00841896ca2d51c04f50
|
4
|
+
data.tar.gz: 78bdffd1e4b1326bd44ff556fb4697d269776855
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8f54ee9957426623ccafed4561f8d3d219eaaa6bf74e5a73e891a878f6442aae0424ecf0e2009d3c5ea3e823345b98da386cf50c89632c8bcecaa3103ec08cfa
|
7
|
+
data.tar.gz: 78bbdd9833dea112843c297303e12c60df6ddfead24a9a3b87b27473a4e01c55e41d4ece88b042b9b1b79ff763dcb565b26d0a3c8ce9fc34b54f30c9fac06fc4
|
data/.travis.yml
CHANGED
@@ -0,0 +1,47 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
|
3
|
+
module RSpec
|
4
|
+
module Core
|
5
|
+
module Formatters
|
6
|
+
class TurnipFormatter < BaseFormatter
|
7
|
+
module ForRSpec2
|
8
|
+
def dump_summary(duration, _, failure_count, pending_count)
|
9
|
+
print_params = {
|
10
|
+
scenarios: scenarios,
|
11
|
+
failed_count: failure_count,
|
12
|
+
pending_count: pending_count,
|
13
|
+
total_time: duration,
|
14
|
+
scenario_files: scenario_output_files
|
15
|
+
}
|
16
|
+
output_html(print_params)
|
17
|
+
end
|
18
|
+
|
19
|
+
def example_passed(example)
|
20
|
+
scenario = ::TurnipFormatter::Scenario::Pass.new(example)
|
21
|
+
output_scenario(scenario)
|
22
|
+
end
|
23
|
+
|
24
|
+
def example_pending(example)
|
25
|
+
clean_backtrace(example)
|
26
|
+
scenario = ::TurnipFormatter::Scenario::Pending.new(example)
|
27
|
+
output_scenario(scenario)
|
28
|
+
end
|
29
|
+
|
30
|
+
def example_failed(example)
|
31
|
+
clean_backtrace(example)
|
32
|
+
scenario = ::TurnipFormatter::Scenario::Failure.new(example)
|
33
|
+
output_scenario(scenario)
|
34
|
+
end
|
35
|
+
|
36
|
+
private
|
37
|
+
|
38
|
+
def clean_backtrace(example)
|
39
|
+
return if example.exception.nil?
|
40
|
+
formatted = format_backtrace(example.exception.backtrace, example)
|
41
|
+
example.exception.set_backtrace(formatted)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
|
3
|
+
module RSpec
|
4
|
+
module Core
|
5
|
+
module Formatters
|
6
|
+
class TurnipFormatter < BaseFormatter
|
7
|
+
module ForRSpec3
|
8
|
+
def self.included(klass)
|
9
|
+
RSpec::Core::Formatters.register klass, :example_passed, :example_pending, :example_failed, :dump_summary
|
10
|
+
end
|
11
|
+
|
12
|
+
def dump_summary(summary)
|
13
|
+
print_params = {
|
14
|
+
scenarios: scenarios,
|
15
|
+
failed_count: summary.failure_count,
|
16
|
+
pending_count: summary.pending_count,
|
17
|
+
total_time: summary.duration,
|
18
|
+
scenario_files: scenario_output_files
|
19
|
+
}
|
20
|
+
output_html(print_params)
|
21
|
+
end
|
22
|
+
|
23
|
+
def example_passed(notification)
|
24
|
+
scenario = ::TurnipFormatter::Scenario::Pass.new(notification.example)
|
25
|
+
output_scenario(scenario)
|
26
|
+
end
|
27
|
+
|
28
|
+
def example_pending(notification)
|
29
|
+
clean_backtrace(notification)
|
30
|
+
scenario = ::TurnipFormatter::Scenario::Pending.new(notification.example)
|
31
|
+
output_scenario(scenario)
|
32
|
+
end
|
33
|
+
|
34
|
+
def example_failed(notification)
|
35
|
+
clean_backtrace(notification)
|
36
|
+
scenario = ::TurnipFormatter::Scenario::Failure.new(notification.example)
|
37
|
+
output_scenario(scenario)
|
38
|
+
end
|
39
|
+
|
40
|
+
private
|
41
|
+
|
42
|
+
def clean_backtrace(notification)
|
43
|
+
if notification.respond_to?(:formatted_backtrace)
|
44
|
+
formatted = notification.formatted_backtrace
|
45
|
+
notification.example.exception.set_backtrace(formatted)
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
@@ -6,6 +6,8 @@ require 'turnip_formatter/scenario/failure'
|
|
6
6
|
require 'turnip_formatter/scenario/pending'
|
7
7
|
require 'turnip_formatter/printer/index'
|
8
8
|
require 'turnip_formatter/printer/scenario'
|
9
|
+
require_relative './turnip_formatter/for_rspec2'
|
10
|
+
require_relative './turnip_formatter/for_rspec3'
|
9
11
|
|
10
12
|
module RSpec
|
11
13
|
module Core
|
@@ -15,6 +17,12 @@ module RSpec
|
|
15
17
|
|
16
18
|
SCENARIO_TEMPORARY_OUTPUT_DIR = File.expand_path('./turnip_tmp')
|
17
19
|
|
20
|
+
if Formatters.respond_to?(:register)
|
21
|
+
include TurnipFormatter::ForRSpec3
|
22
|
+
else
|
23
|
+
include TurnipFormatter::ForRSpec2
|
24
|
+
end
|
25
|
+
|
18
26
|
def initialize(output)
|
19
27
|
super(output)
|
20
28
|
@scenarios = []
|
@@ -23,35 +31,13 @@ module RSpec
|
|
23
31
|
FileUtils.mkdir_p(SCENARIO_TEMPORARY_OUTPUT_DIR)
|
24
32
|
end
|
25
33
|
|
26
|
-
def dump_summary(duration, example_count, failure_count, pending_count)
|
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)
|
36
|
-
end
|
37
|
-
|
38
|
-
def example_passed(example)
|
39
|
-
scenario = ::TurnipFormatter::Scenario::Pass.new(example)
|
40
|
-
output_scenario(scenario)
|
41
|
-
end
|
42
|
-
|
43
|
-
def example_pending(example)
|
44
|
-
scenario = ::TurnipFormatter::Scenario::Pending.new(example)
|
45
|
-
output_scenario(scenario)
|
46
|
-
end
|
47
|
-
|
48
|
-
def example_failed(example)
|
49
|
-
scenario = ::TurnipFormatter::Scenario::Failure.new(example)
|
50
|
-
output_scenario(scenario)
|
51
|
-
end
|
52
|
-
|
53
34
|
private
|
54
35
|
|
36
|
+
def output_html(params)
|
37
|
+
output.puts ::TurnipFormatter::Printer::Index.print_out(params)
|
38
|
+
FileUtils.rm_rf(SCENARIO_TEMPORARY_OUTPUT_DIR)
|
39
|
+
end
|
40
|
+
|
55
41
|
def output_scenario(scenario)
|
56
42
|
filepath = SCENARIO_TEMPORARY_OUTPUT_DIR + "/#{scenario.id}.html"
|
57
43
|
|
@@ -12,8 +12,14 @@ module Turnip
|
|
12
12
|
step(step)
|
13
13
|
rescue Turnip::Pending => e
|
14
14
|
example.metadata[:line_number] = step.line
|
15
|
-
|
16
|
-
|
15
|
+
example.metadata[:location] = "#{example.metadata[:file_path]}:#{step.line}"
|
16
|
+
|
17
|
+
if ::RSpec::Version::STRING >= '2.99.0'
|
18
|
+
skip("No such step(#{index}): '#{e}'")
|
19
|
+
else
|
20
|
+
pending("No such step(#{index}): '#{e}'")
|
21
|
+
end
|
22
|
+
rescue StandardError, ::RSpec::Expectations::ExpectationNotMetError => e
|
17
23
|
example.metadata[:line_number] = step.line
|
18
24
|
e.backtrace.push "#{feature_file}:#{step.line}:in step:#{index} `#{step.description}'"
|
19
25
|
raise e
|
@@ -40,7 +46,7 @@ module Turnip
|
|
40
46
|
class << self
|
41
47
|
def run(feature_file)
|
42
48
|
Turnip::Builder.build(feature_file).features.each do |feature|
|
43
|
-
describe feature.name, feature.metadata_hash do
|
49
|
+
::RSpec.describe feature.name, feature.metadata_hash do
|
44
50
|
let(:backgrounds) do
|
45
51
|
feature.backgrounds
|
46
52
|
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module TurnipFormatter
|
2
|
+
module Helper
|
3
|
+
module HelperMethods
|
4
|
+
#
|
5
|
+
# @param [RSpec::Core::Example] example
|
6
|
+
# @param [OpenStruct or ::RSpec::Core::Example::ExecutionResult]
|
7
|
+
#
|
8
|
+
def example_execution_result(example)
|
9
|
+
case example.execution_result
|
10
|
+
when Hash
|
11
|
+
# RSpec 2
|
12
|
+
OpenStruct.new(example.execution_result)
|
13
|
+
when ::RSpec::Core::Example::ExecutionResult
|
14
|
+
# RSpec 3
|
15
|
+
example.execution_result
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
extend HelperMethods
|
21
|
+
end
|
22
|
+
end
|
@@ -6,10 +6,8 @@ module TurnipFormatter
|
|
6
6
|
class RuntimeError
|
7
7
|
class << self
|
8
8
|
include TurnipFormatter::Printer
|
9
|
-
include RSpec::Core::BacktraceFormatter
|
10
9
|
|
11
10
|
def print_out(example, exception)
|
12
|
-
exception.set_backtrace(format_backtrace(exception.backtrace))
|
13
11
|
render_template(:runtime_exception, {
|
14
12
|
example: example,
|
15
13
|
runtime_exception: runtime_exception(exception),
|
@@ -3,8 +3,6 @@ require 'turnip_formatter/step'
|
|
3
3
|
module TurnipFormatter
|
4
4
|
module Scenario
|
5
5
|
class Base
|
6
|
-
include RSpec::Core::BacktraceFormatter
|
7
|
-
|
8
6
|
attr_reader :errors
|
9
7
|
|
10
8
|
#
|
@@ -15,7 +13,6 @@ module TurnipFormatter
|
|
15
13
|
@errors = []
|
16
14
|
|
17
15
|
validation
|
18
|
-
clean_backtrace
|
19
16
|
end
|
20
17
|
|
21
18
|
def valid?
|
@@ -43,14 +40,14 @@ module TurnipFormatter
|
|
43
40
|
# @return [String] scenario status ('passed', 'failed' or 'pending')
|
44
41
|
#
|
45
42
|
def status
|
46
|
-
|
43
|
+
execution_result.status.to_s
|
47
44
|
end
|
48
45
|
|
49
46
|
#
|
50
47
|
# @return [String] scenario run time
|
51
48
|
#
|
52
49
|
def run_time
|
53
|
-
|
50
|
+
execution_result.run_time
|
54
51
|
end
|
55
52
|
|
56
53
|
def feature_info
|
@@ -59,7 +56,7 @@ module TurnipFormatter
|
|
59
56
|
end
|
60
57
|
|
61
58
|
def feature_name
|
62
|
-
|
59
|
+
parent_example_group[:description]
|
63
60
|
end
|
64
61
|
|
65
62
|
def tags
|
@@ -72,27 +69,41 @@ module TurnipFormatter
|
|
72
69
|
|
73
70
|
protected
|
74
71
|
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
end
|
72
|
+
def validation
|
73
|
+
unless example.metadata.key?(:turnip_formatter)
|
74
|
+
@errors << 'has no steps information'
|
79
75
|
end
|
76
|
+
end
|
80
77
|
|
81
78
|
private
|
82
79
|
|
83
|
-
|
84
|
-
|
85
|
-
|
80
|
+
def feature_file_path
|
81
|
+
example.metadata[:file_path]
|
82
|
+
end
|
86
83
|
|
87
|
-
|
88
|
-
|
89
|
-
|
84
|
+
def raw_steps
|
85
|
+
example.metadata[:turnip_formatter][:steps]
|
86
|
+
end
|
90
87
|
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
88
|
+
#
|
89
|
+
# @return [Hash] parent example group
|
90
|
+
#
|
91
|
+
def parent_example_group
|
92
|
+
if example.example_group.metadata.key?(:parent_example_group)
|
93
|
+
# RSpec 3
|
94
|
+
example.example_group.metadata[:parent_example_group]
|
95
|
+
else
|
96
|
+
# RSpec 2
|
97
|
+
example.example_group.metadata[:example_group][:example_group]
|
95
98
|
end
|
99
|
+
end
|
100
|
+
|
101
|
+
#
|
102
|
+
# @return [OpenStruct or ::RSpec::Core::Example::ExecutionResult]
|
103
|
+
#
|
104
|
+
def execution_result
|
105
|
+
@execution_result ||= Helper.example_execution_result(example)
|
106
|
+
end
|
96
107
|
end
|
97
108
|
end
|
98
109
|
end
|
@@ -32,23 +32,21 @@ module TurnipFormatter
|
|
32
32
|
# @param [RSpec::Core::Example] example
|
33
33
|
#
|
34
34
|
def build_failed(example)
|
35
|
-
build(example.exception)
|
35
|
+
build(example.exception.to_s, example.exception.backtrace)
|
36
36
|
end
|
37
37
|
|
38
38
|
#
|
39
39
|
# @param [RSpec::Core::Example] example
|
40
40
|
#
|
41
41
|
def build_pending(example)
|
42
|
-
|
43
|
-
|
44
|
-
exception.set_backtrace([example.location])
|
45
|
-
build(exception)
|
42
|
+
result = TurnipFormatter::Helper.example_execution_result(example)
|
43
|
+
build(result.pending_message, [example.location])
|
46
44
|
end
|
47
45
|
|
48
46
|
private
|
49
47
|
|
50
|
-
def build(
|
51
|
-
template_step_exception.render(
|
48
|
+
def build(message, backtrace)
|
49
|
+
template_step_exception.render(Object.new, { message: message, backtrace: backtrace })
|
52
50
|
end
|
53
51
|
|
54
52
|
def template_step_exception
|
@@ -57,11 +55,11 @@ module TurnipFormatter
|
|
57
55
|
%dl
|
58
56
|
%dt Failure:
|
59
57
|
%dd
|
60
|
-
%pre&=
|
58
|
+
%pre&= message
|
61
59
|
%dt Backtrace:
|
62
60
|
%dd
|
63
61
|
%ol
|
64
|
-
-
|
62
|
+
- backtrace.each do |line|
|
65
63
|
%li&= line
|
66
64
|
EOS
|
67
65
|
end
|
data/lib/turnip_formatter.rb
CHANGED
@@ -43,6 +43,7 @@ module TurnipFormatter
|
|
43
43
|
end
|
44
44
|
|
45
45
|
require 'rspec/core/formatters/turnip_formatter'
|
46
|
+
require 'turnip_formatter/helper'
|
46
47
|
require 'turnip_formatter/template'
|
47
48
|
require 'turnip_formatter/step_template/exception'
|
48
49
|
require 'turnip_formatter/step_template/source'
|
@@ -10,9 +10,19 @@ module ExampleHelper
|
|
10
10
|
end
|
11
11
|
|
12
12
|
def pending_example
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
if ::RSpec::Version::STRING >= '2.99.0'
|
14
|
+
base_example { skip('No such step(0): ') }
|
15
|
+
else
|
16
|
+
base_example { pending('No such step(0): ') }
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def invalid_pending_example
|
21
|
+
if ::RSpec::Version::STRING >= '2.99.0'
|
22
|
+
base_example { skip('Pending') }
|
23
|
+
else
|
24
|
+
base_example { pending('Pending') }
|
25
|
+
end
|
16
26
|
end
|
17
27
|
|
18
28
|
private
|
@@ -20,6 +30,7 @@ module ExampleHelper
|
|
20
30
|
def base_example(&assertion)
|
21
31
|
group = ::RSpec::Core::ExampleGroup.describe('Feature').describe('Scenario')
|
22
32
|
example = group.example('example', example_metadata, &assertion)
|
33
|
+
example.metadata[:file_path] = '/path/to/hoge.feature'
|
23
34
|
group.run(NoopObject.new)
|
24
35
|
example
|
25
36
|
end
|
@@ -29,8 +40,7 @@ module ExampleHelper
|
|
29
40
|
turnip_formatter: {
|
30
41
|
steps: [ { name: 'Step 1', extra_args: [], keyword: 'When' } ],
|
31
42
|
tags: []
|
32
|
-
}
|
33
|
-
file_path: '/path/to/hoge.feature'
|
43
|
+
}
|
34
44
|
}
|
35
45
|
end
|
36
46
|
end
|
data/turnip_formatter.gemspec
CHANGED
@@ -23,7 +23,7 @@ Gem::Specification.new do |spec|
|
|
23
23
|
spec.add_dependency 'haml'
|
24
24
|
spec.add_dependency 'sass'
|
25
25
|
spec.add_dependency 'bootstrap-sass'
|
26
|
-
spec.add_dependency 'rspec', '
|
26
|
+
spec.add_dependency 'rspec', ['>=2.14.0', '<4.0']
|
27
27
|
spec.add_development_dependency 'bundler', '~> 1.3'
|
28
28
|
spec.add_development_dependency 'rake'
|
29
29
|
spec.add_development_dependency 'rspec-html-matchers'
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: turnip_formatter
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Wataru MIYAGUNI
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-07-
|
11
|
+
date: 2014-07-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: turnip
|
@@ -84,16 +84,22 @@ dependencies:
|
|
84
84
|
name: rspec
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
|
-
- - "
|
87
|
+
- - ">="
|
88
88
|
- !ruby/object:Gem::Version
|
89
89
|
version: 2.14.0
|
90
|
+
- - "<"
|
91
|
+
- !ruby/object:Gem::Version
|
92
|
+
version: '4.0'
|
90
93
|
type: :runtime
|
91
94
|
prerelease: false
|
92
95
|
version_requirements: !ruby/object:Gem::Requirement
|
93
96
|
requirements:
|
94
|
-
- - "
|
97
|
+
- - ">="
|
95
98
|
- !ruby/object:Gem::Version
|
96
99
|
version: 2.14.0
|
100
|
+
- - "<"
|
101
|
+
- !ruby/object:Gem::Version
|
102
|
+
version: '4.0'
|
97
103
|
- !ruby/object:Gem::Dependency
|
98
104
|
name: bundler
|
99
105
|
requirement: !ruby/object:Gem::Requirement
|
@@ -198,8 +204,11 @@ files:
|
|
198
204
|
- example/spec/steps/spell_steps.rb
|
199
205
|
- example/spec/steps/steps.rb
|
200
206
|
- lib/rspec/core/formatters/turnip_formatter.rb
|
207
|
+
- lib/rspec/core/formatters/turnip_formatter/for_rspec2.rb
|
208
|
+
- lib/rspec/core/formatters/turnip_formatter/for_rspec3.rb
|
201
209
|
- lib/turnip_formatter.rb
|
202
210
|
- lib/turnip_formatter/ext/turnip/rspec.rb
|
211
|
+
- lib/turnip_formatter/helper.rb
|
203
212
|
- lib/turnip_formatter/printer.rb
|
204
213
|
- lib/turnip_formatter/printer/index.rb
|
205
214
|
- lib/turnip_formatter/printer/runtime_error.rb
|
@@ -231,6 +240,9 @@ files:
|
|
231
240
|
- lib/turnip_formatter/template/turnip_formatter.js
|
232
241
|
- lib/turnip_formatter/template/turnip_formatter.scss
|
233
242
|
- lib/turnip_formatter/version.rb
|
243
|
+
- spec/gemfiles/Gemfile-rspec-2.14.x
|
244
|
+
- spec/gemfiles/Gemfile-rspec-2.99.x
|
245
|
+
- spec/gemfiles/Gemfile-rspec-3.0.x
|
234
246
|
- spec/spec_helper.rb
|
235
247
|
- spec/support/example_helper.rb
|
236
248
|
- spec/support/passed.feature
|
@@ -275,6 +287,9 @@ signing_key:
|
|
275
287
|
specification_version: 4
|
276
288
|
summary: RSpec custom formatter for Turnip
|
277
289
|
test_files:
|
290
|
+
- spec/gemfiles/Gemfile-rspec-2.14.x
|
291
|
+
- spec/gemfiles/Gemfile-rspec-2.99.x
|
292
|
+
- spec/gemfiles/Gemfile-rspec-3.0.x
|
278
293
|
- spec/spec_helper.rb
|
279
294
|
- spec/support/example_helper.rb
|
280
295
|
- spec/support/passed.feature
|