Class: Test::Unit::UI::Statistics::BaseRunner

Inherits:
TestRunner
  • Object
show all
Defined in:
lib/test/unit/ui/statistics/base_runner.rb

Overview

Inherit from this class to create a runner that has access to statistics.

Implement any/all of the following callbacks in your subclass:

  • reset

  • started

  • finished

  • suite_started

  • suite_finished

  • case_started

  • case_finished

  • assertion

  • error

  • failure

  • pending

  • omission

  • notification

  • fault

Direct Known Subclasses

Lineman::TestRunner

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(suite, options = {}) ⇒ BaseRunner

:nodoc:



47
48
49
50
51
# File 'lib/test/unit/ui/statistics/base_runner.rb', line 47

def initialize suite, options={} #:nodoc:
  super
  @suite_stack = []
  @output = options[:output] || STDOUT
end

Instance Attribute Details

#resultObject

:nodoc:



27
28
29
# File 'lib/test/unit/ui/statistics/base_runner.rb', line 27

def result
  @result
end

Class Method Details

.each_subclassObject

:nodoc:



43
44
45
# File 'lib/test/unit/ui/statistics/base_runner.rb', line 43

def self.each_subclass #:nodoc:
  @@subclasses.each {|kls| yield kls }
end

.inherited(kls) ⇒ Object

:nodoc:



39
40
41
# File 'lib/test/unit/ui/statistics/base_runner.rb', line 39

def self.inherited kls #:nodoc:
  (@@subclasses ||= []) << kls
end

Instance Method Details

#attach_to_mediatorObject

Inherited from TestRunner, sets up callbacks via i-var.



54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
# File 'lib/test/unit/ui/statistics/base_runner.rb', line 54

def attach_to_mediator #:nodoc:
  @mediator.add_listener(Test::Unit::UI::TestRunnerMediator::RESET,
                         &callback(:reset))
  @mediator.add_listener(Test::Unit::UI::TestRunnerMediator::STARTED,
                         &callback(:stats_started, :started))
  @mediator.add_listener(Test::Unit::UI::TestRunnerMediator::FINISHED,
                         &callback(:finished))
  @mediator.add_listener(Test::Unit::TestSuite::STARTED_OBJECT,
                         &callback(:stats_suite_started, :suite_started))
  @mediator.add_listener(Test::Unit::TestSuite::FINISHED_OBJECT,
                         &callback(:suite_finished, :stats_suite_finished))
  @mediator.add_listener(Test::Unit::TestCase::STARTED,
                         &callback(:stats_case_started, :case_started))
  @mediator.add_listener(Test::Unit::TestCase::FINISHED,
                         &callback(:stats_case_finished, :case_finished))
  @mediator.add_listener(Test::Unit::TestResult::PASS_ASSERTION,
                         &callback(:stats_assertion, :assertion))
  @mediator.add_listener(Test::Unit::TestResult::FAULT,
                         &callback(:stats_fault, :fault))
end

#callback(*types) ⇒ Object

Forward to methods (in-order) that we might respond to.



76
77
78
# File 'lib/test/unit/ui/statistics/base_runner.rb', line 76

def callback *types #:nodoc:
  ->(*args) { types.select{|t| respond_to?(t) }.each{|t| send(t, *args) }}
end

#cstatObject

Case Statistics



30
31
32
# File 'lib/test/unit/ui/statistics/base_runner.rb', line 30

def cstat
  @method_metrics
end

#sstatObject

Suite Statistics



35
36
37
# File 'lib/test/unit/ui/statistics/base_runner.rb', line 35

def sstat
  @suite_stack.last
end

#stats_assertion(testresult) ⇒ Object

:nodoc:



101
102
103
# File 'lib/test/unit/ui/statistics/base_runner.rb', line 101

def stats_assertion testresult #:nodoc:
  @method_metrics.pass += 1
end

#stats_case_finished(name) ⇒ Object

:nodoc:



96
97
98
99
# File 'lib/test/unit/ui/statistics/base_runner.rb', line 96

def stats_case_finished name #:nodoc:
  @method_metrics.complete
  update_suites_with_case_statistics
end

#stats_case_started(name) ⇒ Object

:nodoc:



92
93
94
# File 'lib/test/unit/ui/statistics/base_runner.rb', line 92

def stats_case_started name #:nodoc:
  @method_metrics = CaseStatistics.new(@result)
end

#stats_fault(fault) ⇒ Object

:nodoc:



105
106
107
108
109
110
111
112
113
# File 'lib/test/unit/ui/statistics/base_runner.rb', line 105

def stats_fault fault #:nodoc:
  base_type = fault.class.name.split('::').last.downcase
  stat_method_name = "stats_handle_#{base_type}".to_sym
  method_name = "#{base_type}".to_sym
  send(stat_method_name, fault)
  if respond_to?(method_name)
    send(method_name, fault)
  end
end

#stats_handle_error(fault) ⇒ Object

:nodoc:



115
116
117
118
119
# File 'lib/test/unit/ui/statistics/base_runner.rb', line 115

def stats_handle_error fault #:nodoc:
  # Don't count errors before setup (i.e. in startup).
  return unless @method_metrics
  @method_metrics.errs += 1
end

#stats_handle_failure(fault) ⇒ Object

:nodoc:



121
122
123
124
125
# File 'lib/test/unit/ui/statistics/base_runner.rb', line 121

def stats_handle_failure fault #:nodoc:
  # The PASS_ASSERTION message just means it was run, we handle failures
  @method_metrics.fail += 1
  @method_metrics.pass -= 1
end

#stats_handle_notification(fault) ⇒ Object

:nodoc:



135
136
137
# File 'lib/test/unit/ui/statistics/base_runner.rb', line 135

def stats_handle_notification fault #:nodoc:
  @method_metrics.note += 1
end

#stats_handle_omission(fault) ⇒ Object

:nodoc:



131
132
133
# File 'lib/test/unit/ui/statistics/base_runner.rb', line 131

def stats_handle_omission fault #:nodoc:
  @method_metrics.omit += 1
end

#stats_handle_pending(fault) ⇒ Object

:nodoc:



127
128
129
# File 'lib/test/unit/ui/statistics/base_runner.rb', line 127

def stats_handle_pending fault #:nodoc:
  @method_metrics.pend += 1
end

#stats_started(result) ⇒ Object

:nodoc:



80
81
82
# File 'lib/test/unit/ui/statistics/base_runner.rb', line 80

def stats_started result #:nodoc:
  @result = result
end

#stats_suite_finished(testsuite) ⇒ Object

:nodoc:



88
89
90
# File 'lib/test/unit/ui/statistics/base_runner.rb', line 88

def stats_suite_finished testsuite #:nodoc:
  @suite_stack.pop
end

#stats_suite_started(testsuite) ⇒ Object

:nodoc:



84
85
86
# File 'lib/test/unit/ui/statistics/base_runner.rb', line 84

def stats_suite_started testsuite #:nodoc:
  @suite_stack << SuiteStatistics.new(testsuite)
end

#update_suites_with_case_statisticsObject

:nodoc:



139
140
141
142
143
# File 'lib/test/unit/ui/statistics/base_runner.rb', line 139

def update_suites_with_case_statistics #:nodoc:
  @suite_stack.each do |suite|
    suite.add_test_case_statistics @method_metrics
  end
end