Parent

Rcov::DifferentialAnalyzer

Public Class Methods

new(install_hook_meth, remove_hook_meth, reset_meth) click to toggle source
# File lib/rcov/differential_analyzer.rb, line 6
def initialize(install_hook_meth, remove_hook_meth, reset_meth)
  @cache_state = :wait
  @start_raw_data = data_default
  @end_raw_data = data_default
  @aggregated_data = data_default
  @install_hook_meth = install_hook_meth
  @remove_hook_meth= remove_hook_meth
  @reset_meth= reset_meth
end

Protected Class Methods

hook_level() click to toggle source
# File lib/rcov/differential_analyzer.rb, line 80
def self.hook_level
  raise "must be implemented by the subclass"
end

Public Instance Methods

install_hook() click to toggle source

Start monitoring execution to gather information. Such data will be collected until remove_hook is called.

Use run_hooked instead if possible.

# File lib/rcov/differential_analyzer.rb, line 29
def install_hook
  @start_raw_data = raw_data_absolute
  Rcov::RCOV__.send(@install_hook_meth)
  @cache_state = :hooked
  @@mutex.synchronize{ self.class.hook_level += 1 }
end
remove_hook() click to toggle source

Stop collecting information. remove_hook will also stop collecting info if it is run inside a run_hooked block.

# File lib/rcov/differential_analyzer.rb, line 39
def remove_hook
  @@mutex.synchronize do 
    self.class.hook_level -= 1
    Rcov::RCOV__.send(@remove_hook_meth) if self.class.hook_level == 0
  end
  @end_raw_data = raw_data_absolute
  @cache_state = :done
  # force computation of the stats for the traced code in this run;
  # we cannot simply let it be if self.class.hook_level == 0 because 
  # some other analyzer could install a hook, causing the raw_data_absolute
  # to change again.
  # TODO: lazy computation of raw_data_relative, only when the hook gets
  # activated again.
  raw_data_relative
end
reset() click to toggle source

Remove the data collected so far. Further collection will start from scratch.

# File lib/rcov/differential_analyzer.rb, line 57
def reset
  @@mutex.synchronize do
    if self.class.hook_level == 0
      # Unfortunately there's no way to report this as covered with rcov:
      # if we run the tests under rcov self.class.hook_level will be >= 1 !
      # It is however executed when we run the tests normally.
      Rcov::RCOV__.send(@reset_meth)
      @start_raw_data = data_default
      @end_raw_data = data_default
    else
      @start_raw_data = @end_raw_data = raw_data_absolute
    end
    @raw_data_relative = data_default
    @aggregated_data = data_default
  end
end
run_hooked() click to toggle source

Execute the code in the given block, monitoring it in order to gather information about which code was executed.

# File lib/rcov/differential_analyzer.rb, line 18
def run_hooked
  install_hook
  yield
ensure
  remove_hook
end

Protected Instance Methods

aggregate_data(aggregated_data, delta) click to toggle source
# File lib/rcov/differential_analyzer.rb, line 88
def aggregate_data(aggregated_data, delta)
  raise "must be implemented by the subclass"
end
compute_raw_data_difference(first, last) click to toggle source
# File lib/rcov/differential_analyzer.rb, line 92
def compute_raw_data_difference(first, last)
  raise "must be implemented by the subclass"
end
data_default() click to toggle source
# File lib/rcov/differential_analyzer.rb, line 76
def data_default
  raise "must be implemented by the subclass"
end
raw_data_absolute() click to toggle source
# File lib/rcov/differential_analyzer.rb, line 84
def raw_data_absolute
  raise "must be implemented by the subclass"
end

[Validate]

Generated with the Darkfish Rdoc Generator 2.