In Files

  • test/unit/ui/fox/testrunner.rb

Test::Unit::UI::Fox::TestRunner

Runs a Test::Unit::TestSuite in a Fox UI. Obviously, this one requires you to have Fox (www.fox-toolkit.org/fox.html) and the Ruby Fox extension (fxruby.sourceforge.net/) installed.

Public Class Methods

new(suite, output_level = NORMAL) click to toggle source

Creates a new TestRunner for running the passed suite.

 
               # File test/unit/ui/fox/testrunner.rb, line 32
def initialize(suite, output_level = NORMAL)
  if (suite.respond_to?(:suite))
    @suite = suite.suite
  else
    @suite = suite
  end

  @result = nil
  @red = false
end
            

Public Instance Methods

add_fault(fault) click to toggle source
 
               # File test/unit/ui/fox/testrunner.rb, line 97
def add_fault(fault)
  if ( ! @red )
    @test_progress_bar.barColor = RED_STYLE
    @red = true
  end
  item = FaultListItem.new(fault)
  @fault_list.appendItem(item)
end
            
attach_to_mediator() click to toggle source
 
               # File test/unit/ui/fox/testrunner.rb, line 61
def attach_to_mediator
  @mediator.add_listener(TestRunnerMediator::RESET, &method(:reset_ui))
  @mediator.add_listener(TestResult::FAULT, &method(:add_fault))
  @mediator.add_listener(TestResult::CHANGED, &method(:result_changed))
  @mediator.add_listener(TestRunnerMediator::STARTED, &method(:started))
  @mediator.add_listener(TestCase::STARTED, &method(:test_started))
  @mediator.add_listener(TestRunnerMediator::FINISHED, &method(:finished))
end
            
clear_fault() click to toggle source
 
               # File test/unit/ui/fox/testrunner.rb, line 114
def clear_fault
  raw_show_fault("")
end
            
create_application() click to toggle source
 
               # File test/unit/ui/fox/testrunner.rb, line 183
def create_application
  app = FXApp.new("TestRunner", "Test::Unit")
  app.init([])
  app
end
            
create_button(parent, text, action) click to toggle source
 
               # File test/unit/ui/fox/testrunner.rb, line 207
def create_button(parent, text, action)
  FXButton.new(parent, text).connect(SEL_COMMAND, &action)
end
            
create_detail_panel(parent) click to toggle source
 
               # File test/unit/ui/fox/testrunner.rb, line 239
def create_detail_panel(parent)
  FXHorizontalFrame.new(parent, LAYOUT_FILL_X | LAYOUT_FILL_Y | FRAME_SUNKEN | FRAME_THICK)
end
            
create_entry(parent) click to toggle source
 
               # File test/unit/ui/fox/testrunner.rb, line 247
def create_entry(parent)
  entry = FXTextField.new(parent, 30, nil, 0, TEXTFIELD_NORMAL | LAYOUT_SIDE_BOTTOM | LAYOUT_FILL_X)
  entry.disable
  entry
end
            
create_fault_list(parent) click to toggle source
 
               # File test/unit/ui/fox/testrunner.rb, line 227
def create_fault_list(parent)
  list = FXList.new(parent, 10, nil, 0, LIST_SINGLESELECT | LAYOUT_FILL_X) #, 0, 0, 0, 150)
  list.connect(SEL_COMMAND) do |sender, sel, ptr|
    if sender.retrieveItem(sender.currentItem).selected?
      show_fault(sender.retrieveItem(sender.currentItem).fault)
    else
      clear_fault
    end
  end
  list
end
            
create_info_panel(parent) click to toggle source
 
               # File test/unit/ui/fox/testrunner.rb, line 215
def create_info_panel(parent)
  FXMatrix.new(parent, 1, MATRIX_BY_ROWS | LAYOUT_FILL_X)
end
            
create_label(parent, text) click to toggle source
 
               # File test/unit/ui/fox/testrunner.rb, line 219
def create_label(parent, text)
  FXLabel.new(parent, text, nil, JUSTIFY_CENTER_X | LAYOUT_FILL_COLUMN)
end
            
create_list_panel(parent) click to toggle source
 
               # File test/unit/ui/fox/testrunner.rb, line 223
def create_list_panel(parent)
  FXHorizontalFrame.new(parent, LAYOUT_FILL_X | FRAME_SUNKEN | FRAME_THICK)
end
            
create_main_panel(parent) click to toggle source
 
               # File test/unit/ui/fox/testrunner.rb, line 197
def create_main_panel(parent)
  panel = FXVerticalFrame.new(parent, LAYOUT_FILL_X | LAYOUT_FILL_Y)
  panel.vSpacing = 10
  panel
end
            
create_progress_bar(parent) click to toggle source
 
               # File test/unit/ui/fox/testrunner.rb, line 211
def create_progress_bar(parent)
  FXProgressBar.new(parent, nil, 0, PROGRESSBAR_NORMAL | LAYOUT_FILL_X)
end
            
create_suite_panel(parent) click to toggle source
 
               # File test/unit/ui/fox/testrunner.rb, line 203
def create_suite_panel(parent)
  FXHorizontalFrame.new(parent, LAYOUT_SIDE_LEFT | LAYOUT_FILL_X)
