aboutsummaryrefslogtreecommitdiffstats
path: root/test/test_observer.rb
diff options
context:
space:
mode:
Diffstat (limited to 'test/test_observer.rb')
-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