001 /*
002 * Copyright 2001-2005 Stephen Colebourne
003 *
004 * Licensed under the Apache License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 * http://www.apache.org/licenses/LICENSE-2.0
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013 * See the License for the specific language governing permissions and
014 * limitations under the License.
015 */
016 package org.joda.time.format;
017
018 import java.util.ArrayList;
019 import java.util.Arrays;
020 import java.util.Collection;
021 import java.util.Collections;
022 import java.util.List;
023
024 import junit.framework.TestCase;
025 import junit.framework.TestSuite;
026
027 import org.joda.time.DateTimeFieldType;
028 import org.joda.time.Partial;
029
030 /**
031 * This class is a Junit unit test for ISODateTimeFormat.
032 *
033 * @author Stephen Colebourne
034 */
035 public class TestISODateTimeFormat_Fields extends TestCase {
036
037 public static void main(String[] args) {
038 junit.textui.TestRunner.run(suite());
039 }
040
041 public static TestSuite suite() {
042 return new TestSuite(TestISODateTimeFormat_Fields.class);
043 }
044
045 public TestISODateTimeFormat_Fields(String name) {
046 super(name);
047 }
048
049 protected void setUp() throws Exception {
050 }
051
052 protected void tearDown() throws Exception {
053 }
054
055 //-----------------------------------------------------------------------
056 public void testForFields_null() {
057 try {
058 ISODateTimeFormat.forFields((Collection) null, true, true);
059 fail();
060 } catch (IllegalArgumentException ex) {}
061 }
062
063 //-----------------------------------------------------------------------
064 public void testForFields_empty() {
065 try {
066 ISODateTimeFormat.forFields(new ArrayList(), true, true);
067 fail();
068 } catch (IllegalArgumentException ex) {}
069 }
070
071 //-----------------------------------------------------------------------
072 //-----------------------------------------------------------------------
073 //-----------------------------------------------------------------------
074 public void testForFields_calBased_YMD() {
075 DateTimeFieldType[] fields = new DateTimeFieldType[] {
076 DateTimeFieldType.year(),
077 DateTimeFieldType.monthOfYear(),
078 DateTimeFieldType.dayOfMonth(),
079 };
080 int[] values = new int[] {2005, 6, 25};
081 List types = new ArrayList(Arrays.asList(fields));
082 DateTimeFormatter f = ISODateTimeFormat.forFields(types, true, true);
083 assertEquals("2005-06-25", f.print(new Partial(fields, values)));
084 assertEquals(0, types.size());
085
086 types = new ArrayList(Arrays.asList(fields));
087 f = ISODateTimeFormat.forFields(types, true, false);
088 assertEquals("2005-06-25", f.print(new Partial(fields, values)));
089 assertEquals(0, types.size());
090
091 types = new ArrayList(Arrays.asList(fields));
092 f = ISODateTimeFormat.forFields(types, false, true);
093 assertEquals("20050625", f.print(new Partial(fields, values)));
094 assertEquals(0, types.size());
095
096 types = new ArrayList(Arrays.asList(fields));
097 f = ISODateTimeFormat.forFields(types, false, false);
098 assertEquals("20050625", f.print(new Partial(fields, values)));
099 assertEquals(0, types.size());
100 }
101
102 //-----------------------------------------------------------------------
103 public void testForFields_calBased_YMD_unmodifiable() {
104 DateTimeFieldType[] fields = new DateTimeFieldType[] {
105 DateTimeFieldType.year(),
106 DateTimeFieldType.monthOfYear(),
107 DateTimeFieldType.dayOfMonth(),
108 };
109 int[] values = new int[] {2005, 6, 25};
110 List types = Collections.unmodifiableList(new ArrayList(Arrays.asList(fields)));
111 DateTimeFormatter f = ISODateTimeFormat.forFields(types, true, true);
112 assertEquals("2005-06-25", f.print(new Partial(fields, values)));
113 assertEquals(3, types.size());
114
115 types = Arrays.asList(fields);
116 f = ISODateTimeFormat.forFields(types, true, true);
117 assertEquals("2005-06-25", f.print(new Partial(fields, values)));
118 assertEquals(3, types.size());
119 }
120
121 //-----------------------------------------------------------------------
122 public void testForFields_calBased_YMD_duplicates() {
123 DateTimeFieldType[] fields = new DateTimeFieldType[] {
124 DateTimeFieldType.year(),
125 DateTimeFieldType.monthOfYear(),
126 DateTimeFieldType.dayOfMonth(),
127 };
128 DateTimeFieldType[] dupFields = new DateTimeFieldType[] {
129 DateTimeFieldType.year(),
130 DateTimeFieldType.monthOfYear(),
131 DateTimeFieldType.dayOfMonth(),
132 DateTimeFieldType.monthOfYear(),
133 };
134 int[] values = new int[] {2005, 6, 25};
135 List types = new ArrayList(Arrays.asList(dupFields));
136 DateTimeFormatter f = ISODateTimeFormat.forFields(types, true, true);
137 assertEquals("2005-06-25", f.print(new Partial(fields, values)));
138 assertEquals(0, types.size());
139
140 types = Arrays.asList(dupFields);
141 f = ISODateTimeFormat.forFields(types, true, true);
142 assertEquals("2005-06-25", f.print(new Partial(fields, values)));
143 assertEquals(4, types.size());
144 }
145
146 //-----------------------------------------------------------------------
147 public void testForFields_calBased_Y() {
148 DateTimeFieldType[] fields = new DateTimeFieldType[] {
149 DateTimeFieldType.year(),
150 };
151 int[] values = new int[] {2005};
152 List types = new ArrayList(Arrays.asList(fields));
153 DateTimeFormatter f = ISODateTimeFormat.forFields(types, true, true);
154 assertEquals("2005", f.print(new Partial(fields, values)));
155 assertEquals(0, types.size());
156
157 types = new ArrayList(Arrays.asList(fields));
158 f = ISODateTimeFormat.forFields(types, true, false);
159 assertEquals("2005", f.print(new Partial(fields, values)));
160 assertEquals(0, types.size());
161
162 types = new ArrayList(Arrays.asList(fields));
163 f = ISODateTimeFormat.forFields(types, false, true);
164 assertEquals("2005", f.print(new Partial(fields, values)));
165 assertEquals(0, types.size());
166
167 types = new ArrayList(Arrays.asList(fields));
168 f = ISODateTimeFormat.forFields(types, false, false);
169 assertEquals("2005", f.print(new Partial(fields, values)));
170 assertEquals(0, types.size());
171 }
172
173 //-----------------------------------------------------------------------
174 public void testForFields_calBased_M() {
175 DateTimeFieldType[] fields = new DateTimeFieldType[] {
176 DateTimeFieldType.monthOfYear(),
177 };
178 int[] values = new int[] {6};
179 List types = new ArrayList(Arrays.asList(fields));
180 DateTimeFormatter f = ISODateTimeFormat.forFields(types, true, true);
181 assertEquals("--06", f.print(new Partial(fields, values)));
182 assertEquals(0, types.size());
183
184 types = new ArrayList(Arrays.asList(fields));
185 f = ISODateTimeFormat.forFields(types, true, false);
186 assertEquals("--06", f.print(new Partial(fields, values)));
187 assertEquals(0, types.size());
188
189 types = new ArrayList(Arrays.asList(fields));
190 f = ISODateTimeFormat.forFields(types, false, true);
191 assertEquals("--06", f.print(new Partial(fields, values)));
192 assertEquals(0, types.size());
193
194 types = new ArrayList(Arrays.asList(fields));
195 f = ISODateTimeFormat.forFields(types, false, false);
196 assertEquals("--06", f.print(new Partial(fields, values)));
197 assertEquals(0, types.size());
198 }
199
200 //-----------------------------------------------------------------------
201 public void testForFields_calBased_D() {
202 DateTimeFieldType[] fields = new DateTimeFieldType[] {
203 DateTimeFieldType.dayOfMonth(),
204 };
205 int[] values = new int[] {25};
206 List types = new ArrayList(Arrays.asList(fields));
207 DateTimeFormatter f = ISODateTimeFormat.forFields(types, true, true);
208 assertEquals("---25", f.print(new Partial(fields, values)));
209 assertEquals(0, types.size());
210
211 types = new ArrayList(Arrays.asList(fields));
212 f = ISODateTimeFormat.forFields(types, true, false);
213 assertEquals("---25", f.print(new Partial(fields, values)));
214 assertEquals(0, types.size());
215
216 types = new ArrayList(Arrays.asList(fields));
217 f = ISODateTimeFormat.forFields(types, false, true);
218 assertEquals("---25", f.print(new Partial(fields, values)));
219 assertEquals(0, types.size());
220
221 types = new ArrayList(Arrays.asList(fields));
222 f = ISODateTimeFormat.forFields(types, false, false);
223 assertEquals("---25", f.print(new Partial(fields, values)));
224 assertEquals(0, types.size());
225 }
226
227 //-----------------------------------------------------------------------
228 public void testForFields_calBased_YM() {
229 DateTimeFieldType[] fields = new DateTimeFieldType[] {
230 DateTimeFieldType.year(),
231 DateTimeFieldType.monthOfYear(),
232 };
233 int[] values = new int[] {2005, 6};
234 List types = new ArrayList(Arrays.asList(fields));
235 DateTimeFormatter f = ISODateTimeFormat.forFields(types, true, true);
236 assertEquals("2005-06", f.print(new Partial(fields, values)));
237 assertEquals(0, types.size());
238
239 types = new ArrayList(Arrays.asList(fields));
240 f = ISODateTimeFormat.forFields(types, true, false);
241 assertEquals("2005-06", f.print(new Partial(fields, values)));
242 assertEquals(0, types.size());
243
244 types = new ArrayList(Arrays.asList(fields));
245 f = ISODateTimeFormat.forFields(types, false, true);
246 assertEquals("2005-06", f.print(new Partial(fields, values)));
247 assertEquals(0, types.size());
248
249 types = new ArrayList(Arrays.asList(fields));
250 f = ISODateTimeFormat.forFields(types, false, false);
251 assertEquals("2005-06", f.print(new Partial(fields, values)));
252 assertEquals(0, types.size());
253 }
254
255 //-----------------------------------------------------------------------
256 public void testForFields_calBased_MD() {
257 DateTimeFieldType[] fields = new DateTimeFieldType[] {
258 DateTimeFieldType.monthOfYear(),
259 DateTimeFieldType.dayOfMonth(),
260 };
261 int[] values = new int[] {6, 25};
262 List types = new ArrayList(Arrays.asList(fields));
263 DateTimeFormatter f = ISODateTimeFormat.forFields(types, true, true);
264 assertEquals("--06-25", f.print(new Partial(fields, values)));
265 assertEquals(0, types.size());
266
267 types = new ArrayList(Arrays.asList(fields));
268 f = ISODateTimeFormat.forFields(types, true, false);
269 assertEquals("--06-25", f.print(new Partial(fields, values)));
270 assertEquals(0, types.size());
271
272 types = new ArrayList(Arrays.asList(fields));
273 f = ISODateTimeFormat.forFields(types, false, true);
274 assertEquals("--0625", f.print(new Partial(fields, values)));
275 assertEquals(0, types.size());
276
277 types = new ArrayList(Arrays.asList(fields));
278 f = ISODateTimeFormat.forFields(types, false, false);
279 assertEquals("--0625", f.print(new Partial(fields, values)));
280 assertEquals(0, types.size());
281 }
282
283 //-----------------------------------------------------------------------
284 public void testForFields_calBased_YD() {
285 DateTimeFieldType[] fields = new DateTimeFieldType[] {
286 DateTimeFieldType.year(),
287 DateTimeFieldType.dayOfMonth(),
288 };
289 int[] values = new int[] {2005, 25};
290 List types = new ArrayList(Arrays.asList(fields));
291 DateTimeFormatter f = ISODateTimeFormat.forFields(types, true, false);
292 assertEquals("2005--25", f.print(new Partial(fields, values)));
293 assertEquals(0, types.size());
294
295 types = new ArrayList(Arrays.asList(fields));
296 f = ISODateTimeFormat.forFields(types, false, false);
297 assertEquals("2005--25", f.print(new Partial(fields, values)));
298 assertEquals(0, types.size());
299
300 types = new ArrayList(Arrays.asList(fields));
301 try {
302 ISODateTimeFormat.forFields(types, true, true);
303 fail();
304 } catch (IllegalArgumentException ex) {}
305
306 types = new ArrayList(Arrays.asList(fields));
307 try {
308 ISODateTimeFormat.forFields(types, false, true);
309 fail();
310 } catch (IllegalArgumentException ex) {}
311 }
312
313 //-----------------------------------------------------------------------
314 //-----------------------------------------------------------------------
315 //-----------------------------------------------------------------------
316 public void testForFields_weekBased_YWD() {
317 DateTimeFieldType[] fields = new DateTimeFieldType[] {
318 DateTimeFieldType.weekyear(),
319 DateTimeFieldType.weekOfWeekyear(),
320 DateTimeFieldType.dayOfWeek(),
321 };
322 int[] values = new int[] {2005, 8, 5};
323 List types = new ArrayList(Arrays.asList(fields));
324 DateTimeFormatter f = ISODateTimeFormat.forFields(types, true, true);
325 assertEquals("2005-W08-5", f.print(new Partial(fields, values)));
326 assertEquals(0, types.size());
327
328 types = new ArrayList(Arrays.asList(fields));
329 f = ISODateTimeFormat.forFields(types, true, false);
330 assertEquals("2005-W08-5", f.print(new Partial(fields, values)));
331 assertEquals(0, types.size());
332
333 types = new ArrayList(Arrays.asList(fields));
334 f = ISODateTimeFormat.forFields(types, false, true);
335 assertEquals("2005W085", f.print(new Partial(fields, values)));
336 assertEquals(0, types.size());
337
338 types = new ArrayList(Arrays.asList(fields));
339 f = ISODateTimeFormat.forFields(types, false, false);
340 assertEquals("2005W085", f.print(new Partial(fields, values)));
341 assertEquals(0, types.size());
342 }
343
344 //-----------------------------------------------------------------------
345 public void testForFields_weekBased_Y() {
346 DateTimeFieldType[] fields = new DateTimeFieldType[] {
347 DateTimeFieldType.weekyear(),
348 };
349 int[] values = new int[] {2005};
350 List types = new ArrayList(Arrays.asList(fields));
351 DateTimeFormatter f = ISODateTimeFormat.forFields(types, true, true);
352 assertEquals("2005", f.print(new Partial(fields, values)));
353 assertEquals(0, types.size());
354
355 types = new ArrayList(Arrays.asList(fields));
356 f = ISODateTimeFormat.forFields(types, true, false);
357 assertEquals("2005", f.print(new Partial(fields, values)));
358 assertEquals(0, types.size());
359
360 types = new ArrayList(Arrays.asList(fields));
361 f = ISODateTimeFormat.forFields(types, false, true);
362 assertEquals("2005", f.print(new Partial(fields, values)));
363 assertEquals(0, types.size());
364
365 types = new ArrayList(Arrays.asList(fields));
366 f = ISODateTimeFormat.forFields(types, false, false);
367 assertEquals("2005", f.print(new Partial(fields, values)));
368 assertEquals(0, types.size());
369 }
370
371 //-----------------------------------------------------------------------
372 public void testForFields_weekBased_W() {
373 DateTimeFieldType[] fields = new DateTimeFieldType[] {
374 DateTimeFieldType.weekOfWeekyear(),
375 };
376 int[] values = new int[] {8};
377 List types = new ArrayList(Arrays.asList(fields));
378 DateTimeFormatter f = ISODateTimeFormat.forFields(types, true, true);
379 assertEquals("-W08", f.print(new Partial(fields, values)));
380 assertEquals(0, types.size());
381
382 types = new ArrayList(Arrays.asList(fields));
383 f = ISODateTimeFormat.forFields(types, true, false);
384 assertEquals("-W08", f.print(new Partial(fields, values)));
385 assertEquals(0, types.size());
386
387 types = new ArrayList(Arrays.asList(fields));
388 f = ISODateTimeFormat.forFields(types, false, true);
389 assertEquals("-W08", f.print(new Partial(fields, values)));
390 assertEquals(0, types.size());
391
392 types = new ArrayList(Arrays.asList(fields));
393 f = ISODateTimeFormat.forFields(types, false, false);
394 assertEquals("-W08", f.print(new Partial(fields, values)));
395 assertEquals(0, types.size());
396 }
397
398 //-----------------------------------------------------------------------
399 public void testForFields_weekBased_D() {
400 DateTimeFieldType[] fields = new DateTimeFieldType[] {
401 DateTimeFieldType.dayOfWeek(),
402 };
403 int[] values = new int[] {5};
404 List types = new ArrayList(Arrays.asList(fields));
405 DateTimeFormatter f = ISODateTimeFormat.forFields(types, true, true);
406 assertEquals("-W-5", f.print(new Partial(fields, values)));
407 assertEquals(0, types.size());
408
409 types = new ArrayList(Arrays.asList(fields));
410 f = ISODateTimeFormat.forFields(types, true, false);
411 assertEquals("-W-5", f.print(new Partial(fields, values)));
412 assertEquals(0, types.size());
413
414 types = new ArrayList(Arrays.asList(fields));
415 f = ISODateTimeFormat.forFields(types, false, true);
416 assertEquals("-W-5", f.print(new Partial(fields, values)));
417 assertEquals(0, types.size());
418
419 types = new ArrayList(Arrays.asList(fields));
420 f = ISODateTimeFormat.forFields(types, false, false);
421 assertEquals("-W-5", f.print(new Partial(fields, values)));
422 assertEquals(0, types.size());
423 }
424
425 //-----------------------------------------------------------------------
426 public void testForFields_weekBased_YW() {
427 DateTimeFieldType[] fields = new DateTimeFieldType[] {
428 DateTimeFieldType.weekyear(),
429 DateTimeFieldType.weekOfWeekyear(),
430 };
431 int[] values = new int[] {2005, 8};
432 List types = new ArrayList(Arrays.asList(fields));
433 DateTimeFormatter f = ISODateTimeFormat.forFields(types, true, true);
434 assertEquals("2005-W08", f.print(new Partial(fields, values)));
435 assertEquals(0, types.size());
436
437 types = new ArrayList(Arrays.asList(fields));
438 f = ISODateTimeFormat.forFields(types, true, false);
439 assertEquals("2005-W08", f.print(new Partial(fields, values)));
440 assertEquals(0, types.size());
441
442 types = new ArrayList(Arrays.asList(fields));
443 f = ISODateTimeFormat.forFields(types, false, true);
444 assertEquals("2005W08", f.print(new Partial(fields, values)));
445 assertEquals(0, types.size());
446
447 types = new ArrayList(Arrays.asList(fields));
448 f = ISODateTimeFormat.forFields(types, false, false);
449 assertEquals("2005W08", f.print(new Partial(fields, values)));
450 assertEquals(0, types.size());
451 }
452
453 //-----------------------------------------------------------------------
454 public void testForFields_weekBased_WD() {
455 DateTimeFieldType[] fields = new DateTimeFieldType[] {
456 DateTimeFieldType.weekOfWeekyear(),
457 DateTimeFieldType.dayOfWeek(),
458 };
459 int[] values = new int[] {8, 5};
460 List types = new ArrayList(Arrays.asList(fields));
461 DateTimeFormatter f = ISODateTimeFormat.forFields(types, true, true);
462 assertEquals("-W08-5", f.print(new Partial(fields, values)));
463 assertEquals(0, types.size());
464
465 types = new ArrayList(Arrays.asList(fields));
466 f = ISODateTimeFormat.forFields(types, true, false);
467 assertEquals("-W08-5", f.print(new Partial(fields, values)));
468 assertEquals(0, types.size());
469
470 types = new ArrayList(Arrays.asList(fields));
471 f = ISODateTimeFormat.forFields(types, false, true);
472 assertEquals("-W085", f.print(new Partial(fields, values)));
473 assertEquals(0, types.size());
474
475 types = new ArrayList(Arrays.asList(fields));
476 f = ISODateTimeFormat.forFields(types, false, false);
477 assertEquals("-W085", f.print(new Partial(fields, values)));
478 assertEquals(0, types.size());
479 }
480
481 //-----------------------------------------------------------------------
482 public void testForFields_weekBased_YD() {
483 DateTimeFieldType[] fields = new DateTimeFieldType[] {
484 DateTimeFieldType.weekyear(),
485 DateTimeFieldType.dayOfWeek(),
486 };
487 int[] values = new int[] {2005, 5};
488 List types = new ArrayList(Arrays.asList(fields));
489 DateTimeFormatter f = ISODateTimeFormat.forFields(types, true, false);
490 assertEquals("2005-W-5", f.print(new Partial(fields, values)));
491 assertEquals(0, types.size());
492
493 types = new ArrayList(Arrays.asList(fields));
494 f = ISODateTimeFormat.forFields(types, false, false);
495 assertEquals("2005W-5", f.print(new Partial(fields, values)));
496 assertEquals(0, types.size());
497
498 types = new ArrayList(Arrays.asList(fields));
499 try {
500 ISODateTimeFormat.forFields(types, true, true);
501 fail();
502 } catch (IllegalArgumentException ex) {}
503
504 types = new ArrayList(Arrays.asList(fields));
505 try {
506 ISODateTimeFormat.forFields(types, false, true);
507 fail();
508 } catch (IllegalArgumentException ex) {}
509 }
510
511 //-----------------------------------------------------------------------
512 //-----------------------------------------------------------------------
513 //-----------------------------------------------------------------------
514 public void testForFields_ordinalBased_YD() {
515 DateTimeFieldType[] fields = new DateTimeFieldType[] {
516 DateTimeFieldType.year(),
517 DateTimeFieldType.dayOfYear(),
518 };
519 int[] values = new int[] {2005, 177};
520 List types = new ArrayList(Arrays.asList(fields));
521 DateTimeFormatter f = ISODateTimeFormat.forFields(types, true, true);
522 assertEquals("2005-177", f.print(new Partial(fields, values)));
523 assertEquals(0, types.size());
524
525 types = new ArrayList(Arrays.asList(fields));
526 f = ISODateTimeFormat.forFields(types, true, false);
527 assertEquals("2005-177", f.print(new Partial(fields, values)));
528 assertEquals(0, types.size());
529
530 types = new ArrayList(Arrays.asList(fields));
531 f = ISODateTimeFormat.forFields(types, false, true);
532 assertEquals("2005177", f.print(new Partial(fields, values)));
533 assertEquals(0, types.size());
534
535 types = new ArrayList(Arrays.asList(fields));
536 f = ISODateTimeFormat.forFields(types, false, false);
537 assertEquals("2005177", f.print(new Partial(fields, values)));
538 assertEquals(0, types.size());
539 }
540
541 //-----------------------------------------------------------------------
542 public void testForFields_ordinalBased_Y() {
543 DateTimeFieldType[] fields = new DateTimeFieldType[] {
544 DateTimeFieldType.year(),
545 };
546 int[] values = new int[] {2005};
547 List types = new ArrayList(Arrays.asList(fields));
548 DateTimeFormatter f = ISODateTimeFormat.forFields(types, true, true);
549 assertEquals("2005", f.print(new Partial(fields, values)));
550 assertEquals(0, types.size());
551
552 types = new ArrayList(Arrays.asList(fields));
553 f = ISODateTimeFormat.forFields(types, true, false);
554 assertEquals("2005", f.print(new Partial(fields, values)));
555 assertEquals(0, types.size());
556
557 types = new ArrayList(Arrays.asList(fields));
558 f = ISODateTimeFormat.forFields(types, false, true);
559 assertEquals("2005", f.print(new Partial(fields, values)));
560 assertEquals(0, types.size());
561
562 types = new ArrayList(Arrays.asList(fields));
563 f = ISODateTimeFormat.forFields(types, false, false);
564 assertEquals("2005", f.print(new Partial(fields, values)));
565 assertEquals(0, types.size());
566 }
567
568 //-----------------------------------------------------------------------
569 public void testForFields_ordinalBased_D() {
570 DateTimeFieldType[] fields = new DateTimeFieldType[] {
571 DateTimeFieldType.dayOfYear(),
572 };
573 int[] values = new int[] {177};
574 List types = new ArrayList(Arrays.asList(fields));
575 DateTimeFormatter f = ISODateTimeFormat.forFields(types, true, true);
576 assertEquals("-177", f.print(new Partial(fields, values)));
577 assertEquals(0, types.size());
578
579 types = new ArrayList(Arrays.asList(fields));
580 f = ISODateTimeFormat.forFields(types, true, false);
581 assertEquals("-177", f.print(new Partial(fields, values)));
582 assertEquals(0, types.size());
583
584 types = new ArrayList(Arrays.asList(fields));
585 f = ISODateTimeFormat.forFields(types, false, true);
586 assertEquals("-177", f.print(new Partial(fields, values)));
587 assertEquals(0, types.size());
588
589 types = new ArrayList(Arrays.asList(fields));
590 f = ISODateTimeFormat.forFields(types, false, false);
591 assertEquals("-177", f.print(new Partial(fields, values)));
592 assertEquals(0, types.size());
593 }
594
595 //-----------------------------------------------------------------------
596 //-----------------------------------------------------------------------
597 //-----------------------------------------------------------------------
598 public void testForFields_time_HMSm() {
599 DateTimeFieldType[] fields = new DateTimeFieldType[] {
600 DateTimeFieldType.hourOfDay(),
601 DateTimeFieldType.minuteOfHour(),
602 DateTimeFieldType.secondOfMinute(),
603 DateTimeFieldType.millisOfSecond(),
604 };
605 int[] values = new int[] {10, 20, 30, 40};
606 List types = new ArrayList(Arrays.asList(fields));
607 DateTimeFormatter f = ISODateTimeFormat.forFields(types, true, true);
608 assertEquals("10:20:30.040", f.print(new Partial(fields, values)));
609 assertEquals(0, types.size());
610
611 types = new ArrayList(Arrays.asList(fields));
612 f = ISODateTimeFormat.forFields(types, true, false);
613 assertEquals("10:20:30.040", f.print(new Partial(fields, values)));
614 assertEquals(0, types.size());
615
616 types = new ArrayList(Arrays.asList(fields));
617 f = ISODateTimeFormat.forFields(types, false, true);
618 assertEquals("102030.040", f.print(new Partial(fields, values)));
619 assertEquals(0, types.size());
620
621 types = new ArrayList(Arrays.asList(fields));
622 f = ISODateTimeFormat.forFields(types, false, false);
623 assertEquals("102030.040", f.print(new Partial(fields, values)));
624 assertEquals(0, types.size());
625 }
626
627 //-----------------------------------------------------------------------
628 public void testForFields_time_HMS() {
629 DateTimeFieldType[] fields = new DateTimeFieldType[] {
630 DateTimeFieldType.hourOfDay(),
631 DateTimeFieldType.minuteOfHour(),
632 DateTimeFieldType.secondOfMinute(),
633 };
634 int[] values = new int[] {10, 20, 30};
635 List types = new ArrayList(Arrays.asList(fields));
636 DateTimeFormatter f = ISODateTimeFormat.forFields(types, true, true);
637 assertEquals("10:20:30", f.print(new Partial(fields, values)));
638 assertEquals(0, types.size());
639
640 types = new ArrayList(Arrays.asList(fields));
641 f = ISODateTimeFormat.forFields(types, true, false);
642 assertEquals("10:20:30", f.print(new Partial(fields, values)));
643 assertEquals(0, types.size());
644
645 types = new ArrayList(Arrays.asList(fields));
646 f = ISODateTimeFormat.forFields(types, false, true);
647 assertEquals("102030", f.print(new Partial(fields, values)));
648 assertEquals(0, types.size());
649
650 types = new ArrayList(Arrays.asList(fields));
651 f = ISODateTimeFormat.forFields(types, false, false);
652 assertEquals("102030", f.print(new Partial(fields, values)));
653 assertEquals(0, types.size());
654 }
655
656 //-----------------------------------------------------------------------
657 public void testForFields_time_HM() {
658 DateTimeFieldType[] fields = new DateTimeFieldType[] {
659 DateTimeFieldType.hourOfDay(),
660 DateTimeFieldType.minuteOfHour(),
661 };
662 int[] values = new int[] {10, 20};
663 List types = new ArrayList(Arrays.asList(fields));
664 DateTimeFormatter f = ISODateTimeFormat.forFields(types, true, true);
665 assertEquals("10:20", f.print(new Partial(fields, values)));
666 assertEquals(0, types.size());
667
668 types = new ArrayList(Arrays.asList(fields));
669 f = ISODateTimeFormat.forFields(types, true, false);
670 assertEquals("10:20", f.print(new Partial(fields, values)));
671 assertEquals(0, types.size());
672
673 types = new ArrayList(Arrays.asList(fields));
674 f = ISODateTimeFormat.forFields(types, false, true);
675 assertEquals("1020", f.print(new Partial(fields, values)));
676 assertEquals(0, types.size());
677
678 types = new ArrayList(Arrays.asList(fields));
679 f = ISODateTimeFormat.forFields(types, false, false);
680 assertEquals("1020", f.print(new Partial(fields, values)));
681 assertEquals(0, types.size());
682 }
683
684 //-----------------------------------------------------------------------
685 public void testForFields_time_H() {
686 DateTimeFieldType[] fields = new DateTimeFieldType[] {
687 DateTimeFieldType.hourOfDay(),
688 };
689 int[] values = new int[] {10};
690 List types = new ArrayList(Arrays.asList(fields));
691 DateTimeFormatter f = ISODateTimeFormat.forFields(types, true, true);
692 assertEquals("10", f.print(new Partial(fields, values)));
693 assertEquals(0, types.size());
694
695 types = new ArrayList(Arrays.asList(fields));
696 f = ISODateTimeFormat.forFields(types, true, false);
697 assertEquals("10", f.print(new Partial(fields, values)));
698 assertEquals(0, types.size());
699
700 types = new ArrayList(Arrays.asList(fields));
701 f = ISODateTimeFormat.forFields(types, false, true);
702 assertEquals("10", f.print(new Partial(fields, values)));
703 assertEquals(0, types.size());
704
705 types = new ArrayList(Arrays.asList(fields));
706 f = ISODateTimeFormat.forFields(types, false, false);
707 assertEquals("10", f.print(new Partial(fields, values)));
708 assertEquals(0, types.size());
709 }
710
711 //-----------------------------------------------------------------------
712 public void testForFields_time_MSm() {
713 DateTimeFieldType[] fields = new DateTimeFieldType[] {
714 DateTimeFieldType.minuteOfHour(),
715 DateTimeFieldType.secondOfMinute(),
716 DateTimeFieldType.millisOfSecond(),
717 };
718 int[] values = new int[] {20, 30, 40};
719 List types = new ArrayList(Arrays.asList(fields));
720 DateTimeFormatter f = ISODateTimeFormat.forFields(types, true, true);
721 assertEquals("-20:30.040", f.print(new Partial(fields, values)));
722 assertEquals(0, types.size());
723
724 types = new ArrayList(Arrays.asList(fields));
725 f = ISODateTimeFormat.forFields(types, true, false);
726 assertEquals("-20:30.040", f.print(new Partial(fields, values)));
727 assertEquals(0, types.size());
728
729 types = new ArrayList(Arrays.asList(fields));
730 f = ISODateTimeFormat.forFields(types, false, true);
731 assertEquals("-2030.040", f.print(new Partial(fields, values)));
732 assertEquals(0, types.size());
733
734 types = new ArrayList(Arrays.asList(fields));
735 f = ISODateTimeFormat.forFields(types, false, false);
736 assertEquals("-2030.040", f.print(new Partial(fields, values)));
737 assertEquals(0, types.size());
738 }
739
740 //-----------------------------------------------------------------------
741 public void testForFields_time_MS() {
742 DateTimeFieldType[] fields = new DateTimeFieldType[] {
743 DateTimeFieldType.minuteOfHour(),
744 DateTimeFieldType.secondOfMinute(),
745 };
746 int[] values = new int[] {20, 30};
747 List types = new ArrayList(Arrays.asList(fields));
748 DateTimeFormatter f = ISODateTimeFormat.forFields(types, true, true);
749 assertEquals("-20:30", f.print(new Partial(fields, values)));
750 assertEquals(0, types.size());
751
752 types = new ArrayList(Arrays.asList(fields));
753 f = ISODateTimeFormat.forFields(types, true, false);
754 assertEquals("-20:30", f.print(new Partial(fields, values)));
755 assertEquals(0, types.size());
756
757 types = new ArrayList(Arrays.asList(fields));
758 f = ISODateTimeFormat.forFields(types, false, true);
759 assertEquals("-2030", f.print(new Partial(fields, values)));
760 assertEquals(0, types.size());
761
762 types = new ArrayList(Arrays.asList(fields));
763 f = ISODateTimeFormat.forFields(types, false, false);
764 assertEquals("-2030", f.print(new Partial(fields, values)));
765 assertEquals(0, types.size());
766 }
767
768 //-----------------------------------------------------------------------
769 public void testForFields_time_M() {
770 DateTimeFieldType[] fields = new DateTimeFieldType[] {
771 DateTimeFieldType.minuteOfHour(),
772 };
773 int[] values = new int[] {20};
774 List types = new ArrayList(Arrays.asList(fields));
775 DateTimeFormatter f = ISODateTimeFormat.forFields(types, true, true);
776 assertEquals("-20", f.print(new Partial(fields, values)));
777 assertEquals(0, types.size());
778
779 types = new ArrayList(Arrays.asList(fields));
780 f = ISODateTimeFormat.forFields(types, true, false);
781 assertEquals("-20", f.print(new Partial(fields, values)));
782 assertEquals(0, types.size());
783
784 types = new ArrayList(Arrays.asList(fields));
785 f = ISODateTimeFormat.forFields(types, false, true);
786 assertEquals("-20", f.print(new Partial(fields, values)));
787 assertEquals(0, types.size());
788
789 types = new ArrayList(Arrays.asList(fields));
790 f = ISODateTimeFormat.forFields(types, false, false);
791 assertEquals("-20", f.print(new Partial(fields, values)));
792 assertEquals(0, types.size());
793 }
794
795 //-----------------------------------------------------------------------
796 public void testForFields_time_Sm() {
797 DateTimeFieldType[] fields = new DateTimeFieldType[] {
798 DateTimeFieldType.secondOfMinute(),
799 DateTimeFieldType.millisOfSecond(),
800 };
801 int[] values = new int[] {30, 40};
802 List types = new ArrayList(Arrays.asList(fields));
803 DateTimeFormatter f = ISODateTimeFormat.forFields(types, true, true);
804 assertEquals("--30.040", f.print(new Partial(fields, values)));
805 assertEquals(0, types.size());
806
807 types = new ArrayList(Arrays.asList(fields));
808 f = ISODateTimeFormat.forFields(types, true, false);
809 assertEquals("--30.040", f.print(new Partial(fields, values)));
810 assertEquals(0, types.size());
811
812 types = new ArrayList(Arrays.asList(fields));
813 f = ISODateTimeFormat.forFields(types, false, true);
814 assertEquals("--30.040", f.print(new Partial(fields, values)));
815 assertEquals(0, types.size());
816
817 types = new ArrayList(Arrays.asList(fields));
818 f = ISODateTimeFormat.forFields(types, false, false);
819 assertEquals("--30.040", f.print(new Partial(fields, values)));
820 assertEquals(0, types.size());
821 }
822
823 //-----------------------------------------------------------------------
824 public void testForFields_time_S() {
825 DateTimeFieldType[] fields = new DateTimeFieldType[] {
826 DateTimeFieldType.secondOfMinute(),
827 };
828 int[] values = new int[] {30};
829 List types = new ArrayList(Arrays.asList(fields));
830 DateTimeFormatter f = ISODateTimeFormat.forFields(types, true, true);
831 assertEquals("--30", f.print(new Partial(fields, values)));
832 assertEquals(0, types.size());
833
834 types = new ArrayList(Arrays.asList(fields));
835 f = ISODateTimeFormat.forFields(types, true, false);
836 assertEquals("--30", f.print(new Partial(fields, values)));
837 assertEquals(0, types.size());
838
839 types = new ArrayList(Arrays.asList(fields));
840 f = ISODateTimeFormat.forFields(types, false, true);
841 assertEquals("--30", f.print(new Partial(fields, values)));
842 assertEquals(0, types.size());
843
844 types = new ArrayList(Arrays.asList(fields));
845 f = ISODateTimeFormat.forFields(types, false, false);
846 assertEquals("--30", f.print(new Partial(fields, values)));
847 assertEquals(0, types.size());
848 }
849
850 //-----------------------------------------------------------------------
851 public void testForFields_time_m() {
852 DateTimeFieldType[] fields = new DateTimeFieldType[] {
853 DateTimeFieldType.millisOfSecond(),
854 };
855 int[] values = new int[] {40};
856 List types = new ArrayList(Arrays.asList(fields));
857 DateTimeFormatter f = ISODateTimeFormat.forFields(types, true, false);
858 assertEquals("---.040", f.print(new Partial(fields, values)));
859 assertEquals(0, types.size());
860
861 types = new ArrayList(Arrays.asList(fields));
862 f = ISODateTimeFormat.forFields(types, false, false);
863 assertEquals("---.040", f.print(new Partial(fields, values)));
864 assertEquals(0, types.size());
865
866 types = new ArrayList(Arrays.asList(fields));
867 try {
868 ISODateTimeFormat.forFields(types, true, true);
869 fail();
870 } catch (IllegalArgumentException ex) {}
871
872 types = new ArrayList(Arrays.asList(fields));
873 try {
874 ISODateTimeFormat.forFields(types, false, true);
875 fail();
876 } catch (IllegalArgumentException ex) {}
877 }
878
879 //-----------------------------------------------------------------------
880 public void testForFields_time_Hm() {
881 DateTimeFieldType[] fields = new DateTimeFieldType[] {
882 DateTimeFieldType.hourOfDay(),
883 DateTimeFieldType.millisOfSecond(),
884 };
885 int[] values = new int[] {10, 40};
886 List types = new ArrayList(Arrays.asList(fields));
887 DateTimeFormatter f = ISODateTimeFormat.forFields(types, true, false);
888 assertEquals("10--.040", f.print(new Partial(fields, values)));
889 assertEquals(0, types.size());
890
891 types = new ArrayList(Arrays.asList(fields));
892 f = ISODateTimeFormat.forFields(types, false, false);
893 assertEquals("10--.040", f.print(new Partial(fields, values)));
894 assertEquals(0, types.size());
895
896 types = new ArrayList(Arrays.asList(fields));
897 try {
898 ISODateTimeFormat.forFields(types, true, true);
899 fail();
900 } catch (IllegalArgumentException ex) {}
901
902 types = new ArrayList(Arrays.asList(fields));
903 try {
904 ISODateTimeFormat.forFields(types, false, true);
905 fail();
906 } catch (IllegalArgumentException ex) {}
907 }
908
909 //-----------------------------------------------------------------------
910 public void testForFields_time_HS() {
911 DateTimeFieldType[] fields = new DateTimeFieldType[] {
912 DateTimeFieldType.hourOfDay(),
913 DateTimeFieldType.secondOfMinute(),
914 };
915 int[] values = new int[] {10, 30};
916 List types = new ArrayList(Arrays.asList(fields));
917 DateTimeFormatter f = ISODateTimeFormat.forFields(types, true, false);
918 assertEquals("10-30", f.print(new Partial(fields, values)));
919 assertEquals(0, types.size());
920
921 types = new ArrayList(Arrays.asList(fields));
922 f = ISODateTimeFormat.forFields(types, false, false);
923 assertEquals("10-30", f.print(new Partial(fields, values)));
924 assertEquals(0, types.size());
925
926 types = new ArrayList(Arrays.asList(fields));
927 try {
928 ISODateTimeFormat.forFields(types, true, true);
929 fail();
930 } catch (IllegalArgumentException ex) {}
931
932 types = new ArrayList(Arrays.asList(fields));
933 try {
934 ISODateTimeFormat.forFields(types, false, true);
935 fail();
936 } catch (IllegalArgumentException ex) {}
937 }
938
939 //-----------------------------------------------------------------------
940 public void testForFields_time_Mm() {
941 DateTimeFieldType[] fields = new DateTimeFieldType[] {
942 DateTimeFieldType.minuteOfHour(),
943 DateTimeFieldType.millisOfSecond(),
944 };
945 int[] values = new int[] {20, 40};
946 List types = new ArrayList(Arrays.asList(fields));
947 DateTimeFormatter f = ISODateTimeFormat.forFields(types, true, false);
948 assertEquals("-20-.040", f.print(new Partial(fields, values)));
949 assertEquals(0, types.size());
950
951 types = new ArrayList(Arrays.asList(fields));
952 f = ISODateTimeFormat.forFields(types, false, false);
953 assertEquals("-20-.040", f.print(new Partial(fields, values)));
954 assertEquals(0, types.size());
955
956 types = new ArrayList(Arrays.asList(fields));
957 try {
958 ISODateTimeFormat.forFields(types, true, true);
959 fail();
960 } catch (IllegalArgumentException ex) {}
961
962 types = new ArrayList(Arrays.asList(fields));
963 try {
964 ISODateTimeFormat.forFields(types, false, true);
965 fail();
966 } catch (IllegalArgumentException ex) {}
967 }
968
969 //-----------------------------------------------------------------------
970 public void testForFields_time_HSm() {
971 DateTimeFieldType[] fields = new DateTimeFieldType[] {
972 DateTimeFieldType.hourOfDay(),
973 DateTimeFieldType.secondOfMinute(),
974 DateTimeFieldType.millisOfSecond(),
975 };
976 int[] values = new int[] {10, 30, 40};
977 List types = new ArrayList(Arrays.asList(fields));
978 DateTimeFormatter f = ISODateTimeFormat.forFields(types, true, false);
979 assertEquals("10-30.040", f.print(new Partial(fields, values)));
980 assertEquals(0, types.size());
981
982 types = new ArrayList(Arrays.asList(fields));
983 f = ISODateTimeFormat.forFields(types, false, false);
984 assertEquals("10-30.040", f.print(new Partial(fields, values)));
985 assertEquals(0, types.size());
986
987 types = new ArrayList(Arrays.asList(fields));
988 try {
989 ISODateTimeFormat.forFields(types, true, true);
990 fail();
991 } catch (IllegalArgumentException ex) {}
992
993 types = new ArrayList(Arrays.asList(fields));
994 try {
995 ISODateTimeFormat.forFields(types, false, true);
996 fail();
997 } catch (IllegalArgumentException ex) {}
998 }
999
1000 //-----------------------------------------------------------------------
1001 public void testForFields_time_HMm() {
1002 DateTimeFieldType[] fields = new DateTimeFieldType[] {
1003 DateTimeFieldType.hourOfDay(),
1004 DateTimeFieldType.minuteOfHour(),
1005 DateTimeFieldType.millisOfSecond(),
1006 };
1007 int[] values = new int[] {10, 20, 40};
1008 List types = new ArrayList(Arrays.asList(fields));
1009 DateTimeFormatter f = ISODateTimeFormat.forFields(types, true, false);
1010 assertEquals("10:20-.040", f.print(new Partial(fields, values)));
1011 assertEquals(0, types.size());
1012
1013 types = new ArrayList(Arrays.asList(fields));
1014 f = ISODateTimeFormat.forFields(types, false, false);
1015 assertEquals("1020-.040", f.print(new Partial(fields, values)));
1016 assertEquals(0, types.size());
1017
1018 types = new ArrayList(Arrays.asList(fields));
1019 try {
1020 ISODateTimeFormat.forFields(types, true, true);
1021 fail();
1022 } catch (IllegalArgumentException ex) {}
1023
1024 types = new ArrayList(Arrays.asList(fields));
1025 try {
1026 ISODateTimeFormat.forFields(types, false, true);
1027 fail();
1028 } catch (IllegalArgumentException ex) {}
1029 }
1030
1031 //-----------------------------------------------------------------------
1032 //-----------------------------------------------------------------------
1033 //-----------------------------------------------------------------------
1034 public void testForFields_datetime_YMDH() {
1035 DateTimeFieldType[] fields = new DateTimeFieldType[] {
1036 DateTimeFieldType.year(),
1037 DateTimeFieldType.monthOfYear(),
1038 DateTimeFieldType.dayOfMonth(),
1039 DateTimeFieldType.hourOfDay(),
1040 };
1041 int[] values = new int[] {2005, 6, 25, 12};
1042 List types = new ArrayList(Arrays.asList(fields));
1043 DateTimeFormatter f = ISODateTimeFormat.forFields(types, true, true);
1044 assertEquals("2005-06-25T12", f.print(new Partial(fields, values)));
1045 assertEquals(0, types.size());
1046
1047 types = new ArrayList(Arrays.asList(fields));
1048 f = ISODateTimeFormat.forFields(types, true, false);
1049 assertEquals("2005-06-25T12", f.print(new Partial(fields, values)));
1050 assertEquals(0, types.size());
1051
1052 types = new ArrayList(Arrays.asList(fields));
1053 f = ISODateTimeFormat.forFields(types, false, true);
1054 assertEquals("20050625T12", f.print(new Partial(fields, values)));
1055 assertEquals(0, types.size());
1056
1057 types = new ArrayList(Arrays.asList(fields));
1058 f = ISODateTimeFormat.forFields(types, false, false);
1059 assertEquals("20050625T12", f.print(new Partial(fields, values)));
1060 assertEquals(0, types.size());
1061 }
1062
1063 //-----------------------------------------------------------------------
1064 public void testForFields_datetime_DH() {
1065 DateTimeFieldType[] fields = new DateTimeFieldType[] {
1066 DateTimeFieldType.dayOfMonth(),
1067 DateTimeFieldType.hourOfDay(),
1068 };
1069 int[] values = new int[] {25, 12};
1070 List types = new ArrayList(Arrays.asList(fields));
1071 DateTimeFormatter f = ISODateTimeFormat.forFields(types, true, true);
1072 assertEquals("---25T12", f.print(new Partial(fields, values)));
1073 assertEquals(0, types.size());
1074
1075 types = new ArrayList(Arrays.asList(fields));
1076 f = ISODateTimeFormat.forFields(types, true, false);
1077 assertEquals("---25T12", f.print(new Partial(fields, values)));
1078 assertEquals(0, types.size());
1079
1080 types = new ArrayList(Arrays.asList(fields));
1081 f = ISODateTimeFormat.forFields(types, false, true);
1082 assertEquals("---25T12", f.print(new Partial(fields, values)));
1083 assertEquals(0, types.size());
1084
1085 types = new ArrayList(Arrays.asList(fields));
1086 f = ISODateTimeFormat.forFields(types, false, false);
1087 assertEquals("---25T12", f.print(new Partial(fields, values)));
1088 assertEquals(0, types.size());
1089 }
1090
1091 //-----------------------------------------------------------------------
1092 public void testForFields_datetime_YH() {
1093 DateTimeFieldType[] fields = new DateTimeFieldType[] {
1094 DateTimeFieldType.year(),
1095 DateTimeFieldType.hourOfDay(),
1096 };
1097 int[] values = new int[] {2005, 12};
1098 List types = new ArrayList(Arrays.asList(fields));
1099 DateTimeFormatter f = ISODateTimeFormat.forFields(types, true, false);
1100 assertEquals("2005T12", f.print(new Partial(fields, values)));
1101 assertEquals(0, types.size());
1102
1103 types = new ArrayList(Arrays.asList(fields));
1104 f = ISODateTimeFormat.forFields(types, false, false);
1105 assertEquals("2005T12", f.print(new Partial(fields, values)));
1106 assertEquals(0, types.size());
1107
1108 types = new ArrayList(Arrays.asList(fields));
1109 try {
1110 ISODateTimeFormat.forFields(types, true, true);
1111 fail();
1112 } catch (IllegalArgumentException ex) {}
1113
1114 types = new ArrayList(Arrays.asList(fields));
1115 try {
1116 ISODateTimeFormat.forFields(types, false, true);
1117 fail();
1118 } catch (IllegalArgumentException ex) {}
1119 }
1120
1121 //-----------------------------------------------------------------------
1122 public void testForFields_datetime_DM() {
1123 DateTimeFieldType[] fields = new DateTimeFieldType[] {
1124 DateTimeFieldType.dayOfMonth(),
1125 DateTimeFieldType.minuteOfHour(),
1126 };
1127 int[] values = new int[] {25, 20};
1128 List types = new ArrayList(Arrays.asList(fields));
1129 DateTimeFormatter f = ISODateTimeFormat.forFields(types, true, false);
1130 assertEquals("---25T-20", f.print(new Partial(fields, values)));
1131 assertEquals(0, types.size());
1132
1133 types = new ArrayList(Arrays.asList(fields));
1134 f = ISODateTimeFormat.forFields(types, false, false);
1135 assertEquals("---25T-20", f.print(new Partial(fields, values)));
1136 assertEquals(0, types.size());
1137
1138 types = new ArrayList(Arrays.asList(fields));
1139 try {
1140 ISODateTimeFormat.forFields(types, true, true);
1141 fail();
1142 } catch (IllegalArgumentException ex) {}
1143
1144 types = new ArrayList(Arrays.asList(fields));
1145 try {
1146 ISODateTimeFormat.forFields(types, false, true);
1147 fail();
1148 } catch (IllegalArgumentException ex) {}
1149 }
1150
1151 }