summaryrefslogtreecommitdiff
path: root/lib/test/unit/ui/tk
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2003-11-17 00:23:40 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2003-11-17 00:23:40 +0000
commit7f58e0ba4fbddabfec26b4b4cea9bd1a049affd9 (patch)
treef922757a02d8881c4c79a9bc02d24ffe32570f45 /lib/test/unit/ui/tk
parent4e2fd6be8d1d731eb83de0de3f21382296e674c9 (diff)
* lib/test/unit/ui/tk/testrunner.rb,
lib/test/unit/ui/gtk/testrunner.rb: run GUI main loop in sub thread. * lib/test/unit/ui/gtk2/testrunner.rb: imported from rough. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@4970 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'lib/test/unit/ui/tk')
-rw-r--r--lib/test/unit/ui/tk/testrunner.rb50
1 files changed, 27 insertions, 23 deletions
diff --git a/lib/test/unit/ui/tk/testrunner.rb b/lib/test/unit/ui/tk/testrunner.rb
index b754bad0a2..19c39a22f8 100644
--- a/lib/test/unit/ui/tk/testrunner.rb
+++ b/lib/test/unit/ui/tk/testrunner.rb
@@ -24,7 +24,6 @@ module Test
# Creates a new TestRunner and runs the suite.
def self.run(suite)
new(suite).start
-
end
# Creates a new TestRunner for running the passed
@@ -38,7 +37,13 @@ module Test
@red = false
@fault_detail_list = []
- @run_suite_thread = nil
+ @runner = Thread.current
+ @restart_signal = Class.new(Exception)
+ @viewer = Thread.start do
+ @runner.join rescue @runner.run
+ ::Tk.mainloop
+ end
+ @viewer.join rescue nil # wait deadlock to handshake
end
# Begins the test run.
@@ -60,7 +65,7 @@ module Test
end
def attach_to_mediator # :nodoc:
- @run_button.command(method(:run_suite))
+ @run_button.command(method(:run_test))
@fault_list.bind('ButtonPress-1', proc{|y|
fault = @fault_detail_list[@fault_list.nearest(y)]
if fault
@@ -75,24 +80,32 @@ module Test
@mediator.add_listener(TestRunnerMediator::FINISHED, &method(:finished))
end
+ def run_test
+ @runner.raise(@restart_signal)
+ end
+
def start_ui # :nodoc:
- run_suite
+ @viewer.run
+ running = false
begin
- ::Tk.mainloop
- rescue Exception
- if @run_suite_thread and @run_suite_thread.alive?
- @run_suite_thread.raise $!
- retry
- else
- raise
+ loop do
+ if (running ^= true)
+ @run_button.configure('text'=>'Stop')
+ @mediator.run_suite
+ else
+ @run_button.configure('text'=>'Run')
+ @viewer.join
+ break
+ end
end
+ rescue @restart_signal
+ retry
+ rescue
end
+ abort if @red
end
def stop # :nodoc:
- if @run_suite_thread and @run_suite_thread.alive?
- @run_suite_thread.kill
- end
::Tk.exit
end
@@ -239,15 +252,6 @@ module Test
TkLabel.new(parent, 'textvariable'=>v).pack('side'=>'left', 'expand'=>true)
v
end
-
- def run_suite # :nodoc:
- run_proc = proc {
- @run_suite_thread = Thread.start {
- @mediator.run_suite
- }
- }
- TkAfter.new(1000, 1, run_proc).start
- end
end
end
end