[前][次][番号順一覧][スレッド一覧]

ruby-changes:38014

From: hsbt <ko1@a...>
Date: Thu, 26 Mar 2015 10:05:24 +0900 (JST)
Subject: [ruby-changes:38014] hsbt:r50095 (trunk): * test/test_observer.rb: add tests for Observable module.

hsbt	2015-03-26 10:05:18 +0900 (Thu, 26 Mar 2015)

  New Revision: 50095

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=revision&revision=50095

  Log:
    * test/test_observer.rb: add tests for Observable module.
      [fix GH-859] Patch by @brightbits

  Added files:
    trunk/test/test_observer.rb
  Modified files:
    trunk/ChangeLog
Index: ChangeLog
===================================================================
--- ChangeLog	(revision 50094)
+++ ChangeLog	(revision 50095)
@@ -1,3 +1,8 @@ https://github.com/ruby/ruby/blob/trunk/ChangeLog#L1
+Thu Mar 26 10:05:13 2015  SHIBATA Hiroshi  <shibata.hiroshi@g...>
+
+	* 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@8...>
 
 	* README.EXT: add redirect [ruby-core:68631]
Index: test/test_observer.rb
===================================================================
--- test/test_observer.rb	(revision 0)
+++ test/test_observer.rb	(revision 50095)
@@ -0,0 +1,65 @@ https://github.com/ruby/ruby/blob/trunk/test/test_observer.rb#L1
+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

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]