brintos

brintos / llvm-project-archived public Read only

0
0
Text · 17.1 KiB · 211849c Raw
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