aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog5
-rw-r--r--test/test_observer.rb65
2 files changed, 70 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog
index 24c7cbee4e..15c368d785 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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