1from PyObjCTools.TestSupport import * 2import time 3from CoreFoundation import * 4from Foundation import NSDictionary, NSString, NSMutableDictionary 5import sys 6 7 8class TestTimeZone (TestCase): 9 def testTypes(self): 10 self.assertIsCFType(CFTimeZoneRef) 11 12 def testTypeID(self): 13 id = CFTimeZoneGetTypeID() 14 self.assertIsInstance(id, (int, long)) 15 def testSystemZone(self): 16 zone = CFTimeZoneCopySystem() 17 self.assertIsInstance(zone, CFTimeZoneRef) 18 def testResetSystem(self): 19 v = CFTimeZoneResetSystem() 20 self.assertIs(v, None ) 21 def testCopyDefault(self): 22 zone = CFTimeZoneCopyDefault() 23 self.assertIsInstance(zone, CFTimeZoneRef) 24 def testNames(self): 25 self.assertResultIsCFRetained(CFTimeZoneCopyKnownNames) 26 array = CFTimeZoneCopyKnownNames() 27 self.assertIsInstance(array, CFArrayRef) 28 self.assertNotEqual(len(array) , 0 ) 29 for nm in array: 30 self.assertIsInstance(nm, unicode) 31 def testAbbreviationDict(self): 32 map = CFTimeZoneCopyAbbreviationDictionary() 33 self.assertIsInstance(map, CFDictionaryRef) 34 for key, value in map.items(): 35 self.assertIsInstance(key, unicode) 36 self.assertIsInstance(value, unicode) 37 @min_os_level('10.6') 38 def testAbbrievationDictSetting(self): 39 # Setting the dictionary is technically also possible 40 # on 10.5, but the code below causes a crash, even when 41 # rewritten als plan Objective-C. 42 map = CFTimeZoneCopyAbbreviationDictionary() 43 newmap = map.mutableCopy() 44 newmap[u'AAA'] = u'Europe/Amsterdam' 45 46 v = CFTimeZoneSetAbbreviationDictionary(newmap) 47 self.assertIs(v, None) 48 try: 49 map2 = CFTimeZoneCopyAbbreviationDictionary() 50 self.assertIsInstance(map2, CFDictionaryRef) 51 self.assertEqual(map2[u'AAA'] , u'Europe/Amsterdam' ) 52 finally: 53 CFTimeZoneSetAbbreviationDictionary(map) 54 55 def testZoneObject(self): 56 data = open('/usr/share/zoneinfo/posixrules', 'rb').read() 57 if sys.version_info[0] == 2: 58 data = buffer(data) 59 zone = CFTimeZoneCreate(None, u"Europe/Amsterdam", data) 60 self.assertIsInstance(zone, CFTimeZoneRef) 61 self.assertResultIsCFRetained(CFTimeZoneCreateWithTimeIntervalFromGMT) 62 zone = CFTimeZoneCreateWithTimeIntervalFromGMT(None, 3600) 63 self.assertIsInstance(zone, CFTimeZoneRef) 64 offset = CFTimeZoneGetSecondsFromGMT(zone, time.time()) 65 self.assertEqual(offset, 3600) 66 67 zone = CFTimeZoneCreateWithName(None, "Europe/Amsterdam", True) 68 self.assertIsInstance(zone, CFTimeZoneRef) 69 name = CFTimeZoneGetName(zone) 70 self.assertEqual(name, u"Europe/Amsterdam") 71 72 data = CFTimeZoneGetData(zone) 73 self.assertIsInstance(data, CFDataRef) 74 abbrev = CFTimeZoneCopyAbbreviation(zone, time.time()) 75 self.assertIsInstance(abbrev, unicode) 76 dt = CFGregorianDate( 77 year = 2008, 78 month = 7, 79 day = 1, 80 hour = 12, 81 minute = 0, 82 second = 0) 83 84 r = CFTimeZoneIsDaylightSavingTime(zone, 85 CFGregorianDateGetAbsoluteTime(dt, zone)) 86 self.assertIs(r, True) 87 dt = CFGregorianDate( 88 year = 2008, 89 month = 11, 90 day = 1, 91 hour = 12, 92 minute = 0, 93 second = 0) 94 95 r = CFTimeZoneIsDaylightSavingTime(zone, 96 CFGregorianDateGetAbsoluteTime(dt, zone)) 97 self.assertIsIn(r, (False, True)) 98 offset = CFTimeZoneGetDaylightSavingTimeOffset(zone, 99 CFGregorianDateGetAbsoluteTime(dt, zone)) 100 self.assertIsInstance(offset, float) 101 dt = CFTimeZoneGetNextDaylightSavingTimeTransition( 102 zone, CFGregorianDateGetAbsoluteTime(dt, zone)) 103 self.assertIsInstance(dt, float) 104 nm = CFTimeZoneCopyLocalizedName(zone, 105 kCFTimeZoneNameStyleShortStandard, CFLocaleCopyCurrent()) 106 self.assertIsInstance(nm, unicode) 107 def testConstants(self): 108 self.assertEqual(kCFTimeZoneNameStyleStandard , 0 ) 109 self.assertEqual(kCFTimeZoneNameStyleShortStandard , 1 ) 110 self.assertEqual(kCFTimeZoneNameStyleDaylightSaving , 2 ) 111 self.assertEqual(kCFTimeZoneNameStyleShortDaylightSaving , 3 ) 112 self.assertIsInstance(kCFTimeZoneSystemTimeZoneDidChangeNotification, unicode) 113 @min_os_level('10.6') 114 def testConstants10_6(self): 115 self.assertEqual(kCFTimeZoneNameStyleGeneric, 4) 116 self.assertEqual(kCFTimeZoneNameStyleShortGeneric, 5) 117 118 119 120if __name__ == "__main__": 121 main() 122