class TestSubject(unittest.TestCase): @classmethod def setUpClass(self): self.s = Subject() self.dec_obs = DecimalViewer() self.hex_obs = HexViewer() def test_a_observer_list_shall_be_empty_initially(self): self.assertEqual(len(self.s._observers), 0) def test_b_observers_shall_be_attachable(self): self.s.attach(self.dec_obs) self.assertEqual(isinstance(self.s._observers[0], DecimalViewer), True) self.assertEqual(len(self.s._observers), 1) self.s.attach(self.hex_obs) self.assertEqual(isinstance(self.s._observers[1], HexViewer), True) self.assertEqual(len(self.s._observers), 2) def test_c_observers_shall_be_detachable(self): self.s.detach(self.dec_obs) # hex viewer shall be remaining if dec viewer is detached first self.assertEqual(isinstance(self.s._observers[0], HexViewer), True) self.assertEqual(len(self.s._observers), 1) self.s.detach(self.hex_obs) self.assertEqual(len(self.s._observers), 0)
def detach(self, observer, index=None): if (observer): Subject.detach(self, observer) for i in range(len(self.observers)): if (observer == self.observers[i]): self.simulations.pop(i) return self.simulations.pop(self.observers[index]) self.observers.pop(index) print('Detached; ', (self.observers))