File Manager

Current Path : /usr/lib/ruby/gems/3.0.0/gems/test-unit-3.3.7/test/util/
Upload File :
Current File : //usr/lib/ruby/gems/3.0.0/gems/test-unit-3.3.7/test/util/test_observable.rb

# Author:: Nathaniel Talbott.
# Copyright:: Copyright (c) 2000-2002 Nathaniel Talbott. All rights reserved.
# License:: Ruby license.

require 'test/unit/util/observable'

module Test
  module Unit
    module Util
      class TC_Observable < TestCase
      
        class TF_Observable
          include Observable
        end
        
        def setup
          @observable = TF_Observable.new
        end
        
        def test_simple_observation
          assert_raises(ArgumentError, "add_listener should throw an exception if no callback is supplied") do
            @observable.add_listener(:property, "a")
          end
      
          heard = false
          callback = proc { heard = true }
          assert_equal("a", @observable.add_listener(:property, "a", &callback), "add_listener should return the listener that was added")
      
          count = 0
          @observable.instance_eval do
            count = notify_listeners(:property)
          end
          assert_equal(1, count, "notify_listeners should have returned the number of listeners that were notified")
          assert(heard, "Should have heard the property changed")
      
          heard = false
          assert_equal(callback, @observable.remove_listener(:property, "a"), "remove_listener should return the callback")
          
          count = 1
          @observable.instance_eval do
            count = notify_listeners(:property)
          end
          assert_equal(0, count, "notify_listeners should have returned the number of listeners that were notified")
          assert(!heard, "Should not have heard the property change")
        end
        
        def test_value_observation
          value = nil
          @observable.add_listener(:property, "a") do |passed_value|
            value = passed_value
          end
          count = 0
          @observable.instance_eval do
            count = notify_listeners(:property, "stuff")
          end
          assert_equal(1, count, "Should have update the correct number of listeners")
          assert_equal("stuff", value, "Should have received the value as an argument to the listener")
        end
        
        def test_multiple_value_observation
          values = []
          @observable.add_listener(:property, "a") do |first_value, second_value|
            values = [first_value, second_value]
          end
          count = 0
          @observable.instance_eval do
            count = notify_listeners(:property, "stuff", "more stuff")
          end
          assert_equal(1, count, "Should have update the correct number of listeners")
          assert_equal(["stuff", "more stuff"], values, "Should have received the value as an argument to the listener")
        end
        
        def test_add_remove_with_default_listener
          assert_raises(ArgumentError, "add_listener should throw an exception if no callback is supplied") do
            @observable.add_listener(:property)
          end
      
          heard = false
          callback = proc { heard = true }
          assert_equal(callback, @observable.add_listener(:property, &callback), "add_listener should return the listener that was added")
      
          count = 0
          @observable.instance_eval do
            count = notify_listeners(:property)
          end
          assert_equal(1, count, "notify_listeners should have returned the number of listeners that were notified")
          assert(heard, "Should have heard the property changed")
      
          heard = false
          assert_equal(callback, @observable.remove_listener(:property, callback), "remove_listener should return the callback")
      
          count = 1
          @observable.instance_eval do
            count = notify_listeners(:property)
          end
          assert_equal(0, count, "notify_listeners should have returned the number of listeners that were notified")
          assert(!heard, "Should not have heard the property change")
        end
      end
    end
  end
end

File Manager Version 1.0, Coded By Lucas
Email: hehe@yahoo.com