Class: Rcov::DifferentialAnalyzer
- Inherits:
-
Object
- Object
- Rcov::DifferentialAnalyzer
- Defined in:
- lib/rcov.rb
Direct Known Subclasses
Constant Summary collapse
- @@mutex =
Mutex.new
Instance Method Summary collapse
-
#initialize(install_hook_meth, remove_hook_meth, reset_meth) ⇒ DifferentialAnalyzer
constructor
A new instance of DifferentialAnalyzer.
-
#install_hook ⇒ Object
Start monitoring execution to gather information.
-
#remove_hook ⇒ Object
Stop collecting information.
-
#reset ⇒ Object
Remove the data collected so far.
-
#run_hooked ⇒ Object
Execute the code in the given block, monitoring it in order to gather information about which code was executed.
Constructor Details
#initialize(install_hook_meth, remove_hook_meth, reset_meth) ⇒ DifferentialAnalyzer
Returns a new instance of DifferentialAnalyzer.
387 388 389 390 391 392 393 394 395 |
# File 'lib/rcov.rb', line 387 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 |
Instance Method Details
#install_hook ⇒ Object
Start monitoring execution to gather information. Such data will be collected until #remove_hook is called.
Use #run_hooked instead if possible.
410 411 412 413 414 415 |
# File 'lib/rcov.rb', line 410 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 ⇒ Object
Stop collecting information. #remove_hook will also stop collecting info if it is run inside a #run_hooked block.
420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 |
# File 'lib/rcov.rb', line 420 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 ⇒ Object
Remove the data collected so far. Further collection will start from scratch.
438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 |
# File 'lib/rcov.rb', line 438 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 ⇒ Object
Execute the code in the given block, monitoring it in order to gather information about which code was executed.
399 400 401 402 403 404 |
# File 'lib/rcov.rb', line 399 def run_hooked install_hook yield ensure remove_hook end |