Class: DottedFormatter

Inherits:
Object show all
Defined in:
lib/mspec/runner/formatters/dotted.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(out = nil) ⇒ DottedFormatter

Returns a new instance of DottedFormatter.



8
9
10
11
12
13
14
15
16
17
18
19
# File 'lib/mspec/runner/formatters/dotted.rb', line 8

def initialize(out=nil)
  @exception = @failure = false
  @exceptions = []
  @count = 0
  if out.nil?
    @out = $stdout
  else
    @out = File.open out, "w"
  end

  @current_state = nil
end

Instance Attribute Details

#exceptionsObject (readonly)

Returns the value of attribute exceptions.



6
7
8
# File 'lib/mspec/runner/formatters/dotted.rb', line 6

def exceptions
  @exceptions
end

#tallyObject (readonly)

Returns the value of attribute tally.



6
7
8
# File 'lib/mspec/runner/formatters/dotted.rb', line 6

def tally
  @tally
end

#timerObject (readonly)

Returns the value of attribute timer.



6
7
8
# File 'lib/mspec/runner/formatters/dotted.rb', line 6

def timer
  @timer
end

Instance Method Details

#abortObject



36
37
38
39
40
# File 'lib/mspec/runner/formatters/dotted.rb', line 36

def abort
  if @current_state
    puts " aborting example: #{@current_state.description}"
  end
end

#after(state = nil) ⇒ Object

Callback for the MSpec :after event. Prints an indicator for the result of evaluating this example as follows:

. = No failure or error
F = An SpecExpectationNotMetError was raised
E = Any exception other than SpecExpectationNotMetError


80
81
82
83
84
85
86
87
88
# File 'lib/mspec/runner/formatters/dotted.rb', line 80

def after(state = nil)
  @current_state = nil

  unless exception?
    print "."
  else
    print failure? ? "F" : "E"
  end
end

#before(state = nil) ⇒ Object

Callback for the MSpec :before event. Resets the #exception? and #failure flags.



59
60
61
62
# File 'lib/mspec/runner/formatters/dotted.rb', line 59

def before(state=nil)
  @current_state = state
  @failure = @exception = false
end

#exception(exception) ⇒ Object

Callback for the MSpec :exception event. Stores the ExceptionState object to generate the list of backtraces after all the specs are run. Also updates the internal #exception? and #failure? flags.



68
69
70
71
72
73
# File 'lib/mspec/runner/formatters/dotted.rb', line 68

def exception(exception)
  @count += 1
  @failure = @exception ? @failure && exception.failure? : exception.failure?
  @exception = true
  @exceptions << exception
end

#exception?Boolean

Returns true if any exception is raised while running an example. This flag is reset before each example is evaluated.

Returns:

  • (Boolean)


45
46
47
# File 'lib/mspec/runner/formatters/dotted.rb', line 45

def exception?
  @exception
end

#failure?Boolean

Returns true if all exceptions during the evaluation of an example are failures rather than errors. See ExceptionState#failure. This flag is reset before each example is evaluated.

Returns:

  • (Boolean)


53
54
55
# File 'lib/mspec/runner/formatters/dotted.rb', line 53

def failure?
  @failure
end

#finishObject

Callback for the MSpec :finish event. Prints a description and backtrace for every exception that occurred while evaluating the examples.



93
94
95
96
97
98
99
100
101
102
103
# File 'lib/mspec/runner/formatters/dotted.rb', line 93

def finish
  print "\n"
  count = 0
  @exceptions.each do |exc|
    outcome = exc.failure? ? "FAILED" : "ERROR"
    print "\n#{count += 1})\n#{exc.description} #{outcome}\n"
    print exc.message, "\n"
    print exc.backtrace, "\n"
  end
  print "\n#{@timer.format}\n\n#{@tally.format}\n"
end

A convenience method to allow printing to different outputs.



106
107
108
109
# File 'lib/mspec/runner/formatters/dotted.rb', line 106

def print(*args)
  @out.print(*args)
  @out.flush rescue nil #IronRuby throws a .NET exception on IO.flush
end

#registerObject

Creates the TimerAction and TallyAction instances and registers them. Registers self for the :exception, :before, :after, and :finish actions.



24
25
26
27
28
29
30
31
32
33
34
# File 'lib/mspec/runner/formatters/dotted.rb', line 24

def register
  (@timer = TimerAction.new).register
  (@tally = TallyAction.new).register
  @counter = @tally.counter

  MSpec.register :exception, self
  MSpec.register :before,    self
  MSpec.register :after,     self
  MSpec.register :finish,    self
  MSpec.register :abort,     self
end