covered 0.14.1 → 0.15.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 65050cba58d4c4af27b6361adb1e398d7cc17190f5cd9f437b75ebe551fd47d9
4
- data.tar.gz: 9e27906a329ce6748ef8023ba4ef7e14747ca612516052396369cd23798ae2be
3
+ metadata.gz: 8b53c13ab215d5a93f7a092321dc70b8538909a76da3e841b8ce6c2f8a7fcdc3
4
+ data.tar.gz: 6f01972bf2729eb4549612acfe8dc7ad37bb8aaf927460257ae4a060cee8e001
5
5
  SHA512:
6
- metadata.gz: f2e15acaf1a9ccf76fca83a1fe9c2b0d5189b32ce60e9b2583b0f87a5c8296575f1669d96b9dddffaf9e9cc7d5ebd2192f675665c6f55ef73176eeb50bf2251d
7
- data.tar.gz: 64e9dff68ef4a4efee7e903aff00ce60358a3c15853e487009c56828bffa1f510a2d0dd762b08973fc58ccccb948179aa5787badd4ffed07a094d1ccaaf5a721
6
+ metadata.gz: bde94163994801bf64fd7a61014361c754f7c18be4f766eb2728d93b8ff01c83ffc1bcc0917346d10ec720d95aa3c15eae208e3ebbec56c97ca394843dc715f3
7
+ data.tar.gz: 3ccfcc2ae535e65a6ca0de483c5a150104f1e414f9a5679d9e0d9b63420b9416db28df6e24cf5aaeb6d2a964d70af3d3828823eb35523b4ea240fd4b3872b66c
checksums.yaml.gz.sig CHANGED
Binary file
@@ -0,0 +1,25 @@
1
+
2
+ def initialize(context)
3
+ super
4
+
5
+ require_relative '../../lib/covered/policy/default'
6
+ end
7
+
8
+ # Validate the coverage of multiple test runs.
9
+ # @parameter paths [Array(String)] The coverage database paths.
10
+ # @parameter minumum [Float] The minimum required coverage in order to pass.
11
+ def validate(paths: nil, minimum: 1.0)
12
+ paths&.each do |path|
13
+ Covered::Persist.new($covered.output, path).load!
14
+ end
15
+
16
+ $covered.flush
17
+
18
+ statistics = Covered::Statistics.new
19
+
20
+ $covered.each do |coverage|
21
+ statistics << coverage
22
+ end
23
+
24
+ statistics.validate!(minimum)
25
+ end
@@ -0,0 +1,65 @@
1
+ # Copyright, 2018, by Samuel G. D. Williams. <http://www.codeotaku.com>
2
+ #
3
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
4
+ # of this software and associated documentation files (the "Software"), to deal
5
+ # in the Software without restriction, including without limitation the rights
6
+ # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7
+ # copies of the Software, and to permit persons to whom the Software is
8
+ # furnished to do so, subject to the following conditions:
9
+ #
10
+ # The above copyright notice and this permission notice shall be included in
11
+ # all copies or substantial portions of the Software.
12
+ #
13
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
+ # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18
+ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19
+ # THE SOFTWARE.
20
+
21
+ require_relative 'wrapper'
22
+
23
+ require 'coverage'
24
+
25
+ module Covered
26
+ class Cache < Wrapper
27
+ def initialize(output)
28
+ super(output)
29
+
30
+ @marks = nil
31
+ end
32
+
33
+ def mark(path, lineno, count = 1)
34
+ if @marks
35
+ @marks << path << lineno << count
36
+ else
37
+ super
38
+ end
39
+ end
40
+
41
+ def enable
42
+ @marks = []
43
+
44
+ super
45
+ end
46
+
47
+ def flush
48
+ if @marks
49
+ @marks.each_slice(3) do |path, lineno, count|
50
+ @output.mark(path, lineno, count)
51
+ end
52
+
53
+ @marks = nil
54
+ end
55
+
56
+ super
57
+ end
58
+
59
+ def disable
60
+ super
61
+
62
+ flush
63
+ end
64
+ end
65
+ end
@@ -31,9 +31,12 @@ module Covered
31
31
  @trace = TracePoint.new(:line, :call, :c_call) do |trace|
32
32
  if trace.event == :call
33
33
  # Ruby doesn't always mark call-sites in sub-expressions, so we use this approach to compute a call site and mark it:
34
- location = caller_locations(2, 1).first
35
- @output.mark(location.path, location.lineno, 1)
36
- elsif path = trace.path
34
+ if location = caller_locations(2, 1).first and path = location.path
35
+ @output.mark(path, location.lineno, 1)
36
+ end
37
+ end
38
+
39
+ if path = trace.path
37
40
  @output.mark(path, trace.lineno, 1)
