| Class | Test::Unit::UI::GTK2::TestRunner |
| In: |
lib/test/unit/ui/gtk2/testrunner.rb
|
| Parent: | Object |
# File lib/test/unit/ui/gtk2/testrunner.rb, line 443
443: def initialize(suite, output_level = NORMAL)
444: if suite.respond_to?(:suite) then
445: @suite = suite.suite
446: else
447: @suite = suite
448: end
449: @result = nil
450:
451: @runner = Thread.current
452: @restart_signal = Class.new(Exception)
453: @viewer = Thread.start do
454: @runner.join rescue @runner.run
455: Gtk.main
456: end
457: @viewer.join rescue nil # wait deadlock to handshake
458: end
# File lib/test/unit/ui/gtk2/testrunner.rb, line 237
237: def progress_panel
238: lazy_initialize(:progress_panel) do
239: @progress_panel = Gtk::HBox.new(false, 10)
240: @progress_panel.border_width = 10
241: @progress_panel.pack_start(test_progress_bar, true, true, 0)
242: end
243: end
# File lib/test/unit/ui/gtk2/testrunner.rb, line 245
245: def run_button
246: lazy_initialize(:run_button) do
247: @run_button = Gtk::Button.new("Run")
248: end
249: end
# File lib/test/unit/ui/gtk2/testrunner.rb, line 435
435: def start
436: setup_mediator
437: setup_ui
438: attach_to_mediator
439: start_ui
440: @result
441: end
# File lib/test/unit/ui/gtk2/testrunner.rb, line 330
330: def test_finished(result)
331: test_progress_bar.fraction += 1.0 / @count
332: end
# File lib/test/unit/ui/gtk2/testrunner.rb, line 358
358: def add_fault(fault)
359: if not @red then
360: test_progress_bar.style = red_style
361: @red = true
362: end
363: fault_list.add_fault(fault)
364: end
# File lib/test/unit/ui/gtk2/testrunner.rb, line 177
177: def assertion_count_label
178: lazy_initialize(:assertion_count_label) do
179: @assertion_count_label = Gtk::Label.new("0")
180: @assertion_count_label.justify = Gtk::JUSTIFY_LEFT
181: end
182: end
# File lib/test/unit/ui/gtk2/testrunner.rb, line 413
413: def attach_to_mediator
414: run_button.signal_connect("clicked", nil) { run_test }
415: @mediator.add_listener(TestRunnerMediator::RESET, &method(:reset_ui))
416: @mediator.add_listener(TestRunnerMediator::STARTED, &method(:started))
417: @mediator.add_listener(TestRunnerMediator::FINISHED, &method(:finished))
418: @mediator.add_listener(TestResult::FAULT, &method(:add_fault))
419: @mediator.add_listener(TestResult::CHANGED, &method(:result_changed))
420: @mediator.add_listener(TestCase::STARTED, &method(:test_started))
421: @mediator.add_listener(TestCase::FINISHED, &method(:test_finished))
422: end
# File lib/test/unit/ui/gtk2/testrunner.rb, line 342
342: def clear_fault
343: raw_show_fault("")
344: end
# File lib/test/unit/ui/gtk2/testrunner.rb, line 125
125: def detail_panel
126: lazy_initialize(:detail_panel) do
127: @detail_panel = Gtk::HBox.new
128: @detail_panel.border_width = 10
129: @detail_panel.pack_start(detail_scrolled_window, true, true, 0)
130: end
131: end
# File lib/test/unit/ui/gtk2/testrunner.rb, line 114
114: def detail_scrolled_window
115: lazy_initialize(:detail_scrolled_window) do
116: @detail_scrolled_window = Gtk::ScrolledWindow.new
117: @detail_scrolled_window.set_policy(Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC)
118: @detail_scrolled_window.
119: set_size_request(400, @detail_scrolled_window.allocation.height)
120: @detail_scrolled_window.add_with_viewport(outer_detail_sub_panel)
121: end
122: end
# File lib/test/unit/ui/gtk2/testrunner.rb, line 161
161: def error_count_label
162: lazy_initialize(:error_count_label) do
163: @error_count_label = Gtk::Label.new("0")
164: @error_count_label.justify = Gtk::JUSTIFY_LEFT
165: end
166: end
# File lib/test/unit/ui/gtk2/testrunner.rb, line 169
169: def failure_count_label
170: lazy_initialize(:failure_count_label) do
171: @failure_count_label = Gtk::Label.new("0")
172: @failure_count_label.justify = Gtk::JUSTIFY_LEFT
173: end
174: end
# File lib/test/unit/ui/gtk2/testrunner.rb, line 84
84: def fault_detail_label
85: lazy_initialize(:fault_detail_label) do
86: @fault_detail_label = EnhancedLabel.new("")
87: # style = Gtk::Style.new
88: # font = Gdk::Font.
89: # font_load("-*-Courier 10 Pitch-medium-r-normal--*-120-*-*-*-*-*-*")
90: # style.set_font(font)
91: # @fault_detail_label.style = style
92: @fault_detail_label.justify = Gtk::JUSTIFY_LEFT
93: @fault_detail_label.wrap = false
94: end
95: end
# File lib/test/unit/ui/gtk2/testrunner.rb, line 134
134: def fault_list
135: lazy_initialize(:fault_list) do
136: @fault_list = FaultList.new
137: end
138: end
# File lib/test/unit/ui/gtk2/testrunner.rb, line 313
313: def finished(elapsed_time)
314: test_progress_bar.fraction = 1.0
315: output_status("Finished in #{elapsed_time} seconds")
316: end
# File lib/test/unit/ui/gtk2/testrunner.rb, line 209
209: def green_style
210: lazy_initialize(:green_style) do
211: @green_style = Gtk::Style.new
212: @green_style.set_bg(Gtk::STATE_PRELIGHT, 0x0000, 0xFFFF, 0x0000)
213: end
214: end
# File lib/test/unit/ui/gtk2/testrunner.rb, line 193
193: def info_panel
194: lazy_initialize(:info_panel) do
195: @info_panel = Gtk::HBox.new(false, 0)
196: @info_panel.border_width = 10
197: @info_panel.pack_start(Gtk::Label.new("Runs:"), false, false, 0)
198: @info_panel.pack_start(run_count_label, true, false, 0)
199: @info_panel.pack_start(Gtk::Label.new("Assertions:"), false, false, 0)
200: @info_panel.pack_start(assertion_count_label, true, false, 0)
201: @info_panel.pack_start(Gtk::Label.new("Failures:"), false, false, 0)
202: @info_panel.pack_start(failure_count_label, true, false, 0)
203: @info_panel.pack_start(Gtk::Label.new("Errors:"), false, false, 0)
204: @info_panel.pack_start(error_count_label, true, false, 0)
205: end
206: end
# File lib/test/unit/ui/gtk2/testrunner.rb, line 98
98: def inner_detail_sub_panel
99: lazy_initialize(:inner_detail_sub_panel) do
100: @inner_detail_sub_panel = Gtk::HBox.new
101: @inner_detail_sub_panel.pack_start(fault_detail_label, false, false, 0)
102: end
103: end
# File lib/test/unit/ui/gtk2/testrunner.rb, line 59
59: def lazy_initialize(symbol)
60: if !instance_eval("defined?(@#{symbol})") then
61: yield
62: end
63: return instance_eval("@#{symbol}")
64: end
# File lib/test/unit/ui/gtk2/testrunner.rb, line 152
152: def list_panel
153: lazy_initialize(:list_panel) do
154: @list_panel = Gtk::HBox.new
155: @list_panel.border_width = 10
156: @list_panel.pack_start(list_scrolled_window, true, true, 0)
157: end
158: end
# File lib/test/unit/ui/gtk2/testrunner.rb, line 141
141: def list_scrolled_window
142: lazy_initialize(:list_scrolled_window) do
143: @list_scrolled_window = Gtk::ScrolledWindow.new
144: @list_scrolled_window.set_policy(Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC)
145: @list_scrolled_window.
146: set_size_request(@list_scrolled_window.allocation.width, 150)
147: @list_scrolled_window.add_with_viewport(fault_list)
148: end
149: end
# File lib/test/unit/ui/gtk2/testrunner.rb, line 270
270: def main_panel
271: lazy_initialize(:main_panel) do
272: @main_panel = Gtk::VBox.new(false, 0)
273: @main_panel.pack_start(suite_panel, false, false, 0)
274: @main_panel.pack_start(progress_panel, false, false, 0)
275: @main_panel.pack_start(info_panel, false, false, 0)
276: @main_panel.pack_start(list_panel, false, false, 0)
277: @main_panel.pack_start(detail_panel, true, true, 0)
278: @main_panel.pack_start(status_panel, false, false, 0)
279: end
280: end
# File lib/test/unit/ui/gtk2/testrunner.rb, line 283
283: def main_window
284: lazy_initialize(:main_window) do
285: @main_window = Gtk::Window.new(Gtk::Window::TOPLEVEL)
286: @main_window.set_title("Test::Unit TestRunner")
287: @main_window.set_default_size(800, 600)
288: @main_window.set_resizable(true)
289: @main_window.add(main_panel)
290: end
291: end
# File lib/test/unit/ui/gtk2/testrunner.rb, line 106
106: def outer_detail_sub_panel
107: lazy_initialize(:outer_detail_sub_panel) do
108: @outer_detail_sub_panel = Gtk::VBox.new
109: @outer_detail_sub_panel.pack_start(inner_detail_sub_panel, false, false, 0)
110: end
111: end
# File lib/test/unit/ui/gtk2/testrunner.rb, line 308
308: def output_status(string)
309: status_entry.set_text(string)
310: end
# File lib/test/unit/ui/gtk2/testrunner.rb, line 347
347: def raw_show_fault(string)
348: fault_detail_label.set_text(string)
349: outer_detail_sub_panel.queue_resize
350: end
# File lib/test/unit/ui/gtk2/testrunner.rb, line 217
217: def red_style
218: lazy_initialize(:red_style) do
219: @red_style = Gtk::Style.new
220: @red_style.set_bg(Gtk::STATE_PRELIGHT, 0xFFFF, 0x0000, 0x0000)
221: end
222: end
# File lib/test/unit/ui/gtk2/testrunner.rb, line 367
367: def reset_ui(count)
368: test_progress_bar.style = green_style
369: test_progress_bar.fraction = 0.0
370: @count = count + 1
371: @red = false
372:
373: run_count_label.set_text("0")
374: assertion_count_label.set_text("0")
375: failure_count_label.set_text("0")
376: error_count_label.set_text("0")
377:
378: fault_list.clear
379: end
# File lib/test/unit/ui/gtk2/testrunner.rb, line 334
334: def result_changed(result)
335: run_count_label.label = result.run_count.to_s
336: assertion_count_label.label = result.assertion_count.to_s
337: failure_count_label.label = result.failure_count.to_s
338: error_count_label.label = result.error_count.to_s
339: end
# File lib/test/unit/ui/gtk2/testrunner.rb, line 185
185: def run_count_label
186: lazy_initialize(:run_count_label) do
187: @run_count_label = Gtk::Label.new("0")
188: @run_count_label.justify = Gtk::JUSTIFY_LEFT
189: end
190: end
# File lib/test/unit/ui/gtk2/testrunner.rb, line 387
387: def run_test
388: @runner.raise(@restart_signal)
389: end
# File lib/test/unit/ui/gtk2/testrunner.rb, line 425
425: def setup_mediator
426: @mediator = TestRunnerMediator.new(@suite)
427: suite_name = @suite.to_s
428: if @suite.kind_of?(Module) then
429: suite_name = @suite.name
430: end
431: suite_name_entry.set_text(suite_name)
432: end
# File lib/test/unit/ui/gtk2/testrunner.rb, line 294
294: def setup_ui
295: main_window.signal_connect("destroy", nil) { stop }
296: main_window.show_all
297: fault_list.selection.signal_connect("changed", nil) do
298: |selection, data|
299: if selection.selected then
300: show_fault(fault_list.get_fault(selection.selected))
301: else
302: clear_fault
303: end
304: end
305: end
# File lib/test/unit/ui/gtk2/testrunner.rb, line 353
353: def show_fault(fault)
354: raw_show_fault(fault.long_display)
355: end
# File lib/test/unit/ui/gtk2/testrunner.rb, line 392
392: def start_ui
393: @viewer.run
394: running = false
395: begin
396: loop do
397: if (running ^= true)
398: run_button.child.text = "Stop"
399: @mediator.run_suite
400: else
401: run_button.child.text = "Run"
402: @viewer.join
403: break
404: end
405: end
406: rescue @restart_signal
407: retry
408: rescue
409: end
410: end
# File lib/test/unit/ui/gtk2/testrunner.rb, line 324
324: def started(result)
325: @result = result
326: output_status("Started...")
327: end
# File lib/test/unit/ui/gtk2/testrunner.rb, line 67
67: def status_entry
68: lazy_initialize(:status_entry) do
69: @status_entry = Gtk::Entry.new
70: @status_entry.editable = false
71: end
72: end
# File lib/test/unit/ui/gtk2/testrunner.rb, line 75
75: def status_panel
76: lazy_initialize(:status_panel) do
77: @status_panel = Gtk::HBox.new
78: @status_panel.border_width = 10
79: @status_panel.pack_start(status_entry, true, true, 0)
80: end
81: end
# File lib/test/unit/ui/gtk2/testrunner.rb, line 251
251: def suite_name_entry
252: lazy_initialize(:suite_name_entry) do
253: @suite_name_entry = Gtk::Entry.new
254: @suite_name_entry.editable = false
255: end
256: end
# File lib/test/unit/ui/gtk2/testrunner.rb, line 259
259: def suite_panel
260: lazy_initialize(:suite_panel) do
261: @suite_panel = Gtk::HBox.new(false, 10)
262: @suite_panel.border_width = 10
263: @suite_panel.pack_start(Gtk::Label.new("Suite:"), false, false, 0)
264: @suite_panel.pack_start(suite_name_entry, true, true, 0)
265: @suite_panel.pack_start(run_button, false, false, 0)
266: end
267: end
# File lib/test/unit/ui/gtk2/testrunner.rb, line 225
225: def test_progress_bar
226: lazy_initialize(:test_progress_bar) {
227: @test_progress_bar = Gtk::ProgressBar.new
228: @test_progress_bar.fraction = 0.0
229: @test_progress_bar.
230: set_size_request(@test_progress_bar.allocation.width,
231: info_panel.size_request[1])
232: @test_progress_bar.style = green_style
233: }
234: end