rspec-axlsx-formatter 0.0.1 → 0.0.2

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 5cf35884f591642312cbe72c2f463b606ddb6c9a
4
- data.tar.gz: 8b56708adbc43c36955362b0e2bc78562fad9ca8
3
+ metadata.gz: 0bba59518d6e5ee9421165fd3a67b2877ad5b903
4
+ data.tar.gz: 9e62dbf5b2c980a695cd765445d045e7b8be3cf5
5
5
  SHA512:
6
- metadata.gz: 4ab87387b1aa65a642d09218693f113710f51fb13523b39b3f25dc742a014fe182326fc0dbf115af4631b3b96c4d54ef62ea36f28400e11e1a2036fa9bb29dad
7
- data.tar.gz: fbb3d0d89d299dd03862a9f7182e07a0833046da61412ccbe5c172b7234cd5812a34dc4041ee0faa0367eb5948467ba02513eb6d6cf7db228489116125478fe8
6
+ metadata.gz: 43b18f85b51db674dcc98ce4576933131a84752d5802c43a252e36bf53457f4a21795e027badfe7cabeeb7069fe04ef2815e8f1a0e5f0b444ba84a59759172bc
7
+ data.tar.gz: 92c4a968577e60195dfece2f81b10be656de96639506b841884129338d05fb11bc0859e5dec7c4471a30347e8bd2b2fc8a70dfa1310c420ecf314ab3863c54c5
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Rspec::Axlsx::Formatter
2
2
 
3
- TODO: Write a gem description
3
+ "rspec-axlsx-formatter" is a [RSpec](http://github.com/rspec) custom formatter that uses [Axlsx](https://github.com/randym/axlsx) and generate xlsx file as spec result.
4
4
 
5
5
  ## Installation
6
6
 
@@ -18,7 +18,23 @@ Or install it yourself as:
18
18
 
19
19
  ## Usage
20
20
 
21
- TODO: Write usage instructions here
21
+ Require the follow in your Rakefile.
22
+
23
+ ```
24
+ require 'rspec/axlsx/rake/rspec'
25
+ ```
26
+
27
+ And, add `axlsx:setup:rspec` at rake command.
28
+
29
+
30
+ Example)
31
+
32
+ ```
33
+ rake axlsx:setup:rspec spec
34
+ ```
35
+
36
+ This usage is similar to ci_report_rspec.
37
+ (In actuality, I use ci_report_rspec as reference.)
22
38
 
23
39
  ## Contributing
24
40
 
@@ -27,3 +43,7 @@ TODO: Write usage instructions here
27
43
  3. Commit your changes (`git commit -am 'Add some feature'`)
28
44
  4. Push to the branch (`git push origin my-new-feature`)
29
45
  5. Create a new Pull Request
46
+
47
+ ## Liscense
48
+
49
+ MIT
@@ -1,18 +1,16 @@
1
1
  require "rspec/axlsx/formatter/version"
2
2
  require "rspec/core"
3
- #require "rspec/core/formatters/base_formatter"
4
3
 
5
4
  module Rspec
6
- #class Formatter < ::RSpec::Core::Formatters::BaseFormatter
7
- rspec_version = Gem::Version.new(::RSpec::Core::Version::STRING)
8
- rspec_3 = Gem::Version.new('3.0.0')
9
- RSPEC_3_AVAILABLE = rspec_version >= rspec_3
5
+ rspec_version = Gem::Version.new(::RSpec::Core::Version::STRING)
6
+ rspec_3 = Gem::Version.new('3.0.0')
7
+ RSPEC_3_AVAILABLE = rspec_version >= rspec_3
10
8
 
11
- if RSPEC_3_AVAILABLE
12
- require "rspec/axlsx/formatter_rspec3"
13
- AxlsxFormatter = Rspec::Axlsx::FormatterRSpec3
14
- else
15
- require "rspec/axlsx/formatter_rspec2"
16
- AxlsxFormatter = Rspec::Axlsx::FormatterRSpec2
17
- end
9
+ if RSPEC_3_AVAILABLE
10
+ require "rspec/axlsx/formatter_rspec3"
11
+ AxlsxFormatter = Rspec::Axlsx::FormatterRSpec3
12
+ else
13
+ require "rspec/axlsx/formatter_rspec2"
14
+ AxlsxFormatter = Rspec::Axlsx::FormatterRSpec2
15
+ end
18
16
  end
@@ -1,9 +1,176 @@
1
1
  require "axlsx"
2
+ require "axlsx/package"
2
3
 
3
4
  module Rspec
4
5
  module Axlsx
5
6
  module Formatter
6
7
  class Core
