The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl

use warnings;
use strict;

use Test::More tests => 17;

use DateTime::TimeZone;
use Locale::Object::Country;

my $afghanistan = Locale::Object::Country->new( code_alpha2 => 'af' );
                                      
#1
isa_ok( $afghanistan, 'Locale::Object::Country' );

#2
is( $afghanistan->name, 'Afghanistan', 'it has the correct country name');

#3
is( $afghanistan->code_alpha3, 'afg', 'it has the correct 3-letter code');

#4
is( $afghanistan->code_numeric, '004', 'it has the correct numeric code');

#5
is( $afghanistan->dialing_code, '93', 'it has the right dialing code');

#6
is( $afghanistan->currency->name, 'afghani', 'it has the correct currency');

#7
is( $afghanistan->continent->name, 'Asia', "it's on the correct continent");

my %countries;

# Fill up a hash with the alpha2 codes of countries in the same continent
foreach my $where ($afghanistan->continent->countries)
{
  # Get the alpha2 code of the country we're looking at.
  my $where_code = $where->code_alpha2;
  $countries{$where_code} = undef;
}

#8
ok( exists $countries{'tj'}, 'it has a correct neighbor on its continent');

my $copy = Locale::Object::Country->new( code_alpha2 => 'af' );

#9
is( $afghanistan->timezone->name, 'Asia/Kabul', 'it had the right timezone');

#10
ok( $copy eq $afghanistan, 'the object is a singleton');

#11
is( ($afghanistan->languages)[0]->name, 'Pushto', 'a correct language is spoken in it');

#12
is( ($afghanistan->languages_official)[0]->name, 'Pushto', 'the official language is correct');
 
my ($wrong, $wrong_defined);

{
  # We can hide the warning, this is only a test.
  local $SIG{__WARN__} = sub {};
  eval {
    $wrong = Locale::Object::Country->new( code_alpha2 => 'zz' );
  };
}

defined $wrong ? $wrong_defined = 1 : $wrong_defined = 0;

#13
is( $wrong_defined, 0, 'an object was not made for an incorrect code' );

my $britain = Locale::Object::Country->new( code_alpha2 => 'gb' );

#14
is( $britain->all_timezones->[0]->name, 'Europe/London', 'all timezones');
is( $britain->all_timezones->[1]->name, DateTime::TimeZone->links->{'Europe/Belfast'}, 'belfast is a deprecated alias for London');

ok( my $antarctica = Locale::Object::Country->new( code_alpha2 => 'aq' ), 'load Antarctica');

ok( my $congo = Locale::Object::Country->new( code_alpha2 => 'cd' ), 'load Congo');