glib2 0.90.7 → 0.90.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/ChangeLog +68 -0
- data/ext/glib2/rbglib.c +51 -15
- data/ext/glib2/rbglib.h +10 -2
- data/ext/glib2/rbglib_bookmarkfile.c +37 -74
- data/ext/glib2/rbglib_completion.c +8 -16
- data/ext/glib2/rbglib_convert.c +8 -18
- data/ext/glib2/rbglib_error.c +2 -8
- data/ext/glib2/rbglib_i18n.c +1 -2
- data/ext/glib2/rbglib_iochannel.c +81 -127
- data/ext/glib2/rbglib_keyfile.c +38 -86
- data/ext/glib2/rbglib_maincontext.c +29 -64
- data/ext/glib2/rbglib_mainloop.c +4 -8
- data/ext/glib2/rbglib_messages.c +7 -17
- data/ext/glib2/rbglib_pollfd.c +7 -14
- data/ext/glib2/rbglib_shell.c +3 -6
- data/ext/glib2/rbglib_source.c +14 -28
- data/ext/glib2/rbglib_spawn.c +7 -14
- data/ext/glib2/rbglib_threads.c +2 -4
- data/ext/glib2/rbglib_timer.c +7 -14
- data/ext/glib2/rbglib_unicode.c +45 -16
- data/ext/glib2/rbglib_utils.c +25 -50
- data/ext/glib2/rbglib_win32.c +10 -17
- data/ext/glib2/rbgobj_boxed.c +9 -21
- data/ext/glib2/rbgobj_closure.c +5 -11
- data/ext/glib2/rbgobj_enums.c +1 -2
- data/ext/glib2/rbgobj_object.c +23 -59
- data/ext/glib2/rbgobj_param.c +7 -15
- data/ext/glib2/rbgobj_signal.c +25 -65
- data/ext/glib2/rbgobj_type.c +36 -81
- data/ext/glib2/rbgobj_typeinstance.c +3 -6
- data/ext/glib2/rbgobj_typeinterface.c +3 -6
- data/ext/glib2/rbgobj_typemodule.c +4 -8
- data/ext/glib2/rbgobj_typeplugin.c +2 -4
- data/ext/glib2/rbgobj_valuetypes.c +7 -15
- data/ext/glib2/rbgobject.c +8 -18
- data/ext/glib2/rbgobject.h +3 -0
- data/ext/glib2/rbgprivate.h +0 -1
- data/ext/glib2/rbgutil.c +3 -6
- data/lib/gnome2-raketask.rb +1 -0
- data/lib/mkmf-gnome2.rb +12 -9
- data/test-unit/History.txt +43 -1
- data/test-unit/Manifest.txt +1 -1
- data/test-unit/html/index.html +62 -24
- data/test-unit/html/index.html.ja +54 -25
- data/test-unit/html/test-unit.css +3 -3
- data/test-unit/lib/test/unit/assertions.rb +489 -36
- data/test-unit/lib/test/unit/autorunner.rb +40 -0
- data/test-unit/lib/test/unit/collector.rb +6 -4
- data/test-unit/lib/test/unit/collector/load.rb +48 -5
- data/test-unit/lib/test/unit/collector/xml.rb +250 -0
- data/test-unit/lib/test/unit/error.rb +4 -3
- data/test-unit/lib/test/unit/fixture.rb +12 -3
- data/test-unit/lib/test/unit/runner/xml.rb +15 -0
- data/test-unit/lib/test/unit/testcase.rb +48 -16
- data/test-unit/lib/test/unit/testresult.rb +6 -2
- data/test-unit/lib/test/unit/testsuite.rb +24 -2
- data/test-unit/lib/test/unit/ui/console/testrunner.rb +65 -28
- data/test-unit/lib/test/unit/ui/testrunnermediator.rb +11 -2
- data/test-unit/lib/test/unit/ui/xml/testrunner.rb +224 -0
- data/test-unit/lib/test/unit/version.rb +1 -1
- data/test-unit/test/run-test.rb +7 -0
- data/test-unit/test/{test_assertions.rb → test-assertions.rb} +708 -77
- data/test-unit/test/test-fixture.rb +37 -0
- data/test-unit/test/test-testcase.rb +24 -7
- data/test-unit/test/test_testsuite.rb +19 -11
- data/test/test_iochannel.rb +9 -9
- data/test/test_unicode.rb +44 -31
- metadata +8 -9
- data/ext/glib2/Makefile +0 -169
- data/ext/glib2/glib-enum-types.c +0 -1065
- data/ext/glib2/glib-enum-types.h +0 -144
- data/ext/glib2/ruby-glib2.pc +0 -3
| @@ -154,13 +154,22 @@ module Test | |
| 154 154 | 
             
                  end
         | 
