use utf8; use Test::More tests=>103; use Scalar::Util qw(refaddr); use_ok('URI'); use_ok('URI::file'); use_ok ('XML::Pastor'); binmode(STDOUT, ":utf8"); binmode(STDERR, ":utf8"); my $pastor = XML::Pastor->new(); $pastor->generate( mode =>'eval', schema=>['./test/source/country/schema/country_schema4_import.xsd'], class_prefix=>"XML::Pastor::Test", destination=>'./test/out/lib/', verbose =>0 ); # ======= COUNTRY ============== my $country_in = XML::Pastor::Test::country->from_xml(URI::file->new_abs('./test/source/country/xml/country_import.xml')); $country_in->to_xml_file('./test/out/country_import.xml'); my $country_out = XML::Pastor::Test::country->from_xml_file('./test/out/country_import.xml'); $country_in->to_xml_file('./test/out/country_import_latin1.xml', encoding => 'iso-8859-1'); my $country_latin1 = XML::Pastor::Test::country->from_xml_file('./test/out/country_import_latin1.xml'); my @countries = ($country_in, $country_out, $country_latin1); foreach my $country (@countries) { my $pass = ' [UNKOWN] '; SWITCH: { (refaddr($country) == refaddr($country_in)) and do {$pass = ' [IN] '; last SWITCH;}; (refaddr($country) == refaddr($country_out)) and do {$pass = ' [OUT-UTF8] '; last SWITCH;}; (refaddr($country) == refaddr($country_latin1)) and do {$pass = ' [OUT-LATIN1] '; last SWITCH;}; } ok(defined($country), "defined country $pass"); my @ancestors = qw( XML::Pastor::Type XML::Pastor::ComplexType XML::Pastor::Element XML::Pastor::Test::country ); foreach my $ancestor (@ancestors) { isa_ok($country, $ancestor, "country $pass"); } # XML::Pastor::Type methods can_ok( $country, qw( new is_xml_valid xml_validate xml_validate_further )); # XML::Pastor::Type class methods can_ok($country, qw( XmlSchemaType )); # XML::Pastor::ComplexType methods can_ok($country, qw( xml_field_class is_xml_field_singleton is_xml_field_multiple get set grab from_xml_dom from_xml from_xml_file from_xml_fh from_xml_fragment from_xml_string from_xml_url to_xml to_xml_dom to_xml_dom_document)); # XML::Pastor::Element class methods can_ok($country, qw( XmlSchemaElement )); # Field accessor methods can_ok($country, qw( code name city currency population )); # ======= COUNTRY CODE ========= my $country_code = $country->code; ok(defined($country_code), "defined country code $pass"); # ISA tests @ancestors = qw( XML::Pastor::Type XML::Pastor::SimpleType ); foreach my $ancestor (@ancestors) { isa_ok($country_code, $ancestor, "country code $pass"); } # XML::Pastor::Type methods can_ok( $country_code, qw( new is_xml_valid xml_validate xml_validate_further )); # XML::Pastor::Type class methods can_ok($country_code, qw( XmlSchemaType )); # XML::Pastor::SimpleType methods can_ok($country_code, qw( from_xml_dom xml_validate xml_validate_further normalize_whitespace )); # Accessor methods can_ok($country_code, qw( __value )); # ===== EXPECTED VALUES ========= my $expected; # Check the country code $expected = 'fr'; is(lc($country->code), lc($expected), "country code $pass"); # Check the country name $expected = 'france'; is(lc($country->name), lc($expected), "country name $pass"); # Check the country name language $expected = 'en'; is(lc($country->name->_lang), lc($expected), "country name language $pass"); my $language = $country->language; is($language->code2, 'fr', "country language code"); is($language->name, 'French', "country language name"); # Defined city my $cities = $country->city; ok(defined($cities), "defined cities $pass"); # Get a hash of the cities on 'code' attribute my $city_h = $cities->hash(sub{ shift->code() }); my $code; my $city; # Check the name of a given city $code = 'AVA'; $city = $city_h->{$code}; ok(defined($city), "City exists {$code}"); $expected = 'Ambrières-les-Vallées'; is(lc($city->name), lc($expected), "$pass => city name '". $code . "'"); # Check the name of a given city $code = 'BCX'; $city = $city_h->{$code}; ok(defined($city), "$pass => City exists {$code}"); $expected = 'Beire-le-Châtel'; is(lc($city->name), lc($expected), "$pass => city name '". $code . "'"); # Check the name of a given city $code = 'LYO'; $city = $city_h->{$code}; ok(defined($city), "$pass => City exists {$code}"); $expected = 'Lyon'; is(lc($city->name), lc($expected), "city name '". $code . "'"); # Check the name of a given city $code = 'NCE'; $city = $city_h->{$code}; ok(defined($city), "$pass => City exists {$code}"); $expected = 'Nice'; is(lc($city->name), lc($expected), "$pass => city name '". $code . "'"); # Check the name of a given city $code = 'PAR'; $city = $city_h->{$code}; ok(defined($city), "$pass => City exists {$code}"); $expected = 'Paris'; is(lc($city->name), lc($expected), "$pass => city name '". $code . "'"); } # foreach $country # print STDERR "\nTest OVER baby!\n"; ok(1, 'end'); # survived everything 1;