15catalog.t   [plain text]


use strict;
use warnings;

use File::Spec;
use Test::More;

use DateTime::TimeZone;


plan tests => 31;

{
    my @all = DateTime::TimeZone::all_names();
    ok( scalar @all > 50, 'there are more than 50 names in the catalog' );
    ok( ( grep { $_ eq 'America/Chicago' } @all ),
        'America/Chicago is in the list of all names' );

    my $all = DateTime::TimeZone::all_names();
    ok( ref $all, 'all_names() returns ref in scalar context' );
}

{
    my @cats = DateTime::TimeZone::categories();
    my %cats = map { $_ => 1 } @cats;
    for my $c ( qw( Africa
                    America
                    Antarctica
                    Asia
                    Atlantic
                    Australia
                    Europe
                    Indian
                    Pacific
                  ) )
    {
        ok( $cats{$c}, "$c is in categories list" );
    }

    my $cats = DateTime::TimeZone::categories();
    ok( ref $cats, 'categories() returns ref in scalar context' );
}

{
    my %links = DateTime::TimeZone::links();
    is( $links{Israel}, 'Asia/Jerusalem', 'Israel links to Asia/Jerusalem' );
    is( $links{UCT}, 'UTC', 'UCT links to UTC' );

    my $links = DateTime::TimeZone::links();
    ok( ref $links, 'links() returns ref in scalar context' );
}


{
    my @names = DateTime::TimeZone::names_in_category('America');
    my %names = map { $_ => 1 } @names;
    for my $n ( qw( Chicago Adak ) )
    {
        ok( exists $names{$n}, "$n is in America category" );
    }

    my $names = DateTime::TimeZone::names_in_category('America');
    ok( ref $names, 'names_in_category() returns ref in scalar context' );
}

{
    my @names = DateTime::TimeZone->names_in_category('America');
    my %names = map { $_ => 1 } @names;
    for my $n ( qw( Chicago Adak ) )
    {
        ok( exists $names{$n}, "$n is in America category (names_in_category() called as class method)" );
    }
}

{
    my @countries = DateTime::TimeZone::countries();
    my %countries = map { $_ => 1 } @countries;
    for my $c ( qw( jp us ) )
    {
        ok( exists $countries{$c}, "$c is in the list of countries" );
    }
}

{
    my @zones = DateTime::TimeZone::names_in_country('jp');
    is( @zones, 1, 'one zone for Japan' );
    is( $zones[0], 'Asia/Tokyo', 'zone for Japan is Asia/Tokyo' );
}

{
    my @zones = DateTime::TimeZone::names_in_country('JP');
    is( @zones, 1, 'one zone for Japan' );
    is( $zones[0], 'Asia/Tokyo', 'zone for Japan is Asia/Tokyo (uc country code)' );
}

{
    my @zones = DateTime::TimeZone->names_in_country('cl');
    is( @zones, 2, 'two zones for Chile' );
    is_deeply( [ sort @zones ],
               [ 'America/Santiago', 'Pacific/Easter' ],
               'zones for Chile are America/Santiago and Pacific/Easter' );
}

{
    my @zones = DateTime::TimeZone::names_in_country('us');
    is( $zones[0], 'America/New_York',
        'First timezone by country in US is America/New_York' );
}

{
    my $zones = DateTime::TimeZone::names_in_country('us');
    is( $zones->[0], 'America/New_York',
        'First timezone by country in US is America/New_York - scalar context' );
}