8
+
9
+ ALL_IN_ONE_SHEET = 0
10
+
11
+ def initialize()
12
+ @p = ::Axlsx::Package.new
13
+ @workbook = @p.workbook
14
+ @report_dir = ENV["XLSX_REPORT"] || "spec/xlsx"
15
+
16
+ @example_num = 0
17
+
18
+ #@describe_column = ["Expected"]
19
+ @describe_column = []
20
+
21
+ @sheet_mode = ALL_IN_ONE_SHEET
22
+ end
23
+
24
+ def to_sheet(example_groups)
25
+ @example_groups = example_groups
26
+ convert_to_sheet do |worksheet|
27
+ end
28
+ @p.use_shared_strings = true
29
+ FileUtils.mkdir_p(@report_dir)
30
+ @p.serialize("#{@report_dir}/report.xlsx")
31
+ end
32
+
33
+ private
34
+
35
+ def success?(example)
36
+ result = example.execution_result
37
+ return result[:status] == "passed" if result.kind_of?(Hash) # RSpec2
38
+ return result.status == :passed
39
+ end
40
+
41
+ def has_status?(example)
42
+ example.respond_to?(:execution_result)
43
+ end
44
+
45
+ def sheet_style(worksheet)
46
+ worksheet.column_widths(*[nil].concat(max_example_depth.times.map{5}))
47
+ #worksheet.column_widths(nil, 5, 5)
48
+ end
49
+
50
+ def sheet_header(worksheet)
51
+ worksheet.add_row do |row|
52
+ row.add_cell('No' , style: header_style)
53
+ row.add_cell('Test Case' , style: header_style)
54
+ max_example_depth.times{row.add_cell('', style: header_style)}
55
+ @describe_column.each do |c|
56
+ row.add_cell(c, style: header_style)
57
+ end
58
+ row.add_cell('Result' , style: header_style)
59
+ end
60
+ end
61
+
62
+ def convert_to_sheet
63
+ if @sheet_mode == ALL_IN_ONE_SHEET
64
+ @workbook.add_worksheet do |worksheet|
65
+ sheet_header(worksheet)
66
+ @example_groups.each do |example_group|
67
+ add_sheet_row(worksheet, example_group)
68
+ end
69
+ sheet_style(worksheet)
70
+ end
71
+ else
72
+ transepose =
73
+ @example_groups.inject({}) do |h, example_group|
74
+ h[example_group.example.file_path] ||= []
75
+ h[example_group.example.file_path].push(example_group)
76
+ h
77
+ end
78
+ transepose.each do |k, v|
79
+ @workbook.add_worksheet do |worksheet|
80
+ yield(worksheet)
81
+ end
82
+ end
83
+ end
84
+ end
85
+
86
+ def add_sheet_row(worksheet, example_group)
87
+ worksheet.add_row do |row|
88
+ if has_status?(example_group)
89
+ @example_num += 1
90
+ row.add_cell(@example_num, style: idx_column_style)
91
+ example_depth(example_group).times do
92
+ row.add_cell("", style: grey_style)
93
+ end
94
+ row.add_cell(example_group.description)
95
+ offset = max_example_depth - example_depth(example_group) + @describe_column.length
96
+ offset.times do
97
+ row.add_cell("")
98
+ end
99
+ if success?(example_group)
100
+ row.add_cell("T", style: success_style)
101
+ else
102
+ row.add_cell("F", style: failed_style)
103
+ end
104
+ else
105
+ row.add_cell("", style: pink_style)
106
+ example_depth(example_group).times do
107
+ row.add_cell("", style: grey_style)
108
+ end
109
+ row.add_cell(example_group.description)
110
+ end
111
+ end
112
+ end
113
+
114
+ def max_example_depth
115
+ @max_example_depth ||=
116
+ @example_groups.map{|e| example_depth(e)}.max
117
+ end
118
+
119
+ def example_depth(example)
120
+ if has_status?(example)
121
+ example.example_group.parent_groups.select{|p| p != example}.length
122
+ else
123
+ example.parent_groups.select{|p| p != example}.length
124
+ end
125
+ end
126
+
127
+ def style_hash
128
+ {
129
+ header_style: {
130
+ bg_color: 'F4FA58',
131
+ b: true,
132
+ border: { style: :thin, color: '666666' },
133
+ },
134
+ idx_column_style: {
135
+ bg_color: 'FFDD99',
136
+ b: true,
137
+ border: { style: :thin, color: '666666', edges: [:right] },
138
+ },
139
+ test_case_style: {
140
+ },
141
+ success_style: {
142
+ bg_color: '58FA58',
143
+ },
144
+ failed_style: {
145
+ bg_color: 'FE2E2E',
146
+ },
147
+ grey_space_style: {
148
+ bg_color: 'CCCCCC',
149
+ },
150
+ pink_space_style: {
151
+ bg_color: '6CEEC',
152
+ },
153
+ }
154
+ end
155
+
156
+ def header_style
157
+ @header_style ||= @workbook.styles.add_style(style_hash[:header_style])
158
+ end
159
+ def pink_style
160
+ @pink_style ||= @workbook.styles.add_style(style_hash[:idx_column_style].merge(style_hash[:pink_space_style]))
161
+ end
162
+ def grey_style
163
+ @grey_style ||= @workbook.styles.add_style(style_hash[:grey_space_style])
164
+ end
165
+ def success_style
166
+ @success_style ||= @workbook.styles.add_style(style_hash[:success_style])
167
+ end
168
+ def failed_style
169
+ @failed_style ||= @workbook.styles.add_style(style_hash[:failed_style])
170
+ end
171
+ def idx_column_style
172
+ @idx_column_style ||= @workbook.styles.add_style(style_hash[:idx_column_style])
173
+ end
7
174
  end
