예제 #1
0
    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'}})
예제 #3
0
    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')
예제 #4
0
    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'} })
예제 #5
0
    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')
예제 #6
0
    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")
예제 #7
0
    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
예제 #8
0
    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})
예제 #9
0
    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})
예제 #10
0
    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")
예제 #11
0
    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')
예제 #12
0
    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')
예제 #13
0
 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)
예제 #14
0
 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)