38
41
  end
39
42
  end
@@ -56,35 +59,6 @@ module Covered
56
59
  end
57
60
  end
58
61
 
59
- class Cache < Wrapper
60
- def initialize(output)
61
- super(output)
62
- @marks = []
63
- end
64
-
65
- def mark(path, lineno, count = 1)
66
- @marks << path << lineno << count
67
- end
68
-
69
- def enable
70
- super
71
- end
72
-
73
- def flush
74
- @marks.each_slice(3) do |path, lineno, count|
75
- @output.mark(path, lineno, count)
76
- end
77
-
78
- @marks.clear
79
- end
80
-
81
- def disable
82
- super
83
-
84
- flush
85
- end
86
- end
87
-
88
62
  # class Capture < Wrapper
89
63
  # def enable
90
64
  # super
@@ -23,6 +23,7 @@ require_relative 'wrapper'
23
23
  require 'msgpack'
24
24
  require 'time'
25
25
  require 'set'
26
+ require 'console'
26
27
 
27
28
  module Covered
28
29
  class Persist < Wrapper
@@ -32,7 +33,6 @@ module Covered
32
33
  super(output)
33
34
 
34
35
  @path = path
35
-
36
36
  @touched = Set.new
37
37
  end
38
38
 
@@ -66,6 +66,8 @@ module Covered
66
66
  File.open(@path, "rb") do |file|
67
67
  file.flock(File::LOCK_SH)
68
68
 
69
+ Console.logger.debug(self) {"Loading from #{@path}..."}
70
+
69
71
  make_unpacker(file).each(&self.method(:apply))
70
72
  end
71
73
  end
@@ -75,6 +77,8 @@ module Covered
75
77
  File.open(@path, "wb") do |file|
76
78
  file.flock(File::LOCK_EX)
77
79
 
80
+ Console.logger.debug(self) {"Saving to #{@path}..."}
81
+
78
82
  packer = make_packer(file)
79
83
 
80
84
  self.each do |coverage|
@@ -87,7 +91,7 @@ module Covered
87
91
 
88
92
  def mark(file, line, count)
89
93
  @touched << file
90
-
94
+
91
95
  super
92
96
  end
93
97
 
@@ -97,6 +101,12 @@ module Covered
97
101
  load!
98
102
  end
99
103
 
104
+ def flush
105
+ load!
106
+
107
+ super
108
+ end
109
+
100
110
  def disable
101
111
  super
102
112
 
@@ -20,21 +20,25 @@
20
20
 
21
21
  require_relative '../policy'
22
22
 
