diff --git a/Observer.py b/Observer.py index 7716a60..dc40dd3 100644 --- a/Observer.py +++ b/Observer.py @@ -81,21 +81,20 @@ class Observable(): Adds observer to notification list. """ # FIXME: Check name unique - try: - if not(observer in self.obs_collection): - self.obs_collection.append(observer) - #print "%s added to collection" % (str(observer)) - else: - pass - #print "%s already in collection" % (str(observer)) + if not isinstance(observer, Observer): + raise TypeError("Subscriber must be Observer") - except TypeError: - print "Failed to add %s" % (str(observer)) + if (observer in self.obs_collection): + raise ValueError("Observer already subscribed") + self.obs_collection.append(observer) def unsubscribe(self, observer): """ Removes observer from notification list. """ + if not isinstance(observer, Observer): + raise TypeError("Unsubscriber must be Observer") + try: if observer in self.obs_collection: self.obs_collection.remove(observer) @@ -107,7 +106,7 @@ class Observable(): except TypeError: print "Failed to remove %s" % (str(observer)) - def notify(self, mess): + def __notify(self, mess): """ Sends notification message to all subscribed observer """ @@ -120,6 +119,8 @@ class Observable(): Shall be used for automatic polling. Sets current Observable value and notifies update to subscribers. """ + if not isinstance(val, str): + raise TypeError("Expected string for message") + self.message = val - if val != None: - self.notify(self.message) + self.__notify(self.message) diff --git a/testObserver.py b/testObserver.py index 67c34a1..b65359e 100644 --- a/testObserver.py +++ b/testObserver.py @@ -59,7 +59,7 @@ class TestObserver(unittest.TestCase): self.assertEquals(str(self.myObserver1), self.name1) self.assertRaises(TypeError, lambda: obs.Observer(42)) - # tests message + # tests message and update self.assertEquals(self.myObserver1.message, self.default_mess) new_message = "new_message" self.myObserver1.update(new_message) @@ -67,13 +67,23 @@ class TestObserver(unittest.TestCase): self.assertRaises(TypeError, lambda: self.myObserver1.update([4, 2])) self.assertRaises(TypeError, lambda: self.myObserver1.update(None)) + def testObservable(self): + self.assertRaises(TypeError, lambda: self.myObservable.set_val(42)) + self.assertRaises(TypeError, lambda: self.myObservable.set_val(None)) + + val = "luke" + self.myObservable.set_val(val) + self.assertEquals(val, self.myObservable.message) def testSubscribe(self): + self.assertEquals(len(self.myObservable.obs_collection), 0) + self.assertRaises(TypeError, lambda: self.myObservable.subscribe(42)) + self.myObservable.subscribe(self.myObserver1) + self.assertRaises(ValueError, lambda: self.myObservable.subscribe(self.myObserver1)) # already there + self.myObservable.subscribe(self.myObserver2) - pass - - + self.assertEquals(len(self.myObservable.obs_collection), 2) def testUnsubscribe(self): pass @@ -85,33 +95,5 @@ class TestObserver(unittest.TestCase): pass - - - - - - - - - - - - - if __name__ == '__main__': - unittest.main() - # a = Observer("riri") - # b = Observer("fifi") - # c = Observer("loulou") - - # d = Observable() - - # d.subscribe(a) - # d.subscribe(b) - # d.subscribe(b) - # d.subscribe(c) - - # d.unsubscribe(b) - - # d.set_val(3) - # d.set_val() \ No newline at end of file + unittest.main() \ No newline at end of file