def test_dict_set(self): v = {"a": 42, "c": {}} KeyValueCoding.setKey(v, "a", 43) KeyValueCoding.setKey(v, "b", "B") self.assertEqual(v, {"a": 43, "b": "B", "c": {}}) KeyValueCoding.setKeyPath(v, "a", 44) KeyValueCoding.setKeyPath(v, "b", "C") KeyValueCoding.setKeyPath(v, "c.a", "A") self.assertEqual(v, {"a": 44, "b": "C", "c": {"a": "A"}})
def test_dict_set(self): v = {'a': 42, 'c': {}} KeyValueCoding.setKey(v, 'a', 43) KeyValueCoding.setKey(v, 'b', 'B') self.assertEqual(v, {'a': 43, 'b': 'B', 'c': {}}) KeyValueCoding.setKeyPath(v, 'a', 44) KeyValueCoding.setKeyPath(v, 'b', 'C') KeyValueCoding.setKeyPath(v, 'c.a', 'A') self.assertEqual(v, {'a': 44, 'b': 'C', 'c': {'a': 'A'}})
def test_cocoa_set(self): o = objc.lookUpClass('NSMutableDictionary').alloc().init() KeyValueCoding.setKey(o, 'attr', 'value') self.assertEqual(o, {'attr': 'value'}) KeyValueCoding.setKeyPath(o, 'attr', 'value2') self.assertEqual(o, {'attr': 'value2'}) o = objc.lookUpClass('NSObject').alloc().init() self.assertRaises(KeyError, KeyValueCoding.setKey, o, 'description', 'hello') self.assertRaises(KeyError, KeyValueCoding.setKeyPath, o, 'description', 'hello')
def test_dict_set(self): v = {'a': 42, 'c':{} } KeyValueCoding.setKey(v, 'a', 43) KeyValueCoding.setKey(v, 'b', 'B') self.assertEqual(v, {'a': 43, 'b': 'B', 'c':{} }) KeyValueCoding.setKeyPath(v, 'a', 44) KeyValueCoding.setKeyPath(v, 'b', 'C') KeyValueCoding.setKeyPath(v, 'c.a', 'A') self.assertEqual(v, {'a': 44, 'b': 'C', 'c':{'a': 'A'} })
def test_cocoa_set(self): o = objc.lookUpClass("NSMutableDictionary").alloc().init() KeyValueCoding.setKey(o, "attr", "value") self.assertEqual(o, {"attr": "value"}) KeyValueCoding.setKeyPath(o, "attr", "value2") self.assertEqual(o, {"attr": "value2"}) o = objc.lookUpClass("NSObject").alloc().init() self.assertRaises(KeyError, KeyValueCoding.setKey, o, "description", "hello") self.assertRaises(KeyError, KeyValueCoding.setKeyPath, o, "description", "hello")
def notify(self, title='', subtitle='', message='', data=None, sound='NSUserNotificationDefaultSoundName', after=0, repeat={}): """Send a notification to Notification Center (Mac OS X 10.8+). If running on a version of Mac OS X that does not support notifications, a ``RuntimeError`` will be raised. Apple says, "The userInfo content must be of reasonable serialized size (less than 1k) or an exception will be thrown." So don't do that! :param title: text in a larger font. :param subtitle: text in a smaller font below the `title`. :param message: text representing the body of the notification below the `subtitle`. :param data: will be passed to the application's "notification center" (see :func:`rumps.notifications`) when this notification is clicked. :param sound: whether the notification should make a noise when it arrives. :param after: number of seconds to postpone the notification. :param repeat: dict of date components that specify how the notification shoul be repeated. e.g. {'hour': 1, 'minute': 30} """ after = max(after, 0) if not _NOTIFICATIONS: raise RuntimeError('Mac OS X 10.8+ is required to send notifications') if data is not None and not isinstance(data, Mapping): raise TypeError('notification data must be a mapping') _require_string_or_none(title, subtitle, message, sound) notification = NSUserNotification.alloc().init() notification.setTitle_(title) notification.setSubtitle_(subtitle) notification.setInformativeText_(message) notification.setUserInfo_(data or {}) if sound: notification.setSoundName_(sound) if after: notification.setDeliveryDate_(NSDate.dateWithTimeIntervalSinceNow_(after)) if repeat: deliveryRepeatInterval = NSDateComponents.alloc().init() for k, v in repeat.items(): kvc.setKey(deliveryRepeatInterval, k, v) notification.setDeliveryRepeatInterval_(deliveryRepeatInterval) self.defaultNotificationCenter.scheduleNotification_(notification) return notification
def test_accessor(self): class Record (object): def __init__(self): self._attr1 = 1 self._attr2 = 2 self._attr3 = 3 def attr1(self): return self._attr1 def setAttr1_(self, value): self._attr1 = (1, value) def setAttr1(self, value): self._attr1 = (2, value) def set_attr1(self, value): self._attr1 = (3, value) def setAttr2(self, value): self._attr2 = (2, value) def set_attr2(self, value): self._attr2 = (3, value) def set_attr3(self, value): self._attr3 = (3, value) set_no_attr = 4 o = Record() self.assertEqual(o._attr1, 1) self.assertEqual(o._attr2, 2) self.assertEqual(o._attr3, 3) self.assertEqual(o.set_no_attr, 4) KeyValueCoding.setKey(o, 'attr1', 9) KeyValueCoding.setKey(o, 'attr2', 10) KeyValueCoding.setKey(o, 'attr3', 11) KeyValueCoding.setKey(o, 'no_attr', 12) self.assertEqual(o._attr1, (1, 9)) self.assertEqual(o._attr2, (2, 10)) self.assertEqual(o._attr3, (3, 11)) self.assertEqual(o.no_attr, 12) KeyValueCoding.setKeyPath(o, 'attr1', 29) KeyValueCoding.setKeyPath(o, 'attr2', 210) KeyValueCoding.setKeyPath(o, 'attr3', 211) self.assertEqual(o._attr1, (1, 29)) self.assertEqual(o._attr2, (2, 210)) self.assertEqual(o._attr3, (3, 211)) o._attr1 = {'a': 'b'} KeyValueCoding.setKeyPath(o, 'attr1.a', 30) self.assertEqual(o._attr1, {'a': 30})
def test_attr_set(self): class R(object): @property def attr3(self): return self._attr3 @attr3.setter def attr3(self, v): self._attr3 = v * 2 @property def attr4(self): return self._attr4 def attr6(self): return self._attr6 r = R() r._attr1 = 42 r._attr4 = 43 r.attr5 = {} r._attr6 = 9 KeyValueCoding.setKey(r, "attr1", 1) KeyValueCoding.setKey(r, "attr2", 2) KeyValueCoding.setKey(r, "attr3", 3) self.assertRaises(KeyError, KeyValueCoding.setKey, r, "attr4", 4) KeyValueCoding.setKey(r, "attr6", 7) self.assertEqual(r._attr1, 1) self.assertEqual(r.attr2, 2) self.assertEqual(r.attr3, 6) self.assertEqual(r._attr3, 6) self.assertEqual(r._attr6, 7) KeyValueCoding.setKeyPath(r, "attr1", "one") KeyValueCoding.setKeyPath(r, "attr2", "two") KeyValueCoding.setKeyPath(r, "attr3", "three") KeyValueCoding.setKeyPath(r, "attr5.sub1", 3) KeyValueCoding.setKeyPath(r, "attr6", "seven") self.assertEqual(r._attr1, "one") self.assertEqual(r.attr2, "two") self.assertEqual(r.attr3, "threethree") self.assertEqual(r._attr3, "threethree") self.assertEqual(r.attr5, {"sub1": 3}) self.assertEqual(r._attr6, "seven")
def test_attr_set(self): class R (object): @property def attr3(self): return self._attr3 @attr3.setter def attr3(self, v): self._attr3 = v * 2 @property def attr4(self): return self._attr4 def attr6(self): return self._attr6 r = R() r._attr1 = 42 r._attr4 = 43 r.attr5 = {} r._attr6 = 9 KeyValueCoding.setKey(r, 'attr1', 1) KeyValueCoding.setKey(r, 'attr2', 2) KeyValueCoding.setKey(r, 'attr3', 3) self.assertRaises(KeyError, KeyValueCoding.setKey, r, 'attr4', 4) KeyValueCoding.setKey(r, 'attr6', 7) self.assertEqual(r._attr1, 1) self.assertEqual(r.attr2, 2) self.assertEqual(r.attr3, 6) self.assertEqual(r._attr3, 6) self.assertEqual(r._attr6, 7) KeyValueCoding.setKeyPath(r, 'attr1', 'one') KeyValueCoding.setKeyPath(r, 'attr2', 'two') KeyValueCoding.setKeyPath(r, 'attr3', 'three') KeyValueCoding.setKeyPath(r, 'attr5.sub1', 3) KeyValueCoding.setKeyPath(r, 'attr6', 'seven') self.assertEqual(r._attr1, 'one') self.assertEqual(r.attr2, 'two') self.assertEqual(r.attr3, 'threethree') self.assertEqual(r._attr3, 'threethree') self.assertEqual(r.attr5, {'sub1': 3}) self.assertEqual(r._attr6, 'seven')
def test_attr_set(self): class R(object): @property def attr3(self): return self._attr3 @attr3.setter def attr3(self, v): self._attr3 = v * 2 @property def attr4(self): return self._attr4 def attr6(self): return self._attr6 r = R() r._attr1 = 42 r._attr4 = 43 r.attr5 = {} r._attr6 = 9 KeyValueCoding.setKey(r, 'attr1', 1) KeyValueCoding.setKey(r, 'attr2', 2) KeyValueCoding.setKey(r, 'attr3', 3) self.assertRaises(KeyError, KeyValueCoding.setKey, r, 'attr4', 4) KeyValueCoding.setKey(r, 'attr6', 7) self.assertEqual(r._attr1, 1) self.assertEqual(r.attr2, 2) self.assertEqual(r.attr3, 6) self.assertEqual(r._attr3, 6) self.assertEqual(r._attr6, 7) KeyValueCoding.setKeyPath(r, 'attr1', 'one') KeyValueCoding.setKeyPath(r, 'attr2', 'two') KeyValueCoding.setKeyPath(r, 'attr3', 'three') KeyValueCoding.setKeyPath(r, 'attr5.sub1', 3) KeyValueCoding.setKeyPath(r, 'attr6', 'seven') self.assertEqual(r._attr1, 'one') self.assertEqual(r.attr2, 'two') self.assertEqual(r.attr3, 'threethree') self.assertEqual(r._attr3, 'threethree') self.assertEqual(r.attr5, {'sub1': 3}) self.assertEqual(r._attr6, 'seven')
def test_none_set(self): # setKey(None, 'any', 'value') is documented as a no-op # check that this doesn't raise an exception. v = None KeyValueCoding.setKey(v, "a", 42) KeyValueCoding.setKeyPath(v, "a", 42)
def test_none_set(self): # setKey(None, 'any', 'value') is documented as a no-op # check that this doesn't raise an exception. v = None KeyValueCoding.setKey(v, 'a', 42) KeyValueCoding.setKeyPath(v, 'a', 42)