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
# 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
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

#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 ExpectationNotMetError was raised
E = Any exception other than ExpectationNotMetError


70
71
72
73
74
75
76
# File 'lib/mspec/runner/formatters/dotted.rb', line 70

def after(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.



50
51
52
# File 'lib/mspec/runner/formatters/dotted.rb', line 50

def before(state = nil)
  @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.



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

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)


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

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)


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

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.



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

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.



94
95
96
97
# File 'lib/mspec/runner/formatters/dotted.rb', line 94

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.



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

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
end