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.
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
# 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
# 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
# File test/unit/ui/fox/testrunner.rb, line 114
def clear_fault
raw_show_fault("")
end
# File test/unit/ui/fox/testrunner.rb, line 183
def create_application
app = FXApp.new("TestRunner", "Test::Unit")
app.init([])
app
end
# 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
# 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
# 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
# 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
# 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
# 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
# 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
# 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
# File test/unit/ui/fox/testrunner.rb, line 203
def create_suite_panel(parent)
FXHorizontalFrame.new(parent, LAYOUT_SIDE_LEFT | LAYOUT_FILL_X)
end
# 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
# File test/unit/ui/fox/testrunner.rb, line 193
def create_tooltip(app)
FXTooltip.new(app)
end
# 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
# File test/unit/ui/fox/testrunner.rb, line 140
def finished(elapsed_time)
output_status("Finished in #{elapsed_time} seconds")
end
# File test/unit/ui/fox/testrunner.rb, line 144
def output_status(string)
@status_entry.text = string
@status_entry.repaint
end
# File test/unit/ui/fox/testrunner.rb, line 110
def raw_show_fault(string)
@detail_text.setText(string)
end
# 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
# 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
# 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
# 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
# File test/unit/ui/fox/testrunner.rb, line 106
def show_fault(fault)
raw_show_fault(fault.long_display)
end
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
# 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
# File test/unit/ui/fox/testrunner.rb, line 131
def started(result)
@result = result
output_status("Started...")
end
Commenting is here to help enhance the documentation. For example, code samples, or clarification of the documentation.
If you have questions about Ruby or the documentation, please post to one of the Ruby mailing lists. You will get better, faster, help that way.
If you wish to post a correction of the docs, please do so, but also file bug report so that it can be corrected for the next release. Thank you.
If you want to help improve the Ruby documentation, please see Improve the docs, or visit Documenting-ruby.org.