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