8
175
  end
9
176
  end
@@ -1,7 +1,7 @@
1
1
  module Rspec
2
2
  module Axlsx
3
3
  module Formatter
4
- VERSION = "0.0.1"
4
+ VERSION = "0.0.2"
5
5
  end
6
6
  end
7
7
  end
@@ -0,0 +1,34 @@
1
+ require "rspec/core/formatters/base_formatter"
2
+ require "rspec/axlsx/formatter/core"
3
+
4
+ module Rspec
5
+ module Axlsx
6
+ #class Formatter < ::RSpec::Core::Formatters::BaseFormatter
7
+ class FormatterRSpec2 < ::RSpec::Core::Formatters::BaseFormatter
8
+
9
+ def initialize(*)
10
+ super
11
+ @example_groups = []
12
+ @core = Rspec::Axlsx::Formatter::Core.new
13
+ end
14
+
15
+ def example_group_started(example_group)
16
+ @example_groups.push(example_group)
17
+ end
18
+
19
+ def example_passed(example)
20
+ @example_groups.push(example)
21
+ end
22
+
23
+ def example_failed(example)
24
+ @example_groups.push(example)
25
+ end
26
+
27
+ def dump_summary(*args)
28
+ @core.to_sheet(@example_groups)
29
+ end
30
+
31
+ end
32
+ end
33
+ end
34
+
@@ -1,46 +1,24 @@
1
1
  require "rspec/core"
2
- require "axlsx"
3
- require "axlsx/package"
4
2
  require "rspec/core/formatters/base_formatter"
5
3
  require "rspec/axlsx/formatter/core"
6
4
 
7
- require "pp"
8
-
9
5
  module Rspec
10
6
  module Axlsx
11
7
  #class Formatter < ::RSpec::Core::Formatters::BaseFormatter
12
8
  class FormatterRSpec3 < ::RSpec::Core::Formatters::BaseFormatter
13
9
  ::RSpec::Core::Formatters.register self,
14
- :start, :example_group_started, :stop,
10
+ :example_group_started, :stop,
15
11
  :example_passed, :example_failed
16
12
 
17
- ALL_IN_ONE_SHEET = 0
18
-
19
13
  def initialize(*)
20
- super ::Axlsx::Package.new
21
-
22
- @workbook = output.workbook
23
14
  @example_groups = []
24
- @current_time = Time.now
25
-
26
- @example_num = 0
27
-
28
- #@describe_column = ["Expected"]
29
- @describe_column = []
30
-
31
- @sheet_mode = ALL_IN_ONE_SHEET
32
- end
33
-
34
- def start(notification)
15
+ @core = Rspec::Axlsx::Formatter::Core.new
35
16
  end
36
17
 
37
18
  def example_group_started(notification)
38
19
  @example_groups.push(notification.group)
39
20
  end
40
21
 
41
- def example_group_finished(notification)
42
- end
43
-
44
22
  def example_passed(notification)
45
23
  @example_groups.push(notification.example)
46
24
  end
@@ -50,155 +28,9 @@ module Rspec
50
28
  end
51
29
 
52
30
  def stop(notification)
53
- to_sheet
54
- output.use_shared_strings = true
55
- output.serialize("report.xlsx")
56
- end
57
-
58
- private
59
-
60
- def success?(example)
61
- example.execution_result.status == :passed
62
- end
63
-
64
- def has_status?(example)
65
- example.respond_to?(:execution_result)
66
- end
67
-
68
- def to_sheet
69
- convert_to_sheet do |worksheet|
70
- end
71
- end
72
-
73
- def sheet_style(worksheet)
74
- worksheet.column_widths(*[nil].concat(max_example_depth.times.map{5}))
75
- #worksheet.column_widths(nil, 5, 5)
31
+ @core.to_sheet(@example_groups)
76
32
  end
77
33
 
