diff options
author | hsbt <hsbt@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2015-03-26 01:05:18 +0000 |
---|---|---|
committer | hsbt <hsbt@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2015-03-26 01:05:18 +0000 |
commit | 4d6aeebbabe6304dadcc83c659bf9e2f979990b3 (patch) | |
tree | 623b6aaeb718c2f4799ffc15a15d27a5b0b347ff | |
parent | 733a03c285e9da31b5e01904fac5ee6f2c397576 (diff) | |
download | ruby-4d6aeebbabe6304dadcc83c659bf9e2f979990b3.tar.gz |
* test/test_observer.rb: add tests for Observable module.
[fix GH-859] Patch by @brightbits
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@50095 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | test/test_observer.rb | 65 |
2 files changed, 70 insertions, 0 deletions
@@ -1,3 +1,8 @@ +Thu Mar 26 10:05:13 2015 SHIBATA Hiroshi <shibata.hiroshi@gmail.com> + + * test/test_observer.rb: add tests for Observable module. + [fix GH-859] Patch by @brightbits + Thu Mar 26 06:35:10 2015 Eric Wong <e@80x24.org> * README.EXT: add redirect [ruby-core:68631] diff --git a/test/test_observer.rb b/test/test_observer.rb new file mode 100644 index 0000000000..e2c159ad09 --- /dev/null +++ b/test/test_observer.rb @@ -0,0 +1,65 @@ +require 'test/unit' +require 'observer' + +class TestObserver < Test::Unit::TestCase + class TestObservable + include Observable + + def notify(*args) + changed + notify_observers(*args) + end + end + + class TestWatcher + def initialize(observable) + @notifications = [] + observable.add_observer(self) + end + + attr_reader :notifications + + def update(*args) + @notifications << args + end + end + + def test_observers + observable = TestObservable.new + + assert_equal(0, observable.count_observers) + + watcher1 = TestWatcher.new(observable) + + assert_equal(1, observable.count_observers) + + observable.notify("test", 123) + + watcher2 = TestWatcher.new(observable) + + assert_equal(2, observable.count_observers) + + observable.notify(42) + + assert_equal([["test", 123], [42]], watcher1.notifications) + assert_equal([[42]], watcher2.notifications) + + observable.delete_observer(watcher1) + + assert_equal(1, observable.count_observers) + + observable.notify(:cats) + + assert_equal([["test", 123], [42]], watcher1.notifications) + assert_equal([[42], [:cats]], watcher2.notifications) + + observable.delete_observers + + assert_equal(0, observable.count_observers) + + observable.notify("nope") + + assert_equal([["test", 123], [42]], watcher1.notifications) + assert_equal([[42], [:cats]], watcher2.notifications) + end +end |