| 155 155 |  | 
| 156 156 | 
             
                  private
         | 
| 157 | 
            -
                  def run_fixture(fixture)
         | 
| 157 | 
            +
                  def run_fixture(fixture, options={})
         | 
| 158 158 | 
             
                    [
         | 
| 159 159 | 
             
                     self.class.send("before_#{fixture}_methods"),
         | 
| 160 160 | 
             
                     fixture,
         | 
| 161 161 | 
             
                     self.class.send("after_#{fixture}_methods")
         | 
| 162 162 | 
             
                    ].flatten.each do |method_name|
         | 
| 163 | 
            -
                       | 
| 163 | 
            +
                      next unless respond_to?(method_name, true)
         | 
| 164 | 
            +
                      if options[:handle_exception]
         | 
| 165 | 
            +
                        begin
         | 
| 166 | 
            +
                          send(method_name)
         | 
| 167 | 
            +
                        rescue Exception
         | 
| 168 | 
            +
                          raise unless handle_exception($!)
         | 
| 169 | 
            +
                        end
         | 
| 170 | 
            +
                      else
         | 
| 171 | 
            +
                        send(method_name)
         | 
| 172 | 
            +
                      end
         | 
| 164 173 | 
             
                    end
         | 
| 165 174 | 
             
                  end
         | 
| 166 175 |  | 
| @@ -169,7 +178,7 @@ module Test | |
| 169 178 | 
             
                  end
         | 
| 170 179 |  | 
| 171 180 | 
             
                  def run_teardown
         | 
| 172 | 
            -
                    run_fixture(:teardown)
         | 
| 181 | 
            +
                    run_fixture(:teardown, :handle_exception => true)
         | 
| 173 182 | 
             
                  end
         | 
| 174 183 | 
             
                end
         | 
| 175 184 | 
             
              end
         | 
| @@ -0,0 +1,15 @@ | |
| 1 | 
            +
            module Test
         | 
| 2 | 
            +
              module Unit
         | 
| 3 | 
            +
                AutoRunner.register_runner(:xml) do |auto_runner|
         | 
| 4 | 
            +
                  require 'test/unit/ui/xml/testrunner'
         | 
| 5 | 
            +
                  Test::Unit::UI::XML::TestRunner
         | 
| 6 | 
            +
                end
         | 
| 7 | 
            +
             | 
| 8 | 
            +
                AutoRunner.setup_option do |auto_runner, opts|
         | 
| 9 | 
            +
                  opts.on("--output-file-descriptor=FD", Integer,
         | 
| 10 | 
            +
                          "Outputs to file descriptor FD") do |fd|
         | 
| 11 | 
            +
                    auto_runner.runner_options[:output_file_descriptor] = fd
         | 
| 12 | 
            +
                  end
         | 
| 13 | 
            +
                end
         | 
| 14 | 
            +
              end
         | 
| 15 | 
            +
            end
         | 
| @@ -87,6 +87,8 @@ module Test | |
| 87 87 |  | 
| 88 88 | 
             
                  STARTED = name + "::STARTED" # :nodoc:
         | 
| 89 89 | 
             
                  FINISHED = name + "::FINISHED" # :nodoc:
         | 
| 90 | 
            +
                  STARTED_OBJECT = name + "::STARTED::OBJECT" # :nodoc:
         | 
| 91 | 
            +
                  FINISHED_OBJECT = name + "::FINISHED::OBJECT" # :nodoc:
         | 
| 90 92 |  | 
| 91 93 | 
             
                  DESCENDANTS = [] # :nodoc:
         | 
| 92 94 | 
             
                  AVAILABLE_ORDERS = [:alphabetic, :random, :defined] # :nodoc:
         | 
