Class: FailFastRunner

Inherits:
Test::Unit::UI::Console::TestRunner
  • Object
show all
Defined in:
lib/test/unit/runner/failfast.rb

Instance Method Summary collapse

Constructor Details

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

Returns a new instance of FailFastRunner.



5
6
7
8
9
10
11
# File 'lib/test/unit/runner/failfast.rb', line 5

def initialize(suite, options={})
  @finished = []
  @bar_length = 50
  @status = Hash.new { |h, k| h[k] = 0 }
  @bar = (0...@bar_length).map { |i| " " }
  super
end

Instance Method Details

#add_fault(fault) ⇒ Object



13
14
15
16
17
18
19
20
21
22
23
24
25
# File 'lib/test/unit/runner/failfast.rb', line 13

def add_fault(fault)
  @faults << fault
  output "\r" + (" " * 80) + "\r"
  output("%3d) %s" % [@faults.length, fault.long_display])
  output("--")
  nl

  @already_outputted = true
  add_progress @finished.size, char_fault(fault), 1

  @status[fault.single_character_display] += 1
  output_progress
end

#add_progress(i, char, priority = 0) ⇒ Object

Adds a char to the progress bar.



52
53
54
55
56
57
58
59
60
# File 'lib/test/unit/runner/failfast.rb', line 52

def add_progress(i, char, priority=0)
  first_index = ((i-1) * @bar_length / @suite.size).to_i
  last_index  = (i * @bar_length / @suite.size).to_i
  # Don't override E's!

  (first_index..last_index).each do |index|
    @bar[index] = char  unless @bar[index] != " " && priority == 0
  end
end

#char_fault(fault) ⇒ Object



40
41
42
43
44
45
# File 'lib/test/unit/runner/failfast.rb', line 40

def char_fault(fault)
  char  = fault.single_character_display
  color = fault_color(fault)
  reset = @reset_color.escape_sequence
  char  = "%s%s%s" % [ color.escape_sequence, char, reset ]
end

#char_successObject



47
48
49
# File 'lib/test/unit/runner/failfast.rb', line 47

def char_success
  "\033[0;43m.\033[0m"
end

#finished(elapsed_time) ⇒ Object



27
28
29
30
31
32
# File 'lib/test/unit/runner/failfast.rb', line 27

def finished(elapsed_time)
  nl
  output("Finished in #{elapsed_time} seconds.")
  nl
  output(@result)
end

#output_progress(mark = nil, color = nil) ⇒ Object



73
74
75
76
77
78
# File 'lib/test/unit/runner/failfast.rb', line 73

def output_progress(mark=nil, color=nil)
  reset = @reset_color.escape_sequence
  perc = [100, @finished.size * 100 / @suite.size].min

  output_status "%3i%% |%s| %3i of %i%s" % [ perc, @bar.join(""), @finished.size, @suite.size, status_indicator ]
end

#output_startedObject



62
63
64
65
# File 'lib/test/unit/runner/failfast.rb', line 62

def output_started
  output("Started")
  nl
end

#output_status(str) ⇒ Object



80
81
82
# File 'lib/test/unit/runner/failfast.rb', line 80

def output_status(str)
  print "\r#{str}"
end

#status_indicatorObject



67
68
69
70
71
# File 'lib/test/unit/runner/failfast.rb', line 67

def status_indicator
  status = @status.map { |char, i| "#{i}#{char}" }.join(" ")
  status = " \033[0;31m[#{status}]\033[0m" unless status.empty?
  status
end

#test_finished(name) ⇒ Object



34
35
36
37
38
# File 'lib/test/unit/runner/failfast.rb', line 34

def test_finished(name)
  @finished << name
  add_progress @finished.size, char_success
  super
end