summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorhsbt <hsbt@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2015-03-26 01:05:18 +0000
committerhsbt <hsbt@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2015-03-26 01:05:18 +0000
commit4d6aeebbabe6304dadcc83c659bf9e2f979990b3 (patch)
tree623b6aaeb718c2f4799ffc15a15d27a5b0b347ff /test
parent733a03c285e9da31b5e01904fac5ee6f2c397576 (diff)
* 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
Diffstat (limited to 'test')
-rw-r--r--test/test_observer.rb65
1 files changed, 65 insertions, 0 deletions
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