diff options
author | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2003-11-17 00:23:40 +0000 |
---|---|---|
committer | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2003-11-17 00:23:40 +0000 |
commit | 7f58e0ba4fbddabfec26b4b4cea9bd1a049affd9 (patch) | |
tree | f922757a02d8881c4c79a9bc02d24ffe32570f45 /lib/test/unit/ui/tk/testrunner.rb | |
parent | 4e2fd6be8d1d731eb83de0de3f21382296e674c9 (diff) | |
download | ruby-7f58e0ba4fbddabfec26b4b4cea9bd1a049affd9.tar.gz |
* 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/testrunner.rb')
-rw-r--r-- | lib/test/unit/ui/tk/testrunner.rb | 50 |
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 |