1from PyObjCTools.TestSupport import *
2from CoreFoundation import *
3from Foundation import *
4
5
6class TestError (TestCase):
7
8    @min_os_level('10.5')
9    def testTypes(self):
10        self.failUnless(CFErrorRef is NSCFError)
11
12    @min_os_level('10.5')
13    def testTypeID(self):
14        self.failUnless(isinstance(CFErrorGetTypeID(), (int, long)))
15
16    @min_os_level('10.5')
17    def testCreation(self):
18        userInfo = {
19                u'foo': u'bar',
20        }
21        err = CFErrorCreate(None, kCFErrorDomainPOSIX, 42,  userInfo)
22        self.failUnless(isinstance(err, CFErrorRef))
23
24        self.failUnlessResultIsCFRetained(CFErrorCopyUserInfo)
25        dct = CFErrorCopyUserInfo(err)
26        self.assertEquals(dct, userInfo)
27
28        keys = [ u"key1", u"key2"]
29        values = [ u"value1", u"value2"]
30
31        keys = [ NSString.stringWithString_(v) for v in keys ]
32        values = [ NSString.stringWithString_(v) for v in values ]
33
34        self.failUnlessArgHasType(CFErrorCreateWithUserInfoKeysAndValues, 3, 'n^@')
35        self.failUnlessArgSizeInArg(CFErrorCreateWithUserInfoKeysAndValues, 3, 5)
36        self.failUnlessArgHasType(CFErrorCreateWithUserInfoKeysAndValues, 4, 'n^@')
37        self.failUnlessArgSizeInArg(CFErrorCreateWithUserInfoKeysAndValues, 4, 5)
38        err = CFErrorCreateWithUserInfoKeysAndValues(None, kCFErrorDomainPOSIX, 42, keys, values, 2)
39        self.failUnless(isinstance(err, CFErrorRef))
40        dct = CFErrorCopyUserInfo(err)
41        self.assertEquals(dct, {u'key1': u'value1', u'key2':u'value2'})
42
43    @min_os_level('10.5')
44    def testInspection(self):
45        userInfo = {
46                u'foo': u'bar',
47                kCFErrorLocalizedFailureReasonKey: "failure reason",
48                kCFErrorLocalizedRecoverySuggestionKey: 'recovery suggestion',
49        }
50        self.failUnlessResultIsCFRetained(CFErrorCreate)
51        err = CFErrorCreate(None, kCFErrorDomainPOSIX, 42,  userInfo)
52        self.failUnless(isinstance(err, CFErrorRef))
53
54        dom = CFErrorGetDomain(err)
55        self.assertEquals(dom, kCFErrorDomainPOSIX)
56
57        code = CFErrorGetCode(err)
58        self.assertEquals(code, 42)
59
60        self.failUnlessResultIsCFRetained(CFErrorCopyDescription)
61        v = CFErrorCopyDescription(err)
62        self.assertEquals(v, u'Operation could not be completed. failure reason')
63
64        self.failUnlessResultIsCFRetained(CFErrorCopyFailureReason)
65        v = CFErrorCopyFailureReason(err)
66        self.assertEquals(v, u'failure reason')
67
68        self.failUnlessResultIsCFRetained(CFErrorCopyRecoverySuggestion)
69        v = CFErrorCopyRecoverySuggestion(err)
70        self.assertEquals(v, u'recovery suggestion')
71
72
73    @min_os_level('10.5')
74    def testConstants(self):
75        self.failUnless(isinstance(kCFErrorDomainPOSIX, unicode))
76        self.failUnless(isinstance(kCFErrorDomainOSStatus, unicode))
77        self.failUnless(isinstance(kCFErrorDomainMach, unicode))
78        self.failUnless(isinstance(kCFErrorDomainCocoa, unicode))
79        self.failUnless(isinstance(kCFErrorLocalizedDescriptionKey, unicode))
80        self.failUnless(isinstance(kCFErrorLocalizedFailureReasonKey, unicode))
81        self.failUnless(isinstance(kCFErrorLocalizedRecoverySuggestionKey, unicode))
82        self.failUnless(isinstance(kCFErrorDescriptionKey, unicode))
83        self.failUnless(isinstance(kCFErrorUnderlyingErrorKey, unicode))
84
85if __name__ == "__main__":
86    main()
87