| @@ -219,9 +221,11 @@ module Test | |
| 219 221 | 
             
                      @@test_orders[self] = order
         | 
| 220 222 | 
             
                    end
         | 
| 221 223 |  | 
| 222 | 
            -
                    # Defines a test in declarative syntax | 
| 224 | 
            +
                    # Defines a test in declarative syntax or marks
         | 
| 225 | 
            +
                    # following method as a test method.
         | 
| 223 226 | 
             
                    #
         | 
| 224 | 
            -
                    #  | 
| 227 | 
            +
                    # In declarative syntax usage, the following two
         | 
| 228 | 
            +
                    # test definitions are the almost same:
         | 
| 225 229 | 
             
                    #
         | 
| 226 230 | 
             
                    #   description "register user"
         | 
| 227 231 | 
             
                    #   def test_register_user
         | 
| @@ -231,11 +235,33 @@ module Test | |
| 231 235 | 
             
                    #   test "register user" do
         | 
| 232 236 | 
             
                    #     ...
         | 
| 233 237 | 
             
                    #   end
         | 
| 234 | 
            -
                     | 
| 235 | 
            -
             | 
| 236 | 
            -
             | 
| 237 | 
            -
             | 
| 238 | 
            -
             | 
| 238 | 
            +
                    #
         | 
| 239 | 
            +
                    # In test method mark usage, the "my_test_method" is
         | 
| 240 | 
            +
                    # treated as a test method:
         | 
| 241 | 
            +
                    #
         | 
| 242 | 
            +
                    #   test
         | 
| 243 | 
            +
                    #   def my_test_method
         | 
| 244 | 
            +
                    #     assert_equal("call me", ...)
         | 
| 245 | 
            +
                    #   end
         | 
| 246 | 
            +
                    def test(*test_description_or_targets, &block)
         | 
| 247 | 
            +
                      if block_given?
         | 
| 248 | 
            +
                        test_description = test_description_or_targets.first
         | 
| 249 | 
            +
                        if test_description.nil?
         | 
| 250 | 
            +
                          raise ArgumentError, "test description is missing"
         | 
| 251 | 
            +
                        end
         | 
| 252 | 
            +
                        n_arguments = test_description_or_targets.size
         | 
| 253 | 
            +
                        if n_arguments > 1
         | 
| 254 | 
            +
                          message = "wrong number of arguments (#{n_arguments} for 1)"
         | 
| 255 | 
            +
                          raise ArgumentError, message
         | 
| 256 | 
            +
                        end
         | 
| 257 | 
            +
                        method_name = test_description
         | 
| 258 | 
            +
                        define_method(method_name, &block)
         | 
| 259 | 
            +
                        description(test_description, method_name)
         | 
| 260 | 
            +
                        attribute(:test, true, {}, method_name)
         | 
| 261 | 
            +
                      else
         | 
| 262 | 
            +
                        targets = test_description_or_targets
         | 
| 263 | 
            +
                        attribute(:test, true, {}, *targets)
         | 
| 264 | 
            +
                      end
         | 
| 239 265 | 
             
                    end
         | 
| 240 266 |  | 
| 241 267 | 
             
                    # Describes a test.
         | 
| @@ -259,7 +285,7 @@ module Test | |
| 259 285 | 
             
                        name.to_s
         | 
| 260 286 | 
             
                      end
         | 
| 261 287 | 
             
                      test_names = method_names.find_all do |method_name|
         | 
| 262 | 
            -
                        method_name =~ /^test./
         | 
| 288 | 
            +
                        method_name =~ /^test./ or get_attribute(method_name, :test)
         | 
| 263 289 | 
             
                      end
         | 
| 264 290 | 
             
                      send("sort_test_names_in_#{test_order}_order", test_names)
         | 
| 265 291 | 
             
                    end
         | 
| @@ -291,7 +317,7 @@ module Test | |
| 291 317 | 
             
                    # :startdoc:
         | 
| 292 318 | 
             
                  end
         | 
| 293 319 |  | 
| 294 | 
            -
                  attr_reader :method_name
         | 
| 320 | 
            +
                  attr_reader :method_name, :start_time, :elapsed_time
         | 
| 295 321 |  | 
| 296 322 | 
             
                  # Creates a new instance of the fixture for running the
         | 
