mirror of
				https://github.com/ruby/ruby.git
				synced 2022-11-09 12:17:21 -05:00 
			
		
		
		
	* eval.c (rb_load): allow interrupt during loaded program
evaluation. [ruby-dev:21834] * hash.c (rb_hash_fetch): always warn if default argument and a block are supplied at the same time. [ruby-dev:21842] * hash.c (env_fetch): ditto. * array.c (rb_ary_fetch): ditto. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@4910 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
		
							parent
							
								
									113423bdff
								
							
						
					
					
						commit
						818d6a1e4f
					
				
					 9 changed files with 278 additions and 50 deletions
				
			
		
							
								
								
									
										12
									
								
								ChangeLog
									
										
									
									
									
								
							
							
						
						
									
										12
									
								
								ChangeLog
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -35,6 +35,18 @@ Wed Nov  5 22:55:16 2003  Hidetoshi NAGAI  <nagai@ai.kyutech.ac.jp>
 | 
			
		|||
	* ext/tk/lib/tk.rb : add TkMenu#set_focus support Tcl/Tk's
 | 
			
		||||
	  tk_menuSetFocus
 | 
			
		||||
 | 
			
		||||
Wed Nov  5 17:33:45 2003  Yukihiro Matsumoto  <matz@ruby-lang.org>
 | 
			
		||||
 | 
			
		||||
	* eval.c (rb_load): allow interrupt during loaded program
 | 
			
		||||
	  evaluation.  [ruby-dev:21834]
 | 
			
		||||
 | 
			
		||||
	* hash.c (rb_hash_fetch): always warn if default argument and a
 | 
			
		||||
	  block are supplied at the same time. [ruby-dev:21842]
 | 
			
		||||
 | 
			
		||||
	* hash.c (env_fetch): ditto.
 | 
			
		||||
 | 
			
		||||
	* array.c (rb_ary_fetch): ditto.
 | 
			
		||||
 | 
			
		||||
