#!perl -w
BEGIN { use_ok(
'Geo::Coder::Free'
) }
OPENADDR: {
if
(
$ENV
{
'OPENADDR_HOME'
}) {
if
(
$ENV
{
'TEST_VERBOSE'
}) {
Database::Abstraction::init(
logger
=> MyLogger->new());
}
my
$geo_coder
= new_ok(
'Geo::Coder::Free'
=> [
openaddr
=>
$ENV
{
'OPENADDR_HOME'
} ]);
if
(
$ENV
{AUTHOR_TESTING}) {
diag(
'This will take some time and memory'
);
my
$location
=
$geo_coder
->geocode(
'Medlars Drive, Bethesda, MD, USA'
);
ok(
defined
(
$location
),
'Medlars Drive, Bethesda, MD, USA'
);
diag(Data::Dumper->new([
$location
])->Dump())
if
(
$ENV
{
'TEST_VERBOSE'
});
cmp_deeply(
$location
,
methods(
'lat'
=> num(39.00, 1e-2),
'long'
=> num(-77.10, 1e-2)));
$location
=
$geo_coder
->geocode(
'Indiana, USA'
);
cmp_deeply(
$location
,
methods(
'lat'
=> num(39.5, 1),
'long'
=> num(-86, 1)));
$location
=
$geo_coder
->geocode(
'Indianapolis, Indiana, USA'
);
ok(
defined
(
$location
));
cmp_deeply(
$location
,
methods(
'lat'
=> num(39.71, 1e-1),
'long'
=> num(-86.2, 1e-1)));
TODO: {
local
$TODO
=
'Not in the database'
;
eval
{
$location
=
$geo_coder
->geocode({
location
=>
'Osceola, Polk, Nebraska, USA'
});
ok(
defined
(
$location
));
};
}
if
(
$ENV
{
'WHOSONFIRST_HOME'
}) {
$location
=
$geo_coder
->geocode(
location
=>
'6502 SW. 102nd Avenue, Bushnell, Florida, USA'
);
ok(
defined
(
$location
));
cmp_deeply(
$location
,
methods(
'lat'
=> num(28.61, 1e-2),
'long'
=> num(-82.21, 1e-2)));
}
my
$o_geo_coder
= new_ok(
'Geo::Coder::Free::OpenAddresses'
=> [
openaddr
=>
$ENV
{
'OPENADDR_HOME'
} ]);
TODO: {
local
$TODO
=
"Not in the database"
;
eval
{
$location
=
$o_geo_coder
->geocode(
'105 S. West Street, Spencer, Owen, Indiana, USA'
);
ok(
defined
(
$location
));
};
}
$location
=
$geo_coder
->geocode(
location
=>
'Greene County, Indiana, USA'
);
cmp_deeply(
$location
,
methods(
'lat'
=> num(39.05, 1e-2),
'long'
=> num(-87.04, 1e-2)));
$location
=
$o_geo_coder
->geocode(
'Boswell, Somerset, Pennsylvania, USA'
);
ok(
defined
(
$location
));
$location
=
$geo_coder
->geocode({
location
=>
'Harrison Mills, British Columbia, Canada'
});
ok(
defined
(
$location
));
$location
=
$o_geo_coder
->geocode(
location
=>
'Clay City, Owen, Indiana, USA'
);
ok(
defined
(
$location
));
$location
=
$geo_coder
->geocode(
location
=>
'Edmonton, Alberta, Canada'
);
ok(
defined
(
$location
));
cmp_deeply(
$location
,
methods(
'lat'
=> num(53.5, 1e-1),
'long'
=> num(-113.4, 1)));
$location
=
$geo_coder
->geocode(
'London, England'
);
TODO: {
local
$TODO
=
"Can't parse 'London, England'"
;
ok(!
defined
(
$location
));
}
$location
=
$geo_coder
->geocode(
'Silver Spring, Maryland, USA'
);
cmp_deeply(
$location
,
methods(
'lat'
=> num(39.00, 1e-2),
'long'
=> num(-77.02, 1e-2)));
$location
=
$geo_coder
->geocode(
'Silver Spring, MD, USA'
);
cmp_deeply(
$location
,
methods(
'lat'
=> num(39.00, 1e-2),
'long'
=> num(-77.02, 1e-2)));
$location
=
$geo_coder
->geocode(
'Silver Spring, Montgomery, MD, USA'
);
cmp_deeply(
$location
,
methods(
'lat'
=> num(39.00, 1e-2),
'long'
=> num(-77.02, 1e-2)));
$location
=
$geo_coder
->geocode(
'Silver Spring, Maryland, United States'
);
cmp_deeply(
$location
,
methods(
'lat'
=> num(39.00, 1e-2),
'long'
=> num(-77.02, 1e-2)));
$location
=
$geo_coder
->geocode(
'Silver Spring, Montgomery County, Maryland, USA'
);
cmp_deeply(
$location
,
methods(
'lat'
=> num(39.00, 1e-2),
'long'
=> num(-77.02, 1e-2)));
if
(
$ENV
{
'WHOSONFIRST_HOME'
}) {
$location
=
$geo_coder
->geocode(
'Rockville Pike, Rockville, Montgomery County, MD, USA'
);
cmp_deeply(
$location
,
methods(
'lat'
=> num(39.07, 1e-2),
'long'
=> num(-77.13, 1e-1)));
$location
=
$geo_coder
->geocode(
'Rockville Pike, Rockville, MD, USA'
);
ok(
defined
(
$location
));
cmp_deeply(
$location
,
methods(
'lat'
=> num(39.07, 1e-1),
'long'
=> num(-77.13, 1e-2)));
$location
=
$geo_coder
->geocode(
'8600 Rockville Pike, Bethesda, MD 20894, USA'
);
cmp_deeply(
$location
,
methods(
'lat'
=> num(39.00, 1e-1),
'long'
=> num(-77.10, 1e-2)));
$location
=
$geo_coder
->geocode(
'8600 Rockville Pike Bethesda MD 20894 USA'
);
cmp_deeply(
$location
,
methods(
'lat'
=> num(39.00, 1e-1),
'long'
=> num(-77.10, 1e-2)));
}
$location
=
$geo_coder
->geocode({
location
=>
'Rockville, Montgomery County, MD, USA'
});
cmp_deeply(
$location
,
methods(
'lat'
=> num(39.08, 1e-2),
'long'
=> num(-77.15, 1e-2)));
$location
=
$geo_coder
->geocode(
location
=>
'Rockville, Montgomery County, Maryland, USA'
);
cmp_deeply(
$location
,
methods(
'lat'
=> num(39.08, 1e-2),
'long'
=> num(-77.15, 1e-2)));
if
(
$ENV
{
'WHOSONFIRST_HOME'
}) {
$location
=
$geo_coder
->geocode(
location
=>
'1600 Pennsylvania Avenue NW, Washington DC, USA'
);
cmp_deeply(
$location
,
methods(
'lat'
=> num(38.90, 1e-2),
'long'
=> num(-77.04, 1e-2)));
}
$location
=
$geo_coder
->geocode(
'Wisconsin, USA'
);
cmp_deeply(
$location
,
methods(
'lat'
=> num(44, 1),
'long'
=> num(-90, 1)));
$location
=
$geo_coder
->geocode(
'At sea or abroad'
);
ok(!
defined
(
$location
));
$location
=
$o_geo_coder
->geocode(
'Vessels, Misc Ships At sea or abroad, England'
);
ok(!
defined
(
$location
));
$location
=
$geo_coder
->geocode({
location
=>
'St. Louis, Missouri, USA'
});
cmp_deeply(
$location
,
methods(
'lat'
=> num(38.63, 1e-2),
'long'
=> num(-90.20, 1e-1)));
$location
=
$geo_coder
->geocode({
location
=>
'St Louis, Missouri, USA'
});
cmp_deeply(
$location
,
methods(
'lat'
=> num(38.63, 1e-2),
'long'
=> num(-90.20, 1e-1)));
$location
=
$geo_coder
->geocode({
location
=>
'Saint Louis, Missouri, USA'
});
cmp_deeply(
$location
,
methods(
'lat'
=> num(38.63, 1e-2),
'long'
=> num(-90.2, 1e-1)));
if
(
$ENV
{
'WHOSONFIRST_HOME'
}) {
$location
=
$geo_coder
->geocode(
'716 Yates Street, Victoria, British Columbia, Canada'
);
cmp_deeply(
$location
,
methods(
'lat'
=> num(48.43, 1e-2),
'long'
=> num(-123.37, 1e-2)));
}
$location
=
$geo_coder
->geocode(
location
=>
'Caboolture, Queensland, Australia'
);
ok(
defined
(
$location
));
cmp_deeply(
$location
,
methods(
'lat'
=> num(-27.0, 1e-1),
'long'
=> num(152.9, 1e-1)));
$location
=
$geo_coder
->geocode(
location
=>
'Whitley, Indiana, USA'
);
ok(
defined
(
$location
));
ok(
ref
(
$location
) eq
'Geo::Location::Point'
);
}
else
{
diag(
'Author tests not required for installation'
);
}
my
$location
;
does_croak(
sub
{
$location
=
$geo_coder
->geocode();
});
does_croak(
sub
{
$location
=
$geo_coder
->reverse_geocode();
});
does_croak(
sub
{
$geo_coder
= Geo::Coder::Free->new(
openaddr
=>
'not/there'
);
});
eval
'use Test::Memory::Cycle'
;
if
(!$@) {
memory_cycle_ok(
$geo_coder
);
}
}
else
{
diag(
'Set OPENADDR_HOME to enable openaddresses.io testing'
);
}
done_testing();
}