turnip_formatter 0.6.0.pre.beta.2 → 0.6.0.pre.beta.3
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 +0 -1
- data/Rakefile +3 -2
- data/lib/rspec/core/formatters/turnip_formatter.rb +8 -9
- data/lib/turnip_formatter/ext/turnip/rspec.rb +6 -5
- data/lib/turnip_formatter/{template → renderer/html/assets}/turnip_formatter.css +1 -1
- data/lib/turnip_formatter/{template → renderer/html/assets}/turnip_formatter.js +0 -0
- data/lib/turnip_formatter/{template → renderer/html/assets}/turnip_formatter.scss +1 -1
- data/lib/turnip_formatter/renderer/html/base.rb +4 -4
- data/lib/turnip_formatter/renderer/html/index.rb +83 -0
- data/lib/turnip_formatter/renderer/html/runtime_error.rb +20 -0
- data/lib/turnip_formatter/renderer/html/scenario.rb +20 -0
- data/lib/turnip_formatter/renderer/html/statistics_feature.rb +45 -0
- data/lib/turnip_formatter/renderer/html/statistics_speed.rb +39 -0
- data/lib/turnip_formatter/renderer/html/statistics_tag.rb +53 -0
- data/lib/turnip_formatter/renderer/html/views/index.html.erb +94 -0
- data/lib/turnip_formatter/renderer/html/views/runtime_error.html.erb +20 -0
- data/lib/turnip_formatter/renderer/html/views/scenario.html.erb +23 -0
- data/lib/turnip_formatter/renderer/html/views/statistics_feature.html.erb +24 -0
- data/lib/turnip_formatter/renderer/html/views/statistics_speed.html.erb +24 -0
- data/lib/turnip_formatter/renderer/html/views/statistics_tag.html.erb +24 -0
- data/lib/turnip_formatter/renderer/html.rb +84 -0
- data/lib/turnip_formatter/resource/scenario/base.rb +80 -0
- data/lib/turnip_formatter/resource/scenario/failure.rb +50 -0
- data/lib/turnip_formatter/resource/scenario/pass.rb +10 -0
- data/lib/turnip_formatter/resource/scenario/pending.rb +42 -0
- data/lib/turnip_formatter/version.rb +1 -1
- data/lib/turnip_formatter.rb +8 -4
- data/test/helper.rb +64 -12
- data/test/turnip_formatter/renderer/html/test_index.rb +102 -0
- data/test/turnip_formatter/renderer/html/test_runtime_error.rb +40 -0
- data/test/turnip_formatter/renderer/html/test_statistics_feature.rb +102 -0
- data/test/turnip_formatter/renderer/html/test_statistics_speed.rb +77 -0
- data/test/turnip_formatter/renderer/html/test_statistics_tag.rb +112 -0
- data/test/turnip_formatter/renderer/html/test_step.rb +27 -0
- data/test/turnip_formatter/renderer/test_html.rb +75 -0
- data/test/turnip_formatter/resource/scenario/test_failure.rb +39 -0
- data/test/turnip_formatter/resource/scenario/test_pass.rb +65 -0
- data/test/turnip_formatter/resource/scenario/test_pending.rb +39 -0
- data/turnip_formatter.gemspec +1 -1
- metadata +45 -57
- data/lib/turnip_formatter/printer/index.rb +0 -26
- data/lib/turnip_formatter/printer/runtime_error.rb +0 -36
- data/lib/turnip_formatter/printer/scenario.rb +0 -22
- data/lib/turnip_formatter/printer/tab_feature_statistics.rb +0 -46
- data/lib/turnip_formatter/printer/tab_speed_statistics.rb +0 -35
- data/lib/turnip_formatter/printer/tab_tag_statistics.rb +0 -76
- data/lib/turnip_formatter/printer.rb +0 -29
- data/lib/turnip_formatter/scenario/base.rb +0 -99
- data/lib/turnip_formatter/scenario/failure.rb +0 -44
- data/lib/turnip_formatter/scenario/pass.rb +0 -8
- data/lib/turnip_formatter/scenario/pending.rb +0 -40
- data/lib/turnip_formatter/step.rb +0 -23
- data/lib/turnip_formatter/template/exception.slim +0 -8
- data/lib/turnip_formatter/template/index.slim +0 -86
- data/lib/turnip_formatter/template/runtime_exception.slim +0 -13
- data/lib/turnip_formatter/template/scenario.slim +0 -15
- data/lib/turnip_formatter/template/tab_feature_statistics.slim +0 -18
- data/lib/turnip_formatter/template/tab_speed_statistics.slim +0 -16
- data/lib/turnip_formatter/template/tab_tag_statistics.slim +0 -18
- data/spec/turnip_formatter/printer/index_spec.rb +0 -38
- data/spec/turnip_formatter/printer/scenario_spec.rb +0 -42
- data/spec/turnip_formatter/printer/tab_feature_statistics_spec.rb +0 -80
- data/spec/turnip_formatter/printer/tab_speed_statistics_spec.rb +0 -48
- data/spec/turnip_formatter/printer/tab_tag_statistics_spec.rb +0 -103
- data/spec/turnip_formatter/scenario/base_spec.rb +0 -67
- data/spec/turnip_formatter/scenario/failure_spec.rb +0 -55
- data/spec/turnip_formatter/scenario/pending_spec.rb +0 -51
- data/spec/turnip_formatter/template_spec.rb +0 -119
- data/test/sample.feature +0 -16
@@ -0,0 +1,50 @@
|
|
1
|
+
require 'turnip_formatter/resource/scenario/base'
|
2
|
+
|
3
|
+
module TurnipFormatter
|
4
|
+
module Resource
|
5
|
+
module Scenario
|
6
|
+
class Failure < Base
|
7
|
+
#
|
8
|
+
# Return steps
|
9
|
+
#
|
10
|
+
# example:
|
11
|
+
#
|
12
|
+
# When foo
|
13
|
+
# And bar
|
14
|
+
# And baz <= failed line
|
15
|
+
# Then piyo
|
16
|
+
#
|
17
|
+
# #<Step 'foo'>.status = :passed
|
18
|
+
# #<Step 'bar'>.status = :passed
|
19
|
+
# #<Step 'baz'>.status = :failed
|
20
|
+
# #<Step 'piyo'>.status = :unexecute
|
21
|
+
#
|
22
|
+
#
|
23
|
+
# @todo failed_at_before_hook, failed_at_after_hook GH-67
|
24
|
+
#
|
25
|
+
def steps
|
26
|
+
steps = super
|
27
|
+
|
28
|
+
arys = steps.group_by { |s| (s.line <=> failed_line_number).to_s }
|
29
|
+
arys['-1'].each { |s| s.status = :passed } unless arys['-1'].nil?
|
30
|
+
arys['0'].each { |s| s.status = :failed } unless arys['0'].nil?
|
31
|
+
arys['1'].each { |s| s.status = :unexecute } unless arys['1'].nil?
|
32
|
+
|
33
|
+
steps
|
34
|
+
end
|
35
|
+
|
36
|
+
private
|
37
|
+
|
38
|
+
def failed_line_number
|
39
|
+
@failed_line_number ||= (
|
40
|
+
filepath = File.basename(feature_file_path)
|
41
|
+
line = example.exception.backtrace.find do |backtrace|
|
42
|
+
backtrace.match(/#{filepath}:(\d+)/)
|
43
|
+
end
|
44
|
+
Regexp.last_match[1].to_i if line
|
45
|
+
)
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
require 'turnip_formatter/resource/scenario/base'
|
2
|
+
|
3
|
+
module TurnipFormatter
|
4
|
+
module Resource
|
5
|
+
module Scenario
|
6
|
+
class Pending < Base
|
7
|
+
#
|
8
|
+
# Return steps
|
9
|
+
#
|
10
|
+
# example:
|
11
|
+
#
|
12
|
+
# When foo
|
13
|
+
# And bar
|
14
|
+
# And baz <= pending line
|
15
|
+
# Then piyo
|
16
|
+
#
|
17
|
+
# #<Step 'foo'>.status = :passed
|
18
|
+
# #<Step 'bar'>.status = :passed
|
19
|
+
# #<Step 'baz'>.status = :pending
|
20
|
+
# #<Step 'piyo'>.status = :unexecute
|
21
|
+
#
|
22
|
+
def steps
|
23
|
+
steps = super
|
24
|
+
|
25
|
+
arys = steps.group_by { |s| (s.line <=> pending_line_number).to_s }
|
26
|
+
|
27
|
+
arys['-1'].each { |s| s.status = :passed } unless arys['-1'].nil?
|
28
|
+
arys['0'].each { |s| s.status = :pending } unless arys['0'].nil?
|
29
|
+
arys['1'].each { |s| s.status = :unexecute } unless arys['1'].nil?
|
30
|
+
|
31
|
+
steps
|
32
|
+
end
|
33
|
+
|
34
|
+
private
|
35
|
+
|
36
|
+
def pending_line_number
|
37
|
+
example.metadata[:line_number]
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
data/lib/turnip_formatter.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
require 'turnip_formatter/version'
|
2
2
|
require 'turnip'
|
3
|
+
require 'turnip_formatter/renderer/html'
|
3
4
|
|
4
5
|
module TurnipFormatter
|
5
6
|
class << self
|
@@ -21,7 +22,7 @@ module TurnipFormatter
|
|
21
22
|
stylesheets = [stylesheets] if stylesheets.is_a? String
|
22
23
|
|
23
24
|
stylesheets.each do |s|
|
24
|
-
TurnipFormatter::
|
25
|
+
TurnipFormatter::Renderer::Html.add_stylesheet(s)
|
25
26
|
end
|
26
27
|
end
|
27
28
|
|
@@ -29,7 +30,7 @@ module TurnipFormatter
|
|
29
30
|
scripts = [scripts] if scripts.is_a? String
|
30
31
|
|
31
32
|
scripts.each do |s|
|
32
|
-
TurnipFormatter::
|
33
|
+
TurnipFormatter::Renderer::Html.add_javascript(s)
|
33
34
|
end
|
34
35
|
end
|
35
36
|
|
@@ -43,11 +44,9 @@ module TurnipFormatter
|
|
43
44
|
end
|
44
45
|
|
45
46
|
require 'rspec/core/formatters/turnip_formatter'
|
46
|
-
require 'turnip_formatter/template'
|
47
47
|
require 'turnip_formatter/step_template/exception'
|
48
48
|
require 'turnip_formatter/step_template/source'
|
49
49
|
require 'turnip_formatter/ext/turnip/rspec'
|
50
|
-
require 'turnip_formatter/printer/index'
|
51
50
|
end
|
52
51
|
|
53
52
|
RSpecTurnipFormatter = RSpec::Core::Formatters::TurnipFormatter
|
@@ -55,3 +54,8 @@ RSpecTurnipFormatter = RSpec::Core::Formatters::TurnipFormatter
|
|
55
54
|
TurnipFormatter.configure do |config|
|
56
55
|
config.title = 'Turnip'
|
57
56
|
end
|
57
|
+
|
58
|
+
(File.dirname(__FILE__) + '/turnip_formatter/renderer/html/assets').tap do |dirname|
|
59
|
+
TurnipFormatter::Renderer::Html.add_stylesheet(dirname + '/turnip_formatter.css')
|
60
|
+
TurnipFormatter::Renderer::Html.add_javascript(dirname + '/turnip_formatter.js')
|
61
|
+
end
|
data/test/helper.rb
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
require 'test/unit'
|
2
2
|
require 'oga'
|
3
|
+
require 'tempfile'
|
4
|
+
require 'turnip_formatter/ext/turnip/rspec'
|
3
5
|
|
4
6
|
def html_parse(str)
|
5
7
|
Oga.parse_xml(str)
|
@@ -7,25 +9,75 @@ end
|
|
7
9
|
|
8
10
|
module TurnipFormatter
|
9
11
|
module TestHelper
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
12
|
+
class NoopObject
|
13
|
+
def method_missing(name, *args, &block)
|
14
|
+
# nooooooop
|
15
|
+
end
|
14
16
|
end
|
15
17
|
|
16
|
-
|
17
|
-
|
18
|
+
#
|
19
|
+
# @param text [String] feature text
|
20
|
+
# @return [Turnip::Node::Feature]
|
21
|
+
#
|
22
|
+
def feature_build(text)
|
23
|
+
Tempfile.create(['turnip_formatter_test', '.feature']) do |f|
|
24
|
+
f.write(text)
|
25
|
+
f.flush
|
26
|
+
Turnip::Builder.build(f.path)
|
27
|
+
end
|
18
28
|
end
|
19
29
|
|
20
|
-
|
21
|
-
|
30
|
+
#
|
31
|
+
# Override Turnip::Execute#step
|
32
|
+
#
|
33
|
+
module ExecuteWrapper
|
34
|
+
def step(s)
|
35
|
+
case s.text
|
36
|
+
when /^\[ERROR\]/
|
37
|
+
expect(true).to be false
|
38
|
+
when /^\[PENDING\]/
|
39
|
+
raise Turnip::Pending
|
40
|
+
else
|
41
|
+
expect(true).to be true
|
42
|
+
end
|
43
|
+
end
|
22
44
|
end
|
23
45
|
|
24
|
-
|
25
|
-
|
46
|
+
#
|
47
|
+
# Emulate Turnip::RSpec#run_feature
|
48
|
+
#
|
49
|
+
# @param feature [Turnip::Node::Feature]
|
50
|
+
# @param failed_at [Array<Interger>] Line numbers to assume that test fails
|
51
|
+
# @param feature_file_path [String]
|
52
|
+
#
|
53
|
+
# @return [Array<RSpec::Core::Example>] Array of example for scenarios.
|
54
|
+
#
|
55
|
+
# e.g.:
|
56
|
+
#
|
57
|
+
# Feature: ...
|
58
|
+
# Scenario: xxx
|
59
|
+
# When I
|
60
|
+
# Then do
|
61
|
+
# Scenario: yyy
|
62
|
+
# When He
|
63
|
+
# Then do
|
64
|
+
#
|
65
|
+
# # => [<RSpec::Core::Example "I->do">, <RSpec::Core::Example "He->do">]
|
66
|
+
#
|
67
|
+
# @see {Turnip::RSpec.run_feature}
|
68
|
+
#
|
69
|
+
def run_feature(feature, filename)
|
70
|
+
rspec_context = ::RSpec::Core::ExampleGroup.describe(feature.name)
|
71
|
+
rspec_context.include(Turnip::RSpec::Execute)
|
72
|
+
rspec_context.include(ExecuteWrapper)
|
73
|
+
|
74
|
+
Turnip::RSpec.__send__(:run_feature, rspec_context, feature, filename)
|
75
|
+
rspec_context.run(NoopObject.new)
|
76
|
+
Turnip::RSpec.update_metadata(feature, rspec_context)
|
26
77
|
|
27
|
-
|
28
|
-
|
78
|
+
rspec_context.children.map do |scenario|
|
79
|
+
scenario.examples.first
|
80
|
+
end
|
29
81
|
end
|
30
82
|
end
|
31
83
|
end
|
@@ -0,0 +1,102 @@
|
|
1
|
+
require 'helper'
|
2
|
+
require 'turnip_formatter/renderer/html/index'
|
3
|
+
require 'turnip_formatter/resource/scenario/pass'
|
4
|
+
require 'turnip_formatter/resource/scenario/failure'
|
5
|
+
require 'turnip_formatter/resource/scenario/pending'
|
6
|
+
|
7
|
+
module TurnipFormatter::Renderer::Html
|
8
|
+
class TestIndex < Test::Unit::TestCase
|
9
|
+
include TurnipFormatter::TestHelper
|
10
|
+
|
11
|
+
def setup
|
12
|
+
@renderer = Index.new(index_params)
|
13
|
+
end
|
14
|
+
|
15
|
+
def test_style_links
|
16
|
+
assert_equal(String, @renderer.style_links.class)
|
17
|
+
end
|
18
|
+
|
19
|
+
def test_style_codes
|
20
|
+
assert_equal(String, @renderer.style_codes.class)
|
21
|
+
end
|
22
|
+
|
23
|
+
def test_script_links
|
24
|
+
assert_equal(String, @renderer.script_links.class)
|
25
|
+
end
|
26
|
+
|
27
|
+
def test_script_codes
|
28
|
+
assert_equal(String, @renderer.script_codes.class)
|
29
|
+
end
|
30
|
+
|
31
|
+
def test_title
|
32
|
+
mock(TurnipFormatter::Renderer::Html).project_name { 'Perfect Turnip' }
|
33
|
+
assert_equal('Perfect Turnip report', @renderer.title)
|
34
|
+
end
|
35
|
+
|
36
|
+
def test_scenarios_html
|
37
|
+
assert_equal(String, @renderer.scenarios_html.class)
|
38
|
+
end
|
39
|
+
|
40
|
+
def test_statistics_feature_html
|
41
|
+
assert_equal(String, @renderer.statistics_feature_html.class)
|
42
|
+
end
|
43
|
+
|
44
|
+
def test_statistics_tag_html
|
45
|
+
assert_equal(String, @renderer.statistics_tag_html.class)
|
46
|
+
end
|
47
|
+
|
48
|
+
def test_statistics_speed_html
|
49
|
+
assert_equal(String, @renderer.statistics_speed_html.class)
|
50
|
+
end
|
51
|
+
|
52
|
+
def test_result_status
|
53
|
+
assert_equal('3 Scenario (1 failed 1 pending)', @renderer.result_status)
|
54
|
+
end
|
55
|
+
|
56
|
+
def test_total_time
|
57
|
+
assert_equal("20.0", @renderer.total_time)
|
58
|
+
end
|
59
|
+
|
60
|
+
def test_turnip_version
|
61
|
+
assert_equal(Turnip::VERSION, @renderer.turnip_version)
|
62
|
+
end
|
63
|
+
|
64
|
+
private
|
65
|
+
|
66
|
+
def index_params
|
67
|
+
{
|
68
|
+
scenarios: scenarios,
|
69
|
+
failed_count: 1,
|
70
|
+
pending_count: 1,
|
71
|
+
total_time: 20.0
|
72
|
+
}
|
73
|
+
end
|
74
|
+
|
75
|
+
def scenarios
|
76
|
+
@@scenarios ||= (
|
77
|
+
ss = []
|
78
|
+
|
79
|
+
feature = feature_build(feature_text)
|
80
|
+
examples = run_feature(feature, '/path/to/test1.feature')
|
81
|
+
ss << TurnipFormatter::Resource::Scenario::Pass.new(examples[0])
|
82
|
+
ss << TurnipFormatter::Resource::Scenario::Failure.new(examples[1])
|
83
|
+
ss << TurnipFormatter::Resource::Scenario::Pending.new(examples[2])
|
84
|
+
ss
|
85
|
+
)
|
86
|
+
end
|
87
|
+
|
88
|
+
def feature_text
|
89
|
+
<<-EOS
|
90
|
+
Feature: Feature
|
91
|
+
Scenario: Pass Scenario
|
92
|
+
When A
|
93
|
+
|
94
|
+
Scenario: Failure Scenario
|
95
|
+
When [ERROR] B
|
96
|
+
|
97
|
+
Scenario: Pending Scenario
|
98
|
+
When [PENDING] C
|
99
|
+
EOS
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
require 'helper'
|
2
|
+
require 'turnip_formatter/renderer/html/runtime_error'
|
3
|
+
require 'turnip_formatter/resource/scenario/pass'
|
4
|
+
|
5
|
+
module TurnipFormatter::Renderer::Html
|
6
|
+
class TestRuntimeError < Test::Unit::TestCase
|
7
|
+
include TurnipFormatter::TestHelper
|
8
|
+
|
9
|
+
def setup
|
10
|
+
@renderer = RuntimeError.new([exception, scenario])
|
11
|
+
end
|
12
|
+
|
13
|
+
def test_runtime_exception
|
14
|
+
assert_equal(exception, @renderer.runtime_exception)
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_scenario
|
18
|
+
assert_equal(scenario, @renderer.scenario)
|
19
|
+
end
|
20
|
+
|
21
|
+
private
|
22
|
+
|
23
|
+
def exception
|
24
|
+
@@exception ||= Exception.new('TFERROR')
|
25
|
+
end
|
26
|
+
|
27
|
+
def scenario
|
28
|
+
@@scenario ||= (
|
29
|
+
feature = feature_build(<<-EOS)
|
30
|
+
Feature: F
|
31
|
+
Scenario: S
|
32
|
+
When I attack it
|
33
|
+
EOS
|
34
|
+
|
35
|
+
scenario_example = run_feature(feature, '/path/to/test.feature').first
|
36
|
+
TurnipFormatter::Resource::Scenario::Pass.new(scenario_example)
|
37
|
+
)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,102 @@
|
|
1
|
+
require 'helper'
|
2
|
+
require 'turnip_formatter/renderer/html/statistics_feature'
|
3
|
+
require 'turnip_formatter/resource/scenario/pass'
|
4
|
+
require 'turnip_formatter/resource/scenario/failure'
|
5
|
+
require 'turnip_formatter/resource/scenario/pending'
|
6
|
+
|
7
|
+
module TurnipFormatter::Renderer::Html
|
8
|
+
class TestStatisticsFeature < Test::Unit::TestCase
|
9
|
+
include TurnipFormatter::TestHelper
|
10
|
+
|
11
|
+
|
12
|
+
def setup
|
13
|
+
@renderer = StatisticsFeature.new(scenarios)
|
14
|
+
end
|
15
|
+
|
16
|
+
def test_results
|
17
|
+
fa = @renderer.results[0]
|
18
|
+
assert_equal(['A', 2, 1, 1, 0, :failed], actual(fa))
|
19
|
+
|
20
|
+
fb = @renderer.results[1]
|
21
|
+
assert_equal(['B', 1, 0, 0, 1, :pending], actual(fb))
|
22
|
+
|
23
|
+
fc = @renderer.results[2]
|
24
|
+
assert_equal(['C', 2, 2, 0, 0, :passed], actual(fc))
|
25
|
+
end
|
26
|
+
|
27
|
+
private
|
28
|
+
|
29
|
+
def actual(f)
|
30
|
+
[f.name, f.scenario_count, f.passed_count, f.failed_count, f.pending_count, f.status]
|
31
|
+
end
|
32
|
+
|
33
|
+
#
|
34
|
+
# name | scenario | passed | failed | pending | result
|
35
|
+
# --------- | -------- | ------ | ------ | ------- | ------
|
36
|
+
# Feature A | 2 | 1 | 1 | 0 | failed
|
37
|
+
# Feature B | 1 | 0 | 0 | 1 | pending
|
38
|
+
# Feature C | 2 | 2 | 0 | 0 | passed
|
39
|
+
#
|
40
|
+
def scenarios
|
41
|
+
@@scenarios ||= (
|
42
|
+
ss = []
|
43
|
+
|
44
|
+
feature = feature_build(feature_a)
|
45
|
+
examples = run_feature(feature, '/path/to/test1.feature')
|
46
|
+
ss << TurnipFormatter::Resource::Scenario::Pass.new(examples[0])
|
47
|
+
ss << TurnipFormatter::Resource::Scenario::Failure.new(examples[1])
|
48
|
+
|
49
|
+
feature = feature_build(feature_b)
|
50
|
+
examples = run_feature(feature, '/path/to/test2.feature')
|
51
|
+
ss << TurnipFormatter::Resource::Scenario::Pending.new(examples[0])
|
52
|
+
|
53
|
+
feature = feature_build(feature_c)
|
54
|
+
examples = run_feature(feature, '/path/to/test3.feature')
|
55
|
+
ss << TurnipFormatter::Resource::Scenario::Pass.new(examples[0])
|
56
|
+
ss << TurnipFormatter::Resource::Scenario::Pass.new(examples[1])
|
57
|
+
|
58
|
+
ss
|
59
|
+
)
|
60
|
+
end
|
61
|
+
|
62
|
+
def feature_a
|
63
|
+
<<-EOS
|
64
|
+
Feature: A
|
65
|
+
Scenario: Pass Scenario
|
66
|
+
When A
|
67
|
+
Then B
|
68
|
+
And C
|
69
|
+
|
70
|
+
Scenario: Failure Scenario
|
71
|
+
When A
|
72
|
+
Then [ERROR] B
|
73
|
+
And C
|
74
|
+
EOS
|
75
|
+
end
|
76
|
+
|
77
|
+
def feature_b
|
78
|
+
<<-EOS
|
79
|
+
Feature: B
|
80
|
+
Scenario: Pending Scenario
|
81
|
+
When A
|
82
|
+
Then [PENDING] B
|
83
|
+
And C
|
84
|
+
EOS
|
85
|
+
end
|
86
|
+
|
87
|
+
def feature_c
|
88
|
+
<<-EOS
|
89
|
+
Feature: C
|
90
|
+
Scenario: Pass Scenario 1
|
91
|
+
When A
|
92
|
+
Then B
|
93
|
+
And C
|
94
|
+
|
95
|
+
Scenario: Pass Scenario 2
|
96
|
+
When A
|
97
|
+
Then B
|
98
|
+
And C
|
99
|
+
EOS
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|
@@ -0,0 +1,77 @@
|
|
1
|
+
require 'helper'
|
2
|
+
require 'test/unit/rr'
|
3
|
+
require 'turnip_formatter/renderer/html/statistics_speed'
|
4
|
+
require 'turnip_formatter/resource/scenario/pass'
|
5
|
+
require 'turnip_formatter/resource/scenario/failure'
|
6
|
+
require 'turnip_formatter/resource/scenario/pending'
|
7
|
+
|
8
|
+
module TurnipFormatter::Renderer::Html
|
9
|
+
class TestStatisticsSpeed < Test::Unit::TestCase
|
10
|
+
include TurnipFormatter::TestHelper
|
11
|
+
|
12
|
+
def setup
|
13
|
+
@renderer = StatisticsSpeed.new(scenarios)
|
14
|
+
end
|
15
|
+
|
16
|
+
def test_results
|
17
|
+
results = @renderer.results
|
18
|
+
|
19
|
+
assert_equal(3, results.size)
|
20
|
+
assert_equal(['B', 3.0], [results[0].name, results[0].run_time])
|
21
|
+
assert_equal(['E', 4.0], [results[1].name, results[1].run_time])
|
22
|
+
assert_equal(['A', 10.0], [results[2].name, results[2].run_time])
|
23
|
+
end
|
24
|
+
|
25
|
+
private
|
26
|
+
|
27
|
+
#
|
28
|
+
# name | duration | in ranking
|
29
|
+
# ---- | -------- | ----------
|
30
|
+
# C | 1.0 | false (failed)
|
31
|
+
# B | 3.0 | true
|
32
|
+
# E | 4.0 | true
|
33
|
+
# D | 5.0 | false (pending)
|
34
|
+
# A | 10.0 | true
|
35
|
+
#
|
36
|
+
def scenarios
|
37
|
+
@@scenarios ||= (
|
38
|
+
examples = run_feature(feature_build(feature), '/path/to/test.feature')
|
39
|
+
|
40
|
+
s1 = TurnipFormatter::Resource::Scenario::Pass.new(examples[0])
|
41
|
+
s2 = TurnipFormatter::Resource::Scenario::Pass.new(examples[1])
|
42
|
+
s3 = TurnipFormatter::Resource::Scenario::Failure.new(examples[2])
|
43
|
+
s4 = TurnipFormatter::Resource::Scenario::Pending.new(examples[3])
|
44
|
+
s5 = TurnipFormatter::Resource::Scenario::Pass.new(examples[4])
|
45
|
+
|
46
|
+
stub(s1).run_time { 10.0 }
|
47
|
+
stub(s2).run_time { 3.0 }
|
48
|
+
stub(s3).run_time { 1.0 }
|
49
|
+
stub(s4).run_time { 5.0 }
|
50
|
+
stub(s5).run_time { 4.0 }
|
51
|
+
|
52
|
+
[s1, s2, s3, s4, s5]
|
53
|
+
)
|
54
|
+
end
|
55
|
+
|
56
|
+
def feature
|
57
|
+
<<-EOS
|
58
|
+
Feature: A
|
59
|
+
|
60
|
+
Scenario: A
|
61
|
+
When A
|
62
|
+
|
63
|
+
Scenario: B
|
64
|
+
When B
|
65
|
+
|
66
|
+
Scenario: C
|
67
|
+
When [ERROR] C
|
68
|
+
|
69
|
+
Scenario: D
|
70
|
+
When [PENDING] D
|
71
|
+
|
72
|
+
Scenario: E
|
73
|
+
When E
|
74
|
+
EOS
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
@@ -0,0 +1,112 @@
|
|
1
|
+
require 'helper'
|
2
|
+
require 'turnip_formatter/renderer/html/statistics_tag'
|
3
|
+
require 'turnip_formatter/resource/scenario/pass'
|
4
|
+
require 'turnip_formatter/resource/scenario/failure'
|
5
|
+
require 'turnip_formatter/resource/scenario/pending'
|
6
|
+
|
7
|
+
module TurnipFormatter::Renderer::Html
|
8
|
+
class TestStatisticsTag < Test::Unit::TestCase
|
9
|
+
include TurnipFormatter::TestHelper
|
10
|
+
|
11
|
+
def setup
|
12
|
+
@renderer = StatisticsTag.new(scenarios)
|
13
|
+
end
|
14
|
+
|
15
|
+
def test_results
|
16
|
+
ta = @renderer.results[0]
|
17
|
+
assert_equal(['@bar', 2, 1, 1, 0, :failed], actual(ta))
|
18
|
+
|
19
|
+
tb = @renderer.results[1]
|
20
|
+
assert_equal(['@baz', 2, 1, 0, 1, :pending], actual(tb))
|
21
|
+
|
22
|
+
tc = @renderer.results[2]
|
23
|
+
assert_equal(['@foo', 2, 2, 0, 0, :passed], actual(tc))
|
24
|
+
|
25
|
+
td = @renderer.results[3]
|
26
|
+
assert_equal(['no_tag', 1, 1, 0, 0, :passed], actual(td))
|
27
|
+
end
|
28
|
+
|
29
|
+
private
|
30
|
+
|
31
|
+
def actual(f)
|
32
|
+
[f.name, f.scenario_count, f.passed_count, f.failed_count, f.pending_count, f.status]
|
33
|
+
end
|
34
|
+
|
35
|
+
#
|
36
|
+
# name | scenario | passed | failed | pending | result
|
37
|
+
# ------ | -------- | ------ | ------ | ------- | -------
|
38
|
+
# @bar | 2 | 1 | 1 | 0 | failed
|
39
|
+
# @baz | 2 | 1 | 0 | 1 | pending
|
40
|
+
# @foo | 2 | 2 | 0 | 0 | passed
|
41
|
+
# no_tag | 1 | 1 | 0 | 0 | passed
|
42
|
+
#
|
43
|
+
def scenarios
|
44
|
+
@@scenarios ||= (
|
45
|
+
ss = []
|
46
|
+
|
47
|
+
feature = feature_build(feature_a)
|
48
|
+
examples = run_feature(feature, '/path/to/test1.feature')
|
49
|
+
ss << TurnipFormatter::Resource::Scenario::Pass.new(examples[0])
|
50
|
+
ss << TurnipFormatter::Resource::Scenario::Failure.new(examples[1])
|
51
|
+
|
52
|
+
feature = feature_build(feature_b)
|
53
|
+
examples = run_feature(feature, '/path/to/test2.feature')
|
54
|
+
ss << TurnipFormatter::Resource::Scenario::Pending.new(examples[0])
|
55
|
+
|
56
|
+
feature = feature_build(feature_c)
|
57
|
+
examples = run_feature(feature, '/path/to/test3.feature')
|
58
|
+
ss << TurnipFormatter::Resource::Scenario::Pass.new(examples[0])
|
59
|
+
ss << TurnipFormatter::Resource::Scenario::Pass.new(examples[1])
|
60
|
+
|
61
|
+
ss
|
62
|
+
)
|
63
|
+
end
|
64
|
+
|
65
|
+
def feature_a
|
66
|
+
<<-EOS
|
67
|
+
Feature: A
|
68
|
+
|
69
|
+
Scenario: Pass Scenario
|
70
|
+
When A
|
71
|
+
Then B
|
72
|
+
And C
|
73
|
+
|
74
|
+
@bar
|
75
|
+
Scenario: Failure Scenario
|
76
|
+
When A
|
77
|
+
Then [ERROR] B
|
78
|
+
And C
|
79
|
+
EOS
|
80
|
+
end
|
81
|
+
|
82
|
+
def feature_b
|
83
|
+
<<-EOS
|
84
|
+
@baz
|
85
|
+
Feature: B
|
86
|
+
Scenario: Pending Scenario
|
87
|
+
When A
|
88
|
+
Then [PENDING] B
|
89
|
+
And C
|
90
|
+
EOS
|
91
|
+
end
|
92
|
+
|
93
|
+
def feature_c
|
94
|
+
<<-EOS
|
95
|
+
@foo
|
96
|
+
Feature: C
|
97
|
+
|
98
|
+
@bar
|
99
|
+
Scenario: Pass Scenario 1
|
100
|
+
When A
|
101
|
+
Then B
|
102
|
+
And C
|
103
|
+
|
104
|
+
@baz
|
105
|
+
Scenario: Pass Scenario 2
|
106
|
+
When A
|
107
|
+
Then B
|
108
|
+
And C
|
109
|
+
EOS
|
110
|
+
end
|
111
|
+
end
|
112
|
+
end
|