def test_trait_set_notification_compat(self): events = [] def notifier(*args, **kwargs): event = set_event_factory(*args, **kwargs) events.append(event) trait_set = TraitSet( [1, 2, 3], notifiers=[notifier], ) # when trait_set.add(4) # then event, = events self.assertIs(event.object, trait_set) self.assertEqual(event.added, {4}) self.assertEqual(event.removed, set()) # when events.clear() trait_set.remove(4) # then event, = events self.assertEqual(event.added, set()) self.assertEqual(event.removed, {4})
def test_add_no_notification_for_no_op(self): # Test adding an existing item triggers no notifications notifier = mock.Mock() ts = TraitSet({1, 2}, notifiers=[notifier]) # when ts.add(1) # then notifier.assert_not_called()
def test_add_iterable(self): python_set = set() iterable = (i for i in range(4)) python_set.add(iterable) ts = TraitSet() ts.add(iterable) # iterable has not been exhausted next(iterable) self.assertEqual(ts, python_set)
def test_remove_iterable(self): iterable = (i for i in range(4)) ts = TraitSet() ts.add(iterable) self.assertIn(iterable, ts) # when ts.remove(iterable) # then self.assertEqual(ts, set())
def test_notification(self): ts = TraitSet({1, 2, 3}, item_validator=int_validator, notifiers=[self.notification_handler]) self.assertEqual(ts, {1, 2, 3}) self.assertEqual(ts.item_validator, int_validator) self.assertEqual(ts.notifiers, [self.notification_handler]) ts.add(5) self.assertEqual(ts, {1, 2, 3, 5}) self.assertIs(self.trait_set, ts) self.assertEqual(self.removed, set()) self.assertEqual(self.added, {5})
def test_add(self): ts = TraitSet({1, 2, 3}, item_validator=int_validator, notifiers=[self.notification_handler]) ts.add(5) self.assertEqual(ts, {1, 2, 3, 5}) self.assertEqual(self.removed, set()) self.assertEqual(self.added, {5}) ts = TraitSet({"one", "two", "three"}, item_validator=string_validator, notifiers=[self.notification_handler]) ts.add("four") self.assertEqual(ts, {"one", "two", "three", "four"}) self.assertEqual(self.removed, set()) self.assertEqual(self.added, {"four"})
def test_remove_does_not_call_validator(self): # Test validator should not be called with removed # items ts = TraitSet(item_validator=self.validator) ts.add("123") value, = ts # when self.validator_args = None ts.remove(value) # then # validator is not called. self.assertIsNone(self.validator_args)