41cldr_format.t   [plain text]


use strict;
use warnings;
use utf8;

use Test::More tests => 121;

use DateTime;


if ( $] >= 5.008 )
{
    for my $fh ( Test::Builder->new()->output(),
                 Test::Builder->new()->failure_output(),
                 Test::Builder->new()->todo_output(),
               )
    {
        binmode $fh, ':utf8';
    }
}

{
    my $dt = DateTime->new( year       => 1976,
                            month      => 10,
                            day        => 20,
                            hour       => 18,
                            minute     => 34,
                            second     => 55,
                            nanosecond => 1_000_000,
                            locale     => 'en',
                            time_zone  => 'America/Chicago',
                          );

    my %tests = ( 'GGGGG'  => 'A',
                  'GGGG'   => 'Anno Domini',
                  'GGG'    => 'AD',
                  'GG'     => 'AD',
                  'G'      => 'AD',

                  'yyyyy'  => '01976',
                  'yyyy'   => '1976',
                  'yyy'    => '1976',
                  'yy'     => '76',
                  'y'      => '1976',

                  'uuuuuu' => '001976',
                  'uuuuu'  => '01976',
                  'uuuu'   => '1976',
                  'uuu'    => '1976',
                  'uu'     => '1976',
                  'u'      => '1976',

                  'YYYYY'  => '01976',
                  'YYYY'   => '1976',
                  'YYY'    => '1976',
                  'YY'     => '1976',
                  'Y'      => '1976',

                  'QQQQ'   => '4th quarter',
                  'QQQ'    => 'Q4',
                  'QQ'     => '04',
                  'Q'      => '4',

                  'qqqq'   => '4th quarter',
                  'qqq'    => 'Q4',
                  'qq'     => '04',
                  'q'      => '4',

                  'MMMMM'  => 'O',
                  'MMMM'   => 'October',
                  'MMM'    => 'Oct',
                  'MM'     => '10',
                  'M'      => '10',

                  'LLLLL'  => 'O',
                  'LLLL'   => 'October',
                  'LLL'    => 'Oct',
                  'LL'     => '10',
                  'L'      => '10',

                  'ww'     => '43',
                  'w'      => '43',
                  'W'      => '3',

                  'dd'     => '20',
                  'd'      => '20',

                  'DDD'    => '294',
                  'DD'     => '294',
                  'D'      => '294',

                  'F'      => '3',
                  'gggggg' => '043071',
                  'g'      => '43071',

                  'EEEEE'  => 'W',
                  'EEEE'   => 'Wednesday',
                  'EEE'    => 'Wed',
                  'EE'     => 'Wed',
                  'E'      => 'Wed',

                  'eeeee'  => 'W',
                  'eeee'   => 'Wednesday',
                  'eee'    => 'Wed',
                  'ee'     => '03',
                  'e'      => '3',

                  'ccccc'  => 'W',
                  'cccc'   => 'Wednesday',
                  'ccc'    => 'Wed',
                  'cc'     => '03',
                  'c'      => '3',

                  'a'      => 'PM',

                  'hh'     => '06',
                  'h'      => '6',
                  'HH'     => '18',
                  'H'      => '18',
                  'KK'     => '06',
                  'K'      => '6',
                  'kk'     => '18',
                  'kk'     => '18',
                  'j'      => '6',
                  'jj'     => '06',

                  'mm'     => '34',
                  'm'      => '34',

                  'ss'     => '55',
                  's'      => '55',
                  'SS'     => '00',
                  'SSSSSS' => '001000',
                  'A'      => '66895001',

                  'zzzz'   => 'America/Chicago',
                  'zzz'    => 'CDT',
                  'ZZZZ'   => 'CDT-0500',
                  'ZZZ'    => '-0500',
                  'vvvv'   => 'America/Chicago',
                  'vvv'    => 'CDT',
                  'VVVV'   => 'America/Chicago',
                  'VVV'    => 'CDT',

                  q{'one fine day'} => 'one fine day',
                  q{'yy''yy' yyyy}  => q{yy'yy 1976},

                  q{'yy''yy' 'hello' yyyy}  => q{yy'yy hello 1976},

                  # Non-pattern text should pass through unchanged
                  'd日' => '20日',
                );

    for my $k ( sort keys %tests )
    {
        is( $dt->format_cldr($k), $tests{$k},
            "format_cldr for $k" );
    }
}

{
    my $dt = DateTime->new( year       => 2008,
                            month      => 10,
                            day        => 20,
                            hour       => 18,
                            minute     => 34,
                            second     => 55,
                            nanosecond => 1_000_000,
                            locale     => 'en',
                            time_zone  => 'America/Chicago',
                          );

    is( $dt->format_cldr('yy'), '08',
        'format_cldr for yy in 2008 should be 08' );
}

{
    my $dt = DateTime->new( year       => 2008,
                            month      => 10,
                            day        => 20,
                            hour       => 18,
                            minute     => 34,
                            second     => 55,
                            nanosecond => 1_000_000,
                            locale     => 'en_US',
                            time_zone  => 'America/Chicago',
                          );

    is( $dt->format_cldr('j'), '6',
        'format_cldr for j in en_US should be 6 (at 18:34)' );
}

{
    my $dt = DateTime->new( year       => 2008,
                            month      => 10,
                            day        => 20,
                            hour       => 18,
                            minute     => 34,
                            second     => 55,
                            nanosecond => 1_000_000,
                            locale     => 'fr',
                            time_zone  => 'America/Chicago',
                          );

    is( $dt->format_cldr('j'), '18',
        'format_cldr for j in fr should be 18 (at 18:34)' );
}

{
    my $dt = DateTime->new( year       => 2009,
                            month      => 4,
                            day        => 13,
                            locale     => 'en_US',
                          );

    is( $dt->format_cldr('e'), '2',
        'format_cldr for e in en_US should be 2 (for Monday, 2009-04-13)' );

    is( $dt->format_cldr('c'), '1',
        'format_cldr for c in en_US should be 1 (for Monday, 2009-04-13)' );
}


{
    my $dt = DateTime->new( year       => 2009,
                            month      => 4,
                            day        => 13,
                            locale     => 'fr_FR',
                          );

    is( $dt->format_cldr('e'), '1',
        'format_cldr for e in fr_FR should be 1 (for Monday, 2009-04-13)' );

    is( $dt->format_cldr('c'), '1',
        'format_cldr for c in fr_FR should be 1 (for Monday, 2009-04-13)' );
}

{
    my $dt = DateTime->new( year => -10 );

    my %tests = ( 'y'     => '-10',
                  'yy'    => '-10',
                  'yyy'   => '-10',
                  'yyyy'  => '-010',
                  'yyyyy' => '-0010',

                  'u'     => '-10',
                  'uu'    => '-10',
                  'uuu'   => '-10',
                  'uuuu'  => '-010',
                  'uuuuu' => '-0010',
                );

    for my $k ( sort keys %tests )
    {
        is( $dt->format_cldr($k), $tests{$k},
            "format_cldr for $k" );
    }
}

{
    my $dt = DateTime->new( year => -1976 );

    my %tests = ( 'y'     => '-1976',
                  'yy'    => '-76',
                  'yyy'   => '-1976',
                  'yyyy'  => '-1976',
                  'yyyyy' => '-1976',

                  'u'     => '-1976',
                  'uu'    => '-1976',
                  'uuu'   => '-1976',
                  'uuuu'  => '-1976',
                  'uuuuu' => '-1976',
                );

    for my $k ( sort keys %tests )
    {
        is( $dt->format_cldr($k), $tests{$k},
            "format_cldr for $k" );
    }
}