1from PyObjCTools.TestSupport import *
2from CoreFoundation import *
3
4class TestUserNotification (TestCase):
5    def testTypes(self):
6        self.failUnlessIsCFType(CFUserNotificationRef)
7
8    def testTypeID(self):
9        id = CFUserNotificationGetTypeID()
10        self.failUnless( isinstance(id, (int, long)) )
11
12    def testCreation(self):
13        rl = CFRunLoopGetCurrent()
14
15        infoDict = {
16                kCFUserNotificationAlertHeaderKey: u"Alert Header",
17                kCFUserNotificationProgressIndicatorValueKey: True,
18                kCFUserNotificationDefaultButtonTitleKey: "Cancel"
19        }
20
21        self.failUnlessArgIsOut(CFUserNotificationCreate, 3)
22        ref, error = CFUserNotificationCreate(None,
23                1.0, 0, None, infoDict)
24        self.failUnless( error == 0 )
25        self.failUnless( isinstance(ref, CFUserNotificationRef) )
26
27        values = []
28        @objc.callbackFor(CFUserNotificationCreateRunLoopSource)
29        def callout(notification, flags):
30            values.append((notification, flags))
31
32        self.failUnlessArgIsFunction(CFUserNotificationCreateRunLoopSource, 2, 'v^{__CFUserNotification=}' + objc._C_NSInteger, True)
33        rls = CFUserNotificationCreateRunLoopSource(None, ref, callout, 1)
34        self.failUnless(isinstance(rls, CFRunLoopSourceRef))
35
36        CFRunLoopAddSource(rl, rls, kCFRunLoopDefaultMode)
37        CFRunLoopRunInMode(kCFRunLoopDefaultMode, 2.0, True)
38
39        CFUserNotificationCancel(ref)
40        CFRunLoopRunInMode(kCFRunLoopDefaultMode, 1.0, True)
41
42        self.failUnlessEqual(len(values), 1)
43        self.failUnless(values[0][0] is ref)
44        self.failUnlessIsInstance(values[0][1], (int, long))
45
46        self.failUnlessArgIsOut(CFUserNotificationReceiveResponse, 2)
47        error, flags = CFUserNotificationReceiveResponse(ref, 1.0, None)
48        self.failUnless(isinstance(error, (int, long)))
49        self.failUnless(isinstance(flags, (int, long)))
50
51        v = CFUserNotificationGetResponseDictionary(ref)
52        self.failUnless(v is None or isinstance(v, CFDictionaryRef))
53
54        error = CFUserNotificationUpdate(ref, 2.0, 0, infoDict)
55        self.failUnless(error == 0)
56
57        error = CFUserNotificationCancel(ref)
58        self.assertEquals(error, 0)
59
60        v = CFUserNotificationGetResponseValue(ref, kCFUserNotificationTextFieldValuesKey, 0)
61        self.failUnless(v is None or isinstance(v, unicode))
62
63
64
65    def testAlert(self):
66        err, flags = CFUserNotificationDisplayAlert(0.1, 0, None, None, None, "Header", "Message", "Cancel", None, None, None)
67        self.failUnless(err == 0)
68        self.failUnless(isinstance(flags, (int, long)))
69
70        err, flags = CFUserNotificationDisplayAlert(0.1, 0, None, None, None, "Header", "Message", "Cancel", "OK", "Rest", None)
71        self.failUnless(err == 0)
72        self.failUnless(isinstance(flags, (int, long)))
73
74    def testNotice(self):
75        err = CFUserNotificationDisplayNotice(0.1, 0, None, None, None, "Header", "Message", "Cancel")
76        self.failUnless(err == 0)
77
78
79
80
81
82    def testInlines(self):
83        flag = CFUserNotificationCheckBoxChecked(2)
84        self.failUnless( flag == 1 << 10 )
85
86        flag = CFUserNotificationSecureTextField(2)
87        self.failUnless( flag == 1 << 18 )
88
89        flag = CFUserNotificationPopUpSelection(2)
90        self.failUnless( flag == 2 << 24 )
91
92
93    def testConstants(self):
94        self.failUnless( kCFUserNotificationStopAlertLevel       == 0)
95        self.failUnless( kCFUserNotificationNoteAlertLevel       == 1)
96        self.failUnless( kCFUserNotificationCautionAlertLevel    == 2)
97        self.failUnless( kCFUserNotificationPlainAlertLevel      == 3)
98
99        self.failUnless( kCFUserNotificationDefaultResponse      == 0)
100        self.failUnless( kCFUserNotificationAlternateResponse    == 1)
101        self.failUnless( kCFUserNotificationOtherResponse        == 2)
102        self.failUnless( kCFUserNotificationCancelResponse       == 3)
103
104        self.failUnless( kCFUserNotificationNoDefaultButtonFlag  == (1 << 5))
105        self.failUnless( kCFUserNotificationUseRadioButtonsFlag  == (1 << 6))
106
107        self.failUnless(  isinstance(kCFUserNotificationIconURLKey, unicode) )
108        self.failUnless(  isinstance(kCFUserNotificationSoundURLKey, unicode) )
109        self.failUnless(  isinstance(kCFUserNotificationLocalizationURLKey, unicode) )
110        self.failUnless(  isinstance(kCFUserNotificationAlertHeaderKey, unicode) )
111        self.failUnless(  isinstance(kCFUserNotificationAlertMessageKey, unicode) )
112        self.failUnless(  isinstance(kCFUserNotificationDefaultButtonTitleKey, unicode) )
113        self.failUnless(  isinstance(kCFUserNotificationAlternateButtonTitleKey, unicode) )
114        self.failUnless(  isinstance(kCFUserNotificationOtherButtonTitleKey, unicode) )
115        self.failUnless(  isinstance(kCFUserNotificationProgressIndicatorValueKey, unicode) )
116        self.failUnless(  isinstance(kCFUserNotificationPopUpTitlesKey, unicode) )
117        self.failUnless(  isinstance(kCFUserNotificationTextFieldTitlesKey, unicode) )
118        self.failUnless(  isinstance(kCFUserNotificationCheckBoxTitlesKey, unicode) )
119        self.failUnless(  isinstance(kCFUserNotificationTextFieldValuesKey, unicode) )
120        self.failUnless(  isinstance(kCFUserNotificationPopUpSelectionKey, unicode) )
121
122
123if __name__ == "__main__":
124    main()
125