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.
Files changed (70) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +0 -1
  3. data/Rakefile +3 -2
  4. data/lib/rspec/core/formatters/turnip_formatter.rb +8 -9
  5. data/lib/turnip_formatter/ext/turnip/rspec.rb +6 -5
  6. data/lib/turnip_formatter/{template → renderer/html/assets}/turnip_formatter.css +1 -1
  7. data/lib/turnip_formatter/{template → renderer/html/assets}/turnip_formatter.js +0 -0
  8. data/lib/turnip_formatter/{template → renderer/html/assets}/turnip_formatter.scss +1 -1
  9. data/lib/turnip_formatter/renderer/html/base.rb +4 -4
  10. data/lib/turnip_formatter/renderer/html/index.rb +83 -0
  11. data/lib/turnip_formatter/renderer/html/runtime_error.rb +20 -0
  12. data/lib/turnip_formatter/renderer/html/scenario.rb +20 -0
  13. data/lib/turnip_formatter/renderer/html/statistics_feature.rb +45 -0
  14. data/lib/turnip_formatter/renderer/html/statistics_speed.rb +39 -0
  15. data/lib/turnip_formatter/renderer/html/statistics_tag.rb +53 -0
  16. data/lib/turnip_formatter/renderer/html/views/index.html.erb +94 -0
  17. data/lib/turnip_formatter/renderer/html/views/runtime_error.html.erb +20 -0
  18. data/lib/turnip_formatter/renderer/html/views/scenario.html.erb +23 -0
  19. data/lib/turnip_formatter/renderer/html/views/statistics_feature.html.erb +24 -0
  20. data/lib/turnip_formatter/renderer/html/views/statistics_speed.html.erb +24 -0
  21. data/lib/turnip_formatter/renderer/html/views/statistics_tag.html.erb +24 -0
  22. data/lib/turnip_formatter/renderer/html.rb +84 -0
  23. data/lib/turnip_formatter/resource/scenario/base.rb +80 -0
  24. data/lib/turnip_formatter/resource/scenario/failure.rb +50 -0
  25. data/lib/turnip_formatter/resource/scenario/pass.rb +10 -0
  26. data/lib/turnip_formatter/resource/scenario/pending.rb +42 -0
  27. data/lib/turnip_formatter/version.rb +1 -1
  28. data/lib/turnip_formatter.rb +8 -4
  29. data/test/helper.rb +64 -12
  30. data/test/turnip_formatter/renderer/html/test_index.rb +102 -0
  31. data/test/turnip_formatter/renderer/html/test_runtime_error.rb +40 -0
  32. data/test/turnip_formatter/renderer/html/test_statistics_feature.rb +102 -0
  33. data/test/turnip_formatter/renderer/html/test_statistics_speed.rb +77 -0
  34. data/test/turnip_formatter/renderer/html/test_statistics_tag.rb +112 -0
  35. data/test/turnip_formatter/renderer/html/test_step.rb +27 -0
  36. data/test/turnip_formatter/renderer/test_html.rb +75 -0
  37. data/test/turnip_formatter/resource/scenario/test_failure.rb +39 -0
  38. data/test/turnip_formatter/resource/scenario/test_pass.rb +65 -0
  39. data/test/turnip_formatter/resource/scenario/test_pending.rb +39 -0
  40. data/turnip_formatter.gemspec +1 -1
  41. metadata +45 -57
  42. data/lib/turnip_formatter/printer/index.rb +0 -26
  43. data/lib/turnip_formatter/printer/runtime_error.rb +0 -36
  44. data/lib/turnip_formatter/printer/scenario.rb +0 -22
  45. data/lib/turnip_formatter/printer/tab_feature_statistics.rb +0 -46
  46. data/lib/turnip_formatter/printer/tab_speed_statistics.rb +0 -35
  47. data/lib/turnip_formatter/printer/tab_tag_statistics.rb +0 -76
  48. data/lib/turnip_formatter/printer.rb +0 -29
  49. data/lib/turnip_formatter/scenario/base.rb +0 -99
  50. data/lib/turnip_formatter/scenario/failure.rb +0 -44
  51. data/lib/turnip_formatter/scenario/pass.rb +0 -8
  52. data/lib/turnip_formatter/scenario/pending.rb +0 -40
  53. data/lib/turnip_formatter/step.rb +0 -23
  54. data/lib/turnip_formatter/template/exception.slim +0 -8
  55. data/lib/turnip_formatter/template/index.slim +0 -86
  56. data/lib/turnip_formatter/template/runtime_exception.slim +0 -13
  57. data/lib/turnip_formatter/template/scenario.slim +0 -15
  58. data/lib/turnip_formatter/template/tab_feature_statistics.slim +0 -18
  59. data/lib/turnip_formatter/template/tab_speed_statistics.slim +0 -16
  60. data/lib/turnip_formatter/template/tab_tag_statistics.slim +0 -18
  61. data/spec/turnip_formatter/printer/index_spec.rb +0 -38
  62. data/spec/turnip_formatter/printer/scenario_spec.rb +0 -42
  63. data/spec/turnip_formatter/printer/tab_feature_statistics_spec.rb +0 -80
  64. data/spec/turnip_formatter/printer/tab_speed_statistics_spec.rb +0 -48
  65. data/spec/turnip_formatter/printer/tab_tag_statistics_spec.rb +0 -103
  66. data/spec/turnip_formatter/scenario/base_spec.rb +0 -67
  67. data/spec/turnip_formatter/scenario/failure_spec.rb +0 -55
  68. data/spec/turnip_formatter/scenario/pending_spec.rb +0 -51
  69. data/spec/turnip_formatter/template_spec.rb +0 -119
  70. data/test/sample.feature +0 -16
