simplecov-console 0.6.0 → 0.9.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: bf41260176ece548059c1fff6db115552f4ff1a6655ab63575e488dfc2318739
4
- data.tar.gz: 404ddb9d0b0a6f023046fdf7f52ab4accd496cc759f37c696d22c73df9a5d194
3
+ metadata.gz: 816c658af1a3631341c32bc6de8c315c9630dabc514f2afaafce3e5d2a08c4c5
4
+ data.tar.gz: 91eb4d147fdda1bd77860ed0ee7cf407baec1882fd56075a5092850663eaec14
5
5
  SHA512:
6
- metadata.gz: 2e66ac79cbdf147451f2d6cb27666cd9b9a9cafc4c440adf6cc5975af38423f850260ffd3c40410a59e10ebc33b2e23438255c196ae1412a84647d10fb5350a0
7
- data.tar.gz: 0c9e6517b4a51a435c02f2a3e96def76c7d9bf0724f725a679555a67f90b2fce7c788d0ebb464217458c48e91559e8a92837c164b91139769b6f55f93a7d3ae5
6
+ metadata.gz: 76945af6f21860703b3c0e5f0e78bb24d9411698fd6bc98576e03eadd2bc5d86e60600539ee081f26003431e06d35d5fde4f47b604b4880974a401954da914b1
7
+ data.tar.gz: 60a05bd402183c8797523df22d8f3c947f650f059ec18ad2a02420639c821224d007b6f2eaf57696ca0776aec359d2e6265be1591f77c38f43338ddcbadb8714
@@ -0,0 +1,26 @@
1
+ # Changelog
2
+
3
+ ## 0.8 (2020.11.11)
4
+
5
+ - Added support for branch coverage - thanks [@robotdana!](https://github.com/robotdana) ([#19](https://github.com/chetan/simplecov-console/pull/19))
6
+
7
+ ## 0.7.2 (2020.03.05)
8
+
9
+ - Fix: table output include ([#17](https://github.com/chetan/simplecov-console/issues/17))
10
+
11
+ ## 0.7.1 (2020.03.05)
12
+
13
+ - Fix: block output doesn't work with frozen string literal ([#16](https://github.com/chetan/simplecov-console/issues/16))
14
+
15
+ ## 0.7 (2020.03.04)
16
+
17
+ - Added new 'block' style output option - thanks [@hpainter](https://github.com/hpainter)! ([#15](https://github.com/chetan/simplecov-console/issues/15))
18
+
19
+ ## 0.6 (2019.11.08)
20
+
21
+ - Added new config options: `sort`, `show_covered`, and `max_rows`
22
+
23
+ ## 0.5 (2019.05.24)
24
+
25
+ - Replaced `hirb` gem with `terminal-table` due to multiple warnings thrown ([#11](https://github.com/chetan/simplecov-console/issues/11))
26
+ - Support [disabling colorized](https://no-color.org/) output via `NO_COLOR` env var
data/Gemfile CHANGED
@@ -7,6 +7,6 @@ gem "ansi"
7
7
  group :development do
8
8
  gem "minitest"
9
9
  gem "yard"
10
- gem "bundler", "~> 1.2"
10
+ gem "bundler", "~> 2.1"
11
11
  gem "juwelier"
12
12
  end
data/README.md CHANGED
@@ -47,52 +47,167 @@ showing bottom (worst) 15 of 69 files
47
47
 
48
48
  ## Configuration
49
49
 
50
- ### Disabling colorized output
50
+ simplecov-console is configurable through environment variables and/or via Ruby
51
+ code, generally in your test helper or setup file.
51
52
 
52
- Simply export `NO_COLOR=1` and colors will be disabled.
53
+ ### Options
54
+
55
+ ```ruby
56
+ SimpleCov::Formatter::Console.sort = 'path' # sort by file path
57
+ SimpleCov::Formatter::Console.show_covered = true # show all files in coverage report
58
+ SimpleCov::Formatter::Console.max_rows = 15 # integer
59
+ SimpleCov::Formatter::Console.max_lines = 5 # integer
60
+ SimpleCov::Formatter::Console.missing_len = 20 # integer
61
+ SimpleCov::Formatter::Console.output_style = 'block' # 'table' (default) or 'block'
62
+ SimpleCov::Formatter::Console.table_options = {:style => {:width => 200}}
63
+ ```
64
+
65
+ Note that all options except `table_options` can also be set via env var using
66
+ the uppercase name, e.g., `MAX_ROWS`.
67
+
68
+ #### Disabling colorized output
69
+
70
+ Color support is active by default. To disable, export `NO_COLOR=1`:
53
71
 
54
72
  ```sh
55
73
  NO_COLOR=1 rake test
56
74
  ```
57
75
 
58
- ### Sorting the output
76
+ #### Sorting the output
59
77
 
60
- By default the coverage report is sorted by coverage % in descending order. To sort alphabetically by path, set the `SORT` environment variable to "path", or add the following to your test helper:
78
+ By default the coverage report sorts by coverage % in descending order. To
79
+ sort alphabetically by path:
61
80
 
62
81
  ```ruby
63
82
  SimpleCov::Formatter::Console.sort = 'path' # sort by file path
64
83
  ```
65
84
 
66
- ### Showing covered files
85
+ #### Showing covered files
67
86
 
68
- By default, fully covered files are excluded from the report. To show them, set the `SHOW_COVERED` environment variable to `true` or add the following to your test helper:
87
+ By default, fully covered files are excluded from the report. To include them:
69
88
 
70
89
  ```ruby
71
90
  SimpleCov::Formatter::Console.show_covered = true # show all files in coverage report
72
91
  ```
73
92
 
74
- ### Maximum rows displayed
93
+ #### Maximum rows displayed
75
94
 
76
- By default, a maximum of 15 files with the worst coverage are displayed in the report. You can override this limit by setting the `MAX_ROWS` environment variable, or adding the following to your test helper:
95
+ By default, a maximum of 15 files with the worst coverage are displayed in the
96
+ report. To override this limit:
77
97
 
78
98
  ```ruby
79
- SimpleCov::Formatter::Console.max_rows = # some number
99
+ SimpleCov::Formatter::Console.max_rows = 20 # integer
80
100
  ```
81
101
 
82
- Setting a value of `-1` or `nil` will show all of the files.
102
+ Setting a value of `-1` or `nil` (in Ruby) will show all files.
103
+
104
+ #### Maximum lines displayed
105
+
106
+ By default, all missing lines will be included for each displayed file. For
107
+ large source files with poor coverage, this may become unwieldy. To show fewer
108
+ groups of lines:
109
+
110
+ ```ruby
111
+ SimpleCov::Formatter::Console.max_lines = 5 # integer
112
+ ```
83
113
 
84
- ### Table options
114
+ #### Maximum length of missing lines
85
115
 
86
- In some cases, you may need to pass some options to `TerminalTable.new`. For example, if the filenames are
87
- truncated so much that you can't read them. In that case, you can add a line like this when setting the formatter:
116
+ As an alternative to the above `max_lines` option, you may limit the missing
117
+ lines output by number of characters:
118
+
119
+ ```ruby
120
+ SimpleCov::Formatter::Console.missing_len = 20 # integer
121
+ ```
122
+
123
+ #### Table options
124
+
125
+ In some cases, you may need to pass some options to `TerminalTable.new`. For
126
+ example, if the filenames truncate so much that you can't read them, try
127
+ increasing the table width:
88
128
 
89
129
  ```ruby
90
130
  SimpleCov::Formatter::Console.table_options = {:style => {:width => 200}}
91
- SimpleCov.formatter = SimpleCov::Formatter::Console
131
+ ```
132
+
133
+ #### Block output style
134
+
135
+ As an alternative to the default table output format, a simpler block format is
136
+ also available:
137
+
138
+ ```ruby
139
+ SimpleCov::Formatter::Console.output_style = 'block'
140
+ ```
141
+
142
+ Example output:
143
+
144
+ ```text
145
+ COVERAGE: 82.34% -- 2345/2848 lines in 111 files
146
+
147
+ showing bottom (worst) 5 of 69 files
148
+
149
+ file: lib/bixby/api/websocket_server.rb
150
+ coverage: 22.73% (17/22 lines)
151
+ missed: 11, 14, 17-18, 20-22, 24, 28-30, 32, 36-...
152
+
153
+ file: app/models/role.rb
154
+ coverage: 30.77% (9/13 lines)
155
+ missed: 28-34, 36-37
156
+
157
+ file: lib/bixby/modules/metrics/rescan.rb
158
+ coverage: 32.14% (19/28 lines)
159
+ missed: 19-23, 27-31, 33-37, 39-41, 43
160
+
161
+ file: lib/archie/mail.rb
162
+ coverage: 42.86% (8/14 lines)
163
+ missed: 6-8, 12-15, 22
164
+
165
+ file: lib/archie/controller.rb
166
+ coverage: 44.00% (28/50 lines)
167
+ missed: 18-21, 23, 27-30, 32, 38-40, 44-45, 48-4...
168
+
169
+ 42 file(s) with 100% coverage not shown
170
+ ```
171
+
172
+ ### Branch Coverage Support
173
+
174
+ When branch coverage is [enabled in
175
+ simplecov](https://github.com/simplecov-ruby/simplecov/tree/818bc2547842a90c607b4fec834320766a8686de#branch-coverage-ruby--25),
176
+ branch info will automatically be displayed in the output:
177
+
178
+ ```text
179
+ COVERAGE: 78.26% -- 18/23 lines in 2 files
180
+ BRANCH COVERAGE: 83.33% -- 5/6 branches in 2 branches
181
+
182
+ +----------+-------------------------------+-------+--------+---------------+-----------------+----------+-----------------+------------------+
183
+ | coverage | file | lines | missed | missing | branch coverage | branches | branches missed | branches missing |
184
+ +----------+-------------------------------+-------+--------+---------------+-----------------+----------+-----------------+------------------+
185
+ | 72.22% | lib/simplecov-console-test.rb | 18 | 5 | 10-12, 16, 25 | 83.33% | 6 | 1 | 25[then] |
186
+ +----------+-------------------------------+-------+--------+---------------+-----------------+----------+-----------------+------------------+
92
187
  ```
93
188
 
94
189
  ## History
95
190
 
191
+ ### 0.9 (2021.01.21)
192
+
193
+ - Added support for limiting number of lines shown
194
+
195
+ ### 0.8 (2020.11.11)
196
+
197
+ - Added support for branch coverage - thanks [@robotdana!](https://github.com/robotdana) ([#19](https://github.com/chetan/simplecov-console/pull/19))
198
+
199
+ ### 0.7.2 (2020.03.05)
200
+
201
+ - Fix: table output include ([#17](https://github.com/chetan/simplecov-console/issues/17))
202
+
203
+ ### 0.7.1 (2020.03.05)
204
+
205
+ - Fix: block output doesn't work with frozen string literal ([#16](https://github.com/chetan/simplecov-console/issues/16))
206
+
207
+ ### 0.7 (2020.03.04)
208
+
209
+ - Added new 'block' style output option - thanks [@hpainter](https://github.com/hpainter)! ([#15](https://github.com/chetan/simplecov-console/issues/15))
210
+
96
211
  ### 0.6 (2019.11.08)
97
212
 
98
213
  - Added new config options: `sort`, `show_covered`, and `max_rows`
@@ -114,5 +229,5 @@ SimpleCov.formatter = SimpleCov::Formatter::Console
114
229
 
115
230
  ### Copyright
116
231
 
117
- Copyright (c) 2019 Chetan Sarva. See LICENSE.txt for
232
+ Copyright (c) 2020 Chetan Sarva. See LICENSE.txt for
118
233
  further details.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.6.0
1
+ 0.9.0
@@ -1,11 +1,12 @@
1
- require 'terminal-table'
2
1
  require 'ansi/code'
3
2
 
4
3
  class SimpleCov::Formatter::Console
5
4
 
6
5
  VERSION = IO.read(File.expand_path("../../VERSION", __FILE__)).strip
7
6
 
8
- ATTRIBUTES = [:table_options, :use_colors, :max_rows, :show_covered, :sort]
7
+ ATTRIBUTES = [:table_options, :use_colors, :max_rows, :max_lines,
8
+ :missing_len, :show_covered, :sort, :output_style]
9
+
9
10
  class << self
10
11
  attr_accessor(*ATTRIBUTES)
11
12
  end
@@ -17,13 +18,37 @@ class SimpleCov::Formatter::Console
17
18
  # configure max rows from MAX_ROWS env var
18
19
  SimpleCov::Formatter::Console.max_rows = ENV.fetch('MAX_ROWS', 15).to_i
19
20
 
21
+ # configure max lines per row and missing len
22
+ SimpleCov::Formatter::Console.max_lines = ENV.fetch('MAX_LINES', 0).to_i
23
+ SimpleCov::Formatter::Console.missing_len = ENV.fetch('MISSING_LEN', 0).to_i
24
+
20
25
  # configure show_covered from SHOW_COVERED env var
21
26
  SimpleCov::Formatter::Console.show_covered = ENV.fetch('SHOW_COVERED', 'false') == 'true'
22
27
 
23
28
  # configure sort from SORT env var
24
29
  SimpleCov::Formatter::Console.sort = ENV.fetch('SORT', 'coverage')
25
30
 
31
+ # configure output format ('table', 'block')
32
+ SimpleCov::Formatter::Console.output_style = ENV.fetch('OUTPUT_STYLE', 'table')
33
+
34
+ def include_output_style
35
+ if SimpleCov::Formatter::Console.output_style == 'block' then
36
+ require 'simplecov-console/output/block'
37
+ extend BlockOutput
38
+ else
39
+ # default to table
40
+ require 'simplecov-console/output/table'
41
+ extend TableOutput
42
+ end
43
+ end
44
+
45
+ def show_branch_coverage?(result)
46
+ Gem::Version.new(SimpleCov::VERSION) >= Gem::Version.new('0.18.5') &&
47
+ result.coverage_statistics[:branch]
48
+ end
49
+
26
50
  def format(result)
51
+ include_output_style
27
52
 
28
53
  root = nil
29
54
  if Module.const_defined? :ROOT then
@@ -37,7 +62,11 @@ class SimpleCov::Formatter::Console
37
62
  end
38
63
 
39
64
  puts
40
- puts "COVERAGE: #{colorize(pct(result))} -- #{result.covered_lines}/#{result.total_lines} lines in #{result.files.size} files"
65
+ puts "COVERAGE: #{colorize(pct(result.covered_percent))} -- #{result.covered_lines}/#{result.total_lines} lines in #{result.files.size} files"
66
+ show_branch_coverage = show_branch_coverage?(result)
67
+ if show_branch_coverage
68
+ puts "BRANCH COVERAGE: #{colorize(pct(result.coverage_statistics[:branch].percent))} -- #{result.covered_branches}/#{result.total_branches} branches in #{result.files.size} branches"
69
+ end
41
70
  puts
42
71
 
43
72
  if root.nil? then
@@ -45,16 +74,23 @@ class SimpleCov::Formatter::Console
45
74
  end
46
75
 
47
76
  if SimpleCov::Formatter::Console.sort == 'coverage'
48
- files = result.files.sort{ |a,b| a.covered_percent <=> b.covered_percent }
77
+ if show_branch_coverage
78
+ files = result.files.sort do |a,b|
79
+ (a.covered_percent <=> b.covered_percent).nonzero? ||
80
+ (a.coverage_statistics[:branch].percent <=> b.coverage_statistics[:branch].percent)
81
+ end
82
+ else
83
+ files = result.files.sort_by(&:covered_percent)
84
+ end
49
85
  else
50
- files = result.files
86
+ files = result.files.to_a
51
87
  end
52
88
 
53
89
  covered_files = 0
54
90
 
55
91
  unless SimpleCov::Formatter::Console.show_covered
56
92
  files.select!{ |file|
57
- if file.covered_percent == 100 then
93
+ if file.covered_percent == 100 && (!show_branch_coverage || file.coverage_statistics[:branch].percent == 100) then
58
94
  covered_files += 1
59
95
  false
60
96
  else
@@ -66,32 +102,14 @@ class SimpleCov::Formatter::Console
66
102
  end
67
103
  end
68
104
 
69
- table = files.map do |f|
70
- [
71
- colorize(pct(f)),
72
- f.filename.gsub(root + "/", ''),
73
- f.lines_of_code,
74
- f.missed_lines.count,
75
- missed(f.missed_lines).join(", ")
76
- ]
77
- end
78
-
79
105
  max_rows = SimpleCov::Formatter::Console.max_rows
80
106
 
81
- if ![-1, nil].include?(max_rows) && table.size > max_rows then
82
- puts "showing bottom (worst) #{max_rows} of #{table.size} files"
83
- table = table.slice(0, max_rows)
84
- end
85
-
86
- table_options = SimpleCov::Formatter::Console.table_options || {}
87
- if !table_options.kind_of?(Hash) then
88
- raise ArgumentError.new("SimpleCov::Formatter::Console.table_options must be a Hash")
107
+ if ![-1, nil].include?(max_rows) && files.size > max_rows then
108
+ puts "showing bottom (worst) #{max_rows} of #{files.size} files"
109
+ files = files.slice(0, max_rows)
89
110
  end
90
- headings = %w{ coverage file lines missed missing }
91
111
 
92
- opts = table_options.merge({:headings => headings, :rows => table})
93
- t = Terminal::Table.new(opts)
94
- puts t
112
+ puts output(files, root, show_branch_coverage)
95
113
 
96
114
  if covered_files > 0 then
97
115
  puts "#{covered_files} file(s) with 100% coverage not shown"
@@ -99,6 +117,17 @@ class SimpleCov::Formatter::Console
99
117
 
100
118
  end
101
119
 
120
+ def branches_missed(missed_branches)
121
+ missed_branches.group_by(&:start_line).map do |line_number, branches|
122
+ "#{line_number}[#{branches.map(&:type).join(',')}]"
123
+ end
124
+ end
125
+
126
+ # Group missed lines for better display
127
+ #
128
+ # @param [Array<SimpleCov::SourceFile::Line>] missed array of missed lines reported by SimpleCov
129
+ #
130
+ # @return [Array<String>] Missing groups of lines
102
131
  def missed(missed_lines)
103
132
  groups = {}
104
133
  base = nil
@@ -124,11 +153,27 @@ class SimpleCov::Formatter::Console
124
153
  end
125
154
  end
126
155
 
156
+ if SimpleCov::Formatter::Console.max_lines > 0 then
157
+ # show at most N missing groups of lines
158
+ group_str = group_str[0, SimpleCov::Formatter::Console.max_lines] << "..."
159
+ end
160
+
127
161
  group_str
128
162
  end
129
163
 
130
- def pct(obj)
131
- sprintf("%6.2f%%", obj.covered_percent)
164
+ # Truncate string to at most N chars (as defined by missing_len)
165
+ def trunc(str)
166
+ return str if str.include?("...") # already truncated, skip
167
+
168
+ len = SimpleCov::Formatter::Console.missing_len
169
+ if len > 0 && str.size > len then
170
+ str = str[0, len].gsub(/,(\s+)?$/, '') + ' ...'
171
+ end
172
+ str
173
+ end
174
+
175
+ def pct(number)
176
+ sprintf("%6.2f%%", number)
132
177
  end
133
178
 
134
179
  def use_colors?
@@ -148,5 +193,4 @@ class SimpleCov::Formatter::Console
148
193
  ANSI.red { s }
149
194
  end
150
195
  end
151
-
152
196
  end
@@ -0,0 +1,28 @@
1
+
2
+ class SimpleCov::Formatter::Console
3
+ module BlockOutput
4
+
5
+ # format per-file results output as plain text blocks
6
+ def output(files, root, show_branch)
7
+ blocks = []
8
+ files.each do |f|
9
+ block = []
10
+ block << sprintf("%8.8s: %s", 'file', f.filename.gsub(root + "/", ''))
11
+ block << sprintf("%8.8s: %s (%d/%d lines)", 'coverage',
12
+ colorize(sprintf("%.2f%%", f.covered_percent)),
13
+ f.covered_lines.count, f.lines_of_code)
14
+ block << sprintf("%8.8s: %s", 'missed', trunc(missed(f.missed_lines).join(", ")))
15
+ if show_branch
16
+ block << sprintf("%8.8s: %s (%d/%d branches)", 'branches',
17
+ colorize(sprintf("%.2f%%", f.coverage_statistics[:branch].percent)),
18
+ (f.total_branches.count - f.missed_branches.count), f.total_branches.count)
19
+ block << sprintf("%8.8s: %s", 'missed', branches_missed(f.missed_branches).join(", "))
20
+ end
21
+ blocks << block.join("\n")
22
+ end
23
+
24
+ "\n" + blocks.join("\n\n") + "\n\n"
25
+ end
26
+
27
+ end
28
+ end
@@ -0,0 +1,48 @@
1
+ require 'terminal-table'
2
+
3
+ class SimpleCov::Formatter::Console
4
+ module TableOutput
5
+
6
+ # format per-file results output using Terminal::Table
7
+ def output(files, root,show_branch)
8
+ table = files.map do |f|
9
+ row = [
10
+ colorize(pct(f.covered_percent)),
11
+ f.filename.gsub(root + "/", ''),
12
+ f.lines_of_code,
13
+ f.missed_lines.count,
14
+ trunc(missed(f.missed_lines).join(", ")),
15
+ ]
16
+ if show_branch
17
+ row += [
18
+ colorize(pct(f.coverage_statistics[:branch].percent)),
19
+ f.total_branches.count,
20
+ f.missed_branches.count,
21
+ branches_missed(f.missed_branches).join(", ")
22
+ ]
23
+ end
24
+
25
+ row
26
+ end
27
+
28
+ table_options = SimpleCov::Formatter::Console.table_options || {}
29
+ if !table_options.kind_of?(Hash) then
30
+ raise ArgumentError.new("SimpleCov::Formatter::Console.table_options must be a Hash")
31
+ end
32
+
33
+ headings = %w{ coverage file lines missed missing }
34
+ if show_branch
35
+ headings += [
36
+ 'branch coverage',
37
+ 'branches',
38
+ 'branches missed',
39
+ 'branches missing'
40
+ ]
41
+ end
42
+
43
+ opts = table_options.merge({:headings => headings, :rows => table})
44
+ Terminal::Table.new(opts)
45
+ end
46
+
47
+ end
48
+ end
@@ -2,66 +2,62 @@
2
2
  # DO NOT EDIT THIS FILE DIRECTLY
3
3
  # Instead, edit Juwelier::Tasks in Rakefile, and run 'rake gemspec'
4
4
  # -*- encoding: utf-8 -*-
5
- # stub: simplecov-console 0.6.0 ruby lib
5
+ # stub: simplecov-console 0.9.0 ruby lib
6
6
 
7
7
  Gem::Specification.new do |s|
8
8
  s.name = "simplecov-console".freeze
9
- s.version = "0.6.0"
9
+ s.version = "0.9.0"
10
10
 
11
11
  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
12
12
  s.require_paths = ["lib".freeze]
13
13
  s.authors = ["Chetan Sarva".freeze]
14
- s.date = "2019-11-08"
14
+ s.date = "2021-01-21"
15
15
  s.description = "Simple console output formatter for SimpleCov".freeze
16
16
  s.email = "chetan@pixelcop.net".freeze
17
17
  s.extra_rdoc_files = [
18
+ "CHANGELOG.md",
18
19
  "LICENSE.txt",
19
20
  "README.md"
20
21
  ]
21
22
  s.files = [
22
23
  ".document",
24
+ "CHANGELOG.md",
23
25
  "Gemfile",
24
26
  "LICENSE.txt",
25
27
  "README.md",
26
28
  "Rakefile",
27
29
  "VERSION",
28
30
  "lib/simplecov-console.rb",
31
+ "lib/simplecov-console/output/block.rb",
32
+ "lib/simplecov-console/output/table.rb",
29
33
  "simplecov-console.gemspec",
30
34
  "test/helper.rb",
31
35
  "test/test_simplecov-console.rb"
32
36
  ]
33
37
  s.homepage = "http://github.com/chetan/simplecov-console".freeze
34
38
  s.licenses = ["MIT".freeze]
35
- s.rubygems_version = "3.0.2".freeze
39
+ s.rubygems_version = "3.1.4".freeze
36
40
  s.summary = "Simple console output formatter".freeze
37
41
 
38
42
  if s.respond_to? :specification_version then
39
43
  s.specification_version = 4
44
+ end
40
45
 
41
- if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
42
- s.add_runtime_dependency(%q<simplecov>.freeze, [">= 0"])
43
- s.add_runtime_dependency(%q<terminal-table>.freeze, [">= 0"])
44
- s.add_runtime_dependency(%q<ansi>.freeze, [">= 0"])
45
- s.add_development_dependency(%q<minitest>.freeze, [">= 0"])
46
- s.add_development_dependency(%q<yard>.freeze, [">= 0"])
47
- s.add_development_dependency(%q<bundler>.freeze, ["~> 1.2"])
48
- s.add_development_dependency(%q<juwelier>.freeze, [">= 0"])
49
- else
50
- s.add_dependency(%q<simplecov>.freeze, [">= 0"])
51
- s.add_dependency(%q<terminal-table>.freeze, [">= 0"])
52
- s.add_dependency(%q<ansi>.freeze, [">= 0"])
53
- s.add_dependency(%q<minitest>.freeze, [">= 0"])
54
- s.add_dependency(%q<yard>.freeze, [">= 0"])
55
- s.add_dependency(%q<bundler>.freeze, ["~> 1.2"])
56
- s.add_dependency(%q<juwelier>.freeze, [">= 0"])
57
- end
46
+ if s.respond_to? :add_runtime_dependency then
47
+ s.add_runtime_dependency(%q<simplecov>.freeze, [">= 0"])
48
+ s.add_runtime_dependency(%q<terminal-table>.freeze, [">= 0"])
49
+ s.add_runtime_dependency(%q<ansi>.freeze, [">= 0"])
50
+ s.add_development_dependency(%q<minitest>.freeze, [">= 0"])
51
+ s.add_development_dependency(%q<yard>.freeze, [">= 0"])
52
+ s.add_development_dependency(%q<bundler>.freeze, ["~> 2.1"])
53
+ s.add_development_dependency(%q<juwelier>.freeze, [">= 0"])
58
54
  else
59
55
  s.add_dependency(%q<simplecov>.freeze, [">= 0"])
60
56
  s.add_dependency(%q<terminal-table>.freeze, [">= 0"])
61
57
  s.add_dependency(%q<ansi>.freeze, [">= 0"])
62
58
  s.add_dependency(%q<minitest>.freeze, [">= 0"])
63
59
  s.add_dependency(%q<yard>.freeze, [">= 0"])
64
- s.add_dependency(%q<bundler>.freeze, ["~> 1.2"])
60
+ s.add_dependency(%q<bundler>.freeze, ["~> 2.1"])
65
61
  s.add_dependency(%q<juwelier>.freeze, [">= 0"])
66
62
  end
67
63
  end
@@ -2,21 +2,117 @@ require 'helper'
2
2
 
3
3
  class TestSimplecovConsole < MiniTest::Test
4
4
 
5
- Source = Struct.new(:line_number)
5
+ # mock for SimpleCov::SourceFile::Line
6
+ Line = Struct.new(:line_number)
7
+
8
+ # mock for SimpleCov::SourceFile
9
+ SourceFile = Struct.new(
10
+ :filename,
11
+ :lines_of_code,
12
+ :covered_lines,
13
+ :missed_lines,
14
+ :covered_percent
15
+ )
16
+
17
+ CoverageStatistics = Struct.new(
18
+ :percent
19
+ )
20
+
21
+ Branch = Struct.new(
22
+ :start_line,
23
+ :type
24
+ )
25
+
26
+ SourceFileWithBranches = Struct.new(
27
+ :filename,
28
+ :lines_of_code,
29
+ :covered_lines,
30
+ :missed_lines,
31
+ :covered_percent,
32
+ :coverage_statistics,
33
+ :total_branches,
34
+ :missed_branches
35
+ )
6
36
 
7
37
  def setup
8
38
  @console = SimpleCov::Formatter::Console.new
9
39
  end
10
40
 
41
+ def teardown
42
+ SimpleCov::Formatter::Console.output_style = 'table'
43
+ SimpleCov::Formatter::Console.max_lines = 0
44
+ end
45
+
11
46
  def test_defined
12
47
  assert defined?(SimpleCov::Formatter::Console)
13
48
  assert defined?(SimpleCov::Formatter::Console::VERSION)
14
49
  end
15
50
 
16
51
  def test_missed
17
- missed_lines = [Source.new(1), Source.new(2),
18
- Source.new(3), Source.new(5)]
52
+ missed_lines = [Line.new(1), Line.new(2),
53
+ Line.new(3), Line.new(5)]
19
54
  expected_result = ["1-3", "5"]
20
- assert_equal @console.missed(missed_lines), expected_result
55
+ assert_equal expected_result, @console.missed(missed_lines)
56
+ end
57
+
58
+ def test_max_missed
59
+ SimpleCov::Formatter::Console.max_lines = 1
60
+ missed_lines = [Line.new(1), Line.new(2),
61
+ Line.new(3), Line.new(5)]
62
+ expected_result = ["1-3", "..."]
63
+ assert_equal expected_result, @console.missed(missed_lines)
64
+ end
65
+
66
+ def test_table_output
67
+ SimpleCov::Formatter::Console.output_style = 'table'
68
+ @console.include_output_style
69
+ files = [
70
+ SourceFile.new('foo.rb',5,[2,3],[Line.new(1), Line.new(4), Line.new(5)],40.0)
71
+ ]
72
+ actual = @console.output(files,'/',false)
73
+ assert actual.is_a? Terminal::Table
74
+ assert_equal 1, actual.rows.count
75
+ end
76
+
77
+ def test_table_output_with_branches
78
+ SimpleCov::Formatter::Console.output_style = 'table'
79
+ @console.include_output_style
80
+ files = [
81
+ SourceFileWithBranches.new(
82
+ 'foo.rb',5,[2,3],[Line.new(1), Line.new(4), Line.new(5)],40.0,
83
+ {branch: CoverageStatistics.new(50.0)}, [1,2],
84
+ [Branch.new(2, :then)]
85
+ )
86
+ ]
87
+ actual = @console.output(files,'/',true)
88
+ assert actual.is_a? Terminal::Table
89
+ assert_equal 1, actual.rows.count
90
+ end
91
+
92
+ def test_block_output
93
+ SimpleCov::Formatter::Console.use_colors = false
94
+ SimpleCov::Formatter::Console.output_style = 'block'
95
+ @console.include_output_style
96
+
97
+ files = [
98
+ SourceFile.new('foo.rb',5,[2,3],[Line.new(1), Line.new(4), Line.new(5)],40.0)
99
+ ]
100
+ expected = "\n file: foo.rb\ncoverage: 40.00% (2/5 lines)\n missed: 1, 4-5\n\n"
101
+ assert_equal expected, @console.output(files,'/',false)
102
+ end
103
+
104
+ def test_block_output_with_branches
105
+ SimpleCov::Formatter::Console.use_colors = false
106
+ SimpleCov::Formatter::Console.output_style = 'block'
107
+ @console.include_output_style
108
+ files = [
109
+ SourceFileWithBranches.new(
110
+ 'foo.rb',5,[2,3],[Line.new(1), Line.new(4), Line.new(5)],40.0,
111
+ {branch: CoverageStatistics.new(50.0)}, [1,2],
112
+ [Branch.new(2, :then)]
113
+ )
114
+ ]
115
+ expected = "\n file: foo.rb\ncoverage: 40.00% (2/5 lines)\n missed: 1, 4-5\nbranches: 50.00% (1/2 branches)\n missed: 2[then]\n\n"
116
+ assert_equal expected, @console.output(files,'/',true)
21
117
  end
22
118
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: simplecov-console
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.0
4
+ version: 0.9.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chetan Sarva
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-11-08 00:00:00.000000000 Z
11
+ date: 2021-01-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: simplecov
@@ -86,14 +86,14 @@ dependencies:
86
86
  requirements:
87
87
  - - "~>"
88
88
  - !ruby/object:Gem::Version
89
- version: '1.2'
89
+ version: '2.1'
90
90
  type: :development
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
94
  - - "~>"
95
95
  - !ruby/object:Gem::Version
96
- version: '1.2'
96
+ version: '2.1'
97
97
  - !ruby/object:Gem::Dependency
98
98
  name: juwelier
99
99
  requirement: !ruby/object:Gem::Requirement
@@ -113,16 +113,20 @@ email: chetan@pixelcop.net
113
113
  executables: []
114
114
  extensions: []
115
115
  extra_rdoc_files:
116
+ - CHANGELOG.md
116
117
  - LICENSE.txt
117
118
  - README.md
118
119
  files:
119
120
  - ".document"
121
+ - CHANGELOG.md
120
122
  - Gemfile
121
123
  - LICENSE.txt
122
124
  - README.md
123
125
  - Rakefile
124
126
  - VERSION
125
127
  - lib/simplecov-console.rb
128
+ - lib/simplecov-console/output/block.rb
129
+ - lib/simplecov-console/output/table.rb
126
130
  - simplecov-console.gemspec
127
131
  - test/helper.rb
128
132
  - test/test_simplecov-console.rb
@@ -130,7 +134,7 @@ homepage: http://github.com/chetan/simplecov-console
130
134
  licenses:
131
135
  - MIT
132
136
  metadata: {}
133
- post_install_message:
137
+ post_install_message:
134
138
  rdoc_options: []
135
139
  require_paths:
136
140
  - lib
@@ -145,8 +149,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
145
149
  - !ruby/object:Gem::Version
146
150
  version: '0'
147
151
  requirements: []
148
- rubygems_version: 3.0.2
149
- signing_key:
152
+ rubygems_version: 3.1.4
153
+ signing_key:
150
154
  specification_version: 4
151
155
  summary: Simple console output formatter
152
156
  test_files: []