test/java/time/test/java/time/format/TestDateTimeFormatterBuilder.java

Print this page




 628     @DataProvider(name="validPatterns")
 629     Object[][] dataValid() {
 630         return new Object[][] {
 631             {"'a'", "'a'"},
 632             {"''", "''"},
 633             {"'!'", "'!'"},
 634             {"!", "'!'"},
 635 
 636             {"'hello_people,][)('", "'hello_people,][)('"},
 637             {"'hi'", "'hi'"},
 638             {"'yyyy'", "'yyyy'"},
 639             {"''''", "''"},
 640             {"'o''clock'", "'o''clock'"},
 641 
 642             {"G", "Text(Era,SHORT)"},
 643             {"GG", "Text(Era,SHORT)"},
 644             {"GGG", "Text(Era,SHORT)"},
 645             {"GGGG", "Text(Era)"},
 646             {"GGGGG", "Text(Era,NARROW)"},
 647 
 648             {"y", "Value(Year)"},
 649             {"yy", "ReducedValue(Year,2,2000)"},
 650             {"yyy", "Value(Year,3,19,NORMAL)"},
 651             {"yyyy", "Value(Year,4,19,EXCEEDS_PAD)"},
 652             {"yyyyy", "Value(Year,5,19,EXCEEDS_PAD)"},
 653 
 654 //            {"Y", "Value(WeekBasedYear)"},
 655 //            {"YY", "ReducedValue(WeekBasedYear,2,2000)"},
 656 //            {"YYY", "Value(WeekBasedYear,3,19,NORMAL)"},
 657 //            {"YYYY", "Value(WeekBasedYear,4,19,EXCEEDS_PAD)"},
 658 //            {"YYYYY", "Value(WeekBasedYear,5,19,EXCEEDS_PAD)"},






 659 
 660             {"M", "Value(MonthOfYear)"},
 661             {"MM", "Value(MonthOfYear,2)"},
 662             {"MMM", "Text(MonthOfYear,SHORT)"},
 663             {"MMMM", "Text(MonthOfYear)"},
 664             {"MMMMM", "Text(MonthOfYear,NARROW)"},
 665 






 666             {"D", "Value(DayOfYear)"},
 667             {"DD", "Value(DayOfYear,2)"},
 668             {"DDD", "Value(DayOfYear,3)"},
 669 
 670             {"d", "Value(DayOfMonth)"},
 671             {"dd", "Value(DayOfMonth,2)"},
 672             {"ddd", "Value(DayOfMonth,3)"},
 673 
 674             {"F", "Value(AlignedWeekOfMonth)"},
 675             {"FF", "Value(AlignedWeekOfMonth,2)"},
 676             {"FFF", "Value(AlignedWeekOfMonth,3)"},
 677 
 678             {"Q", "Value(QuarterOfYear)"},
 679             {"QQ", "Value(QuarterOfYear,2)"},
 680             {"QQQ", "Text(QuarterOfYear,SHORT)"},
 681             {"QQQQ", "Text(QuarterOfYear)"},
 682             {"QQQQQ", "Text(QuarterOfYear,NARROW)"},
 683 
 684             {"E", "Value(DayOfWeek)"},
 685             {"EE", "Value(DayOfWeek,2)"},






 686             {"EEE", "Text(DayOfWeek,SHORT)"},
 687             {"EEEE", "Text(DayOfWeek)"},
 688             {"EEEEE", "Text(DayOfWeek,NARROW)"},
 689 











 690             {"a", "Text(AmPmOfDay,SHORT)"},
 691             {"aa", "Text(AmPmOfDay,SHORT)"},
 692             {"aaa", "Text(AmPmOfDay,SHORT)"},
 693             {"aaaa", "Text(AmPmOfDay)"},
 694             {"aaaaa", "Text(AmPmOfDay,NARROW)"},
 695 
 696             {"H", "Value(HourOfDay)"},
 697             {"HH", "Value(HourOfDay,2)"},
 698             {"HHH", "Value(HourOfDay,3)"},
 699 
 700             {"K", "Value(HourOfAmPm)"},
 701             {"KK", "Value(HourOfAmPm,2)"},
 702             {"KKK", "Value(HourOfAmPm,3)"},
 703 
 704             {"k", "Value(ClockHourOfDay)"},
 705             {"kk", "Value(ClockHourOfDay,2)"},
 706             {"kkk", "Value(ClockHourOfDay,3)"},
 707 
 708             {"h", "Value(ClockHourOfAmPm)"},
 709             {"hh", "Value(ClockHourOfAmPm,2)"},
 710             {"hhh", "Value(ClockHourOfAmPm,3)"},
 711 
 712             {"m", "Value(MinuteOfHour)"},
 713             {"mm", "Value(MinuteOfHour,2)"},
 714             {"mmm", "Value(MinuteOfHour,3)"},
 715 
 716             {"s", "Value(SecondOfMinute)"},
 717             {"ss", "Value(SecondOfMinute,2)"},
 718             {"sss", "Value(SecondOfMinute,3)"},
 719 
 720             {"S", "Fraction(NanoOfSecond,1,1)"},
 721             {"SS", "Fraction(NanoOfSecond,2,2)"},
 722             {"SSS", "Fraction(NanoOfSecond,3,3)"},
 723             {"SSSSSSSSS", "Fraction(NanoOfSecond,9,9)"},
 724 
 725             {"A", "Value(MilliOfDay)"},
 726             {"AA", "Value(MilliOfDay,2)"},
 727             {"AAA", "Value(MilliOfDay,3)"},
 728 
 729             {"n", "Value(NanoOfSecond)"},
 730             {"nn", "Value(NanoOfSecond,2)"},
 731             {"nnn", "Value(NanoOfSecond,3)"},
 732 
 733             {"N", "Value(NanoOfDay)"},
 734             {"NN", "Value(NanoOfDay,2)"},
 735             {"NNN", "Value(NanoOfDay,3)"},
 736 
 737             {"z", "ZoneText(SHORT)"},
 738             {"zz", "ZoneText(SHORT)"},


 743 
 744             {"Z", "Offset(+HHMM,'+0000')"},  // SimpleDateFormat
 745             {"ZZ", "Offset(+HHMM,'+0000')"},  // SimpleDateFormat
 746             {"ZZZ", "Offset(+HHMM,'+0000')"},  // SimpleDateFormat
 747 
 748             {"X", "Offset(+HHmm,'Z')"},  // LDML/almost SimpleDateFormat
 749             {"XX", "Offset(+HHMM,'Z')"},  // LDML/SimpleDateFormat
 750             {"XXX", "Offset(+HH:MM,'Z')"},  // LDML/SimpleDateFormat
 751             {"XXXX", "Offset(+HHMMss,'Z')"},  // LDML
 752             {"XXXXX", "Offset(+HH:MM:ss,'Z')"},  // LDML
 753 
 754             {"x", "Offset(+HHmm,'+00')"},  // LDML
 755             {"xx", "Offset(+HHMM,'+0000')"},  // LDML
 756             {"xxx", "Offset(+HH:MM,'+00:00')"},  // LDML
 757             {"xxxx", "Offset(+HHMMss,'+0000')"},  // LDML
 758             {"xxxxx", "Offset(+HH:MM:ss,'+00:00')"},  // LDML
 759 
 760             {"ppH", "Pad(Value(HourOfDay),2)"},
 761             {"pppDD", "Pad(Value(DayOfYear,2),3)"},
 762 
 763             {"yyyy[-MM[-dd", "Value(Year,4,19,EXCEEDS_PAD)['-'Value(MonthOfYear,2)['-'Value(DayOfMonth,2)]]"},
 764             {"yyyy[-MM[-dd]]", "Value(Year,4,19,EXCEEDS_PAD)['-'Value(MonthOfYear,2)['-'Value(DayOfMonth,2)]]"},
 765             {"yyyy[-MM[]-dd]", "Value(Year,4,19,EXCEEDS_PAD)['-'Value(MonthOfYear,2)'-'Value(DayOfMonth,2)]"},
 766 
 767             {"yyyy-MM-dd'T'HH:mm:ss.SSS", "Value(Year,4,19,EXCEEDS_PAD)'-'Value(MonthOfYear,2)'-'Value(DayOfMonth,2)" +
 768                 "'T'Value(HourOfDay,2)':'Value(MinuteOfHour,2)':'Value(SecondOfMinute,2)'.'Fraction(NanoOfSecond,3,3)"},
 769 
 770             {"e", "WeekBased(e1)"},
 771             {"w", "WeekBased(w1)"},
 772             {"W", "WeekBased(W1)"},
 773             {"WW", "WeekBased(W2)"},
 774 
 775         };
 776     }
 777 
 778     @Test(dataProvider="validPatterns", groups={"implementation"})
 779     public void test_appendPattern_valid(String input, String expected) throws Exception {
 780         builder.appendPattern(input);
 781         DateTimeFormatter f = builder.toFormatter();
 782         assertEquals(f.toString(), expected);
 783     }
 784 
 785     //-----------------------------------------------------------------------
 786     @DataProvider(name="invalidPatterns")
 787     Object[][] dataInvalid() {
 788         return new Object[][] {
 789             {"'"},
 790             {"'hello"},
 791             {"'hel''lo"},
 792             {"'hello''"},
 793             {"{"},
 794             {"}"},
 795             {"{}"},
 796             {"]"},
 797             {"yyyy]"},
 798             {"yyyy]MM"},
 799             {"yyyy[MM]]"},
 800 





 801             {"MMMMMM"},

 802             {"QQQQQQ"},

 803             {"EEEEEE"},
 804             {"aaaaaa"},
 805             {"ZZZZ"},














 806             {"XXXXXX"},

 807             {"zzzzz"},
 808             {"V"},
 809             {"VVV"},
 810             {"VVVV"},
 811             {"VVVVV"},
 812 
 813             {"RO"},
 814 
 815             {"p"},
 816             {"pp"},
 817             {"p:"},
 818 
 819             {"f"},
 820             {"ff"},
 821             {"f:"},
 822             {"fy"},
 823             {"fa"},
 824             {"fM"},
 825 
 826             {"ww"},
 827             {"ee"},
 828             {"WWW"},
 829         };
 830     }
 831 
 832     @Test(dataProvider="invalidPatterns", expectedExceptions=IllegalArgumentException.class)
 833     public void test_appendPattern_invalid(String input) throws Exception {
 834         try {
 835             builder.appendPattern(input);
 836         } catch (IllegalArgumentException ex) {
 837             throw ex;
 838         }
 839     }
 840 
 841     //-----------------------------------------------------------------------
 842     @DataProvider(name="patternPrint")
 843     Object[][] data_patternPrint() {
 844         return new Object[][] {
 845             {"Q", date(2012, 2, 10), "1"},
 846             {"QQ", date(2012, 2, 10), "01"},
 847 //            {"QQQ", date(2012, 2, 10), "Q1"},  // TODO: data for quarters?
 848 //            {"QQQQ", date(2012, 2, 10), "Q1"},
 849 //            {"QQQQQ", date(2012, 2, 10), "Q1"},
 850         };
 851     }
 852 
 853     @Test(dataProvider="patternPrint")
 854     public void test_appendPattern_patternPrint(String input, Temporal temporal, String expected) throws Exception {
 855         DateTimeFormatter f = builder.appendPattern(input).toFormatter(Locale.UK);
 856         String test = f.format(temporal);
 857         assertEquals(test, expected);
 858     }
 859 
 860     private static Temporal date(int y, int m, int d) {
 861         return LocalDate.of(y, m, d);
 862     }
 863 
 864 }


 628     @DataProvider(name="validPatterns")
 629     Object[][] dataValid() {
 630         return new Object[][] {
 631             {"'a'", "'a'"},
 632             {"''", "''"},
 633             {"'!'", "'!'"},
 634             {"!", "'!'"},
 635 
 636             {"'hello_people,][)('", "'hello_people,][)('"},
 637             {"'hi'", "'hi'"},
 638             {"'yyyy'", "'yyyy'"},
 639             {"''''", "''"},
 640             {"'o''clock'", "'o''clock'"},
 641 
 642             {"G", "Text(Era,SHORT)"},
 643             {"GG", "Text(Era,SHORT)"},
 644             {"GGG", "Text(Era,SHORT)"},
 645             {"GGGG", "Text(Era)"},
 646             {"GGGGG", "Text(Era,NARROW)"},
 647 
 648             {"u", "Value(Year)"},
 649             {"uu", "ReducedValue(Year,2,2000)"},
 650             {"uuu", "Value(Year,3,19,NORMAL)"},
 651             {"uuuu", "Value(Year,4,19,EXCEEDS_PAD)"},
 652             {"uuuuu", "Value(Year,5,19,EXCEEDS_PAD)"},
 653 
 654             {"y", "Value(YearOfEra)"},
 655             {"yy", "ReducedValue(YearOfEra,2,2000)"},
 656             {"yyy", "Value(YearOfEra,3,19,NORMAL)"},
 657             {"yyyy", "Value(YearOfEra,4,19,EXCEEDS_PAD)"},
 658             {"yyyyy", "Value(YearOfEra,5,19,EXCEEDS_PAD)"},
 659 
 660             {"Y", "Localized(WeekBasedYear)"},
 661             {"YY", "Localized(ReducedValue(WeekBasedYear,2,2000))"},
 662             {"YYY", "Localized(WeekBasedYear,3,19,NORMAL)"},
 663             {"YYYY", "Localized(WeekBasedYear,4,19,EXCEEDS_PAD)"},
 664             {"YYYYY", "Localized(WeekBasedYear,5,19,EXCEEDS_PAD)"},
 665 
 666             {"M", "Value(MonthOfYear)"},
 667             {"MM", "Value(MonthOfYear,2)"},
 668             {"MMM", "Text(MonthOfYear,SHORT)"},
 669             {"MMMM", "Text(MonthOfYear)"},
 670             {"MMMMM", "Text(MonthOfYear,NARROW)"},
 671 
 672             {"L", "Value(MonthOfYear)"},
 673             {"LL", "Value(MonthOfYear,2)"},
 674             {"LLL", "Text(MonthOfYear,SHORT_STANDALONE)"},
 675             {"LLLL", "Text(MonthOfYear,FULL_STANDALONE)"},
 676             {"LLLLL", "Text(MonthOfYear,NARROW_STANDALONE)"},
 677 
 678             {"D", "Value(DayOfYear)"},
 679             {"DD", "Value(DayOfYear,2)"},
 680             {"DDD", "Value(DayOfYear,3)"},
 681 
 682             {"d", "Value(DayOfMonth)"},
 683             {"dd", "Value(DayOfMonth,2)"},

 684 
 685             {"F", "Value(AlignedDayOfWeekInMonth)"},


 686 
 687             {"Q", "Value(QuarterOfYear)"},
 688             {"QQ", "Value(QuarterOfYear,2)"},
 689             {"QQQ", "Text(QuarterOfYear,SHORT)"},
 690             {"QQQQ", "Text(QuarterOfYear)"},
 691             {"QQQQQ", "Text(QuarterOfYear,NARROW)"},
 692 
 693             {"q", "Value(QuarterOfYear)"},
 694             {"qq", "Value(QuarterOfYear,2)"},
 695             {"qqq", "Text(QuarterOfYear,SHORT_STANDALONE)"},
 696             {"qqqq", "Text(QuarterOfYear,FULL_STANDALONE)"},
 697             {"qqqqq", "Text(QuarterOfYear,NARROW_STANDALONE)"},
 698 
 699             {"E", "Text(DayOfWeek,SHORT)"},
 700             {"EE", "Text(DayOfWeek,SHORT)"},
 701             {"EEE", "Text(DayOfWeek,SHORT)"},
 702             {"EEEE", "Text(DayOfWeek)"},
 703             {"EEEEE", "Text(DayOfWeek,NARROW)"},
 704 
 705             {"e", "Localized(DayOfWeek,1)"},
 706             {"ee", "Localized(DayOfWeek,2)"},
 707             {"eee", "Text(DayOfWeek,SHORT)"},
 708             {"eeee", "Text(DayOfWeek)"},
 709             {"eeeee", "Text(DayOfWeek,NARROW)"},
 710 
 711             {"c", "Localized(DayOfWeek,1)"},
 712             {"ccc", "Text(DayOfWeek,SHORT_STANDALONE)"},
 713             {"cccc", "Text(DayOfWeek,FULL_STANDALONE)"},
 714             {"ccccc", "Text(DayOfWeek,NARROW_STANDALONE)"},
 715 
 716             {"a", "Text(AmPmOfDay,SHORT)"},




 717 
 718             {"H", "Value(HourOfDay)"},
 719             {"HH", "Value(HourOfDay,2)"},

 720 
 721             {"K", "Value(HourOfAmPm)"},
 722             {"KK", "Value(HourOfAmPm,2)"},

 723 
 724             {"k", "Value(ClockHourOfDay)"},
 725             {"kk", "Value(ClockHourOfDay,2)"},

 726 
 727             {"h", "Value(ClockHourOfAmPm)"},
 728             {"hh", "Value(ClockHourOfAmPm,2)"},

 729 
 730             {"m", "Value(MinuteOfHour)"},
 731             {"mm", "Value(MinuteOfHour,2)"},

 732 
 733             {"s", "Value(SecondOfMinute)"},
 734             {"ss", "Value(SecondOfMinute,2)"},

 735 
 736             {"S", "Fraction(NanoOfSecond,1,1)"},
 737             {"SS", "Fraction(NanoOfSecond,2,2)"},
 738             {"SSS", "Fraction(NanoOfSecond,3,3)"},
 739             {"SSSSSSSSS", "Fraction(NanoOfSecond,9,9)"},
 740 
 741             {"A", "Value(MilliOfDay)"},
 742             {"AA", "Value(MilliOfDay,2)"},
 743             {"AAA", "Value(MilliOfDay,3)"},
 744 
 745             {"n", "Value(NanoOfSecond)"},
 746             {"nn", "Value(NanoOfSecond,2)"},
 747             {"nnn", "Value(NanoOfSecond,3)"},
 748 
 749             {"N", "Value(NanoOfDay)"},
 750             {"NN", "Value(NanoOfDay,2)"},
 751             {"NNN", "Value(NanoOfDay,3)"},
 752 
 753             {"z", "ZoneText(SHORT)"},
 754             {"zz", "ZoneText(SHORT)"},


 759 
 760             {"Z", "Offset(+HHMM,'+0000')"},  // SimpleDateFormat
 761             {"ZZ", "Offset(+HHMM,'+0000')"},  // SimpleDateFormat
 762             {"ZZZ", "Offset(+HHMM,'+0000')"},  // SimpleDateFormat
 763 
 764             {"X", "Offset(+HHmm,'Z')"},  // LDML/almost SimpleDateFormat
 765             {"XX", "Offset(+HHMM,'Z')"},  // LDML/SimpleDateFormat
 766             {"XXX", "Offset(+HH:MM,'Z')"},  // LDML/SimpleDateFormat
 767             {"XXXX", "Offset(+HHMMss,'Z')"},  // LDML
 768             {"XXXXX", "Offset(+HH:MM:ss,'Z')"},  // LDML
 769 
 770             {"x", "Offset(+HHmm,'+00')"},  // LDML
 771             {"xx", "Offset(+HHMM,'+0000')"},  // LDML
 772             {"xxx", "Offset(+HH:MM,'+00:00')"},  // LDML
 773             {"xxxx", "Offset(+HHMMss,'+0000')"},  // LDML
 774             {"xxxxx", "Offset(+HH:MM:ss,'+00:00')"},  // LDML
 775 
 776             {"ppH", "Pad(Value(HourOfDay),2)"},
 777             {"pppDD", "Pad(Value(DayOfYear,2),3)"},
 778 
 779             {"yyyy[-MM[-dd", "Value(YearOfEra,4,19,EXCEEDS_PAD)['-'Value(MonthOfYear,2)['-'Value(DayOfMonth,2)]]"},
 780             {"yyyy[-MM[-dd]]", "Value(YearOfEra,4,19,EXCEEDS_PAD)['-'Value(MonthOfYear,2)['-'Value(DayOfMonth,2)]]"},
 781             {"yyyy[-MM[]-dd]", "Value(YearOfEra,4,19,EXCEEDS_PAD)['-'Value(MonthOfYear,2)'-'Value(DayOfMonth,2)]"},
 782 
 783             {"yyyy-MM-dd'T'HH:mm:ss.SSS", "Value(YearOfEra,4,19,EXCEEDS_PAD)'-'Value(MonthOfYear,2)'-'Value(DayOfMonth,2)" +
 784                 "'T'Value(HourOfDay,2)':'Value(MinuteOfHour,2)':'Value(SecondOfMinute,2)'.'Fraction(NanoOfSecond,3,3)"},
 785 
 786             {"w", "Localized(WeekOfWeekBasedYear,1)"},
 787             {"ww", "Localized(WeekOfWeekBasedYear,2)"},
 788             {"W", "Localized(WeekOfMonth,1)"},


 789         };
 790     }
 791 
 792     @Test(dataProvider="validPatterns")
 793     public void test_appendPattern_valid(String input, String expected) throws Exception {
 794         builder.appendPattern(input);
 795         DateTimeFormatter f = builder.toFormatter();
 796         assertEquals(f.toString(), expected);
 797     }
 798 
 799     //-----------------------------------------------------------------------
 800     @DataProvider(name="invalidPatterns")
 801     Object[][] dataInvalid() {
 802         return new Object[][] {
 803             {"'"},
 804             {"'hello"},
 805             {"'hel''lo"},
 806             {"'hello''"},
 807             {"{"},
 808             {"}"},
 809             {"{}"},
 810             {"]"},
 811             {"yyyy]"},
 812             {"yyyy]MM"},
 813             {"yyyy[MM]]"},
 814 
 815             {"aa"},
 816             {"aaa"},
 817             {"aaaa"},
 818             {"aaaaa"},
 819             {"aaaaaa"},
 820             {"MMMMMM"},
 821             {"LLLLLL"},
 822             {"QQQQQQ"},
 823             {"qqqqqq"},
 824             {"EEEEEE"},
 825             {"eeeeee"},
 826             {"cc"},
 827             {"cccccc"},
 828             {"ddd"},
 829             {"DDDD"},
 830             {"FF"},
 831             {"FFF"},
 832             {"hhh"},
 833             {"HHH"},
 834             {"kkk"},
 835             {"KKK"},
 836             {"mmm"},
 837             {"sss"},
 838             {"OO"},
 839             {"OOO"},
 840             {"OOOOO"},
 841             {"XXXXXX"},
 842             {"ZZZZZZ"},
 843             {"zzzzz"},
 844             {"V"},
 845             {"VVV"},
 846             {"VVVV"},
 847             {"VVVVV"},
 848 
 849             {"RO"},
 850 
 851             {"p"},
 852             {"pp"},
 853             {"p:"},
 854 
 855             {"f"},
 856             {"ff"},
 857             {"f:"},
 858             {"fy"},
 859             {"fa"},
 860             {"fM"},
 861 
 862             {"www"},
 863             {"WW"},

 864         };
 865     }
 866 
 867     @Test(dataProvider="invalidPatterns", expectedExceptions=IllegalArgumentException.class)
 868     public void test_appendPattern_invalid(String input) throws Exception {
 869         try {
 870             builder.appendPattern(input);
 871         } catch (IllegalArgumentException ex) {
 872             throw ex;
 873         }
 874     }
 875 
 876     //-----------------------------------------------------------------------
 877     @DataProvider(name="patternPrint")
 878     Object[][] data_patternPrint() {
 879         return new Object[][] {
 880             {"Q", date(2012, 2, 10), "1"},
 881             {"QQ", date(2012, 2, 10), "01"},
 882             {"QQQ", date(2012, 2, 10), "Q1"},
 883             {"QQQQ", date(2012, 2, 10), "1st quarter"},
 884             {"QQQQQ", date(2012, 2, 10), "1"},
 885         };
 886     }
 887 
 888     @Test(dataProvider="patternPrint")
 889     public void test_appendPattern_patternPrint(String input, Temporal temporal, String expected) throws Exception {
 890         DateTimeFormatter f = builder.appendPattern(input).toFormatter(Locale.UK);
 891         String test = f.format(temporal);
 892         assertEquals(test, expected);
 893     }
 894 
 895     private static Temporal date(int y, int m, int d) {
 896         return LocalDate.of(y, m, d);
 897     }
 898 
 899 }