314 lines · plain
1// RUN: %check_clang_tidy %s objc-nsdate-formatter %t2@interface NSObject3+ (instancetype)alloc;4- (instancetype)init;5@end6 7@interface TestClass : NSObject8+ (void)testMethod1;9+ (void)testMethod2;10+ (void)testMethod3;11+ (void)testAnotherClass;12@end13 14@interface NSString : NSObject15@end16 17void NSLog(NSString *format, ...);18 19@interface NSDate : NSObject20@end21 22@interface NSDateFormatter : NSObject23@property(copy) NSString *dateFormat;24- (NSString *)stringFromDate:(NSDate *)date;25@end26 27@interface AnotherClass : NSObject28@property(copy) NSString *dateFormat;29@end30 31@interface NSDateComponents : NSObject32@property long year;33@property long month;34@property long day;35@end36 37@interface NSCalendar : NSObject38@property(class, readonly, copy) NSCalendar *currentCalendar;39- (nullable NSDate *)dateFromComponents:(NSDateComponents *)Comps;40@end41 42@implementation TestClass43+ (void)testMethod1 {44 // Reproducing incorrect behavior from Radar45 NSDateFormatter *formatter = [[NSDateFormatter alloc] init];46 [formatter setDateFormat:@"YYYY_MM_dd_HH_mm_ss_SSS_ZZZ"];47 // CHECK-MESSAGES: :[[@LINE-1]]:28: warning: use of week year (Y) with month (M); did you mean to use calendar year (y) instead? [objc-nsdate-formatter]48 NSDateComponents *comps = [[NSDateComponents alloc] init];49 [comps setDay:29];50 [comps setMonth:12];51 [comps setYear:2014];52 NSDate *date_radar = [[NSCalendar currentCalendar] dateFromComponents:comps];53 NSLog(@"YYYY_MM_dd_HH_mm_ss_SSS_ZZZ %@", [formatter stringFromDate:date_radar]);54 55 // Radar correct behavior56 [formatter setDateFormat:@"yyyy_MM_dd_HH_mm_ss_SSS_ZZZ"];57 NSLog(@"yyyy_MM_dd_HH_mm_ss_SSS_ZZZ %@", [formatter stringFromDate:date_radar]);58 59 // Radar correct behavior - week year60 [formatter setDateFormat:@"YYYY_ww_dd_HH_mm_ss_SSS_ZZZ"];61 NSLog(@"YYYY_ww_dd_HH_mm_ss_SSS_ZZZ %@", [formatter stringFromDate:date_radar]);62 63 // Radar incorrect behavior64 [formatter setDateFormat:@"yyyy_ww_dd_HH_mm_ss_SSS_ZZZ"];65 // CHECK-MESSAGES: :[[@LINE-1]]:28: warning: use of calendar year (y) with week of the year (w); did you mean to use week-year (Y) instead? [objc-nsdate-formatter]66 NSLog(@"yyyy_ww_dd_HH_mm_ss_SSS_ZZZ %@", [formatter stringFromDate:date_radar]);67 68 NSLog(@"==========================================");69 // Correct70 [formatter setDateFormat:@"yyyy_MM"];71 NSLog(@"yyyy_MM %@", [formatter stringFromDate:date_radar]);72 73 // Correct74 [formatter setDateFormat:@"yyyy_dd"];75 NSLog(@"yyyy_dd %@", [formatter stringFromDate:date_radar]);76 77 // Correct78 [formatter setDateFormat:@"yyyy_DD"];79 NSLog(@"yyyy_DD %@", [formatter stringFromDate:date_radar]);80 81 // Incorrect82 [formatter setDateFormat:@"yyyy_ww"];83 // CHECK-MESSAGES: :[[@LINE-1]]:28: warning: use of calendar year (y) with week of the year (w); did you mean to use week-year (Y) instead? [objc-nsdate-formatter]84 NSLog(@"yyyy_ww %@", [formatter stringFromDate:date_radar]);85 86 // Incorrect87 [formatter setDateFormat:@"yyyy_WW"];88 // CHECK-MESSAGES: :[[@LINE-1]]:28: warning: Week of Month (W) used without the month (M); did you forget M in the format string? [objc-nsdate-formatter]89 NSLog(@"yyyy_WW %@", [formatter stringFromDate:date_radar]);90 91 NSLog(@"==========================================");92 // Correct93 [formatter setDateFormat:@"yyyy_MM_dd"];94 NSLog(@"yyyy_MM_dd %@", [formatter stringFromDate:date_radar]);95 96 // Potentially Incorrect97 [formatter setDateFormat:@"yyyy_MM_DD"];98 NSLog(@"yyyy_MM_DD %@", [formatter stringFromDate:date_radar]);99 100 // Incorrect101 [formatter setDateFormat:@"yyyy_MM_ww"];102 // CHECK-MESSAGES: :[[@LINE-1]]:28: warning: use of calendar year (y) with week of the year (w); did you mean to use week-year (Y) instead? [objc-nsdate-formatter]103 NSLog(@"yyyy_MM_ww %@", [formatter stringFromDate:date_radar]);104 105 NSLog(@"=======WEEK YEAR==========");106 // Incorrect107 [formatter setDateFormat:@"YYYY_MM"];108 // CHECK-MESSAGES: :[[@LINE-1]]:28: warning: use of week year (Y) with month (M); did you mean to use calendar year (y) instead? [objc-nsdate-formatter]109 NSLog(@"YYYY_MM %@", [formatter stringFromDate:date_radar]);110 111 // Correct112 [formatter setDateFormat:@"YYYY_ww"];113 NSLog(@"YYYY_ww %@", [formatter stringFromDate:date_radar]);114 115 // Incorrect116 [formatter setDateFormat:@"YYYY_WW"];117 // CHECK-MESSAGES: :[[@LINE-1]]:28: warning: Week of Month (W) used without the month (M); did you forget M in the format string? [objc-nsdate-formatter]118 // CHECK-MESSAGES: :[[@LINE-2]]:28: warning: use of week year (Y) with week of the month (W); did you mean to use calendar year (y) instead? [objc-nsdate-formatter]119 NSLog(@"YYYY_WW %@", [formatter stringFromDate:date_radar]);120 121 // Correct122 [formatter setDateFormat:@"YYYY_dd"];123 NSLog(@"YYYY_dd %@", [formatter stringFromDate:date_radar]);124 125 // Incorrect126 [formatter setDateFormat:@"YYYY_DD"];127 // CHECK-MESSAGES: :[[@LINE-1]]:28: warning: use of week year (Y) with day of the year (D); did you mean to use calendar year (y) instead? [objc-nsdate-formatter]128 NSLog(@"YYYY_DD %@", [formatter stringFromDate:date_radar]);129 130 NSLog(@"==========================================");131 // Potentially Incorrect132 [formatter setDateFormat:@"YYYY_ww_dd"];133 NSLog(@"YYYY ww dd %@", [formatter stringFromDate:date_radar]);134 135 // Incorrect136 [formatter setDateFormat:@"YYYY_ww_DD"];137 // CHECK-MESSAGES: :[[@LINE-1]]:28: warning: use of week year (Y) with day of the year (D); did you mean to use calendar year (y) instead? [objc-nsdate-formatter]138 NSLog(@"YYYY_ww_DD %@", [formatter stringFromDate:date_radar]);139}140 141+ (void)testMethod2 {142 NSDateFormatter *formatter = [[NSDateFormatter alloc] init];143 NSDateComponents *comps = [[NSDateComponents alloc] init];144 [comps setDay:29];145 [comps setMonth:12];146 [comps setYear:2014];147 NSDate *date_radar = [[NSCalendar currentCalendar] dateFromComponents:comps];148 149 // Test 1 : incorrect150 [formatter setDateFormat:@"yyyy_QQ_MM_ww_dd_EE"];151 // CHECK-MESSAGES: :[[@LINE-1]]:28: warning: use of calendar year (y) with week of the year (w); did you mean to use week-year (Y) instead? [objc-nsdate-formatter]152 NSLog(@"yyyy_QQ_MM_ww_dd_EE %@", [formatter stringFromDate:date_radar]);153 154 // Test 2 : incorrect155 [formatter setDateFormat:@"yyyy_QQ_MM_ww_dd_ee"];156 // CHECK-MESSAGES: :[[@LINE-1]]:28: warning: use of calendar year (y) with week of the year (w); did you mean to use week-year (Y) instead? [objc-nsdate-formatter]157 NSLog(@"yyyy_QQ_MM_ww_dd_ee %@", [formatter stringFromDate:date_radar]);158 159 // Test 3 : incorrect160 [formatter setDateFormat:@"yyyy_QQ_MM_ww_DD_EE"];161 // CHECK-MESSAGES: :[[@LINE-1]]:28: warning: use of calendar year (y) with week of the year (w); did you mean to use week-year (Y) instead? [objc-nsdate-formatter]162 NSLog(@"yyyy_QQ_MM_ww_DD_EE %@", [formatter stringFromDate:date_radar]);163 164 // Test 4 : incorrect165 [formatter setDateFormat:@"yyyy_QQ_MM_ww_DD_ee"];166 // CHECK-MESSAGES: :[[@LINE-1]]:28: warning: use of calendar year (y) with week of the year (w); did you mean to use week-year (Y) instead? [objc-nsdate-formatter]167 NSLog(@"yyyy_QQ_MM_ww_DD_ee %@", [formatter stringFromDate:date_radar]);168 169 // Test 5 : incorrect170 [formatter setDateFormat:@"yyyy_QQ_MM_ww_F_EE"];171 // CHECK-MESSAGES: :[[@LINE-1]]:28: warning: use of calendar year (y) with week of the year (w); did you mean to use week-year (Y) instead? [objc-nsdate-formatter]172 NSLog(@"yyyy_QQ_MM_ww_F_EE %@", [formatter stringFromDate:date_radar]);173 174 // Test 6 : incorrect175 [formatter setDateFormat:@"yyyy_QQ_MM_ww_F_ee"];176 // CHECK-MESSAGES: :[[@LINE-1]]:28: warning: use of calendar year (y) with week of the year (w); did you mean to use week-year (Y) instead? [objc-nsdate-formatter]177 NSLog(@"yyyy_QQ_MM_ww_F_ee %@", [formatter stringFromDate:date_radar]);178 179 // Test 7 : correct180 [formatter setDateFormat:@"yyyy_QQ_MM_WW_dd_EE"];181 NSLog(@"yyyy_QQ_MM_WW_dd_EE %@", [formatter stringFromDate:date_radar]);182 183 // Test 8 : correct184 [formatter setDateFormat:@"yyyy_QQ_MM_WW_dd_ee"];185 NSLog(@"yyyy_QQ_MM_WW_dd_ee %@", [formatter stringFromDate:date_radar]);186 187 // Test 9 : correct188 [formatter setDateFormat:@"yyyy_QQ_MM_WW_DD_EE"];189 NSLog(@"yyyy_QQ_MM_WW_DD_EE %@", [formatter stringFromDate:date_radar]);190 191 // Test 10 : correct192 [formatter setDateFormat:@"yyyy_QQ_MM_WW_DD_ee"];193 NSLog(@"yyyy_QQ_MM_WW_DD_ee %@", [formatter stringFromDate:date_radar]);194 195 // Test 11 : correct196 [formatter setDateFormat:@"yyyy_QQ_MM_WW_F_EE"];197 NSLog(@"yyyy_QQ_MM_WW_F_EE %@", [formatter stringFromDate:date_radar]);198 199 // Test 12 : correct200 [formatter setDateFormat:@"yyyy_QQ_MM_WW_F_ee"];201 NSLog(@"yyyy_QQ_MM_WW_F_ee %@", [formatter stringFromDate:date_radar]);202 203 // Test 13 : incorrect204 [formatter setDateFormat:@"YYYY_QQ_MM_ww_dd_EE"];205 // CHECK-MESSAGES: :[[@LINE-1]]:28: warning: use of week year (Y) with month (M); did you mean to use calendar year (y) instead? [objc-nsdate-formatter]206 // CHECK-MESSAGES: :[[@LINE-2]]:28: warning: use of week year (Y) with quarter number (Q); did you mean to use calendar year (y) instead? [objc-nsdate-formatter]207 NSLog(@"YYYY_QQ_MM_ww_dd_EE %@", [formatter stringFromDate:date_radar]);208 209 // Test 14 : incorrect210 [formatter setDateFormat:@"YYYY_QQ_MM_ww_dd_ee"];211 // CHECK-MESSAGES: :[[@LINE-1]]:28: warning: use of week year (Y) with month (M); did you mean to use calendar year (y) instead? [objc-nsdate-formatter]212 // CHECK-MESSAGES: :[[@LINE-2]]:28: warning: use of week year (Y) with quarter number (Q); did you mean to use calendar year (y) instead? [objc-nsdate-formatter]213 NSLog(@"YYYY_QQ_MM_ww_dd_ee %@", [formatter stringFromDate:date_radar]);214 215 // Test 15 : incorrect216 [formatter setDateFormat:@"YYYY_QQ_MM_ww_DD_EE"];217 // CHECK-MESSAGES: :[[@LINE-1]]:28: warning: use of week year (Y) with day of the year (D); did you mean to use calendar year (y) instead? [objc-nsdate-formatter]218 // CHECK-MESSAGES: :[[@LINE-2]]:28: warning: use of week year (Y) with month (M); did you mean to use calendar year (y) instead? [objc-nsdate-formatter]219 // CHECK-MESSAGES: :[[@LINE-3]]:28: warning: use of week year (Y) with quarter number (Q); did you mean to use calendar year (y) instead? [objc-nsdate-formatter]220 NSLog(@"YYYY_QQ_MM_ww_DD_EE %@", [formatter stringFromDate:date_radar]);221 222 // Test 16 : incorrect223 [formatter setDateFormat:@"YYYY_QQ_MM_ww_DD_ee"];224 // CHECK-MESSAGES: :[[@LINE-1]]:28: warning: use of week year (Y) with day of the year (D); did you mean to use calendar year (y) instead? [objc-nsdate-formatter]225 // CHECK-MESSAGES: :[[@LINE-2]]:28: warning: use of week year (Y) with month (M); did you mean to use calendar year (y) instead? [objc-nsdate-formatter]226 // CHECK-MESSAGES: :[[@LINE-3]]:28: warning: use of week year (Y) with quarter number (Q); did you mean to use calendar year (y) instead? [objc-nsdate-formatter]227 NSLog(@"YYYY_QQ_MM_ww_DD_ee %@", [formatter stringFromDate:date_radar]);228 229 // Test 17 : incorrect230 [formatter setDateFormat:@"YYYY_QQ_MM_ww_F_EE"];231 // CHECK-MESSAGES: :[[@LINE-1]]:28: warning: use of week year (Y) with day of the week in month (F); did you mean to use calendar year (y) instead? [objc-nsdate-formatter]232 // CHECK-MESSAGES: :[[@LINE-2]]:28: warning: use of week year (Y) with month (M); did you mean to use calendar year (y) instead? [objc-nsdate-formatter]233 // CHECK-MESSAGES: :[[@LINE-3]]:28: warning: use of week year (Y) with quarter number (Q); did you mean to use calendar year (y) instead? [objc-nsdate-formatter]234 NSLog(@"YYYY_QQ_MM_ww_F_EE %@", [formatter stringFromDate:date_radar]);235 236 // Test 18 : incorrect237 [formatter setDateFormat:@"YYYY_QQ_MM_ww_F_ee"];238 // CHECK-MESSAGES: :[[@LINE-1]]:28: warning: use of week year (Y) with day of the week in month (F); did you mean to use calendar year (y) instead? [objc-nsdate-formatter]239 // CHECK-MESSAGES: :[[@LINE-2]]:28: warning: use of week year (Y) with month (M); did you mean to use calendar year (y) instead? [objc-nsdate-formatter]240 // CHECK-MESSAGES: :[[@LINE-3]]:28: warning: use of week year (Y) with quarter number (Q); did you mean to use calendar year (y) instead? [objc-nsdate-formatter]241 NSLog(@"YYYY_QQ_MM_ww_F_ee %@", [formatter stringFromDate:date_radar]);242 243 // Test 19 : incorrect244 [formatter setDateFormat:@"YYYY_QQ_MM_WW_dd_EE"];245 // CHECK-MESSAGES: :[[@LINE-1]]:28: warning: use of week year (Y) with month (M); did you mean to use calendar year (y) instead? [objc-nsdate-formatter]246 // CHECK-MESSAGES: :[[@LINE-2]]:28: warning: use of week year (Y) with quarter number (Q); did you mean to use calendar year (y) instead? [objc-nsdate-formatter]247 // CHECK-MESSAGES: :[[@LINE-3]]:28: warning: use of week year (Y) with week of the month (W); did you mean to use calendar year (y) instead? [objc-nsdate-formatter]248 NSLog(@"YYYY_QQ_MM_WW_dd_EE %@", [formatter stringFromDate:date_radar]);249 250 // Test 20 : incorrect251 [formatter setDateFormat:@"YYYY_QQ_MM_WW_dd_ee"];252 // CHECK-MESSAGES: :[[@LINE-1]]:28: warning: use of week year (Y) with month (M); did you mean to use calendar year (y) instead? [objc-nsdate-formatter]253 // CHECK-MESSAGES: :[[@LINE-2]]:28: warning: use of week year (Y) with quarter number (Q); did you mean to use calendar year (y) instead? [objc-nsdate-formatter]254 // CHECK-MESSAGES: :[[@LINE-3]]:28: warning: use of week year (Y) with week of the month (W); did you mean to use calendar year (y) instead? [objc-nsdate-formatter]255 NSLog(@"YYYY_QQ_MM_WW_dd_ee %@", [formatter stringFromDate:date_radar]);256 257 // Test 21 : incorrect258 [formatter setDateFormat:@"YYYY_QQ_MM_WW_DD_EE"];259 // CHECK-MESSAGES: :[[@LINE-1]]:28: warning: use of week year (Y) with day of the year (D); did you mean to use calendar year (y) instead? [objc-nsdate-formatter]260 // CHECK-MESSAGES: :[[@LINE-2]]:28: warning: use of week year (Y) with month (M); did you mean to use calendar year (y) instead? [objc-nsdate-formatter]261 // CHECK-MESSAGES: :[[@LINE-3]]:28: warning: use of week year (Y) with quarter number (Q); did you mean to use calendar year (y) instead? [objc-nsdate-formatter]262 // CHECK-MESSAGES: :[[@LINE-4]]:28: warning: use of week year (Y) with week of the month (W); did you mean to use calendar year (y) instead? [objc-nsdate-formatter]263 NSLog(@"YYYY_QQ_MM_WW_DD_EE %@", [formatter stringFromDate:date_radar]);264 265 // Test 22 : incorrect266 [formatter setDateFormat:@"YYYY_QQ_MM_WW_DD_ee"];267 // CHECK-MESSAGES: :[[@LINE-1]]:28: warning: use of week year (Y) with day of the year (D); did you mean to use calendar year (y) instead? [objc-nsdate-formatter]268 // CHECK-MESSAGES: :[[@LINE-2]]:28: warning: use of week year (Y) with month (M); did you mean to use calendar year (y) instead? [objc-nsdate-formatter]269 // CHECK-MESSAGES: :[[@LINE-3]]:28: warning: use of week year (Y) with quarter number (Q); did you mean to use calendar year (y) instead? [objc-nsdate-formatter]270 // CHECK-MESSAGES: :[[@LINE-4]]:28: warning: use of week year (Y) with week of the month (W); did you mean to use calendar year (y) instead? [objc-nsdate-formatter]271 NSLog(@"YYYY_QQ_MM_WW_DD_ee %@", [formatter stringFromDate:date_radar]);272 273 // Test 23 : incorrect274 [formatter setDateFormat:@"YYYY_QQ_MM_WW_F_EE"];275 // CHECK-MESSAGES: :[[@LINE-1]]:28: warning: use of week year (Y) with day of the week in month (F); did you mean to use calendar year (y) instead? [objc-nsdate-formatter]276 // CHECK-MESSAGES: :[[@LINE-2]]:28: warning: use of week year (Y) with month (M); did you mean to use calendar year (y) instead? [objc-nsdate-formatter]277 // CHECK-MESSAGES: :[[@LINE-3]]:28: warning: use of week year (Y) with quarter number (Q); did you mean to use calendar year (y) instead? [objc-nsdate-formatter]278 // CHECK-MESSAGES: :[[@LINE-4]]:28: warning: use of week year (Y) with week of the month (W); did you mean to use calendar year (y) instead? [objc-nsdate-formatter]279 NSLog(@"YYYY_QQ_MM_WW_F_EE %@", [formatter stringFromDate:date_radar]);280 281 // Test 24 : incorrect282 [formatter setDateFormat:@"YYYY_QQ_MM_WW_F_ee"];283 // CHECK-MESSAGES: :[[@LINE-1]]:28: warning: use of week year (Y) with day of the week in month (F); did you mean to use calendar year (y) instead? [objc-nsdate-formatter]284 // CHECK-MESSAGES: :[[@LINE-2]]:28: warning: use of week year (Y) with month (M); did you mean to use calendar year (y) instead? [objc-nsdate-formatter]285 // CHECK-MESSAGES: :[[@LINE-3]]:28: warning: use of week year (Y) with quarter number (Q); did you mean to use calendar year (y) instead? [objc-nsdate-formatter]286 // CHECK-MESSAGES: :[[@LINE-4]]:28: warning: use of week year (Y) with week of the month (W); did you mean to use calendar year (y) instead? [objc-nsdate-formatter]287 NSLog(@"YYYY_QQ_MM_WW_F_ee %@", [formatter stringFromDate:date_radar]);288}289 290+ (void)testMethod3 {291 NSDateFormatter *Formatter = [[NSDateFormatter alloc] init];292 NSDateComponents *Comps = [[NSDateComponents alloc] init];293 [Comps setDay:29];294 [Comps setMonth:12];295 [Comps setYear:2014];296 NSDate *DateRadar = [[NSCalendar currentCalendar] dateFromComponents:Comps];297 298 // Incorrect : has reserved and invalid chars299 [Formatter setDateFormat:@"Rashmi"];300 // CHECK-MESSAGES: :[[@LINE-1]]:28: warning: invalid date format specifier [objc-nsdate-formatter]301 NSLog(@"Rashmi %@", [Formatter stringFromDate:DateRadar]);302 303 // Correct304 [Formatter setDateFormat:@"AMy"];305 NSLog(@"AMy %@", [Formatter stringFromDate:DateRadar]);306}307 308+ (void)testAnotherClass {309 AnotherClass *Formatter = [[AnotherClass alloc] init];310 [Formatter setDateFormat:@"RandomString"];311 [Formatter setDateFormat:@"YYYY_QQ_MM_WW_dd_EE"];312}313@end314