| 297 323 | 
             
                  # test represented by test_method_name.
         | 
| @@ -306,6 +332,8 @@ module Test | |
| 306 332 | 
             
                    @method_name = test_method_name
         | 
| 307 333 | 
             
                    @test_passed = true
         | 
| 308 334 | 
             
                    @interrupted = false
         | 
| 335 | 
            +
                    @start_time = nil
         | 
| 336 | 
            +
                    @elapsed_time = nil
         | 
| 309 337 | 
             
                  end
         | 
| 310 338 |  | 
| 311 339 | 
             
                  # Runs the individual test method represented by this
         | 
| @@ -314,7 +342,9 @@ module Test | |
| 314 342 | 
             
                  def run(result)
         | 
| 315 343 | 
             
                    begin
         | 
| 316 344 | 
             
                      @_result = result
         | 
| 345 | 
            +
                      @start_time = Time.now
         | 
| 317 346 | 
             
                      yield(STARTED, name)
         | 
| 347 | 
            +
                      yield(STARTED_OBJECT, self)
         | 
| 318 348 | 
             
                      begin
         | 
| 319 349 | 
             
                        run_setup
         | 
| 320 350 | 
             
                        run_test
         | 
| @@ -328,8 +358,10 @@ module Test | |
| 328 358 | 
             
                          raise unless handle_exception($!)
         | 
| 329 359 | 
             
                        end
         | 
| 330 360 | 
             
                      end
         | 
| 361 | 
            +
                      @elapsed_time = Time.now - @start_time
         | 
| 331 362 | 
             
                      result.add_run
         | 
| 332 363 | 
             
                      yield(FINISHED, name)
         | 
| 364 | 
            +
                      yield(FINISHED_OBJECT, self)
         | 
| 333 365 | 
             
                    ensure
         | 
| 334 366 | 
             
                      # @_result = nil # For test-spec's after_all :<
         | 
| 335 367 | 
             
                    end
         | 
| @@ -440,6 +472,13 @@ module Test | |
| 440 472 | 
             
                    @interrupted
         | 
| 441 473 | 
             
                  end
         | 
| 442 474 |  | 
| 475 | 
            +
                  # Returns whether this individual test passed or
         | 
| 476 | 
            +
                  # not. Primarily for use in teardown so that artifacts
         | 
| 477 | 
            +
                  # can be left behind if the test fails.
         | 
| 478 | 
            +
                  def passed?
         | 
| 479 | 
            +
                    @test_passed
         | 
| 480 | 
            +
                  end
         | 
| 481 | 
            +
             | 
| 443 482 | 
             
                  private
         | 
| 444 483 | 
             
                  def current_result
         | 
| 445 484 | 
             
                    @_result
         | 
| @@ -460,13 +499,6 @@ module Test | |
| 460 499 | 
             
                    false
         | 
| 461 500 | 
             
                  end
         | 
| 462 501 |  | 
| 463 | 
            -
                  # Returns whether this individual test passed or
         | 
| 464 | 
            -
                  # not. Primarily for use in teardown so that artifacts
         | 
| 465 | 
            -
                  # can be left behind if the test fails.
         | 
| 466 | 
            -
                  def passed?
         | 
| 467 | 
            -
                    @test_passed
         | 
| 468 | 
            -
                  end
         | 
| 469 | 
            -
             | 
| 470 502 | 
             
                  def problem_occurred
         | 
| 471 503 | 
             
                    @test_passed = false
         | 
| 472 504 | 
             
                  end
         | 
| @@ -31,8 +31,10 @@ module Test | |
| 31 31 | 
             
                  include TestResultOmissionSupport
         | 
| 32 32 | 
             
                  include TestResultNotificationSupport
         | 
| 33 33 |  | 
| 34 | 
            -
                   | 
| 35 | 
            -
                   | 
| 34 | 
            +
                  FINISHED = name + "::FINISHED"
         | 
| 35 | 
            +
                  CHANGED = name + "::CHANGED"
         | 
| 36 | 
            +
                  PASS_ASSERTION = name + "::PASS_ASSERTION"
         | 
| 37 | 
            +
                  FAULT = name + "::FAULT"
         | 
| 36 38 |  | 
| 37 39 | 
             
                  attr_reader :run_count, :pass_count, :assertion_count, :faults
         | 