78
- def sheet_header(worksheet)
79
- worksheet.add_row do |row|
80
- row.add_cell('No' , style: header_style)
81
- row.add_cell('Test Case' , style: header_style)
82
- max_example_depth.times{row.add_cell('', style: header_style)}
83
- @describe_column.each do |c|
84
- row.add_cell(c, style: header_style)
85
- end
86
- row.add_cell('Result' , style: header_style)
87
- end
88
- end
89
-
90
- def convert_to_sheet
91
- if @sheet_mode == ALL_IN_ONE_SHEET
92
- @workbook.add_worksheet do |worksheet|
93
- sheet_header(worksheet)
94
- @example_groups.each do |example_group|
95
- add_sheet_row(worksheet, example_group)
96
- end
97
- sheet_style(worksheet)
98
- end
99
- else
100
- transepose =
101
- @example_groups.inject({}) do |h, example_group|
102
- h[example_group.example.file_path] ||= []
103
- h[example_group.example.file_path].push(example_group)
104
- h
105
- end
106
- transepose.each do |k, v|
107
- @workbook.add_worksheet do |worksheet|
108
- yield(worksheet)
109
- end
110
- end
111
- end
112
- end
113
-
114
- def add_sheet_row(worksheet, example_group)
115
- worksheet.add_row do |row|
116
- if has_status?(example_group)
117
- @example_num += 1
118
- row.add_cell(@example_num, style: idx_column_style)
119
- example_depth(example_group).times do
120
- row.add_cell("", style: grey_style)
121
- end
122
- row.add_cell(example_group.description)
123
- offset = max_example_depth - example_depth(example_group) + @describe_column.length
124
- offset.times do
125
- row.add_cell("")
126
- end
127
- if success?(example_group)
128
- row.add_cell("T", style: success_style)
129
- else
130
- row.add_cell("F", style: failed_style)
131
- end
132
- else
133
- row.add_cell("", style: pink_style)
134
- example_depth(example_group).times do
135
- row.add_cell("", style: grey_style)
136
- end
137
- row.add_cell(example_group.description)
138
- end
139
- end
140
- end
141
-
142
- def max_example_depth
143
- @max_example_depth ||=
144
- @example_groups.map{|e| example_depth(e)}.max
145
- end
146
-
147
- def example_depth(example)
148
- if has_status?(example)
149
- example.example_group.parent_groups.select{|p| p != example}.length
150
- else
151
- example.parent_groups.select{|p| p != example}.length
152
- end
153
- end
154
-
155
- def style_hash
156
- {
157
- header_style: {
158
- bg_color: 'F4FA58',
159
- b: true,
160
- border: { style: :thin, color: '666666' },
161
- },
162
- idx_column_style: {
163
- bg_color: 'FFDD99',
164
- b: true,
165
- border: { style: :thin, color: '666666', edges: [:right] },
166
- },
167
- test_case_style: {
168
- },
169
- success_style: {
170
- bg_color: '58FA58',
171
- },
172
- failed_style: {
173
- bg_color: 'FE2E2E',
174
- },
175
- grey_space_style: {
176
- bg_color: 'CCCCCC',
177
- },
178
- pink_space_style: {
179
- bg_color: '6CEEC',
180
- },
181
- }
182
- end
183
-
184
- def header_style
185
- @header_style ||= @workbook.styles.add_style(style_hash[:header_style])
186
- end
187
- def pink_style
188
- @pink_style ||= @workbook.styles.add_style(style_hash[:idx_column_style].merge(style_hash[:pink_space_style]))
189
- end
190
- def grey_style
191
- @grey_style ||= @workbook.styles.add_style(style_hash[:grey_space_style])
192
- end
193
- def success_style
194
- @success_style ||= @workbook.styles.add_style(style_hash[:success_style])
195
- end
196
- def failed_style
197
- @failed_style ||= @workbook.styles.add_style(style_hash[:failed_style])
198
- end
199
- def idx_column_style
200
- @idx_column_style ||= @workbook.styles.add_style(style_hash[:idx_column_style])
201
- end
202
34
  end
203
35
  end
204
36
  end
@@ -11,7 +11,7 @@ namespace :axlsx do
11
11
  def setup_spec_opts(*extra_options)
12
12
  base_opts = [
13
13
  "--require", "#{File.dirname(__FILE__)}/rspec_loader.rb",
14
- "--format", "Rspec::Axlsx::FormatterRSpec3"
14
+ "--format", "Rspec::AxlsxFormatter"
15
15
  ]
16
16
 
17
17
  spec_opts = (base_opts + extra_options).join(" ")
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rspec-axlsx-formatter
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - yasuhiroki
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-11-12 00:00:00.000000000 Z
11
+ date: 2014-11-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: axlsx