Class | Test::Unit::UI::Fox::TestRunner |
In: |
lib/test/unit/ui/fox/testrunner.rb
|
Parent: | Object |
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.
RED_STYLE | = | FXRGBA(0xFF,0,0,0xFF) |
GREEN_STYLE | = | FXRGBA(0,0xFF,0,0xFF) |
Creates a new TestRunner for running the passed suite.
# File lib/test/unit/ui/fox/testrunner.rb, line 32 32: def initialize(suite, output_level = NORMAL) 33: if (suite.respond_to?(:suite)) 34: @suite = suite.suite 35: else 36: @suite = suite 37: end 38: 39: @result = nil 40: @red = false 41: end
# File lib/test/unit/ui/fox/testrunner.rb, line 97 97: def add_fault(fault) 98: if ( ! @red ) 99: @test_progress_bar.barColor = RED_STYLE 100: @red = true 101: end 102: item = FaultListItem.new(fault) 103: @fault_list.appendItem(item) 104: end
# File lib/test/unit/ui/fox/testrunner.rb, line 61 61: def attach_to_mediator 62: @mediator.add_listener(TestRunnerMediator::RESET, &method(:reset_ui)) 63: @mediator.add_listener(TestResult::FAULT, &method(:add_fault)) 64: @mediator.add_listener(TestResult::CHANGED, &method(:result_changed)) 65: @mediator.add_listener(TestRunnerMediator::STARTED, &method(:started)) 66: @mediator.add_listener(TestCase::STARTED, &method(:test_started)) 67: @mediator.add_listener(TestRunnerMediator::FINISHED, &method(:finished)) 68: end
# File lib/test/unit/ui/fox/testrunner.rb, line 114 114: def clear_fault 115: raw_show_fault("") 116: end
# File lib/test/unit/ui/fox/testrunner.rb, line 183 183: def create_application 184: app = FXApp.new("TestRunner", "Test::Unit") 185: app.init([]) 186: app 187: end
# File lib/test/unit/ui/fox/testrunner.rb, line 207 207: def create_button(parent, text, action) 208: FXButton.new(parent, text).connect(SEL_COMMAND, &action) 209: end
# File lib/test/unit/ui/fox/testrunner.rb, line 239 239: def create_detail_panel(parent) 240: FXHorizontalFrame.new(parent, LAYOUT_FILL_X | LAYOUT_FILL_Y | FRAME_SUNKEN | FRAME_THICK) 241: end
# File lib/test/unit/ui/fox/testrunner.rb, line 247 247: def create_entry(parent) 248: entry = FXTextField.new(parent, 30, nil, 0, TEXTFIELD_NORMAL | LAYOUT_SIDE_BOTTOM | LAYOUT_FILL_X) 249: entry.disable 250: entry 251: end
# File lib/test/unit/ui/fox/testrunner.rb, line 227 227: def create_fault_list(parent) 228: list = FXList.new(parent, 10, nil, 0, LIST_SINGLESELECT | LAYOUT_FILL_X) #, 0, 0, 0, 150) 229: list.connect(SEL_COMMAND) do |sender, sel, ptr| 230: if sender.retrieveItem(sender.currentItem).selected? 231: show_fault(sender.retrieveItem(sender.currentItem).fault) 232: else 233: clear_fault 234: end 235: end 236: list 237: end
# File lib/test/unit/ui/fox/testrunner.rb, line 215 215: def create_info_panel(parent) 216: FXMatrix.new(parent, 1, MATRIX_BY_ROWS | LAYOUT_FILL_X) 217: end
# File lib/test/unit/ui/fox/testrunner.rb, line 219 219: def create_label(parent, text) 220: FXLabel.new(parent, text, nil, JUSTIFY_CENTER_X | LAYOUT_FILL_COLUMN) 221: end
# File lib/test/unit/ui/fox/testrunner.rb, line 223 223: def create_list_panel(parent) 224: FXHorizontalFrame.new(parent, LAYOUT_FILL_X | FRAME_SUNKEN | FRAME_THICK) 225: end
# File lib/test/unit/ui/fox/testrunner.rb, line 197 197: def create_main_panel(parent) 198: panel = FXVerticalFrame.new(parent, LAYOUT_FILL_X | LAYOUT_FILL_Y) 199: panel.vSpacing = 10 200: panel 201: end
# File lib/test/unit/ui/fox/testrunner.rb, line 211 211: def create_progress_bar(parent) 212: FXProgressBar.new(parent, nil, 0, PROGRESSBAR_NORMAL | LAYOUT_FILL_X) 213: end
# File lib/test/unit/ui/fox/testrunner.rb, line 203 203: def create_suite_panel(parent) 204: FXHorizontalFrame.new(parent, LAYOUT_SIDE_LEFT | LAYOUT_FILL_X) 205: end
# File lib/test/unit/ui/fox/testrunner.rb, line 243 243: def create_text(parent) 244: FXText.new(parent, nil, 0, TEXT_READONLY | LAYOUT_FILL_X | LAYOUT_FILL_Y) 245: end
# File lib/test/unit/ui/fox/testrunner.rb, line 193 193: def create_tooltip(app) 194: FXTooltip.new(app) 195: end
# File lib/test/unit/ui/fox/testrunner.rb, line 189 189: def create_window(app) 190: FXMainWindow.new(app, "Test::Unit TestRunner", nil, nil, DECOR_ALL, 0, 0, 450) 191: end
# File lib/test/unit/ui/fox/testrunner.rb, line 140 140: def finished(elapsed_time) 141: output_status("Finished in #{elapsed_time} seconds") 142: end
# File lib/test/unit/ui/fox/testrunner.rb, line 144 144: def output_status(string) 145: @status_entry.text = string 146: @status_entry.repaint 147: end
# File lib/test/unit/ui/fox/testrunner.rb, line 110 110: def raw_show_fault(string) 111: @detail_text.setText(string) 112: end
# File lib/test/unit/ui/fox/testrunner.rb, line 83 83: def reset_ui(count) 84: @test_progress_bar.barColor = GREEN_STYLE 85: @test_progress_bar.total = count 86: @test_progress_bar.progress = 0 87: @red = false 88: 89: @test_count_label.text = "0" 90: @assertion_count_label.text = "0" 91: @failure_count_label.text = "0" 92: @error_count_label.text = "0" 93: 94: @fault_list.clearItems 95: end
# File lib/test/unit/ui/fox/testrunner.rb, line 118 118: def result_changed(result) 119: @test_progress_bar.progress = result.run_count 120: 121: @test_count_label.text = result.run_count.to_s 122: @assertion_count_label.text = result.assertion_count.to_s 123: @failure_count_label.text = result.failure_count.to_s 124: @error_count_label.text = result.error_count.to_s 125: 126: # repaint now! 127: @info_panel.repaint 128: @application.flush 129: end
# File lib/test/unit/ui/fox/testrunner.rb, line 52 52: def setup_mediator 53: @mediator = TestRunnerMediator.new(@suite) 54: suite_name = @suite.to_s 55: if ( @suite.kind_of?(Module) ) 56: suite_name = @suite.name 57: end 58: @suite_name_entry.text = suite_name 59: end
# File lib/test/unit/ui/fox/testrunner.rb, line 149 149: def setup_ui 150: @application = create_application 151: create_tooltip(@application) 152: 153: @window = create_window(@application) 154: 155: @status_entry = create_entry(@window) 156: 157: main_panel = create_main_panel(@window) 158: 159: suite_panel = create_suite_panel(main_panel) 160: create_label(suite_panel, "Suite:") 161: @suite_name_entry = create_entry(suite_panel) 162: create_button(suite_panel, "&Run\tRun the current suite", proc { @mediator.run_suite }) 163: 164: @test_progress_bar = create_progress_bar(main_panel) 165: 166: @info_panel = create_info_panel(main_panel) 167: create_label(@info_panel, "Tests:") 168: @test_count_label = create_label(@info_panel, "0") 169: create_label(@info_panel, "Assertions:") 170: @assertion_count_label = create_label(@info_panel, "0") 171: create_label(@info_panel, "Failures:") 172: @failure_count_label = create_label(@info_panel, "0") 173: create_label(@info_panel, "Errors:") 174: @error_count_label = create_label(@info_panel, "0") 175: 176: list_panel = create_list_panel(main_panel) 177: @fault_list = create_fault_list(list_panel) 178: 179: detail_panel = create_detail_panel(main_panel) 180: @detail_text = create_text(detail_panel) 181: end
# File lib/test/unit/ui/fox/testrunner.rb, line 106 106: def show_fault(fault) 107: raw_show_fault(fault.long_display) 108: end
Begins the test run.
# File lib/test/unit/ui/fox/testrunner.rb, line 44 44: def start 45: setup_ui 46: setup_mediator 47: attach_to_mediator 48: start_ui 49: @result 50: end
# File lib/test/unit/ui/fox/testrunner.rb, line 70 70: def start_ui 71: @application.create 72: @window.show(PLACEMENT_SCREEN) 73: @application.addTimeout(1) do 74: @mediator.run_suite 75: end 76: @application.run 77: end
# File lib/test/unit/ui/fox/testrunner.rb, line 131 131: def started(result) 132: @result = result 133: output_status("Started...") 134: end