| 38 40 |  | 
| @@ -48,6 +50,7 @@ module Test | |
| 48 50 | 
             
                  # Records a test run.
         | 
| 49 51 | 
             
                  def add_run
         | 
| 50 52 | 
             
                    @run_count += 1
         | 
| 53 | 
            +
                    notify_listeners(FINISHED, self)
         | 
| 51 54 | 
             
                    notify_changed
         | 
| 52 55 | 
             
                  end
         | 
| 53 56 |  | 
| @@ -58,6 +61,7 @@ module Test | |
| 58 61 | 
             
                  # Records an individual assertion.
         | 
| 59 62 | 
             
                  def add_assertion
         | 
| 60 63 | 
             
                    @assertion_count += 1
         | 
| 64 | 
            +
                    notify_listeners(PASS_ASSERTION, self)
         | 
| 61 65 | 
             
                    notify_changed
         | 
| 62 66 | 
             
                  end
         | 
| 63 67 |  | 
| @@ -2,6 +2,7 @@ | |
| 2 2 | 
             
            #
         | 
| 3 3 | 
             
            # Author:: Nathaniel Talbott.
         | 
| 4 4 | 
             
            # Copyright:: Copyright (c) 2000-2003 Nathaniel Talbott. All rights reserved.
         | 
| 5 | 
            +
            # Copyright:: Copyright (c) 2008-2011 Kouhei Sutou. All rights reserved.
         | 
| 5 6 | 
             
            # License:: Ruby license.
         | 
| 6 7 |  | 
| 7 8 | 
             
            require 'test/unit/error'
         | 
| @@ -17,10 +18,16 @@ module Test | |
| 17 18 | 
             
                # has a suite method as simply providing a way to get a
         | 
| 18 19 | 
             
                # meaningful TestSuite instance.
         | 
| 19 20 | 
             
                class TestSuite
         | 
| 20 | 
            -
                  attr_reader :name, :tests
         | 
| 21 | 
            -
             | 
| 21 | 
            +
                  attr_reader :name, :tests, :test_case, :start_time, :elapsed_time
         | 
| 22 | 
            +
             | 
| 23 | 
            +
                  # Test suite that has higher priority is ran prior to
         | 
| 24 | 
            +
                  # test suites that have lower priority.
         | 
| 25 | 
            +
                  attr_accessor :priority
         | 
| 26 | 
            +
             | 
| 22 27 | 
             
                  STARTED = name + "::STARTED"
         | 
| 28 | 
            +
                  STARTED_OBJECT = name + "::STARTED::OBJECT"
         | 
| 23 29 | 
             
                  FINISHED = name + "::FINISHED"
         | 
| 30 | 
            +
                  FINISHED_OBJECT = name + "::FINISHED::OBJECT"
         | 
| 24 31 |  | 
| 25 32 | 
             
                  # Creates a new TestSuite with the given name.
         | 
| 26 33 | 
             
                  def initialize(name="Unnamed TestSuite", test_case=nil)
         | 
| @@ -28,19 +35,29 @@ module Test | |
| 28 35 | 
             
                    @tests = []
         | 
| 29 36 | 
             
                    @test_case = test_case
         | 
| 30 37 | 
             
                    @n_tests = 0
         | 
| 38 | 
            +
                    @priority = 0
         | 
| 39 | 
            +
                    @start_time = nil
         | 
| 40 | 
            +
                    @elapsed_time = nil
         | 
| 41 | 
            +
                    @passed = true
         | 
| 31 42 | 
             
                  end
         | 
| 32 43 |  | 
| 33 44 | 
             
                  # Runs the tests and/or suites contained in this
         | 
| 34 45 | 
             
                  # TestSuite.
         | 
| 35 46 | 
             
                  def run(result, &progress_block)
         | 
| 47 | 
            +
                    @start_time = Time.now
         | 
| 36 48 | 
             
                    yield(STARTED, name)
         | 
| 49 | 
            +
                    yield(STARTED_OBJECT, self)
         | 
| 37 50 | 
             
                    run_startup(result)
         | 
| 38 51 | 
             
                    while test = @tests.shift
         | 
| 39 52 | 
             
                      @n_tests += test.size
         | 