23
- $covered = Covered.policy do
24
- cache!
25
-
26
- # Only files in the root would be tracked:
27
- root(Dir.pwd)
28
-
29
- # We will ignore any files in the test or spec directory:
30
- skip(/^.*\/(test|spec|vendor)\//)
31
-
32
- # We will include all files under lib, even if they aren't loaded:
33
- include("lib/**/*.rb")
34
-
35
- persist!
36
-
37
- source
38
-
39
- reports!
23
+ if File.exist?("config/coverage.rb")
24
+ load("config/coverage.rb")
25
+ else
26
+ $covered = Covered.policy do
27
+ cache!
28
+
29
+ # Only files in the root would be tracked:
30
+ root(Dir.pwd)
31
+
32
+ # We will ignore any files in the test or spec directory:
33
+ skip(/^.*\/(test|spec|vendor)\//)
34
+
35
+ # We will include all files under lib, even if they aren't loaded:
36
+ include("lib/**/*.rb")
37
+
38
+ persist!
39
+
40
+ source
41
+
42
+ reports!
43
+ end
40
44
  end
@@ -22,6 +22,7 @@ require_relative "summary"
22
22
  require_relative "files"
23
23
  require_relative "source"
24
24
  require_relative "capture"
25
+ require_relative "cache"
25
26
  require_relative "persist"
26
27
 
27
28
  module Covered
@@ -42,6 +43,8 @@ module Covered
42
43
  @reports = []
43
44
  end
44
45
 
46
+ attr :output
47
+
45
48
  def freeze
46
49
  return self if frozen?
47
50
 
@@ -91,6 +94,10 @@ module Covered
91
94
  capture.disable
92
95
  end
93
96
 
97
+ def flush
98
+ @output.flush
99
+ end
100
+
94
101
  attr :reports
95
102
 
96
103
  class Autoload
@@ -69,7 +69,7 @@ module Covered
69
69
  attr :paths
70
70
 
71
71
  def executable?(node)
72
- node.type == :send
72
+ node.type == :send || node.type == :yield
73
73
  end
74
74
 
75
75
  def ignore?(node)
@@ -22,6 +22,9 @@ require_relative 'wrapper'
22
22
  require_relative 'coverage'
23
23
 
24
24
  module Covered
25
+ class CoverageError < StandardError
26
+ end
27
+
25
28
  class Statistics < Wrapper
26
29
  def initialize
27
30
  @count = 0
@@ -51,5 +54,11 @@ module Covered
51
54
 
52
55
  # Could output funny message here, especially for 100% coverage.
53
56
  end
57
+
58
+ def validate!(minimum = 1.0)
59
+ if self.ratio < minimum
60
+ raise CoverageError, "Coverage of #{self.percentage.to_f.round(2)}% is less than required minimum of #{(minimum * 100.0).round(2)}%!"
61
+ end
62
+ end
54
63
  end
55
64
  end
@@ -19,5 +19,5 @@
19
19
  # THE SOFTWARE.
20
20
 
21
21
  module Covered
22
- VERSION = "0.14.1"
22
+ VERSION = "0.15.1"
23
23
  end
@@ -26,6 +26,9 @@ module Covered
26
26
  def disable
27
27
  end
28
28
 
29
+ def flush
30
+ end
31
+
29
32
  def accept?(path)
30
33
  true
31
34
  end
@@ -60,6 +63,10 @@ module Covered
60
63
  @output.disable
61
64
  end
62
65
 
66
+ def flush
67
+ @output.flush
68
+ end
69
+
63
70
  def accept?(path)
64
71
  @output.accept?(path)
65
72
  end
data.tar.gz.sig CHANGED
Binary file
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: covered
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.14.1
4
+ version: 0.15.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Samuel Williams
@@ -39,7 +39,7 @@ cert_chain:
39
39
  RAOsIl+HOBTb252nx1kIRN5hqQx272AJCbCjKx8egcUQKffFVVCI0nye09v5CK+a
40
40
  HiLJ8VOFx6w=
41
41
  -----END CERTIFICATE-----
42
- date: 2022-06-11 00:00:00.000000000 Z
42
+ date: 2022-06-13 00:00:00.000000000 Z
43
43
  dependencies:
44
44
  - !ruby/object:Gem::Dependency
45
45
  name: async-rest
@@ -159,18 +159,9 @@ executables: []
159
159
  extensions: []
160
160
  extra_rdoc_files: []
161
161
  files:
162
- - ".github/workflows/development.yml"
163
- - ".github/workflows/documentation.yml"
164
- - examples/coverage/.DS_Store
165
- - examples/coverage/covered.rb
166
- - examples/coverage/erb/.covered.db
167
- - examples/coverage/erb/coverage.rb
168
- - examples/coverage/erb/template.erb
169
- - examples/coverage/parser.rb
170
- - examples/coverage/simplecov.rb
171
- - examples/coverage/test.rb
172
- - examples/coverage/tracepoint.rb
162
+ - bake/covered/validate.rb
173
163
  - lib/covered.rb
164
+ - lib/covered/cache.rb
174
165
  - lib/covered/capture.rb
175
166
  - lib/covered/coverage.rb
176
167
  - lib/covered/coveralls.rb
@@ -186,8 +177,6 @@ files:
186
177
  - lib/covered/summary.rb
187
178
  - lib/covered/version.rb
188
179
  - lib/covered/wrapper.rb
189
- - media/.DS_Store
190
- - media/example.png
191
180
  homepage: https://github.com/ioquatix/covered
192
181
  licenses:
193
182
  - MIT
@@ -208,7 +197,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
208
197
  - !ruby/object:Gem::Version
209
198
  version: '0'
210
199
  requirements: []
211
- rubygems_version: 3.1.6
200
+ rubygems_version: 3.3.7
212
201
  signing_key:
213
202
  specification_version: 4
214
203
  summary: A modern approach to code coverage.
metadata.gz.sig CHANGED
Binary file
@@ -1,45 +0,0 @@
1
- name: Development
2
-
3
- on: [push, pull_request]
4
-
5
- jobs:
6
- test:
7
- name: ${{matrix.ruby}} on ${{matrix.os}}
8
- runs-on: ${{matrix.os}}-latest
9
- continue-on-error: ${{matrix.experimental}}
10
-
11
- strategy:
12
- matrix:
13
- os:
14
- - ubuntu
15
- - macos
16
-
17
- ruby:
18
- - "2.6"
19
- - "2.7"
20
- - "3.0"
21
-
22
- experimental: [false]
23
- env: [""]
24
-
25
- include:
26
- - os: ubuntu
27
- ruby: truffleruby
28
- experimental: true
29
- - os: ubuntu
30
- ruby: jruby
31
- experimental: true
32
- - os: ubuntu
33
- ruby: head
34
- experimental: true
35
-
36
- steps:
37
- - uses: actions/checkout@v2
38
- - uses: ruby/setup-ruby@v1
39
- with:
40
- ruby-version: ${{matrix.ruby}}
41
- bundler-cache: true
42
-
43
- - name: Run tests
44
- timeout-minutes: 5
45
- run: ${{matrix.env}} bundle exec rspec
@@ -1,34 +0,0 @@
1
- name: Documentation
2
-
3
- on:
4
- push:
5
- branches:
6
- - main
7
-
8
- env:
9
- BUNDLE_WITH: maintenance
10
-
11
- jobs:
12
- deploy:
13
- runs-on: ubuntu-latest
14
-
15
- steps:
16
- - uses: actions/checkout@v3
17
-
18
- - uses: ruby/setup-ruby@v1
19
- with:
20
- ruby-version: 3.1
21
- bundler-cache: true
22
-
23
- - name: Installing packages
24
- run: sudo apt-get install wget
25
-
26
- - name: Prepare GitHub Pages
27
- run: bundle exec bake github:pages:prepare --directory docs
28
-
29
- - name: Generate documentation
30
- timeout-minutes: 5
31
- run: bundle exec bake utopia:project:static --force no
32
-
33
- - name: Deploy GitHub Pages
34
- run: bundle exec bake github:pages:commit --directory docs
Binary file
@@ -1,11 +0,0 @@
1
-
2
- ENV['COVERAGE'] ||= 'PartialSummary'
3
- require 'covered/policy/default'
4
-
5
- $covered.enable
6
-
7
- require_relative 'test'
8
-
9
- $covered.disable
10
-
11
- $covered.call($stdout)
Binary file
@@ -1,21 +0,0 @@
1
-
2
- require 'erb'
3
- $LOAD_PATH.unshift File.expand_path('../../../lib', __dir__)
4
-
5
- template_path = File.expand_path("template.erb", __dir__)
6
-
7
- ENV['COVERAGE'] ||= 'PartialSummary'
8
- require 'covered/policy/default'
9
-
10
- $covered.enable
11
-
12
- template = ERB.new(File.read(template_path)).tap do |template|
13
- template.filename = template_path
14
- end
15
-
16
- @items = ["Cats", "Dogs", "Chickens"]
17
- puts template.result(binding)
18
-
19
- $covered.disable
20
-
21
- $covered.call($stdout)
@@ -1,7 +0,0 @@
1
- <% for @item in @items %>
2
- <%= @item %>
3
- <% end %>
4
-
5
- <% if 1 == 2 %>
6
- Math is broken.
7
- <% end %>
@@ -1,23 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- require 'pry'
4
- require 'parser/current'
5
-
6
- ast = Parser::CurrentRuby.parse_file('test.rb')
7
- # ast.location.expression.source
8
-
9
- def print_methods(ast)
10
- if ast.is_a? Parser::AST::Node
11
- if ast.type == :send
12
- puts "Calling #{ast.children[1]} on #{ast.location.line}"
13
- end
14
-
15
- ast.children.each do |child|
16
- print_methods(child)
17
- end
18
- end
19
- end
20
-
21
- print_methods(ast)
22
-
23
- binding.pry
@@ -1,7 +0,0 @@
1
-
2
- require 'simplecov'
3
-
4
- SimpleCov.command_name 'Example'
5
- SimpleCov.start
6
-
7
- require_relative 'test'
@@ -1,16 +0,0 @@
1
- trace_point = TracePoint.new(:call, :return, :line, :c_call, :c_return, :b_call, :b_return) do |trace|
2
- puts [trace.path, trace.lineno].join(":")
3
- end
4
-
5
- trace_point.enable
6
-
7
- values = {foo: 10}
8
-
9
- def shell_escape(x)
10
- x
11
- end
12
-
13
- values.map{|key, value| [
14
- key.to_s.upcase,
15
- shell_escape(value) # TracePoint is never triggered for this line.
16
- ]}
@@ -1,8 +0,0 @@
1
-
2
- trace_point = TracePoint.new(:call, :return, :line, :c_call, :c_return, :b_call, :b_return) do |trace|
3
- puts [trace.path, trace.lineno].join(":")
4
- end
5
-
6
- trace_point.enable
7
-
8
- require_relative 'test'
data/media/.DS_Store DELETED
Binary file
data/media/example.png DELETED
Binary file