1from PyObjCTools.TestSupport import * 2from CoreFoundation import * 3from Foundation import * 4 5try: 6 unicode 7except NameError: 8 unicode = str 9 10 11try: 12 long 13except NameError: 14 long = int 15 16try: 17 unichr 18except NameError: 19 unichr = chr 20 21 22class TestError (TestCase): 23 24 @min_os_level('10.5') 25 def testTypes(self): 26 try: 27 NSCFError = objc.lookUpClass('__NSCFError') 28 except objc.error: 29 NSCFError = objc.lookUpClass('NSCFError') 30 31 self.assertIs(CFErrorRef, NSCFError) 32 33 @min_os_level('10.5') 34 def testTypeID(self): 35 self.assertIsInstance(CFErrorGetTypeID(), (int, long)) 36 37 @min_os_level('10.5') 38 def testCreation(self): 39 userInfo = { 40 b'foo'.decode('ascii'): b'bar'.decode('ascii'), 41 } 42 err = CFErrorCreate(None, kCFErrorDomainPOSIX, 42, userInfo) 43 self.assertIsInstance(err, CFErrorRef) 44 self.assertResultIsCFRetained(CFErrorCopyUserInfo) 45 dct = CFErrorCopyUserInfo(err) 46 self.assertEqual(dct, userInfo) 47 48 keys = [ b"key1".decode('ascii'), b"key2".decode('ascii')] 49 values = [ b"value1".decode('ascii'), b"value2".decode('ascii')] 50 51 keys = [ NSString.stringWithString_(v) for v in keys ] 52 values = [ NSString.stringWithString_(v) for v in values ] 53 54 self.assertArgHasType(CFErrorCreateWithUserInfoKeysAndValues, 3, b'n^@') 55 self.assertArgSizeInArg(CFErrorCreateWithUserInfoKeysAndValues, 3, 5) 56 self.assertArgHasType(CFErrorCreateWithUserInfoKeysAndValues, 4, b'n^@') 57 self.assertArgSizeInArg(CFErrorCreateWithUserInfoKeysAndValues, 4, 5) 58 err = CFErrorCreateWithUserInfoKeysAndValues(None, kCFErrorDomainPOSIX, 42, keys, values, 2) 59 self.assertIsInstance(err, CFErrorRef) 60 dct = CFErrorCopyUserInfo(err) 61 self.assertEqual(dct, {b'key1'.decode('ascii'): b'value1'.decode('ascii'), b'key2'.decode('ascii'):b'value2'.decode('ascii')}) 62 63 @min_os_level('10.5') 64 def testInspection(self): 65 userInfo = { 66 b'foo'.decode('ascii'): b'bar'.decode('ascii'), 67 kCFErrorLocalizedFailureReasonKey: "failure reason", 68 kCFErrorLocalizedRecoverySuggestionKey: 'recovery suggestion', 69 } 70 self.assertResultIsCFRetained(CFErrorCreate) 71 err = CFErrorCreate(None, kCFErrorDomainPOSIX, 42, userInfo) 72 self.assertIsInstance(err, CFErrorRef) 73 dom = CFErrorGetDomain(err) 74 self.assertEqual(dom, kCFErrorDomainPOSIX) 75 76 code = CFErrorGetCode(err) 77 self.assertEqual(code, 42) 78 79 self.assertResultIsCFRetained(CFErrorCopyDescription) 80 v = CFErrorCopyDescription(err) 81 self.assertIn(v, ( 82 b'Operation could not be completed. failure reason'.decode('ascii'), 83 b'The operation couldn%st be completed. failure reason'.decode('ascii')%(unichr(0x2019),))) 84 85 self.assertResultIsCFRetained(CFErrorCopyFailureReason) 86 v = CFErrorCopyFailureReason(err) 87 self.assertEqual(v, b'failure reason'.decode('ascii')) 88 89 self.assertResultIsCFRetained(CFErrorCopyRecoverySuggestion) 90 v = CFErrorCopyRecoverySuggestion(err) 91 self.assertEqual(v, b'recovery suggestion'.decode('ascii')) 92 93 @min_os_level('10.5') 94 def testConstants(self): 95 self.assertIsInstance(kCFErrorDomainPOSIX, unicode) 96 self.assertIsInstance(kCFErrorDomainOSStatus, unicode) 97 self.assertIsInstance(kCFErrorDomainMach, unicode) 98 self.assertIsInstance(kCFErrorDomainCocoa, unicode) 99 self.assertIsInstance(kCFErrorLocalizedDescriptionKey, unicode) 100 self.assertIsInstance(kCFErrorLocalizedFailureReasonKey, unicode) 101 self.assertIsInstance(kCFErrorLocalizedRecoverySuggestionKey, unicode) 102 self.assertIsInstance(kCFErrorDescriptionKey, unicode) 103 self.assertIsInstance(kCFErrorUnderlyingErrorKey, unicode) 104 105 @min_os_level('10.7') 106 def testConstants10_7(self): 107 self.assertIsInstance(kCFErrorURLKey, unicode) 108 self.assertIsInstance(kCFErrorFilePathKey, unicode) 109 110if __name__ == "__main__": 111 main() 112