Sha256: 0ebdb4e20306dbfa1f678091306638a80c0ac033eafdcf7db51074f671a2b210

Contents?: true

Size: 1.83 KB

Versions: 12

Compression:

Stored size: 1.83 KB

Contents

# frozen_string_literal: true

# This is a complete replacement for the builtin Coverage module of Ruby

module DeepCover
  module CoverageReplacement
    OLD_COVERAGE_SENTINEL = Object.new
    ALL_COVERAGES = {lines: true, branches: true, methods: true}.freeze

    class << self
      def running?
        DeepCover.running?
      end

      def start(targets = OLD_COVERAGE_SENTINEL)
        if targets == OLD_COVERAGE_SENTINEL
          # Do nothing
        elsif targets == :all
          targets = ALL_COVERAGES
        else
          targets = targets.to_hash.slice(*ALL_COVERAGES.keys).select { |_, v| v }
          targets = targets.map { |k, v| [k, !!v] }.to_h
          raise 'no measuring target is specified' if targets.empty?
        end

        if DeepCover.running?
          raise 'cannot change the measuring target during coverage measurement' if @started_args != targets
          return
        end

        @started_args = targets

        DeepCover.start
        nil
      end

      def result
        r = peek_result
        DeepCover.stop
        r
      end

      def peek_result
        raise 'coverage measurement is not enabled' unless running?
        if @started_args == OLD_COVERAGE_SENTINEL
          DeepCover.coverage.covered_codes.map do |covered_code|
            [covered_code.path.to_s, covered_code.line_coverage(allow_partial: false)]
          end.to_h
        else
          DeepCover.coverage.covered_codes.map do |covered_code|
            cov = {}
            cov[:branches] = DeepCover::Analyser::Ruby25LikeBranch.new(covered_code).results if @started_args[:branches]
            cov[:lines] = covered_code.line_coverage(allow_partial: false) if @started_args[:lines]
            cov[:methods] = {} if @started_args[:methods]
            [covered_code.path.to_s, cov]
          end.to_h
        end
      end
    end
  end
end

Version data entries

12 entries across 12 versions & 2 rubygems

Version Path
deep-cover-core-0.7.0 lib/deep_cover/core_ext/coverage_replacement.rb
deep-cover-core-0.6.4 lib/deep_cover/core_ext/coverage_replacement.rb
deep-cover-core-0.6.3 lib/deep_cover/core_ext/coverage_replacement.rb
deep-cover-core-0.6.3.pre lib/deep_cover/core_ext/coverage_replacement.rb
deep-cover-0.6.2 lib/deep_cover/core_ext/coverage_replacement.rb
deep-cover-0.6.1 lib/deep_cover/core_ext/coverage_replacement.rb
deep-cover-0.6.0 lib/deep_cover/core_ext/coverage_replacement.rb
deep-cover-0.5.7 lib/deep_cover/core_ext/coverage_replacement.rb
deep-cover-0.5.6 lib/deep_cover/core_ext/coverage_replacement.rb
deep-cover-0.5.5 lib/deep_cover/core_ext/coverage_replacement.rb
deep-cover-0.5.4 lib/deep_cover/core_ext/coverage_replacement.rb
deep-cover-0.5.3 lib/deep_cover/core_ext/coverage_replacement.rb