class Autobuild::TestUtility
Control of the test facility for a package
Attributes
Controls whether code coverage should be measured
@param [Boolean,nil] flag enable or disable code coverage. If set to
nil, will use the default from {TestUtility.coverage?}
Where the code coverage will be generated
If left unset, {Utility#source_dir} will be used instead. Relative paths are resolved relative to {Package#builddir}
Where the code coverage will be generated
If left unset, {Utility#target_dir}/coverage will be used instead. Relative paths are resolved relative to {Package#prefix}
Public Class Methods
Enable code coverage for all tests
# File lib/autobuild/test_utility.rb, line 12 def self.coverage_enabled=(flag) @coverage_enabled = flag end
Whether coverage is enabled for all tests
# File lib/autobuild/test_utility.rb, line 7 def self.coverage_enabled? @coverage_enabled end
# File lib/autobuild/test_utility.rb, line 16 def initialize(name, package, install_on_error: true) super(name, package, install_on_error: install_on_error) @coverage_enabled = nil @coverage_source_dir = nil @coverage_target_dir = nil end
Public Instance Methods
# File lib/autobuild/test_utility.rb, line 31 def coverage_available? @coverage_source_dir end
Whether code coverage should be generated for these tests
# File lib/autobuild/test_utility.rb, line 24 def coverage_enabled? if @coverage_enabled.nil? TestUtility.coverage_enabled? else @coverage_enabled end end
The full path to the coverage information
It cannot be a subdirectory of {#source_dir}
@return [String]
# File lib/autobuild/test_utility.rb, line 52 def coverage_source_dir if @coverage_source_dir relative = if package.respond_to?(:builddir) package.builddir else package.srcdir end File.expand_path(@coverage_source_dir, relative) end end
Where the coverage information should be installed
It is the same than {Utility#target_dir}/coverage by default
@return [String]
# File lib/autobuild/test_utility.rb, line 73 def coverage_target_dir if @coverage_target_dir File.expand_path(@coverage_target_dir, package.prefix) elsif (target_dir = self.target_dir) File.join(target_dir, 'coverage') end end
# File lib/autobuild/test_utility.rb, line 81 def install super if !coverage_enabled? return elsif !coverage_available? package.warn "%s: #coverage_source_dir not set on #test_utility, "\ "skipping installation of the code coverage results" end coverage_target_dir = self.coverage_target_dir coverage_source_dir = self.coverage_source_dir if "#{coverage_source_dir}/".start_with?("#{source_dir}/") raise ArgumentError, "#coverage_source_dir cannot be a subdirectory "\ "of #source_dir in #{package.name}" elsif target_dir == coverage_target_dir raise ArgumentError, "#coverage_target_dir cannot be the same than of "\ "#target_dir in #{package.name}" end FileUtils.mkdir_p File.dirname(coverage_target_dir) FileUtils.cp_r coverage_source_dir, coverage_target_dir package.message "%s: copied test coverage results for #{package.name} from "\ "#{coverage_source_dir} to #{coverage_target_dir}" end