Wed Nov  5 19:08:47 2003  Nobuyoshi Nakada  <nobu@ruby-lang.org>
 | 
			
		||||
 | 
			
		||||
	* lib/optparse.rb (OptionParser::Switch::PlacedArgument::parse):
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										12
									
								
								array.c
									
										
									
									
									
								
							
							
						
						
									
										12
									
								
								array.c
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -595,21 +595,21 @@ rb_ary_fetch(argc, argv, ary)
 | 
			
		|||
    VALUE ary;
 | 
			
		||||
{
 | 
			
		||||
    VALUE pos, ifnone;
 | 
			
		||||
    long block_given;
 | 
			
		||||
    long idx;
 | 
			
		||||
 | 
			
		||||
    rb_scan_args(argc, argv, "11", &pos, &ifnone);
 | 
			
		||||
    block_given = rb_block_given_p();
 | 
			
		||||
    if (block_given && argc == 2) {
 | 
			
		||||
	rb_warn("block supersedes default value argument");
 | 
			
		||||
    }
 | 
			
		||||
    idx = NUM2LONG(pos);
 | 
			
		||||
 | 
			
		||||
    if (idx < 0) {
 | 
			
		||||
	idx +=  RARRAY(ary)->len;
 | 
			
		||||
    }
 | 
			
		||||
    if (idx < 0 || RARRAY(ary)->len <= idx) {
 | 
			
		||||
	if (rb_block_given_p()) {
 | 
			
		||||
	    if (argc > 1) {
 | 
			
		||||
		rb_raise(rb_eArgError, "wrong number of arguments");
 | 
			
		||||
	    }
 | 
			
		||||
	    return rb_yield(pos);
 | 
			
		||||
	}
 | 
			
		||||
	if (block_given) return rb_yield(pos);
 | 
			
		||||
	if (argc == 1) {
 | 
			
		||||
	    rb_raise(rb_eIndexError, "index %ld out of array", idx);
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										19
									
								
								eval.c
									
										
									
									
									
								
							
							
						
						
									
										19
									
								
								eval.c
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -5836,11 +5836,11 @@ rb_load(fname, wrap)
 | 
			
		|||
	ruby_in_eval--;
 | 
			
		||||
	node = ruby_eval_tree;
 | 
			
		||||
	rb_thread_critical = critical;
 | 
			
		||||
	ALLOW_INTS;
 | 
			
		||||
	if (ruby_nerrs == 0) {
 | 
			
		||||
	    eval_node(self, node);
 | 
			
		||||
	}
 | 
			
		||||
    }
 | 
			
		||||
    ALLOW_INTS;
 | 
			
		||||
    ruby_frame->last_func = last_func;
 | 
			
		||||
    ruby_current_node = last_node;
 | 
			
		||||
    ruby_sourcefile = 0;
 | 
			
		||||
| 
						 | 
				
			
			@ -9812,22 +9812,6 @@ rb_thread_trap_eval(cmd, sig)
 | 
			
		|||
    VALUE cmd;
 | 
			
		||||
    int sig;
 | 
			
		||||
{
 | 
			
		||||
#if 0
 | 
			
		||||
    rb_thread_critical = 0;
 | 
			
		||||
    if (!rb_thread_dead(curr_thread)) {
 | 
			
		||||
	rb_thread_ready(curr_thread);
 | 
			
		||||
	rb_trap_eval(cmd, sig);
 | 
			
		||||
	return;
 | 
			
		||||
    }
 | 
			
		||||
    rb_thread_ready(main_thread);
 | 
			
		||||
    if (THREAD_SAVE_CONTEXT(curr_thread)) {
 | 
			
		||||
	return;
 | 
			
		||||
    }
 | 
			
		||||
    th_cmd = cmd;
 | 
			
		||||
    th_sig = sig;
 | 
			
		||||
    curr_thread = main_thread;
 | 
			
		||||
    rb_thread_restore_context(curr_thread, RESTORE_TRAP);
 | 
			
		||||
#else
 | 
			
		||||
    rb_thread_critical = 0;
 | 
			
		||||
    if (!rb_thread_dead(curr_thread)) {
 | 
			
		||||
	if (THREAD_SAVE_CONTEXT(curr_thread)) {
 | 
			
		||||
| 
						 | 
				
			
			@ -9838,7 +9822,6 @@ rb_thread_trap_eval(cmd, sig)
 | 
			
		|||
    th_sig = sig;
 | 
			
		||||
    curr_thread = main_thread;
 | 
			
		||||
    rb_thread_restore_context(curr_thread, RESTORE_TRAP);
 | 
			
		||||
#endif
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static VALUE
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -4,17 +4,16 @@
 | 
			
		|||
#  by A. Ito
 | 
			
		||||
#
 | 
			
		||||
#  This program reports the latest version of ruby interpreter
 | 
			
		||||
#  by connecting to ftp server at netlab.co.jp.
 | 
			
		||||
#  by connecting to ftp server at ruby-lang.org.
 | 
			
		||||
#
 | 
			
		||||
require 'pty'
 | 
			
		||||
require 'expect'
 | 
			
		||||
 | 
			
		||||
fnames = []
 | 
			
		||||
PTY.spawn("ftp ftp.netlab.co.jp") do
 | 
			
		||||
  |r_f,w_f,pid|
 | 
			
		||||
PTY.spawn("ftp ftp.ruby-lang.org") do |r_f,w_f,pid|
 | 
			
		||||
  w_f.sync = true
 | 
			
		||||
  
 | 
			
		||||
  $expect_verbose = true
 | 
			
		||||
  $expect_verbose = false
 | 
			
		||||
  
 | 
			
		||||
  r_f.expect(/^Name.*: /) do
 | 
			
		||||
    w_f.print "ftp\n"
 | 
			
		||||
| 
						 | 
				
			
			@ -31,14 +30,14 @@ PTY.spawn("ftp ftp.netlab.co.jp") do
 | 
			
		|||
  r_f.expect('word:') do
 | 
			
		||||
    w_f.print username+"@\n"
 | 
			
		||||
  end
 | 
			
		||||
  r_f.expect("ftp> ") do
 | 
			
		||||
    w_f.print "cd pub/lang/ruby\n"
 | 
			
		||||
  r_f.expect("> ") do
 | 
			
		||||
    w_f.print "cd pub/ruby\n"
 | 
			
		||||
  end
 | 
			
		||||
  r_f.expect("ftp> ") do
 | 
			
		||||
  r_f.expect("> ") do
 | 
			
		||||
    w_f.print "dir\n"
 | 
			
		||||
  end
 | 
			
		||||
  
 | 
			
		||||
  r_f.expect("ftp> ") do |output|
 | 
			
		||||
  r_f.expect("> ") do |output|
 | 
			
		||||
    for x in output[0].split("\n")
 | 
			
		||||
      if x =~ /(ruby.*\.tar\.gz)/ then
 | 
			
		||||
         fnames.push $1
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										24
									
								
								hash.c
									
										
									
									
									
								
							
							
						
						
									
										24
									
								
								hash.c
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -300,16 +300,16 @@ rb_hash_fetch(argc, argv, hash)
 | 
			
		|||
{
 | 
			
		||||
    VALUE key, if_none;
 | 
			
		||||
    VALUE val;
 | 
			
		||||
    long block_given;
 | 
			
		||||
 | 
			
		||||
    rb_scan_args(argc, argv, "11", &key, &if_none);
 | 
			
		||||
 | 
			
		||||
    block_given = rb_block_given_p();
 | 
			
		||||
    if (block_given && argc == 2) {
 | 
			
		||||
	rb_warn("block supersedes default value argument");
 | 
			
		||||
    }
 | 
			
		||||
    if (!st_lookup(RHASH(hash)->tbl, key, &val)) {
 | 
			
		||||
	if (rb_block_given_p()) {
 | 
			
		||||
	    if (argc > 1) {
 | 
			
		||||
               rb_raise(rb_eArgError, "wrong number of arguments");
 | 
			
		||||
	    }
 | 
			
		||||
	    return rb_yield(key);
 | 
			
		||||
	}
 | 
			
		||||
	if (block_given) return rb_yield(key);
 | 
			
		||||
	if (argc == 1) {
 | 
			
		||||
	    rb_raise(rb_eIndexError, "key not found");
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			@ -1086,9 +1086,14 @@ env_fetch(argc, argv)
 | 
			
		|||
    VALUE *argv;
 | 
			
		||||
{
 | 
			
		||||
    VALUE key, if_none;
 | 
			
		||||
    long block_given;
 | 
			
		||||
    char *nam, *env;
 | 
			
		||||
 | 
			
		||||
    rb_scan_args(argc, argv, "11", &key, &if_none);
 | 
			
		||||
    block_given = rb_block_given_p();
 | 
			
		||||
    if (block_given && argc == 2) {
 | 
			
		||||
	rb_warn("block supersedes default value argument");
 | 
			
		||||
    }
 | 
			
		||||
    StringValue(key);
 | 
			
		||||
    nam = RSTRING(key)->ptr;
 | 
			
		||||
    if (strlen(nam) != RSTRING(key)->len) {
 | 
			
		||||
| 
						 | 
				
			
			@ -1096,12 +1101,7 @@ env_fetch(argc, argv)
 | 
			
		|||
    }
 | 
			
		||||
    env = getenv(nam);
 | 
			
		||||
    if (!env) {
 | 
			
		||||
	if (rb_block_given_p()) {
 | 
			
		||||
	    if (argc > 1) {
 | 
			
		||||
		rb_raise(rb_eArgError, "wrong number of arguments");
 | 
			
		||||
	    }
 | 
			
		||||
	    return rb_yield(key);
 | 
			
		||||
	}
 | 
			
		||||
	if (block_given) return rb_yield(key);
 | 
			
		||||
	if (argc == 1) {
 | 
			
		||||
	    rb_raise(rb_eIndexError, "key not found");
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										16
									
								
								lib/cgi.rb
									
										
									
									
									
								
							
							
						
						
									
										16
									
								
								lib/cgi.rb
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -984,7 +984,7 @@ class CGI
 | 
			
		|||
        raise EOFError, "bad content body"
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      until -1 == content_length
 | 
			
		||||
      loop do
 | 
			
		||||
        head = nil
 | 
			
		||||
        if 10240 < content_length
 | 
			
		||||
          require "tempfile"
 | 
			
		||||
| 
						 | 
				
			
			@ -1020,14 +1020,13 @@ class CGI
 | 
			
		|||
              else
 | 
			
		||||
                stdinput.read(content_length) or ''
 | 
			
		||||
              end
 | 
			
		||||
          buf += c
 | 
			
		||||
          buf.concat(c)
 | 
			
		||||
          content_length -= c.size
 | 
			
		||||
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
        buf = buf.sub(/\A((?:.|\n)*?)(?:#{EOL})?#{boundary}(#{EOL}|--)/n) do
 | 
			
		||||
          body.print $1
 | 
			
		||||
          if "--" == $2 or EOL == $2
 | 
			
		||||
          if "--" == $2
 | 
			
		||||
            content_length = -1
 | 
			
		||||
          end
 | 
			
		||||
          ""
 | 
			
		||||
| 
						 | 
				
			
			@ -1072,7 +1071,8 @@ class CGI
 | 
			
		|||
        else
 | 
			
		||||
          params[name] = [body]
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
        break if buf.size == 0
 | 
			
		||||
        break if content_length === -1
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      params
 | 
			
		||||
| 
						 | 
				
			
			@ -1115,6 +1115,7 @@ class CGI
 | 
			
		|||
        @multipart = true
 | 
			
		||||
        @params = read_multipart(boundary, Integer(env_table['CONTENT_LENGTH']))
 | 
			
		||||
      else
 | 
			
		||||
        @multipart = false
 | 
			
		||||
        @params = CGI::parse(
 | 
			
		||||
                    case env_table['REQUEST_METHOD']
 | 
			
		||||
                    when "GET", "HEAD"
 | 
			
		||||
| 
						 | 
				
			
			@ -1133,10 +1134,13 @@ class CGI
 | 
			
		|||
      end
 | 
			
		||||
 | 
			
		||||
      @cookies = CGI::Cookie::parse((env_table['HTTP_COOKIE'] or env_table['COOKIE']))
 | 
			
		||||
 | 
			
		||||
    end
 | 
			
		||||
    private :initialize_query
 | 
			
		||||
 | 
			
		||||
    def multipart?
 | 
			
		||||
      @multipart
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    class Value < String    # :nodoc:
 | 
			
		||||
      def initialize(str, params)
 | 
			
		||||
        @params = params
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1295,6 +1295,7 @@ module DRb
 | 
			
		|||
    end
 | 
			
		||||
 | 
			
		||||
    def run
 | 
			
		||||
      raise if Thread.critical
 | 
			
		||||
      Thread.start do
 | 
			
		||||
	begin
 | 
			
		||||
	  while true
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -29,6 +29,10 @@ module Test
 | 
			
		|||
          require 'test/unit/ui/fox/testrunner'
 | 
			
		||||
          Test::Unit::UI::Fox::TestRunner.run(r.suite)
 | 
			
		||||
        end,
 | 
			
		||||
        :tk => proc do |r|
 | 
			
		||||
          require 'test/unit/ui/tk/testrunner'
 | 
			
		||||
          Test::Unit::UI::Tk::TestRunner.run(r.suite)
 | 
			
		||||
        end,
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      OUTPUT_LEVELS = {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										225
									
								
								lib/test/unit/ui/tk/testrunner.rb
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										225
									
								
								lib/test/unit/ui/tk/testrunner.rb
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,225 @@
 | 
			
		|||
# :nodoc:
 | 
			
		||||
#
 | 
			
		||||
# Original Author:: Nathaniel Talbott.
 | 
			
		||||
# Author:: Kazuhiro NISHIYAMA.
 | 
			
		||||
# Copyright:: Copyright (c) 2000-2002 Nathaniel Talbott. All rights reserved.
 | 
			
		||||
# Copyright:: Copyright (c) 2003 Kazuhiro NISHIYAMA. All rights reserved.
 | 
			
		||||
# License:: Ruby license.
 | 
			
		||||
 | 
			
		||||
require 'tk'
 | 
			
		||||
require 'test/unit/ui/testrunnermediator'
 | 
			
		||||
require 'test/unit/ui/testrunnerutilities'
 | 
			
		||||
 | 
			
		||||
module Test
 | 
			
		||||
  module Unit
 | 
			
		||||
    module UI
 | 
			
		||||
      module Tk # :nodoc:
 | 
			
		||||
 | 
			
		||||
        # Runs a Test::Unit::TestSuite in a Tk UI. Obviously,
 | 
			
		||||
        # this one requires you to have Tk
 | 
			
		||||
        # and the Ruby Tk extension installed.
 | 
			
		||||
        class TestRunner
 | 
			
		||||
          extend TestRunnerUtilities
 | 
			
		||||
 | 
			
		||||
          # Creates a new TestRunner and runs the suite.
 | 
			
		||||
          def self.run(suite)
 | 
			
		||||
            new(suite).start
 | 
			
		||||
 | 
			
		||||
          end
 | 
			
		||||
 | 
			
		||||
          # Creates a new TestRunner for running the passed
 | 
			
		||||
          # suite.
 | 
			
		||||
          def initialize(suite)
 | 
			
		||||
            if (suite.respond_to?(:suite))
 | 
			
		||||
              @suite = suite.suite
 | 
			
		||||
            else
 | 
			
		||||
              @suite = suite
 | 
			
		||||
            end
 | 
			
		||||
 | 
			
		||||
            @red = false
 | 
			
		||||
            @fault_detail_list = []
 | 
			
		||||
            @run_suite_thread = nil
 | 
			
		||||
          end
 | 
			
		||||
 | 
			
		||||
          # Begins the test run.
 | 
			
		||||
          def start
 | 
			
		||||
            setup_ui
 | 
			
		||||
            setup_mediator
 | 
			
		||||
            attach_to_mediator
 | 
			
		||||
            start_ui
 | 
			
		||||
          end
 | 
			
		||||
 | 
			
		||||
          private
 | 
			
		||||
          def setup_mediator # :nodoc:
 | 
			
		||||
            @mediator = TestRunnerMediator.new(@suite)
 | 
			
		||||
            suite_name = @suite.to_s
 | 
			
		||||
            if ( @suite.kind_of?(Module) )
 | 
			
		||||
              suite_name = @suite.name
 | 
			
		||||
            end
 | 
			
		||||
            @suite_name_entry.value = suite_name
 | 
			
		||||
          end
 | 
			
		||||
 | 
			
		||||
          def attach_to_mediator # :nodoc:
 | 
			
		||||
            @run_button.command(method(:run_suite))
 | 
			
		||||
            @fault_list.bind('ButtonPress-1', proc{|y|
 | 
			
		||||
              fault = @fault_detail_list[@fault_list.nearest(y)]
 | 
			
		||||
              if fault
 | 
			
		||||
                show_fault(fault)
 | 
			
		||||
              end
 | 
			
		||||
            }, '%y')
 | 
			
		||||
            @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
 | 
			
		||||
 | 
			
		||||
          def start_ui # :nodoc:
 | 
			
		||||
            run_suite
 | 
			
		||||
            begin
 | 
			
		||||
              ::Tk.mainloop
 | 
			
		||||
            rescue Exception
 | 
			
		||||
              if @run_suite_thread and @run_suite_thread.alive?
 | 
			
		||||
                @run_suite_thread.raise $!
 | 
			
		||||
                retry
 | 
			
		||||
              else
 | 
			
		||||
                raise
 | 
			
		||||
              end
 | 
			
		||||
            end
 | 
			
		||||
          end
 | 
			
		||||
 | 
			
		||||
          def stop # :nodoc:
 | 
			
		||||
            ::Tk.exit
 | 
			
		||||
          end
 | 
			
		||||
 | 
			
		||||
          def reset_ui(count) # :nodoc:
 | 
			
		||||
            @test_total_count = count.to_f
 | 
			
		||||
            @test_progress_bar.configure('background'=>'green')
 | 
			
		||||
            @test_progress_bar.place('relwidth'=>0/count)
 | 
			
		||||
            @red = false
 | 
			
		||||
 | 
			
		||||
            @test_count_label.value = 0
 | 
			
		||||
            @assertion_count_label.value = 0
 | 
			
		||||
            @failure_count_label.value = 0
 | 
			
		||||
            @error_count_label.value = 0
 | 
			
		||||
 | 
			
		||||
            @fault_list.delete(0, 'end')
 | 
			
		||||
            @fault_detail_list = []
 | 
			
		||||
            clear_fault
 | 
			
		||||
          end
 | 
			
		||||
 | 
			
		||||
          def add_fault(fault) # :nodoc:
 | 
			
		||||
            if ( ! @red )
 | 
			
		||||
              @test_progress_bar.configure('background'=>'red')
 | 
			
		||||
              @red = true
 | 
			
		||||
            end
 | 
			
		||||
            @fault_detail_list.push fault
 | 
			
		||||
            @fault_list.insert('end', fault.short_display)
 | 
			
		||||
          end
 | 
			
		||||
 | 
			
		||||
          def show_fault(fault) # :nodoc:
 | 
			
		||||
            raw_show_fault(fault.long_display)
 | 
			
		||||
          end
 | 
			
		||||
 | 
			
		||||
          def raw_show_fault(string) # :nodoc:
 | 
			
		||||
            @detail_text.value = string
 | 
			
		||||
          end
 | 
			
		||||
 | 
			
		||||
          def clear_fault # :nodoc:
 | 
			
		||||
            raw_show_fault("")
 | 
			
		||||
          end
 | 
			
		||||
 | 
			
		||||
          def result_changed(result) # :nodoc:
 | 
			
		||||
            @test_count_label.value = result.run_count
 | 
			
		||||
            @test_progress_bar.place('relwidth'=>result.run_count/@test_total_count)
 | 
			
		||||
            @assertion_count_label.value = result.assertion_count
 | 
			
		||||
            @failure_count_label.value = result.failure_count
 | 
			
		||||
            @error_count_label.value = result.error_count
 | 
			
		||||
          end
 | 
			
		||||
 | 
			
		||||
          def started(result) # :nodoc:
 | 
			
		||||
            output_status("Started...")
 | 
			
		||||
          end
 | 
			
		||||
 | 
			
		||||
          def test_started(test_name)
 | 
			
		||||
            output_status("Running #{test_name}...")
 | 
			
		||||
          end
 | 
			
		||||
 | 
			
		||||
          def finished(elapsed_time)
 | 
			
		||||
            output_status("Finished in #{elapsed_time} seconds")
 | 
			
		||||
          end
 | 
			
		||||
 | 
			
		||||
          def output_status(string) # :nodoc:
 | 
			
		||||
            @status_entry.value = string
 | 
			
		||||
          end
 | 
			
		||||
 | 
			
		||||
          def setup_ui # :nodoc:
 | 
			
		||||
            @status_entry = TkVariable.new
 | 
			
		||||
            l = TkLabel.new(nil, 'textvariable'=>@status_entry, 'relief'=>'sunken')
 | 
			
		||||
            l.pack('side'=>'bottom', 'fill'=>'x')
 | 
			
		||||
 | 
			
		||||
            suite_frame = TkFrame.new.pack('fill'=>'x')
 | 
			
		||||
 | 
			
		||||
            @run_button = TkButton.new(suite_frame, 'text'=>'Run')
 | 
			
		||||
            @run_button.pack('side'=>'right')
 | 
			
		||||
 | 
			
		||||
            TkLabel.new(suite_frame, 'text'=>'Suite:').pack('side'=>'left')
 | 
			
		||||
            @suite_name_entry = TkVariable.new
 | 
			
		||||
            l = TkLabel.new(suite_frame, 'textvariable'=>@suite_name_entry, 'relief'=>'sunken')
 | 
			
		||||
            l.pack('side'=>'left', 'fill'=>'x', 'expand'=>true)
 | 
			
		||||
 | 
			
		||||
            f = TkFrame.new(nil, 'relief'=>'sunken', 'borderwidth'=>3, 'height'=>20).pack('fill'=>'x', 'padx'=>1)
 | 
			
		||||
            @test_progress_bar = TkFrame.new(f, 'background'=>'green').place('anchor'=>'nw', 'relwidth'=>0.0, 'relheight'=>1.0)
 | 
			
		||||
 | 
			
		||||
            info_frame = TkFrame.new.pack('fill'=>'x', 'expand'=>true)
 | 
			
		||||
            @test_count_label = create_count_label(info_frame, 'Tests:')
 | 
			
		||||
            @assertion_count_label = create_count_label(info_frame, 'Assertions:')
 | 
			
		||||
            @failure_count_label = create_count_label(info_frame, 'Failures:')
 | 
			
		||||
            @error_count_label = create_count_label(info_frame, 'Errors:')
 | 
			
		||||
 | 
			
		||||
            fault_list_frame = TkFrame.new.pack('fill'=>'both', 'expand'=>true)
 | 
			
		||||
 | 
			
		||||
            fault_scrollbar = TkScrollbar.new(fault_list_frame)
 | 
			
		||||
            fault_scrollbar.pack('side'=>'right', 'fill'=>'y')
 | 
			
		||||
            @fault_list = TkListbox.new(fault_list_frame)
 | 
			
		||||
            @fault_list.pack('fill'=>'both', 'expand'=>true)
 | 
			
		||||
            @fault_list.yscrollbar(fault_scrollbar)
 | 
			
		||||
 | 
			
		||||
            detail_frame = TkFrame.new.pack('fill'=>'both', 'expand'=>true)
 | 
			
		||||
            detail_scrollbar_y = TkScrollbar.new(detail_frame)
 | 
			
		||||
            detail_scrollbar_y.pack('side'=>'right', 'fill'=>'y')
 | 
			
		||||
            detail_scrollbar_x = TkScrollbar.new(detail_frame)
 | 
			
		||||
            detail_scrollbar_x.pack('side'=>'bottom', 'fill'=>'x')
 | 
			
		||||
            @detail_text = TkText.new(detail_frame, 'height'=>10, 'wrap'=>'none') {
 | 
			
		||||
              bindtags(bindtags - [TkText])
 | 
			
		||||
            }
 | 
			
		||||
            @detail_text.pack('fill'=>'both', 'expand'=>true)
 | 
			
		||||
            @detail_text.yscrollbar(detail_scrollbar_y)
 | 
			
		||||
            @detail_text.xscrollbar(detail_scrollbar_x)
 | 
			
		||||
          end
 | 
			
		||||
 | 
			
		||||
          def create_count_label(parent, label) # :nodoc:
 | 
			
		||||
            TkLabel.new(parent, 'text'=>label).pack('side'=>'left', 'expand'=>true)
 | 
			
		||||
            v = TkVariable.new(0)
 | 
			
		||||
            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
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
if __FILE__ == $0
 | 
			
		||||
  Test::Unit::UI::Tk::TestRunner.start_command_line_test
 | 
			
		||||
end
 | 
			
		||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue