1from PyObjCTools.TestSupport import * 2from CoreFoundation import * 3import datetime 4 5try: 6 long 7except NameError: 8 long = int 9 10 11class TestCFCalendarVariadic (TestCase): 12 def testTypes(self): 13 self.assertIsCFType(CFCalendarRef) 14 15 def testCFCalendarComposeAbsoluteTime(self): 16 calendar = CFCalendarCreateWithIdentifier( 17 None, kCFGregorianCalendar) 18 self.assertIsInstance(calendar, CFCalendarRef) 19 20 success, at = CFCalendarComposeAbsoluteTime( 21 calendar, None, b"") 22 self.assertEqual(success, True) 23 self.assert_(isinstance(at, float)) 24 25 success, at = CFCalendarComposeAbsoluteTime( 26 calendar, None, b"yMdHms", 1965, 1, 6, 14, 10, 0) 27 self.assertEqual(success, True) 28 self.assert_(isinstance(at, float)) 29 30 def testCFCalendarAddComponents(self): 31 calendar = CFCalendarCreateWithIdentifier( 32 None, kCFGregorianCalendar) 33 self.assertIsInstance(calendar, CFCalendarRef) 34 35 success, at = CFCalendarComposeAbsoluteTime( 36 calendar, None, b"yMdHms", 1965, 1, 6, 14, 10, 0) 37 self.assertEqual(success, True) 38 self.assert_(isinstance(at, float)) 39 40 success, at2 = CFCalendarAddComponents( 41 calendar, at, 0, b"yH", 2, 3) 42 self.assertEqual(success, True) 43 self.assert_(isinstance(at2, float)) 44 45 success, y, H = CFCalendarGetComponentDifference( 46 calendar, at, at2, 0, b"yH") 47 self.assertEqual(success, True) 48 self.assertEqual(y, 2) 49 self.assertEqual(H, 3) 50 51 def testCFCalendarDecomposeAbsoluteTime(self): 52 calendar = CFCalendarCreateWithIdentifier( 53 None, kCFGregorianCalendar) 54 self.assert_(calendar is not None) 55 56 success, at = CFCalendarComposeAbsoluteTime( 57 calendar, None, b"yMdHms", 1965, 1, 6, 14, 10, 0) 58 self.assertEqual(success, True) 59 self.assert_(isinstance(at, float)) 60 61 success, y, M, d, H, m, s = CFCalendarDecomposeAbsoluteTime( 62 calendar, at, b"yMdHms") 63 self.assertEqual(y, 1965) 64 self.assertEqual(M, 1) 65 self.assertEqual(d, 6) 66 self.assertEqual(H, 14) 67 self.assertEqual(m, 10) 68 self.assertEqual(s, 0) 69 70 def testCFCalendarGetComponentDifference(self): 71 calendar = CFCalendarCreateWithIdentifier( 72 None, kCFGregorianCalendar) 73 self.assert_(calendar is not None) 74 75 success, at1 = CFCalendarComposeAbsoluteTime( 76 calendar, None, b"yMdHms", 1965, 1, 6, 14, 10, 0) 77 self.assertEqual(success, True) 78 self.assert_(isinstance(at1, float)) 79 80 success, at2 = CFCalendarComposeAbsoluteTime( 81 calendar, None, b"yMdHms", 1967, 2, 6, 14, 10, 0) 82 self.assertEqual(success, True) 83 self.assert_(isinstance(at2, float)) 84 85 success, y, M = CFCalendarGetComponentDifference( 86 calendar, at1, at2, 0, b"yM") 87 self.assertEqual(success, True) 88 self.assertEqual(y, 2) 89 self.assertEqual(M, 1) 90 91 def testTypeID(self): 92 v = CFCalendarGetTypeID() 93 self.assertIsInstance(v, (int, long)) 94 95 def testCreation(self): 96 cal = CFCalendarCopyCurrent() 97 self.assertIsInstance(cal, CFCalendarRef) 98 cal = CFCalendarCreateWithIdentifier(None, kCFBuddhistCalendar) 99 self.assertIsInstance(cal, CFCalendarRef) 100 101 def testInspection(self): 102 cal = CFCalendarCreateWithIdentifier(None, kCFGregorianCalendar) 103 self.assertIsInstance(cal, CFCalendarRef) 104 name = CFCalendarGetIdentifier(cal) 105 self.assertEqual(name , kCFGregorianCalendar) 106 locale = CFCalendarCopyLocale(cal) 107 self.assertIsInstance(locale, CFLocaleRef) 108 timezone = CFCalendarCopyTimeZone(cal) 109 self.assertIsInstance(timezone, CFTimeZoneRef) 110 weekday = CFCalendarGetFirstWeekday(cal) 111 self.assertLessEqual(0 <= weekday , 7) 112 num = CFCalendarGetMinimumDaysInFirstWeek(cal) 113 self.assertLessEqual(0 <= num , 7) 114 rng = CFCalendarGetMinimumRangeOfUnit(cal, kCFCalendarUnitEra) 115 self.assertIsInstance(rng, CFRange) 116 rng = CFCalendarGetMaximumRangeOfUnit(cal, kCFCalendarUnitEra) 117 self.assertIsInstance(rng, CFRange) 118 m = datetime.date.today() 119 if m.month in (1,3,5,7,8,10,12): 120 monthLength=31 121 elif m.month in (4, 6, 9, 11): 122 monthLength=30 123 else: 124 if m.year % 4 == 0: 125 # Yes this is wrong, but the next time this fails in 126 # in 2100. 127 monthLength = 29 128 else: 129 monthLength = 28 130 rng = CFCalendarGetRangeOfUnit(cal, kCFCalendarUnitDay, kCFCalendarUnitMonth, CFAbsoluteTimeGetCurrent()) 131 self.assertIsInstance(rng, CFRange) 132 self.assertEqual(rng.location, 1) 133 self.assertEqual(rng.length, monthLength) 134 135 v = CFCalendarGetOrdinalityOfUnit(cal, kCFCalendarUnitDay, kCFCalendarUnitYear, CFAbsoluteTimeGetCurrent()) 136 self.assertIsInstance(v, (int, long)) 137 ok, startp, tip = CFCalendarGetTimeRangeOfUnit(cal, kCFCalendarUnitDay, CFAbsoluteTimeGetCurrent(), None, None) 138 self.assertIs(ok, True) 139 self.assertIsInstance(startp, float) 140 self.assertIsInstance(tip, float) 141 self.assertEqual(tip , 86400.0) 142 143 def testMutation(self): 144 cal = CFCalendarCreateWithIdentifier(None, kCFBuddhistCalendar) 145 146 loc = CFLocaleCreate(None, b"mr_IN".decode('latin1')) 147 self.assertIsInstance(loc, CFLocaleRef) 148 id1 = CFLocaleGetIdentifier(loc) 149 150 orig_loc = CFCalendarCopyLocale(cal) 151 self.assertIsInstance(orig_loc, CFLocaleRef) 152 orig_id = CFLocaleGetIdentifier(orig_loc) 153 CFCalendarSetLocale(cal, loc) 154 new_loc = CFCalendarCopyLocale(cal) 155 self.assertIsInstance(new_loc, CFLocaleRef) 156 new_id = CFLocaleGetIdentifier(new_loc) 157 158 self.assertEqual(new_id , id1) 159 self.assertNotEqual(orig_id , id1) 160 tz = CFTimeZoneCreateWithName(None, b"Pacific/Wallis".decode('latin1'), True) 161 self.assertIsInstance(tz, CFTimeZoneRef) 162 orig_zone = CFCalendarCopyTimeZone(cal) 163 self.assertIsInstance(orig_zone, CFTimeZoneRef) 164 CFCalendarSetTimeZone(cal, tz) 165 new_zone = CFCalendarCopyTimeZone(cal) 166 self.assertIsInstance(new_zone, CFTimeZoneRef) 167 self.assertEqual(CFTimeZoneGetName(new_zone) , b'Pacific/Wallis'.decode('latin1') ) 168 weekday = CFCalendarGetFirstWeekday(cal) 169 weekday = weekday + 2 % 7 170 CFCalendarSetFirstWeekday(cal, weekday) 171 new = CFCalendarGetFirstWeekday(cal) 172 self.assertEqual(new , weekday) 173 num = CFCalendarGetMinimumDaysInFirstWeek(cal) 174 if num == 1: 175 num = 2 176 else: 177 num = 1 178 179 CFCalendarSetMinimumDaysInFirstWeek(cal, num) 180 num2 = CFCalendarGetMinimumDaysInFirstWeek(cal) 181 self.assertEqual(num2 , num) 182 183 def testConstants(self): 184 self.assertEqual(kCFCalendarUnitEra , (1 << 1) ) 185 self.assertEqual(kCFCalendarUnitYear , (1 << 2) ) 186 self.assertEqual(kCFCalendarUnitMonth , (1 << 3) ) 187 self.assertEqual(kCFCalendarUnitDay , (1 << 4) ) 188 self.assertEqual(kCFCalendarUnitHour , (1 << 5) ) 189 self.assertEqual(kCFCalendarUnitMinute , (1 << 6) ) 190 self.assertEqual(kCFCalendarUnitSecond , (1 << 7) ) 191 self.assertEqual(kCFCalendarUnitWeek , (1 << 8) ) 192 self.assertEqual(kCFCalendarUnitWeekday , (1 << 9) ) 193 self.assertEqual(kCFCalendarUnitWeekdayOrdinal , (1 << 10) ) 194 self.assertEqual(kCFCalendarComponentsWrap , (1 << 0) ) 195 196 @min_os_level('10.6') 197 def testConstants10_6(self): 198 self.assertEqual(kCFCalendarUnitQuarter, 1<<11) 199 200 @min_os_level('10.7') 201 def testConstants10_7(self): 202 self.assertEqual(kCFCalendarUnitWeekOfMonth, 1<<12) 203 self.assertEqual(kCFCalendarUnitWeekOfYear, 1<<13) 204 self.assertEqual(kCFCalendarUnitYearForWeekOfYear, 1<<14) 205 206 207if __name__ == "__main__": 208 main() 209