xref: /llvm-project/clang-tools-extra/test/clang-tidy/checkers/objc/nsdate-formatter.m (revision 95a92995d45fc6fada43ecd91eba3e7aea90487a)
1*95a92995SRashmi Mudduluru// RUN: %check_clang_tidy %s objc-nsdate-formatter %t
2*95a92995SRashmi Mudduluru@interface NSObject
3*95a92995SRashmi Mudduluru+ (instancetype)alloc;
4*95a92995SRashmi Mudduluru- (instancetype)init;
5*95a92995SRashmi Mudduluru@end
6*95a92995SRashmi Mudduluru
7*95a92995SRashmi Mudduluru@interface TestClass : NSObject
8*95a92995SRashmi Mudduluru+ (void)testMethod1;
9*95a92995SRashmi Mudduluru+ (void)testMethod2;
10*95a92995SRashmi Mudduluru+ (void)testMethod3;
11*95a92995SRashmi Mudduluru+ (void)testAnotherClass;
12*95a92995SRashmi Mudduluru@end
13*95a92995SRashmi Mudduluru
14*95a92995SRashmi Mudduluru@interface NSString : NSObject
15*95a92995SRashmi Mudduluru@end
16*95a92995SRashmi Mudduluru
17*95a92995SRashmi Mudduluruvoid NSLog(NSString *format, ...);
18*95a92995SRashmi Mudduluru
19*95a92995SRashmi Mudduluru@interface NSDate : NSObject
20*95a92995SRashmi Mudduluru@end
21*95a92995SRashmi Mudduluru
22*95a92995SRashmi Mudduluru@interface NSDateFormatter : NSObject
23*95a92995SRashmi Mudduluru@property(copy) NSString *dateFormat;
24*95a92995SRashmi Mudduluru- (NSString *)stringFromDate:(NSDate *)date;
25*95a92995SRashmi Mudduluru@end
26*95a92995SRashmi Mudduluru
27*95a92995SRashmi Mudduluru@interface AnotherClass : NSObject
28*95a92995SRashmi Mudduluru@property(copy) NSString *dateFormat;
29*95a92995SRashmi Mudduluru@end
30*95a92995SRashmi Mudduluru
31*95a92995SRashmi Mudduluru@interface NSDateComponents : NSObject
32*95a92995SRashmi Mudduluru@property long year;
33*95a92995SRashmi Mudduluru@property long month;
34*95a92995SRashmi Mudduluru@property long day;
35*95a92995SRashmi Mudduluru@end
36*95a92995SRashmi Mudduluru
37*95a92995SRashmi Mudduluru@interface NSCalendar : NSObject
38*95a92995SRashmi Mudduluru@property(class, readonly, copy) NSCalendar *currentCalendar;
39*95a92995SRashmi Mudduluru- (nullable NSDate *)dateFromComponents:(NSDateComponents *)Comps;
40*95a92995SRashmi Mudduluru@end
41*95a92995SRashmi Mudduluru
42*95a92995SRashmi Mudduluru@implementation TestClass
43*95a92995SRashmi Mudduluru+ (void)testMethod1 {
44*95a92995SRashmi Mudduluru  // Reproducing incorrect behavior from Radar
45*95a92995SRashmi Mudduluru  NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
46*95a92995SRashmi Mudduluru  [formatter setDateFormat:@"YYYY_MM_dd_HH_mm_ss_SSS_ZZZ"];
47*95a92995SRashmi Mudduluru  // 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*95a92995SRashmi Mudduluru  NSDateComponents *comps = [[NSDateComponents alloc] init];
49*95a92995SRashmi Mudduluru  [comps setDay:29];
50*95a92995SRashmi Mudduluru  [comps setMonth:12];
51*95a92995SRashmi Mudduluru  [comps setYear:2014];
52*95a92995SRashmi Mudduluru  NSDate *date_radar = [[NSCalendar currentCalendar] dateFromComponents:comps];
53*95a92995SRashmi Mudduluru  NSLog(@"YYYY_MM_dd_HH_mm_ss_SSS_ZZZ %@", [formatter stringFromDate:date_radar]);
54*95a92995SRashmi Mudduluru
55*95a92995SRashmi Mudduluru  // Radar correct behavior
56*95a92995SRashmi Mudduluru  [formatter setDateFormat:@"yyyy_MM_dd_HH_mm_ss_SSS_ZZZ"];
57*95a92995SRashmi Mudduluru  NSLog(@"yyyy_MM_dd_HH_mm_ss_SSS_ZZZ %@", [formatter stringFromDate:date_radar]);
58*95a92995SRashmi Mudduluru
59*95a92995SRashmi Mudduluru  // Radar correct behavior - week year
60*95a92995SRashmi Mudduluru  [formatter setDateFormat:@"YYYY_ww_dd_HH_mm_ss_SSS_ZZZ"];
61*95a92995SRashmi Mudduluru  NSLog(@"YYYY_ww_dd_HH_mm_ss_SSS_ZZZ %@", [formatter stringFromDate:date_radar]);
62*95a92995SRashmi Mudduluru
63*95a92995SRashmi Mudduluru  // Radar incorrect behavior
64*95a92995SRashmi Mudduluru  [formatter setDateFormat:@"yyyy_ww_dd_HH_mm_ss_SSS_ZZZ"];
65*95a92995SRashmi Mudduluru  // 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*95a92995SRashmi Mudduluru  NSLog(@"yyyy_ww_dd_HH_mm_ss_SSS_ZZZ %@", [formatter stringFromDate:date_radar]);
67*95a92995SRashmi Mudduluru
68*95a92995SRashmi Mudduluru  NSLog(@"==========================================");
69*95a92995SRashmi Mudduluru  // Correct
70*95a92995SRashmi Mudduluru  [formatter setDateFormat:@"yyyy_MM"];
71*95a92995SRashmi Mudduluru  NSLog(@"yyyy_MM %@", [formatter stringFromDate:date_radar]);
72*95a92995SRashmi Mudduluru
73*95a92995SRashmi Mudduluru  // Correct
74*95a92995SRashmi Mudduluru  [formatter setDateFormat:@"yyyy_dd"];
75*95a92995SRashmi Mudduluru  NSLog(@"yyyy_dd %@", [formatter stringFromDate:date_radar]);
76*95a92995SRashmi Mudduluru
77*95a92995SRashmi Mudduluru  // Correct
78*95a92995SRashmi Mudduluru  [formatter setDateFormat:@"yyyy_DD"];
79*95a92995SRashmi Mudduluru  NSLog(@"yyyy_DD %@", [formatter stringFromDate:date_radar]);
80*95a92995SRashmi Mudduluru
81*95a92995SRashmi Mudduluru  // Incorrect
82*95a92995SRashmi Mudduluru  [formatter setDateFormat:@"yyyy_ww"];
83*95a92995SRashmi Mudduluru  // 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*95a92995SRashmi Mudduluru  NSLog(@"yyyy_ww %@", [formatter stringFromDate:date_radar]);
85*95a92995SRashmi Mudduluru
86*95a92995SRashmi Mudduluru  // Incorrect
87*95a92995SRashmi Mudduluru  [formatter setDateFormat:@"yyyy_WW"];
88*95a92995SRashmi Mudduluru  // 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*95a92995SRashmi Mudduluru  NSLog(@"yyyy_WW %@", [formatter stringFromDate:date_radar]);
90*95a92995SRashmi Mudduluru
91*95a92995SRashmi Mudduluru  NSLog(@"==========================================");
92*95a92995SRashmi Mudduluru  // Correct
93*95a92995SRashmi Mudduluru  [formatter setDateFormat:@"yyyy_MM_dd"];
94*95a92995SRashmi Mudduluru  NSLog(@"yyyy_MM_dd %@", [formatter stringFromDate:date_radar]);
95*95a92995SRashmi Mudduluru
96*95a92995SRashmi Mudduluru  // Potentially Incorrect
97*95a92995SRashmi Mudduluru  [formatter setDateFormat:@"yyyy_MM_DD"];
98*95a92995SRashmi Mudduluru  NSLog(@"yyyy_MM_DD %@", [formatter stringFromDate:date_radar]);
99*95a92995SRashmi Mudduluru
100*95a92995SRashmi Mudduluru  // Incorrect
101*95a92995SRashmi Mudduluru  [formatter setDateFormat:@"yyyy_MM_ww"];
102*95a92995SRashmi Mudduluru  // 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*95a92995SRashmi Mudduluru  NSLog(@"yyyy_MM_ww %@", [formatter stringFromDate:date_radar]);
104*95a92995SRashmi Mudduluru
105*95a92995SRashmi Mudduluru  NSLog(@"=======WEEK YEAR==========");
106*95a92995SRashmi Mudduluru  // Incorrect
107*95a92995SRashmi Mudduluru  [formatter setDateFormat:@"YYYY_MM"];
108*95a92995SRashmi Mudduluru  // 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*95a92995SRashmi Mudduluru  NSLog(@"YYYY_MM %@", [formatter stringFromDate:date_radar]);
110*95a92995SRashmi Mudduluru
111*95a92995SRashmi Mudduluru  // Correct
112*95a92995SRashmi Mudduluru  [formatter setDateFormat:@"YYYY_ww"];
113*95a92995SRashmi Mudduluru  NSLog(@"YYYY_ww %@", [formatter stringFromDate:date_radar]);
114*95a92995SRashmi Mudduluru
115*95a92995SRashmi Mudduluru  // Incorrect
116*95a92995SRashmi Mudduluru  [formatter setDateFormat:@"YYYY_WW"];
117*95a92995SRashmi Mudduluru  // 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*95a92995SRashmi Mudduluru  // 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*95a92995SRashmi Mudduluru  NSLog(@"YYYY_WW %@", [formatter stringFromDate:date_radar]);
120*95a92995SRashmi Mudduluru
121*95a92995SRashmi Mudduluru  // Correct
122*95a92995SRashmi Mudduluru  [formatter setDateFormat:@"YYYY_dd"];
123*95a92995SRashmi Mudduluru  NSLog(@"YYYY_dd %@", [formatter stringFromDate:date_radar]);
124*95a92995SRashmi Mudduluru
125*95a92995SRashmi Mudduluru  // Incorrect
126*95a92995SRashmi Mudduluru  [formatter setDateFormat:@"YYYY_DD"];
127*95a92995SRashmi Mudduluru  // 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*95a92995SRashmi Mudduluru  NSLog(@"YYYY_DD %@", [formatter stringFromDate:date_radar]);
129*95a92995SRashmi Mudduluru
130*95a92995SRashmi Mudduluru  NSLog(@"==========================================");
131*95a92995SRashmi Mudduluru  // Potentially Incorrect
132*95a92995SRashmi Mudduluru  [formatter setDateFormat:@"YYYY_ww_dd"];
133*95a92995SRashmi Mudduluru  NSLog(@"YYYY ww dd %@", [formatter stringFromDate:date_radar]);
134*95a92995SRashmi Mudduluru
135*95a92995SRashmi Mudduluru  // Incorrect
136*95a92995SRashmi Mudduluru  [formatter setDateFormat:@"YYYY_ww_DD"];
137*95a92995SRashmi Mudduluru  // 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*95a92995SRashmi Mudduluru  NSLog(@"YYYY_ww_DD %@", [formatter stringFromDate:date_radar]);
139*95a92995SRashmi Mudduluru}
140*95a92995SRashmi Mudduluru
141*95a92995SRashmi Mudduluru+ (void)testMethod2 {
142*95a92995SRashmi Mudduluru  NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
143*95a92995SRashmi Mudduluru  NSDateComponents *comps = [[NSDateComponents alloc] init];
144*95a92995SRashmi Mudduluru  [comps setDay:29];
145*95a92995SRashmi Mudduluru  [comps setMonth:12];
146*95a92995SRashmi Mudduluru  [comps setYear:2014];
147*95a92995SRashmi Mudduluru  NSDate *date_radar = [[NSCalendar currentCalendar] dateFromComponents:comps];
148*95a92995SRashmi Mudduluru
149*95a92995SRashmi Mudduluru  // Test 1 : incorrect
150*95a92995SRashmi Mudduluru  [formatter setDateFormat:@"yyyy_QQ_MM_ww_dd_EE"];
151*95a92995SRashmi Mudduluru  // 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*95a92995SRashmi Mudduluru  NSLog(@"yyyy_QQ_MM_ww_dd_EE %@", [formatter stringFromDate:date_radar]);
153*95a92995SRashmi Mudduluru
154*95a92995SRashmi Mudduluru  // Test 2 : incorrect
155*95a92995SRashmi Mudduluru  [formatter setDateFormat:@"yyyy_QQ_MM_ww_dd_ee"];
156*95a92995SRashmi Mudduluru  // 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*95a92995SRashmi Mudduluru  NSLog(@"yyyy_QQ_MM_ww_dd_ee %@", [formatter stringFromDate:date_radar]);
158*95a92995SRashmi Mudduluru
159*95a92995SRashmi Mudduluru  // Test 3 : incorrect
160*95a92995SRashmi Mudduluru  [formatter setDateFormat:@"yyyy_QQ_MM_ww_DD_EE"];
161*95a92995SRashmi Mudduluru  // 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*95a92995SRashmi Mudduluru  NSLog(@"yyyy_QQ_MM_ww_DD_EE %@", [formatter stringFromDate:date_radar]);
163*95a92995SRashmi Mudduluru
164*95a92995SRashmi Mudduluru  // Test 4 : incorrect
165*95a92995SRashmi Mudduluru  [formatter setDateFormat:@"yyyy_QQ_MM_ww_DD_ee"];
166*95a92995SRashmi Mudduluru  // 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*95a92995SRashmi Mudduluru  NSLog(@"yyyy_QQ_MM_ww_DD_ee %@", [formatter stringFromDate:date_radar]);
168*95a92995SRashmi Mudduluru
169*95a92995SRashmi Mudduluru  // Test 5 : incorrect
170*95a92995SRashmi Mudduluru  [formatter setDateFormat:@"yyyy_QQ_MM_ww_F_EE"];
171*95a92995SRashmi Mudduluru  // 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*95a92995SRashmi Mudduluru  NSLog(@"yyyy_QQ_MM_ww_F_EE %@", [formatter stringFromDate:date_radar]);
173*95a92995SRashmi Mudduluru
174*95a92995SRashmi Mudduluru  // Test 6 : incorrect
175*95a92995SRashmi Mudduluru  [formatter setDateFormat:@"yyyy_QQ_MM_ww_F_ee"];
176*95a92995SRashmi Mudduluru  // 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*95a92995SRashmi Mudduluru  NSLog(@"yyyy_QQ_MM_ww_F_ee %@", [formatter stringFromDate:date_radar]);
178*95a92995SRashmi Mudduluru
179*95a92995SRashmi Mudduluru  // Test 7 : correct
180*95a92995SRashmi Mudduluru  [formatter setDateFormat:@"yyyy_QQ_MM_WW_dd_EE"];
181*95a92995SRashmi Mudduluru  NSLog(@"yyyy_QQ_MM_WW_dd_EE %@", [formatter stringFromDate:date_radar]);
182*95a92995SRashmi Mudduluru
183*95a92995SRashmi Mudduluru  // Test 8 : correct
184*95a92995SRashmi Mudduluru  [formatter setDateFormat:@"yyyy_QQ_MM_WW_dd_ee"];
185*95a92995SRashmi Mudduluru  NSLog(@"yyyy_QQ_MM_WW_dd_ee %@", [formatter stringFromDate:date_radar]);
186*95a92995SRashmi Mudduluru
187*95a92995SRashmi Mudduluru  // Test 9 : correct
188*95a92995SRashmi Mudduluru  [formatter setDateFormat:@"yyyy_QQ_MM_WW_DD_EE"];
189*95a92995SRashmi Mudduluru  NSLog(@"yyyy_QQ_MM_WW_DD_EE %@", [formatter stringFromDate:date_radar]);
190*95a92995SRashmi Mudduluru
191*95a92995SRashmi Mudduluru  // Test 10 : correct
192*95a92995SRashmi Mudduluru  [formatter setDateFormat:@"yyyy_QQ_MM_WW_DD_ee"];
193*95a92995SRashmi Mudduluru  NSLog(@"yyyy_QQ_MM_WW_DD_ee %@", [formatter stringFromDate:date_radar]);
194*95a92995SRashmi Mudduluru
195*95a92995SRashmi Mudduluru  // Test 11 : correct
196*95a92995SRashmi Mudduluru  [formatter setDateFormat:@"yyyy_QQ_MM_WW_F_EE"];
197*95a92995SRashmi Mudduluru  NSLog(@"yyyy_QQ_MM_WW_F_EE %@", [formatter stringFromDate:date_radar]);
198*95a92995SRashmi Mudduluru
199*95a92995SRashmi Mudduluru  // Test 12 : correct
200*95a92995SRashmi Mudduluru  [formatter setDateFormat:@"yyyy_QQ_MM_WW_F_ee"];
201*95a92995SRashmi Mudduluru  NSLog(@"yyyy_QQ_MM_WW_F_ee %@", [formatter stringFromDate:date_radar]);
202*95a92995SRashmi Mudduluru
203*95a92995SRashmi Mudduluru  // Test 13 : incorrect
204*95a92995SRashmi Mudduluru  [formatter setDateFormat:@"YYYY_QQ_MM_ww_dd_EE"];
205*95a92995SRashmi Mudduluru  // 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*95a92995SRashmi Mudduluru  // 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*95a92995SRashmi Mudduluru  NSLog(@"YYYY_QQ_MM_ww_dd_EE %@", [formatter stringFromDate:date_radar]);
208*95a92995SRashmi Mudduluru
209*95a92995SRashmi Mudduluru  // Test 14 : incorrect
210*95a92995SRashmi Mudduluru  [formatter setDateFormat:@"YYYY_QQ_MM_ww_dd_ee"];
211*95a92995SRashmi Mudduluru  // 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*95a92995SRashmi Mudduluru  // 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*95a92995SRashmi Mudduluru  NSLog(@"YYYY_QQ_MM_ww_dd_ee %@", [formatter stringFromDate:date_radar]);
214*95a92995SRashmi Mudduluru
215*95a92995SRashmi Mudduluru  // Test 15 : incorrect
216*95a92995SRashmi Mudduluru  [formatter setDateFormat:@"YYYY_QQ_MM_ww_DD_EE"];
217*95a92995SRashmi Mudduluru  // 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*95a92995SRashmi Mudduluru  // 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*95a92995SRashmi Mudduluru  // 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*95a92995SRashmi Mudduluru  NSLog(@"YYYY_QQ_MM_ww_DD_EE %@", [formatter stringFromDate:date_radar]);
221*95a92995SRashmi Mudduluru
222*95a92995SRashmi Mudduluru  // Test 16 : incorrect
223*95a92995SRashmi Mudduluru  [formatter setDateFormat:@"YYYY_QQ_MM_ww_DD_ee"];
224*95a92995SRashmi Mudduluru  // 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*95a92995SRashmi Mudduluru  // 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*95a92995SRashmi Mudduluru  // 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*95a92995SRashmi Mudduluru  NSLog(@"YYYY_QQ_MM_ww_DD_ee %@", [formatter stringFromDate:date_radar]);
228*95a92995SRashmi Mudduluru
229*95a92995SRashmi Mudduluru  // Test 17 : incorrect
230*95a92995SRashmi Mudduluru  [formatter setDateFormat:@"YYYY_QQ_MM_ww_F_EE"];
231*95a92995SRashmi Mudduluru  // 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*95a92995SRashmi Mudduluru  // 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*95a92995SRashmi Mudduluru  // 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*95a92995SRashmi Mudduluru  NSLog(@"YYYY_QQ_MM_ww_F_EE %@", [formatter stringFromDate:date_radar]);
235*95a92995SRashmi Mudduluru
236*95a92995SRashmi Mudduluru  // Test 18 : incorrect
237*95a92995SRashmi Mudduluru  [formatter setDateFormat:@"YYYY_QQ_MM_ww_F_ee"];
238*95a92995SRashmi Mudduluru  // 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*95a92995SRashmi Mudduluru  // 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*95a92995SRashmi Mudduluru  // 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*95a92995SRashmi Mudduluru  NSLog(@"YYYY_QQ_MM_ww_F_ee %@", [formatter stringFromDate:date_radar]);
242*95a92995SRashmi Mudduluru
243*95a92995SRashmi Mudduluru  // Test 19 : incorrect
244*95a92995SRashmi Mudduluru  [formatter setDateFormat:@"YYYY_QQ_MM_WW_dd_EE"];
245*95a92995SRashmi Mudduluru  // 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*95a92995SRashmi Mudduluru  // 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*95a92995SRashmi Mudduluru  // 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*95a92995SRashmi Mudduluru  NSLog(@"YYYY_QQ_MM_WW_dd_EE %@", [formatter stringFromDate:date_radar]);
249*95a92995SRashmi Mudduluru
250*95a92995SRashmi Mudduluru  // Test 20 : incorrect
251*95a92995SRashmi Mudduluru  [formatter setDateFormat:@"YYYY_QQ_MM_WW_dd_ee"];
252*95a92995SRashmi Mudduluru  // 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*95a92995SRashmi Mudduluru  // 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*95a92995SRashmi Mudduluru  // 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*95a92995SRashmi Mudduluru  NSLog(@"YYYY_QQ_MM_WW_dd_ee %@", [formatter stringFromDate:date_radar]);
256*95a92995SRashmi Mudduluru
257*95a92995SRashmi Mudduluru  // Test 21 : incorrect
258*95a92995SRashmi Mudduluru  [formatter setDateFormat:@"YYYY_QQ_MM_WW_DD_EE"];
259*95a92995SRashmi Mudduluru  // 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*95a92995SRashmi Mudduluru  // 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*95a92995SRashmi Mudduluru  // 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*95a92995SRashmi Mudduluru  // 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*95a92995SRashmi Mudduluru  NSLog(@"YYYY_QQ_MM_WW_DD_EE %@", [formatter stringFromDate:date_radar]);
264*95a92995SRashmi Mudduluru
265*95a92995SRashmi Mudduluru  // Test 22 : incorrect
266*95a92995SRashmi Mudduluru  [formatter setDateFormat:@"YYYY_QQ_MM_WW_DD_ee"];
267*95a92995SRashmi Mudduluru  // 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*95a92995SRashmi Mudduluru  // 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*95a92995SRashmi Mudduluru  // 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*95a92995SRashmi Mudduluru  // 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*95a92995SRashmi Mudduluru  NSLog(@"YYYY_QQ_MM_WW_DD_ee %@", [formatter stringFromDate:date_radar]);
272*95a92995SRashmi Mudduluru
273*95a92995SRashmi Mudduluru  // Test 23 : incorrect
274*95a92995SRashmi Mudduluru  [formatter setDateFormat:@"YYYY_QQ_MM_WW_F_EE"];
275*95a92995SRashmi Mudduluru  // 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*95a92995SRashmi Mudduluru  // 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*95a92995SRashmi Mudduluru  // 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*95a92995SRashmi Mudduluru  // 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*95a92995SRashmi Mudduluru  NSLog(@"YYYY_QQ_MM_WW_F_EE %@", [formatter stringFromDate:date_radar]);
280*95a92995SRashmi Mudduluru
281*95a92995SRashmi Mudduluru  // Test 24 : incorrect
282*95a92995SRashmi Mudduluru  [formatter setDateFormat:@"YYYY_QQ_MM_WW_F_ee"];
283*95a92995SRashmi Mudduluru  // 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*95a92995SRashmi Mudduluru  // 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*95a92995SRashmi Mudduluru  // 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*95a92995SRashmi Mudduluru  // 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*95a92995SRashmi Mudduluru  NSLog(@"YYYY_QQ_MM_WW_F_ee %@", [formatter stringFromDate:date_radar]);
288*95a92995SRashmi Mudduluru}
289*95a92995SRashmi Mudduluru
290*95a92995SRashmi Mudduluru+ (void)testMethod3 {
291*95a92995SRashmi Mudduluru  NSDateFormatter *Formatter = [[NSDateFormatter alloc] init];
292*95a92995SRashmi Mudduluru  NSDateComponents *Comps = [[NSDateComponents alloc] init];
293*95a92995SRashmi Mudduluru  [Comps setDay:29];
294*95a92995SRashmi Mudduluru  [Comps setMonth:12];
295*95a92995SRashmi Mudduluru  [Comps setYear:2014];
296*95a92995SRashmi Mudduluru  NSDate *DateRadar = [[NSCalendar currentCalendar] dateFromComponents:Comps];
297*95a92995SRashmi Mudduluru
298*95a92995SRashmi Mudduluru  // Incorrect : has reserved and invalid chars
299*95a92995SRashmi Mudduluru  [Formatter setDateFormat:@"Rashmi"];
300*95a92995SRashmi Mudduluru  // CHECK-MESSAGES: :[[@LINE-1]]:28: warning: invalid date format specifier [objc-nsdate-formatter]
301*95a92995SRashmi Mudduluru  NSLog(@"Rashmi %@", [Formatter stringFromDate:DateRadar]);
302*95a92995SRashmi Mudduluru
303*95a92995SRashmi Mudduluru  // Correct
304*95a92995SRashmi Mudduluru  [Formatter setDateFormat:@"AMy"];
305*95a92995SRashmi Mudduluru  NSLog(@"AMy %@", [Formatter stringFromDate:DateRadar]);
306*95a92995SRashmi Mudduluru}
307*95a92995SRashmi Mudduluru
308*95a92995SRashmi Mudduluru+ (void)testAnotherClass {
309*95a92995SRashmi Mudduluru    AnotherClass *Formatter = [[AnotherClass alloc] init];
310*95a92995SRashmi Mudduluru    [Formatter setDateFormat:@"RandomString"];
311*95a92995SRashmi Mudduluru    [Formatter setDateFormat:@"YYYY_QQ_MM_WW_dd_EE"];
312*95a92995SRashmi Mudduluru}
313*95a92995SRashmi Mudduluru@end
314