| 40 53 | 
             
                      test.run(result, &progress_block)
         | 
| 54 | 
            +
                      @passed = false unless test.passed?
         | 
| 41 55 | 
             
                    end
         | 
| 42 56 | 
             
                    run_shutdown(result)
         | 
| 57 | 
            +
                  ensure
         | 
| 58 | 
            +
                    @elapsed_time = Time.now - @start_time
         | 
| 43 59 | 
             
                    yield(FINISHED, name)
         | 
| 60 | 
            +
                    yield(FINISHED_OBJECT, self)
         | 
| 44 61 | 
             
                  end
         | 
| 45 62 |  | 
| 46 63 | 
             
                  # Adds the test to the suite.
         | 
| @@ -79,6 +96,10 @@ module Test | |
| 79 96 | 
             
                    @tests == other.tests
         | 
| 80 97 | 
             
                  end
         | 
| 81 98 |  | 
| 99 | 
            +
                  def passed?
         | 
| 100 | 
            +
                    @passed
         | 
| 101 | 
            +
                  end
         | 
| 102 | 
            +
             | 
| 82 103 | 
             
                  private
         | 
| 83 104 | 
             
                  def run_startup(result)
         | 
| 84 105 | 
             
                    return if @test_case.nil? or !@test_case.respond_to?(:startup)
         | 
| @@ -104,6 +125,7 @@ module Test | |
| 104 125 | 
             
                      false
         | 
| 105 126 | 
             
                    else
         | 
| 106 127 | 
             
                      result.add_error(Error.new(@test_case.name, exception))
         | 
| 128 | 
            +
                      @passed = false
         | 
| 107 129 | 
             
                      true
         | 
| 108 130 | 
             
                    end
         | 
| 109 131 | 
             
                  end
         | 
| @@ -56,21 +56,28 @@ module Test | |
| 56 56 | 
             
                      end
         | 
| 57 57 |  | 
| 58 58 | 
             
                      def attach_to_mediator
         | 