@@ -1,29 +0,0 @@
1
- require 'slim'
2
-
3
- module TurnipFormatter
4
- module Printer
5
- #
6
- # @example
7
- # render_template(:main, { name: 'user' })
8
- # # => Tilt.new('/path/to/main.erb') render { name: 'user' }
9
- #
10
- def render_template(name, params = {})
11
- render_template_list(name).render(self, params)
12
- end
13
-
14
- private
15
-
16
- def render_template_list(name)
17
- if templates[name].nil?
18
- path = File.dirname(__FILE__) + "/template/#{name}.slim"
19
- templates[name] = Slim::Template.new(path)
20
- end
21
-
22
- templates[name]
23
- end
24
-
25
- def templates
26
- @templates ||= {}
27
- end
28
- end
29
- end
@@ -1,99 +0,0 @@
1
- require 'turnip_formatter/resource/step'
2
-
3
- module TurnipFormatter
4
- module Scenario
5
- class Base
6
- attr_reader :errors, :example
7
-
8
- #
9
- # @param [RSpec::Core::Example] example
10
- #
11
- def initialize(example)
12
- @example = example
13
- @errors = []
14
-
15
- validation
16
- end
17
-
18
- def valid?
19
- errors.empty?
20
- end
21
-
22
- def steps
23
- @steps ||= raw_steps.map do |step|
24
- TurnipFormatter::Resource::Step.new(example, step)
25
- end
26
- end
27
-
28
- def id
29
- 'scenario_' + object_id.to_s
30
- end
31
-
32
- #
33
- # @return [String] scenario name
34
- #
35
- def name
36
- example.example_group.description
37
- end
38
-
39
- #
40
- # @return [String] scenario status ('passed', 'failed' or 'pending')
41
- #
42
- def status
43
- execution_result.status.to_s
44
- end
45
-
46
- #
47
- # @return [String] scenario run time
48
- #
49
- def run_time
50
- execution_result.run_time
51
- end
52
-
53
- def feature_info
54
- path = RSpec::Core::Metadata.relative_path(feature_file_path)
55
- "\"#{feature_name}\" in #{path}"
56
- end
57
-
58
- def feature_name
59
- parent_example_group[:description]
60
- end
61
-
62
- def tags
63
- example.metadata[:turnip_formatter][:tags]
64
- end
65
-
66
- protected
67
-
68
- def validation
69
- unless example.metadata.key?(:turnip_formatter)
70
- @errors << 'has no steps information'
71
- end
72
- end
73
-
74
- private
75
-
76
- def feature_file_path
77
- example.metadata[:file_path]
78
- end
79
-
80
- def raw_steps
81
- example.metadata[:turnip_formatter][:steps]
82
- end
83
-
84
- #
85
- # @return [Hash] parent example group
86
- #
87
- def parent_example_group
88
- example.example_group.metadata[:parent_example_group]
89
- end
90
-
91
- #
92
- # @return [OpenStruct or ::RSpec::Core::Example::ExecutionResult]
93
- #
94
- def execution_result
95
- @execution_result ||= example.execution_result
96
- end
97
- end
98
- end
99
- end
@@ -1,44 +0,0 @@
1
- require 'turnip_formatter/scenario/base'
2
-
3
- module TurnipFormatter
4
- module Scenario
5
- class Failure < Base
6
- def steps
7
- steps = super
8
- return steps unless failed_line_number
9
-
10
- steps.each do |step|
11
- case
12
- when step.line == failed_line_number
13
- step.status = :failed
14
- when step.line > failed_line_number
15
- step.status = :unexecuted
16
- end
17
- end
18
-
19
- steps
20
- end
21
-
22
- protected
23
-
24
- def validation
25
- @errors << 'has no failed step information' unless failed_line_number
26
- super
27
- end
28
-
29
- private
30
-
31
- def failed_line_number
32
- return @failed_line_number if @failed_line_number
33
- return unless example.exception
34
-
35
- filepath = File.basename(feature_file_path)
36
- line = example.exception.backtrace.find do |backtrace|
37
- backtrace.match(/#{filepath}:(\d+)/)
38
- end
39
-
40
- @failed_line_number = Regexp.last_match[1].to_i if line
41
- end
42
- end
43
- end
44
- end
@@ -1,8 +0,0 @@
1
- require 'turnip_formatter/scenario/base'
2
-
3
- module TurnipFormatter
4
- module Scenario
5
- class Pass < Base
6
- end
7
- end
8
- end
@@ -1,40 +0,0 @@
1
- require 'turnip_formatter/scenario/base'
2
-
3
- module TurnipFormatter
4
- module Scenario
5
- class Pending < Base
6
- def steps
7
- steps = super
8
- return steps unless pending_line_number
9
-
10
- steps.each do |step|
11
- case
12
- when step.line == pending_line_number
13
- step.status = :pending
14
- when step.line > pending_line_number
15
- step.status = :unexecuted
16
- end
17
- end
18
-
19
- steps
20
- end
21
-
22
- protected
23
-
24
- def validation
25
- @errors << 'has no pending step information' unless pending_line_number
26
- super
27
- end
28
-
29
- private
30
-
31
- def pending_line_number
32
- example.metadata[:line_number]
33
- end
34
-
35
- def pending_message
36
- example.execution_result.pending_message
37
- end
38
- end
39
- end
40
- end
@@ -1,23 +0,0 @@
1
- require 'forwardable'
2
-
3
- module TurnipFormatter
4
- class Step
5
- extend Forwardable
6
-
7
- attr_reader :name, :example, :argument
8
- attr_accessor :status
9
-
10
- def_delegators :@raw, :argument, :line, :keyword, :description
11
-
12
- #
13
- # @param [RSpec::Core::Example] example
14
- # @param [Turnip::Node::Step] raw
15
- #
16
- def initialize(example, raw)
17
- @example = example
18
- @raw = raw
19
- @name = raw.keyword.strip + ' ' + raw.description
20
- @status = :passed
21
- end
22
- end
23
- end
@@ -1,8 +0,0 @@
1
- dt= "#{title} Exception"
2
- dd
3
- pre= exception.to_s
4
- dt= "#{title} Exception Backtrace"
5
- dd
6
- ol
7
- - exception.backtrace.each do |line|
8
- li= line
@@ -1,86 +0,0 @@
1
- doctype 5
2
- html
3
- head
4
- meta charset=("UTF-8")
5
- title= TurnipFormatter::Template.project_name + ' report'
6
-
7
- == TurnipFormatter::Template.render_stylesheet_links
8
- style== TurnipFormatter::Template.render_stylesheet_codes
9
-
10
- script src="https://code.jquery.com/jquery-1.11.0.min.js"
11
- script src="https://netdna.bootstrapcdn.com/bootstrap/3.1.1/js/bootstrap.min.js"
12
- script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.tablesorter/2.17.0/jquery.tablesorter.min.js"
13
-
14
- == TurnipFormatter::Template.render_javascript_links
15
- script== TurnipFormatter::Template.render_javascript_codes
16
-
17
- body
18
- header#report
19
- .container
20
- .page-header
21
- h1 = "#{TurnipFormatter::Template.project_name} Report"
22
-
23
- section#status_display_switch
24
- label for="passed_check"
25
- input#passed_check type="checkbox"
26
- | Passed
27
- label for="failed_check"
28
- input#failed_check type="checkbox" checked="checked"
29
- | Failed
30
- label for="pending_check"
31
- input#pending_check type="checkbox"
32
- | Pending
33
-
34
- section.result
35
- p = "#{scenarios.size} Scenario (#{failed_count} failed #{pending_count} pending)."
36
- p = "Finished in #{total_time.to_s} sec"
37
-
38
- #main.container role="main"
39
- ul#statistics class="nav nav-tabs"
40
- li.active
41
- a data-toggle="tab" href="#steps-statistics"
42
- | Steps
43
- li
44
- a data-toggle="tab" href="#speed-statistics"
45
- | Speed Statistics
46
- li
47
- a data-toggle="tab" href="#feature-statistics"
48
- | Feature Statistics
49
- li
50
- a data-toggle="tab" href="#tag-statistics"
51
- | Tag Statistics
52
-
53
- .tab-content
54
- #steps-statistics class="tab-pane active"
55
- .checkbox
56
- label
57
- input#scenario_display_check type="checkbox" checked="checked"
58
- | Folding
59
- #scenarios.panel-group
60
- - scenarios.each do |s|
61
- == ::TurnipFormatter::Printer::Scenario.print_out(s)
62
-
63
- #feature-statistics.tab-pane
64
- h4 The results for the feature:
65
- == TurnipFormatter::Printer::TabFeatureStatistics.print_out(scenarios)
66
-
67
- #tag-statistics.tab-pane
68
- h4 The results for the tab:
69
- == TurnipFormatter::Printer::TabTagStatistics.print_out(scenarios)
70
-
71
- #speed-statistics.tab-pane
72
- h4 Ranking of running time of each <strong>successfully</strong> scenario:
73
- == TurnipFormatter::Printer::TabSpeedStatistics.print_out(scenarios)
74
-
75
- footer
76
- p
77
- | Generated by &nbsp;
78
- a href="https://rubygems.org/gems/turnip_formatter"
79
- = "turnip_formatter #{TurnipFormatter::VERSION}"
80
- p
81
- | Powered by
82
- a href="http://jquery.com/"
83
- | &nbsp;jQuery 1.11.0
84
- | &nbsp; and &nbsp;
85
- a href="http://mottie.github.io/tablesorter/"
86
- | tablesorter 2.17.0
@@ -1,13 +0,0 @@
1
- section.exception
2
- h1 TurnipFormatter RuntimeError
3
- dl
4
- == runtime_exception
5
-
6
- dt Example Full Description
7
- dd= example.metadata[:full_description]
8
-
9
- == example_exception
10
-
11
- - if example.pending
12
- dt Example Pending description
13
- dd= example.metadata[:description]
@@ -1,15 +0,0 @@
1
- section class="scenario #{scenario.status}" id=scenario.id
2
- div.scenario-title
3
- span.permalink
4
- a href="##{scenario.id}"
5
- | &para;
6
- span data-toggle="collapse" data-target="##{scenario.id}_body"
7
- = "Scenario: #{scenario.name} Feature #{scenario.feature_info} at #{scenario.run_time} sec"
8
- div class="panel-collapse collapse" id="#{scenario.id}_body"
9
- div.panel-body
10
- ul.tags
11
- - scenario.tags.each do |tag|
12
- li = "@#{tag}"
13
- div.steps
14
- - scenario.steps.each do |step|
15
- == TurnipFormatter::Renderer::Html::Step.new(step).render
@@ -1,18 +0,0 @@
1
- table
2
- thead
3
- tr
4
- th Feature
5
- th Scenarios
6
- th passed
7
- th failed
8
- th pending
9
- th status
10
- tbody
11
- - analysis_results.each do |info|
12
- tr
13
- td= info.name
14
- td= info.scenario_count
15
- td= info.passed_count
16
- td= info.failed_count
17
- td= info.pending_count
18
- td class=info.status = info.status
@@ -1,16 +0,0 @@
1
- table
2
- thead
3
- tr
4
- th Feature
5
- th Scenario
6
- th Duration
7
- tbody
8
- - analysis_results.each do |info|
9
- tr
10
- td
11
- span= info.feature_name
12
- td
13
- a href="##{info.id}" = info.name
14
- td
15
- span= "#{info.run_time} sec"
16
-
@@ -1,18 +0,0 @@
1
- table
2
- thead
3
- tr
4
- th Tag
5
- th Scenarios
6
- th passed
7
- th failed
8
- th pending
9
- th status
10
- tbody
11
- - analysis_results.each do |info|
12
- tr
13
- td= info.name
14
- td= info.scenario_count
15
- td= info.passed_count
16
- td= info.failed_count
17
- td= info.pending_count
18
- td class=info.status = info.status
@@ -1,38 +0,0 @@
1
- require 'spec_helper'
2
- require 'turnip_formatter/printer/index'
3
-
4
- module TurnipFormatter::Printer
5
- describe Index do
6
-
7
- let(:formatter) do
8
- {
9
- scenarios: [],
10
- scenario_files: [],
11
- failed_count: 0,
12
- pending_count: 0,
13
- duration: 0
14
- }
15
- end
16
-
17
- subject { Index.print_out(formatter) }
18
-
19
- describe '.print_out' do
20
- it { should match %r{<h1>Turnip Report</h1>} }
21
- end
22
-
23
- context 'project_name is changed' do
24
- before do
25
- @original_project_name = TurnipFormatter.configuration.title
26
- TurnipFormatter.configuration.title = 'My Project'
27
- end
28
-
29
- describe '.print_out' do
30
- it { should match %r{<h1>My Project Report</h1>} }
31
- end
32
-
33
- after do
34
- TurnipFormatter.configuration.title = @original_project_name
35
- end
36
- end
37
- end
38
- end
@@ -1,42 +0,0 @@
1
- require 'spec_helper'
2
- require 'turnip_formatter/printer/scenario'
3
-
4
- describe TurnipFormatter::Printer::Scenario do
5
- let(:example) do
6
- passed_example
7
- end
8
-
9
- let(:scenario) do
10
- TurnipFormatter::Scenario::Pass.new(example)
11
- end
12
-
13
- describe '.print_out' do
14
- context 'with turnip example' do
15
- subject { described_class.print_out(scenario) }
16
-
17
- it { should match %r{<a .*href="##{scenario.id}"} }
18
- it { should match %r{<div class="scenario-title">.*Scenario: Scenario} }
19
- it { should match %{<ul class="tags">} }
20
- it { should match %{<div class="steps} }
21
- end
22
-
23
- context 'with no turnip example' do
24
- let(:example) do
25
- passed_example.tap { |e| e.metadata.delete(:turnip_formatter) }
26
- end
27
-
28
- subject { described_class.print_out(scenario) }
29
-
30
- it { should be nil }
31
- end
32
-
33
- context 'runtime error' do
34
- before do
35
- allow(scenario).to receive(:valid?) { raise StandardError }
36
- expect(TurnipFormatter::Printer::RuntimeError).to receive(:print_out)
37
- end
38
-
39
- it { described_class.print_out(scenario) }
40
- end
41
- end
42
- end
@@ -1,80 +0,0 @@
1
- require 'spec_helper'
2
- require 'turnip_formatter/printer/tab_feature_statistics'
3
-
4
- module TurnipFormatter::Printer
5
- describe TabFeatureStatistics do
6
- let :base_scenario do
7
- TurnipFormatter::Scenario::Pass.new(passed_example)
8
- end
9
-
10
- let :statistics do
11
- TurnipFormatter::Printer::TabFeatureStatistics
12
- end
13
-
14
- context 'feature only passed scenario' do
15
- let :scenarios do
16
- # Feature: Hago (passed:2 failed:0, pending:0)
17
- ['passed', 'passed'].map do |status|
18
- scenario = base_scenario.dup
19
- allow(scenario).to receive(:status).and_return(status)
20
- scenario
21
- end
22
- end
23
-
24
- describe '.feature_analysis' do
25
- it 'should get passed feature information' do
26
- info = statistics.send(:feature_analysis, 'Hoge', scenarios)
27
- expect(info.name).to eq 'Hoge'
28
- expect(info.passed_count).to eq 2
29
- expect(info.failed_count).to be_zero
30
- expect(info.pending_count).to be_zero
31
- expect(info.status).to eq 'passed'
32
- end
33
- end
34
- end
35
-
36
- context 'feature with failed scenario' do
37
- let :scenarios do
38
- # Feature: Hoge (passed:1 failed:2, pending:0)
39
- ['passed', 'failed', 'failed'].map do |status|
40
- scenario = base_scenario.dup
41
- allow(scenario).to receive(:status).and_return(status)
42
- scenario
43
- end
44
- end
45
-
46
- describe '.feature_analysis' do
47
- it 'should get failed feature information' do
48
- info = statistics.send(:feature_analysis, 'Fuga', scenarios)
49
- expect(info.name).to eq 'Fuga'
50
- expect(info.passed_count).to eq 1
51
- expect(info.failed_count).to eq 2
52
- expect(info.pending_count).to be_zero
53
- expect(info.status).to eq 'failed'
54
- end
55
- end
56
- end
57
-
58
- context 'feature with pending scenario' do
59
- let :scenarios do
60
- # Feature: Fuga (passed:1 failed:0, pending:1)
61
- ['passed', 'pending'].map do |status|
62
- scenario = base_scenario.dup
63
- allow(scenario).to receive(:status).and_return(status)
64
- scenario
65
- end
66
- end
67
-
68
- describe '.feature_analysis' do
69
- it 'should get pending feature information' do
70
- info = statistics.send(:feature_analysis, 'Hago', scenarios)
71
- expect(info.name).to eq 'Hago'
72
- expect(info.passed_count).to eq 1
73
- expect(info.failed_count).to be_zero
74
- expect(info.pending_count).to eq 1
75
- expect(info.status).to eq 'pending'
76
- end
77
- end
78
- end
79
- end
80
- end
@@ -1,48 +0,0 @@
1
- require 'spec_helper'
2
- require 'turnip_formatter/printer/tab_speed_statistics'
3
-
4
- module TurnipFormatter::Printer
5
- describe TabSpeedStatistics do
6
- let :statistics do
7
- TurnipFormatter::Printer::TabSpeedStatistics
8
- end
9
-
10
- let :passed_scenarios do
11
- ([passed_example] * 3).map do |ex|
12
- TurnipFormatter::Scenario::Pass.new(ex)
13
- end.each { |s| allow(s).to receive(:run_time).and_return(rand) }
14
- end
15
-
16
- describe '.print_out' do
17
- it 'should get string as HTML table' do
18
- html = statistics.print_out(passed_scenarios)
19
-
20
- passed_scenarios.sort { |a,b| a.run_time <=> b.run_time }.each.with_index(1) do |scenario, index|
21
- tag_feature_name = "<span>#{scenario.feature_name}</span>"
22
- tag_scenario_name = "<a href=\"\##{scenario.id}\">#{scenario.name}</a>"
23
- tag_run_time = "<span>#{scenario.run_time} sec</span>"
24
-
25
- expect_match = [
26
- '<tr>',
27
- "<td>#{tag_feature_name}</td>",
28
- "<td>#{tag_scenario_name}</td>",
29
- "<td>#{tag_run_time}</td>",
30
- '</tr>'
31
- ].join
32
-
33
- expect(html).to match %r(#{expect_match})
34
- end
35
- end
36
- end
37
-
38
- describe '.speed_analysis' do
39
- it 'should get array of scenario order by run_time' do
40
- scenarios = statistics.send(:speed_analysis, passed_scenarios)
41
- expect(scenarios.size).to eq 3
42
-
43
- run_time_list = scenarios.map(&:run_time)
44
- expect(run_time_list.sort).to eq run_time_list
45
- end
46
- end
47
- end
48
- end