end
            
create_text(parent) click to toggle source
 
               # File test/unit/ui/fox/testrunner.rb, line 243
def create_text(parent)
  FXText.new(parent, nil, 0, TEXT_READONLY | LAYOUT_FILL_X | LAYOUT_FILL_Y)
end
            
create_tooltip(app) click to toggle source
 
               # File test/unit/ui/fox/testrunner.rb, line 193
def create_tooltip(app)
  FXTooltip.new(app)
end
            
create_window(app) click to toggle source
 
               # File test/unit/ui/fox/testrunner.rb, line 189
def create_window(app)
  FXMainWindow.new(app, "Test::Unit TestRunner", nil, nil, DECOR_ALL, 0, 0, 450)
end
            
finished(elapsed_time) click to toggle source
 
               # File test/unit/ui/fox/testrunner.rb, line 140
def finished(elapsed_time)
  output_status("Finished in #{elapsed_time} seconds")
end
            
output_status(string) click to toggle source
 
               # File test/unit/ui/fox/testrunner.rb, line 144
def output_status(string)
  @status_entry.text = string
  @status_entry.repaint
end
            
raw_show_fault(string) click to toggle source
 
               # File test/unit/ui/fox/testrunner.rb, line 110
def raw_show_fault(string)
  @detail_text.setText(string)
end
            
reset_ui(count) click to toggle source
 
               # File test/unit/ui/fox/testrunner.rb, line 83
def reset_ui(count)
  @test_progress_bar.barColor = GREEN_STYLE
  @test_progress_bar.total = count
  @test_progress_bar.progress = 0
  @red = false
  
  @test_count_label.text = "0"
  @assertion_count_label.text = "0"
  @failure_count_label.text = "0"
  @error_count_label.text = "0"
  
  @fault_list.clearItems
end
            
result_changed(result) click to toggle source
 
               # File test/unit/ui/fox/testrunner.rb, line 118
def result_changed(result)
  @test_progress_bar.progress = result.run_count
  
  @test_count_label.text = result.run_count.to_s
  @assertion_count_label.text = result.assertion_count.to_s
  @failure_count_label.text = result.failure_count.to_s
  @error_count_label.text = result.error_count.to_s

   # repaint now!
   @info_panel.repaint
   @application.flush
end
            
setup_mediator() click to toggle source
 
               # File test/unit/ui/fox/testrunner.rb, line 52
def setup_mediator
  @mediator = TestRunnerMediator.new(@suite)
  suite_name = @suite.to_s
  if ( @suite.kind_of?(Module) )
    suite_name = @suite.name
  end
  @suite_name_entry.text = suite_name
end
            
setup_ui() click to toggle source
 
               # File test/unit/ui/fox/testrunner.rb, line 149
def setup_ui
  @application = create_application
  create_tooltip(@application)

  @window = create_window(@application)
  
  @status_entry = create_entry(@window)
  
  main_panel = create_main_panel(@window)
  
  suite_panel = create_suite_panel(main_panel)
  create_label(suite_panel, "Suite:")
  @suite_name_entry = create_entry(suite_panel)
  create_button(suite_panel, "&Run\tRun the current suite", proc { @mediator.run_suite })
  
  @test_progress_bar = create_progress_bar(main_panel)
  
  @info_panel = create_info_panel(main_panel)
  create_label(@info_panel, "Tests:")
  @test_count_label = create_label(@info_panel, "0")
  create_label(@info_panel, "Assertions:")
  @assertion_count_label = create_label(@info_panel, "0")
  create_label(@info_panel, "Failures:")
  @failure_count_label = create_label(@info_panel, "0")
  create_label(@info_panel, "Errors:")
  @error_count_label = create_label(@info_panel, "0")
  
  list_panel = create_list_panel(main_panel)
  @fault_list = create_fault_list(list_panel)
  
  detail_panel = create_detail_panel(main_panel)
  @detail_text = create_text(detail_panel)
end
            
show_fault(fault) click to toggle source
 
               # File test/unit/ui/fox/testrunner.rb, line 106
def show_fault(fault)
  raw_show_fault(fault.long_display)
end
            
start() click to toggle source

Begins the test run.

 
               # File test/unit/ui/fox/testrunner.rb, line 44
def start
  setup_ui
  setup_mediator
  attach_to_mediator
  start_ui
  @result
end
            
start_ui() click to toggle source
 
               # File test/unit/ui/fox/testrunner.rb, line 70
def start_ui
  @application.create
  @window.show(PLACEMENT_SCREEN)
  @application.addTimeout(1) do
    @mediator.run_suite
  end
  @application.run
end
            
started(result) click to toggle source
 
               # File test/unit/ui/fox/testrunner.rb, line 131
def started(result)
  @result = result
  output_status("Started...")
end
            
stop() click to toggle source
 
               # File test/unit/ui/fox/testrunner.rb, line 79
def stop
  @application.exit(0)
end
            
test_started(test_name) click to toggle source
 
               # File test/unit/ui/fox/testrunner.rb, line 136
def test_started(test_name)
  output_status("Running #{test_name}...")
end