def test_setdefault_with_casting(self): # If the validator does transformation, the containment # is checked before the transformation. This is more # consistent with the description of setdefault, which is # effectively a short-hand for ``__getitem__``, # followed by ``__setitem__`` (if get fails), followed by # another ``__getitem__``. # The notification should be factual about the actual # mutation on the dict. notifier = mock.Mock() td = TraitDict( key_validator=str, value_validator=str, notifiers=[notifier, self.notification_handler], ) td.setdefault(1, 2) self.assertEqual(td, {"1": "2"}) self.assertEqual(notifier.call_count, 1) self.assertEqual(self.removed, {}) self.assertEqual(self.added, {"1": "2"}) self.assertEqual(self.changed, {}) notifier.reset_mock() td.setdefault(1, 4) self.assertEqual(td, {"1": "4"}) self.assertEqual(notifier.call_count, 1) self.assertEqual(self.removed, {}) self.assertEqual(self.added, {}) self.assertEqual(self.changed, {"1": "2"})
def test_setdefault(self): td = TraitDict({"a": 1, "b": 2}, key_validator=str_validator, value_validator=int_validator, notifiers=[self.notification_handler]) result = td.setdefault("c", 3) self.assertEqual(result, 3) self.assertEqual(td.setdefault("a", 5), 1)