| 59 | 
            -
                        @mediator.add_listener(TestResult::FAULT, | 
| 60 | 
            -
             | 
| 61 | 
            -
                        @mediator.add_listener(TestRunnerMediator:: | 
| 62 | 
            -
             | 
| 63 | 
            -
                        @mediator.add_listener( | 
| 64 | 
            -
             | 
| 65 | 
            -
                        @mediator.add_listener( | 
| 59 | 
            +
                        @mediator.add_listener(TestResult::FAULT,
         | 
| 60 | 
            +
                                               &method(:add_fault))
         | 
| 61 | 
            +
                        @mediator.add_listener(TestRunnerMediator::STARTED,
         | 
| 62 | 
            +
                                               &method(:started))
         | 
| 63 | 
            +
                        @mediator.add_listener(TestRunnerMediator::FINISHED,
         | 
| 64 | 
            +
                                               &method(:finished))
         | 
| 65 | 
            +
                        @mediator.add_listener(TestCase::STARTED_OBJECT,
         | 
| 66 | 
            +
                                               &method(:test_started))
         | 
| 67 | 
            +
                        @mediator.add_listener(TestCase::FINISHED_OBJECT,
         | 
| 68 | 
            +
                                               &method(:test_finished))
         | 
| 69 | 
            +
                        @mediator.add_listener(TestSuite::STARTED_OBJECT,
         | 
| 70 | 
            +
                                               &method(:test_suite_started))
         | 
| 71 | 
            +
                        @mediator.add_listener(TestSuite::FINISHED_OBJECT,
         | 
| 72 | 
            +
                                               &method(:test_suite_finished))
         | 
| 66 73 | 
             
                      end
         | 
| 67 | 
            -
             | 
| 74 | 
            +
             | 
| 68 75 | 
             
                      def add_fault(fault)
         | 
| 69 76 | 
             
                        @faults << fault
         | 
| 70 77 | 
             
                        output_progress(fault.single_character_display, fault_color(fault))
         | 
| 71 78 | 
             
                        @already_outputted = true if fault.critical?
         | 
| 72 79 | 
             
                      end
         | 
| 73 | 
            -
             | 
| 80 | 
            +
             | 
| 74 81 | 
             
                      def started(result)
         | 
| 75 82 | 
             
                        @result = result
         | 
| 76 83 | 
             
                        output_started
         | 
| @@ -92,6 +99,15 @@ module Test | |
| 92 99 | 
             
                        nl
         | 
| 93 100 | 
             
                        output(@result, result_color)
         | 
| 94 101 | 
             
                        output("%g%% passed" % @result.pass_percentage, result_color)
         | 
| 102 | 
            +
                        unless elapsed_time.zero?
         | 
| 103 | 
            +
                          nl
         | 
| 104 | 
            +
                          throuputs =
         | 
| 105 | 
            +
                            [
         | 
| 106 | 
            +
                             "%.2f tests/s" % [@result.run_count / elapsed_time],
         | 
| 107 | 
            +
                             "%.2f assertions/s" % [@result.assertion_count / elapsed_time],
         | 
| 108 | 
            +
                            ]
         | 
| 109 | 
            +
                          output(throuputs.join(", "))
         | 
| 110 | 
            +
                        end
         | 
| 95 111 | 
             
                      end
         | 
| 96 112 |  | 
| 97 113 | 
             
                      def output_fault(fault)
         | 
| @@ -133,18 +149,43 @@ module Test | |
| 133 149 | 
             
                      end
         | 
| 134 150 |  | 
| 135 151 | 
             
                      def output_fault_message(fault)
         | 
| 152 | 
            +
                        if fault.expected.respond_to?(:encoding) and
         | 
| 153 | 
            +
                            fault.actual.respond_to?(:encoding) and
         | 
| 154 | 
            +
                            fault.expected.encoding != fault.actual.encoding
         | 
| 155 | 
            +
                          need_encoding = true
         | 
| 156 | 
            +
                        else
         | 
| 157 | 
            +
                          need_encoding = false
         | 
| 158 | 
            +
                        end
         | 
| 136 159 | 
             
                        output(fault.user_message) if fault.user_message
         | 
| 137 160 | 
             
                        output_single("<")
         | 
| 138 161 | 
             
                        output_single(fault.inspected_expected, color("pass"))
         | 
| 139 | 
            -
                         | 
| 162 | 
            +
                        output_single(">")
         | 
| 163 | 
            +
                        if need_encoding
         | 
| 164 | 
            +
                          output_single("(")
         | 
| 165 | 
            +
                          output_single(fault.expected.encoding.name, color("pass"))
         | 
| 166 | 
            +
                          output_single(")")
         | 
| 167 | 
            +
                        end
         | 
| 168 | 
            +
                        output(" expected but was")
         | 
| 140 169 | 
             
                        output_single("<")
         | 
| 141 170 | 
             
                        output_single(fault.inspected_actual, color("failure"))
         | 
| 142 | 
            -
                         | 
| 171 | 
            +
                        output_single(">")
         | 
| 172 | 
            +
                        if need_encoding
         | 
| 173 | 
            +
                          output_single("(")
         | 
| 174 | 
            +
                          output_single(fault.actual.encoding.name, color("failure"))
         | 
| 175 | 
            +
                          output_single(")")
         | 
| 176 | 
            +
                        end
         | 
| 177 | 
            +
                        output("")
         | 
| 143 178 | 
             
                        from, to = prepare_for_diff(fault.expected, fault.actual)
         | 
| 144 179 | 
             
                        if from and to
         | 
| 145 | 
            -
                           | 
| 146 | 
            -
             | 
| 147 | 
            -
             | 
| 180 | 
            +
                          from_lines = from.split(/\r?\n/)
         | 
| 181 | 
            +
                          to_lines = to.split(/\r?\n/)
         | 
| 182 | 
            +
                          if need_encoding
         | 
| 183 | 
            +
                            from_lines << ""
         | 
| 184 | 
            +
                            to_lines << ""
         | 
| 185 | 
            +
                            from_lines << "Encoding: #{fault.expected.encoding.name}"
         | 
| 186 | 
            +
                            to_lines << "Encoding: #{fault.actual.encoding.name}"
         | 
| 187 | 
            +
                          end
         | 
| 188 | 
            +
                          differ = ColorizedReadableDiffer.new(from_lines, to_lines, self)
         | 
| 148 189 | 
             
                          if differ.need_diff?
         | 
| 149 190 | 
             
                            output("")
         | 
| 150 191 | 
             
                            output("diff:")
         | 
| @@ -157,10 +198,10 @@ module Test | |
| 157 198 | 
             
                        fault.long_display
         | 
| 158 199 | 
             
                      end
         | 
| 159 200 |  | 
| 160 | 
            -
                      def test_started( | 
| 201 | 
            +
                      def test_started(test)
         | 
| 161 202 | 
             
                        return unless output?(VERBOSE)
         | 
| 162 203 |  | 
| 163 | 
            -
                        name = name.sub(/\(.+?\)\z/, '')
         | 
| 204 | 
            +
                        name = test.name.sub(/\(.+?\)\z/, '')
         | 
| 164 205 | 
             
                        right_space = 8 * 2
         | 
| 165 206 | 
             
                        left_space = @progress_row_max - right_space
         | 
| 166 207 | 
             
                        left_space = left_space - indent.size - name.size
         | 
| @@ -169,7 +210,7 @@ module Test | |
| 169 210 | 
             
                        @test_start = Time.now
         | 
| 170 211 | 
             
                      end
         | 
| 171 212 |  | 
| 172 | 
            -
                      def test_finished( | 
| 213 | 
            +
                      def test_finished(test)
         | 
| 173 214 | 
             
                        unless @already_outputted
         | 
| 174 215 | 
             
                          output_progress(".", color("pass"))
         | 
| 175 216 | 
             
                        end
         | 
| @@ -180,24 +221,24 @@ module Test | |
| 180 221 | 
             
                        output(": (%f)" % (Time.now - @test_start), nil, VERBOSE)
         | 
| 181 222 | 
             
                      end
         | 
| 182 223 |  | 
| 183 | 
            -
                      def test_suite_started( | 
| 224 | 
            +
                      def test_suite_started(suite)
         | 
| 184 225 | 
             
                        if @top_level
         | 
| 185 226 | 
             
                          @top_level = false
         | 
| 186 227 | 
             
                          return
         | 
| 187 228 | 
             
                        end
         | 
| 188 229 |  | 
| 189 230 | 
             
                        output_single(indent, nil, VERBOSE)
         | 
| 190 | 
            -
                        if  | 
| 191 | 
            -
                          _color = color("case")
         | 
| 192 | 
            -
                        else
         | 
| 231 | 
            +
                        if suite.test_case.nil?
         | 
| 193 232 | 
             
                          _color = color("suite")
         | 
| 233 | 
            +
                        else
         | 
| 234 | 
            +
                          _color = color("case")
         | 
| 194 235 | 
             
                        end
         | 
| 195 | 
            -
                        output_single(name, _color, VERBOSE)
         | 
| 236 | 
            +
                        output_single(suite.name, _color, VERBOSE)
         | 
| 196 237 | 
             
                        output(": ", nil, VERBOSE)
         | 
| 197 238 | 
             
                        @indent += 2
         | 
| 198 239 | 
             
                      end
         | 
| 199 240 |  | 
| 200 | 
            -
                      def test_suite_finished( | 
| 241 | 
            +
                      def test_suite_finished(suite)
         | 
| 201 242 | 
             
                        @indent -= 2
         | 
| 202 243 | 
             
                      end
         | 
| 203 244 |  | 
| @@ -286,7 +327,7 @@ module Test | |
| 286 327 | 
             
                      end
         | 
| 287 328 |  | 
| 288 329 | 
             
                      def guess_term_width
         | 
| 289 | 
            -
                        Integer(ENV["TERM_WIDTH"] || 0)
         | 
| 330 | 
            +
                        Integer(ENV["COLUMNS"] || ENV["TERM_WIDTH"] || 0)
         | 
| 290 331 | 
             
                      rescue ArgumentError
         | 
| 291 332 | 
             
                        0
         | 
| 292 333 | 
             
                      end
         | 
| @@ -424,7 +465,3 @@ module Test | |
| 424 465 | 
             
                end
         | 
| 425 466 | 
             
              end
         | 
| 426 467 | 
             
            end
         | 
| 427 | 
            -
             | 
| 428 | 
            -
            if __FILE__ == $0
         | 
| 429 | 
            -
              Test::Unit::UI::Console::TestRunner.start_command_line_test
         | 
| 430 | 
            -
            end
         |