geokit 1.2.5

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,56 @@
1
+ require 'test/unit'
2
+ require 'net/http'
3
+ require 'rubygems'
4
+ require 'mocha'
5
+ require 'lib/geokit'
6
+
7
+ class MockSuccess < Net::HTTPSuccess #:nodoc: all
8
+ def initialize
9
+ end
10
+ end
11
+
12
+ class MockFailure < Net::HTTPServiceUnavailable #:nodoc: all
13
+ def initialize
14
+ end
15
+ end
16
+
17
+ # Base class for testing geocoders.
18
+ class BaseGeocoderTest < Test::Unit::TestCase #:nodoc: all
19
+
20
+ # Defines common test fixtures.
21
+ def setup
22
+ @address = 'San Francisco, CA'
23
+ @full_address = '100 Spear St, San Francisco, CA, 94105-1522, US'
24
+ @full_address_short_zip = '100 Spear St, San Francisco, CA, 94105, US'
25
+
26
+ @success = Geokit::GeoLoc.new({:city=>"SAN FRANCISCO", :state=>"CA", :country_code=>"US", :lat=>37.7742, :lng=>-122.417068})
27
+ @success.success = true
28
+ end
29
+
30
+ def test_timeout_call_web_service
31
+ Geokit::Geocoders::Geocoder.class_eval do
32
+ def self.do_get(url)
33
+ sleep(2)
34
+ end
35
+ end
36
+ url = "http://www.anything.com"
37
+ Geokit::Geocoders::timeout = 1
38
+ assert_nil Geokit::Geocoders::Geocoder.call_geocoder_service(url)
39
+ end
40
+
41
+ def test_successful_call_web_service
42
+ url = "http://www.anything.com"
43
+ Geokit::Geocoders::Geocoder.expects(:do_get).with(url).returns("SUCCESS")
44
+ assert_equal "SUCCESS", Geokit::Geocoders::Geocoder.call_geocoder_service(url)
45
+ end
46
+
47
+ def test_find_geocoder_methods
48
+ public_methods = Geokit::Geocoders::Geocoder.public_methods.map { |m| m.to_s }
49
+ assert public_methods.include?("yahoo_geocoder")
50
+ assert public_methods.include?("google_geocoder")
51
+ assert public_methods.include?("ca_geocoder")
52
+ assert public_methods.include?("us_geocoder")
53
+ assert public_methods.include?("multi_geocoder")
54
+ assert public_methods.include?("ip_geocoder")
55
+ end
56
+ end
@@ -0,0 +1,74 @@
1
+ require 'test/unit'
2
+ require 'lib/geokit'
3
+
4
+ class BoundsTest < Test::Unit::TestCase #:nodoc: all
5
+
6
+ def setup
7
+ # This is the area in Texas
8
+ @sw = Geokit::LatLng.new(32.91663,-96.982841)
9
+ @ne = Geokit::LatLng.new(32.96302,-96.919495)
10
+ @bounds=Geokit::Bounds.new(@sw,@ne)
11
+ @loc_a=Geokit::LatLng.new(32.918593,-96.958444) # inside bounds
12
+ @loc_b=Geokit::LatLng.new(32.914144,-96.958444) # outside bouds
13
+
14
+ # this is a cross-meridan area
15
+ @cross_meridian=Geokit::Bounds.normalize([30,170],[40,-170])
16
+ @inside_cm=Geokit::LatLng.new(35,175)
17
+ @inside_cm_2=Geokit::LatLng.new(35,-175)
18
+ @east_of_cm=Geokit::LatLng.new(35,-165)
19
+ @west_of_cm=Geokit::LatLng.new(35,165)
20
+
21
+ end
22
+
23
+ def test_equality
24
+ assert_equal Geokit::Bounds.new(@sw,@ne), Geokit::Bounds.new(@sw,@ne)
25
+ end
26
+
27
+ def test_normalize
28
+ res=Geokit::Bounds.normalize(@sw,@ne)
29
+ assert_equal res,Geokit::Bounds.new(@sw,@ne)
30
+ res=Geokit::Bounds.normalize([@sw,@ne])
31
+ assert_equal res,Geokit::Bounds.new(@sw,@ne)
32
+ res=Geokit::Bounds.normalize([@sw.lat,@sw.lng],[@ne.lat,@ne.lng])
33
+ assert_equal res,Geokit::Bounds.new(@sw,@ne)
34
+ res=Geokit::Bounds.normalize([[@sw.lat,@sw.lng],[@ne.lat,@ne.lng]])
35
+ assert_equal res,Geokit::Bounds.new(@sw,@ne)
36
+ end
37
+
38
+ def test_point_inside_bounds
39
+ assert @bounds.contains?(@loc_a)
40
+ end
41
+
42
+ def test_point_outside_bounds
43
+ assert !@bounds.contains?(@loc_b)
44
+ end
45
+
46
+ def test_point_inside_bounds_cross_meridian
47
+ assert @cross_meridian.contains?(@inside_cm)
48
+ assert @cross_meridian.contains?(@inside_cm_2)
49
+ end
50
+
51
+ def test_point_outside_bounds_cross_meridian
52
+ assert !@cross_meridian.contains?(@east_of_cm)
53
+ assert !@cross_meridian.contains?(@west_of_cm)
54
+ end
55
+
56
+ def test_center
57
+ assert_in_delta 32.939828,@bounds.center.lat,0.00005
58
+ assert_in_delta(-96.9511763,@bounds.center.lng,0.00005)
59
+ end
60
+
61
+ def test_center_cross_meridian
62
+ assert_in_delta 35.41160, @cross_meridian.center.lat,0.00005
63
+ assert_in_delta 179.38112, @cross_meridian.center.lng,0.00005
64
+ end
65
+
66
+ def test_creation_from_circle
67
+ bounds=Geokit::Bounds.from_point_and_radius([32.939829, -96.951176],2.5)
68
+ inside=Geokit::LatLng.new 32.9695270000,-96.9901590000
69
+ outside=Geokit::LatLng.new 32.8951550000,-96.9584440000
70
+ assert bounds.contains?(inside)
71
+ assert !bounds.contains?(outside)
72
+ end
73
+
74
+ end
@@ -0,0 +1,41 @@
1
+ require File.join(File.dirname(__FILE__), 'test_base_geocoder')
2
+
3
+ Geokit::Geocoders::geocoder_ca = "SOMEKEYVALUE"
4
+
5
+ class CaGeocoderTest < BaseGeocoderTest #:nodoc: all
6
+
7
+ CA_SUCCESS=<<-EOF
8
+ <?xml version="1.0" encoding="UTF-8" ?>
9
+ <geodata><latt>49.243086</latt><longt>-123.153684</longt></geodata>
10
+ EOF
11
+
12
+ def setup
13
+ @ca_full_hash = {:street_address=>"2105 West 32nd Avenue",:city=>"Vancouver", :state=>"BC"}
14
+ @ca_full_loc = Geokit::GeoLoc.new(@ca_full_hash)
15
+ end
16
+
17
+ def test_geocoder_with_geo_loc_with_account
18
+ response = MockSuccess.new
19
+ response.expects(:body).returns(CA_SUCCESS)
20
+ url = "http://geocoder.ca/?stno=2105&addresst=West+32nd+Avenue&city=Vancouver&prov=BC&auth=SOMEKEYVALUE&geoit=xml"
21
+ Geokit::Geocoders::CaGeocoder.expects(:call_geocoder_service).with(url).returns(response)
22
+ verify(Geokit::Geocoders::CaGeocoder.geocode(@ca_full_loc))
23
+ end
24
+
25
+ def test_service_unavailable
26
+ response = MockFailure.new
27
+ #Net::HTTP.expects(:get_response).with(URI.parse("http://geocoder.ca/?stno=2105&addresst=West+32nd+Avenue&city=Vancouver&prov=BC&auth=SOMEKEYVALUE&geoit=xml")).returns(response)
28
+ url = "http://geocoder.ca/?stno=2105&addresst=West+32nd+Avenue&city=Vancouver&prov=BC&auth=SOMEKEYVALUE&geoit=xml"
29
+ Geokit::Geocoders::CaGeocoder.expects(:call_geocoder_service).with(url).returns(response)
30
+ assert !Geokit::Geocoders::CaGeocoder.geocode(@ca_full_loc).success
31
+ end
32
+
33
+ private
34
+
35
+ def verify(location)
36
+ assert_equal "BC", location.state
37
+ assert_equal "Vancouver", location.city
38
+ assert_equal "49.243086,-123.153684", location.ll
39
+ assert !location.is_us?
40
+ end
41
+ end
@@ -0,0 +1,64 @@
1
+ require 'test/unit'
2
+ require 'lib/geokit'
3
+
4
+ class GeoLocTest < Test::Unit::TestCase #:nodoc: all
5
+
6
+ def setup
7
+ @loc = Geokit::GeoLoc.new
8
+ end
9
+
10
+ def test_is_us
11
+ assert !@loc.is_us?
12
+ @loc.country_code = 'US'
13
+ assert @loc.is_us?
14
+ end
15
+
16
+ def test_street_number
17
+ @loc.street_address = '123 Spear St.'
18
+ assert_equal '123', @loc.street_number
19
+ end
20
+
21
+ def test_street_name
22
+ @loc.street_address = '123 Spear St.'
23
+ assert_equal 'Spear St.', @loc.street_name
24
+ end
25
+
26
+ def test_city
27
+ @loc.city = "san francisco"
28
+ assert_equal 'San Francisco', @loc.city
29
+ end
30
+
31
+ def test_full_address
32
+ @loc.city = 'San Francisco'
33
+ @loc.state = 'CA'
34
+ @loc.zip = '94105'
35
+ @loc.country_code = 'US'
36
+ assert_equal 'San Francisco, CA, 94105, US', @loc.full_address
37
+ @loc.full_address = 'Irving, TX, 75063, US'
38
+ assert_equal 'Irving, TX, 75063, US', @loc.full_address
39
+ end
40
+
41
+ def test_hash
42
+ @loc.city = 'San Francisco'
43
+ @loc.state = 'CA'
44
+ @loc.zip = '94105'
45
+ @loc.country_code = 'US'
46
+ @another = Geokit::GeoLoc.new @loc.to_hash
47
+ assert_equal @loc, @another
48
+ end
49
+
50
+ def test_all
51
+ assert_equal [@loc], @loc.all
52
+ end
53
+
54
+ def test_to_yaml
55
+ @loc.city = 'San Francisco'
56
+ @loc.state = 'CA'
57
+ @loc.zip = '94105'
58
+ @loc.country_code = 'US'
59
+ assert_equal(
60
+ "--- !ruby/object:Geokit::GeoLoc \ncity: San Francisco\ncountry_code: US\nfull_address: \nlat: \nlng: \nprecision: unknown\nstate: CA\nstreet_address: \nsuccess: false\nzip: \"94105\"\n",
61
+ @loc.to_yaml)
62
+ end
63
+
64
+ end
@@ -0,0 +1,59 @@
1
+ # encoding: utf-8
2
+ require File.join(File.dirname(__FILE__), 'test_base_geocoder')
3
+
4
+ class IpGeocoderTest < BaseGeocoderTest #:nodoc: all
5
+
6
+ IP_SUCCESS=<<-EOF
7
+ <?xml version="1.0" encoding="UTF-8"?>
8
+ <geoPlugin>
9
+ <geoplugin_city>Belo Horizonte</geoplugin_city>
10
+ <geoplugin_region>Minas Gerais</geoplugin_region>
11
+ <geoplugin_areaCode>0</geoplugin_areaCode>
12
+ <geoplugin_dmaCode>0</geoplugin_dmaCode>
13
+ <geoplugin_countryCode>BR</geoplugin_countryCode>
14
+ <geoplugin_countryName>Brazil</geoplugin_countryName>
15
+ <geoplugin_continentCode>SA</geoplugin_continentCode>
16
+ <geoplugin_latitude>-19.916700</geoplugin_latitude>
17
+ <geoplugin_longitude>-43.933300</geoplugin_longitude>
18
+ <geoplugin_currencyCode>BRL</geoplugin_currencyCode>
19
+ <geoplugin_currencySymbol>&#82;&#36;</geoplugin_currencySymbol>
20
+ <geoplugin_currencyConverter>2.2575001717</geoplugin_currencyConverter>
21
+ </geoPlugin>
22
+ EOF
23
+
24
+ def setup
25
+ super
26
+ @success.provider = "geoPlugin"
27
+ end
28
+
29
+ def test_successful_lookup
30
+ success = MockSuccess.new
31
+ success.expects(:body).returns(IP_SUCCESS)
32
+ url = 'http://www.geoplugin.net/xml.gp?ip=200.150.38.66'
33
+ GeoKit::Geocoders::GeoPluginGeocoder.expects(:call_geocoder_service).with(url).returns(success)
34
+ location = GeoKit::Geocoders::GeoPluginGeocoder.geocode('200.150.38.66')
35
+ assert_not_nil location
36
+ assert_equal -19.916700, location.lat
37
+ assert_equal -43.933300, location.lng
38
+ assert_equal "Belo Horizonte", location.city
39
+ assert_equal "Minas Gerais", location.state
40
+ assert_equal "BR", location.country_code
41
+ assert_equal "geoPlugin", location.provider
42
+ assert location.success
43
+ end
44
+
45
+ def test_invalid_ip
46
+ location = GeoKit::Geocoders::GeoPluginGeocoder.geocode("pixrum")
47
+ assert_not_nil location
48
+ assert !location.success
49
+ end
50
+
51
+ def test_service_unavailable
52
+ failure = MockFailure.new
53
+ url = 'http://www.geoplugin.net/xml.gp?ip=10.10.10.10'
54
+ GeoKit::Geocoders::GeoPluginGeocoder.expects(:call_geocoder_service).with(url).returns(failure)
55
+ location = GeoKit::Geocoders::GeoPluginGeocoder.geocode("10.10.10.10")
56
+ assert_not_nil location
57
+ assert !location.success
58
+ end
59
+ end
@@ -0,0 +1,116 @@
1
+ require File.join(File.dirname(__FILE__), 'test_base_geocoder')
2
+
3
+ Geokit::Geocoders::google = 'Google'
4
+
5
+ class GoogleGeocoderTest < BaseGeocoderTest #:nodoc: all
6
+
7
+ GOOGLE_FULL=<<-EOF.strip
8
+ <?xml version="1.0" encoding="UTF-8"?><kml xmlns="http://earth.google.com/kml/2.0"><Response><name>100 spear st, san francisco, ca</name><Status><code>200</code><request>geocode</request></Status><Placemark><address>100 Spear St, San Francisco, CA 94105, USA</address><AddressDetails Accuracy="8" xmlns="urn:oasis:names:tc:ciq:xsdschema:xAL:2.0"><Country><CountryNameCode>US</CountryNameCode><AdministrativeArea><AdministrativeAreaName>CA</AdministrativeAreaName><SubAdministrativeArea><SubAdministrativeAreaName>San Francisco</SubAdministrativeAreaName><Locality><LocalityName>San Francisco</LocalityName><Thoroughfare><ThoroughfareName>100 Spear St</ThoroughfareName></Thoroughfare><PostalCode><PostalCodeNumber>94105</PostalCodeNumber></PostalCode></Locality></SubAdministrativeArea></AdministrativeArea></Country></AddressDetails><Point><coordinates>-122.393985,37.792501,0</coordinates></Point></Placemark></Response></kml>
9
+ EOF
10
+
11
+ GOOGLE_CITY=<<-EOF.strip
12
+ <?xml version="1.0" encoding="UTF-8"?><kml xmlns="http://earth.google.com/kml/2.0"><Response><name>San Francisco</name><Status><code>200</code><request>geocode</request></Status><Placemark><address>San Francisco, CA, USA</address><AddressDetails Accuracy="4" xmlns="urn:oasis:names:tc:ciq:xsdschema:xAL:2.0"><Country><CountryNameCode>US</CountryNameCode><AdministrativeArea><AdministrativeAreaName>CA</AdministrativeAreaName><Locality><LocalityName>San Francisco</LocalityName></Locality></AdministrativeArea></Country></AddressDetails><Point><coordinates>-122.418333,37.775000,0</coordinates></Point></Placemark></Response></kml>
13
+ EOF
14
+
15
+ GOOGLE_MULTI="<?xml version='1.0' encoding='UTF-8'?>\n<kml xmlns='http://earth.google.com/kml/2.0'><Response>\n <name>via Sandro Pertini 8, Ossona, MI</name>\n <Status>\n <code>200</code>\n <request>geocode</request>\n </Status>\n <Placemark id='p1'>\n <address>Via Sandro Pertini, 8, 20010 Mesero MI, Italy</address>\n <AddressDetails Accuracy='8' xmlns='urn:oasis:names:tc:ciq:xsdschema:xAL:2.0'><Country><CountryNameCode>IT</CountryNameCode><CountryName>Italy</CountryName><AdministrativeArea><AdministrativeAreaName>Lombardy</AdministrativeAreaName><SubAdministrativeArea><SubAdministrativeAreaName>Milan</SubAdministrativeAreaName><Locality><LocalityName>Mesero</LocalityName><Thoroughfare><ThoroughfareName>8 Via Sandro Pertini</ThoroughfareName></Thoroughfare><PostalCode><PostalCodeNumber>20010</PostalCodeNumber></PostalCode></Locality></SubAdministrativeArea></AdministrativeArea></Country></AddressDetails>\n <Point><coordinates>8.8527131,45.4966243,0</coordinates></Point>\n </Placemark>\n <Placemark id='p2'>\n <address>Via Sandro Pertini, 20010 Ossona MI, Italy</address>\n <AddressDetails Accuracy='6' xmlns='urn:oasis:names:tc:ciq:xsdschema:xAL:2.0'><Country><CountryNameCode>IT</CountryNameCode><CountryName>Italy</CountryName><AdministrativeArea><AdministrativeAreaName>Lombardy</AdministrativeAreaName><SubAdministrativeArea><SubAdministrativeAreaName>Milan</SubAdministrativeAreaName><Locality><LocalityName>Ossona</LocalityName><Thoroughfare><ThoroughfareName>Via Sandro Pertini</ThoroughfareName></Thoroughfare><PostalCode><PostalCodeNumber>20010</PostalCodeNumber></PostalCode></Locality></SubAdministrativeArea></AdministrativeArea></Country></AddressDetails>\n <Point><coordinates>8.9023200,45.5074444,0</coordinates></Point>\n </Placemark>\n</Response></kml>\n"
16
+
17
+ def setup
18
+ super
19
+ @google_full_hash = {:street_address=>"100 Spear St", :city=>"San Francisco", :state=>"CA", :zip=>"94105", :country_code=>"US"}
20
+ @google_city_hash = {:city=>"San Francisco", :state=>"CA"}
21
+
22
+ @google_full_loc = Geokit::GeoLoc.new(@google_full_hash)
23
+ @google_city_loc = Geokit::GeoLoc.new(@google_city_hash)
24
+ end
25
+
26
+ def test_google_full_address
27
+ response = MockSuccess.new
28
+ response.expects(:body).returns(GOOGLE_FULL)
29
+ url = "http://maps.google.com/maps/geo?q=#{Geokit::Inflector.url_escape(@address)}&output=xml&key=Google&oe=utf-8"
30
+ Geokit::Geocoders::GoogleGeocoder.expects(:call_geocoder_service).with(url).returns(response)
31
+ res=Geokit::Geocoders::GoogleGeocoder.geocode(@address)
32
+ assert_equal "CA", res.state
33
+ assert_equal "San Francisco", res.city
34
+ assert_equal "37.792501,-122.393985", res.ll # slightly dif from yahoo
35
+ assert res.is_us?
36
+ assert_equal "100 Spear St, San Francisco, CA 94105, USA", res.full_address #slightly different from yahoo
37
+ assert_equal "google", res.provider
38
+ end
39
+
40
+ def test_google_full_address_with_geo_loc
41
+ response = MockSuccess.new
42
+ response.expects(:body).returns(GOOGLE_FULL)
43
+ url = "http://maps.google.com/maps/geo?q=#{Geokit::Inflector.url_escape(@full_address_short_zip)}&output=xml&key=Google&oe=utf-8"
44
+ Geokit::Geocoders::GoogleGeocoder.expects(:call_geocoder_service).with(url).returns(response)
45
+ res=Geokit::Geocoders::GoogleGeocoder.geocode(@google_full_loc)
46
+ assert_equal "CA", res.state
47
+ assert_equal "San Francisco", res.city
48
+ assert_equal "37.792501,-122.393985", res.ll # slightly dif from yahoo
49
+ assert res.is_us?
50
+ assert_equal "100 Spear St, San Francisco, CA 94105, USA", res.full_address #slightly different from yahoo
51
+ assert_equal "google", res.provider
52
+ end
53
+
54
+ def test_google_city
55
+ response = MockSuccess.new
56
+ response.expects(:body).returns(GOOGLE_CITY)
57
+ url = "http://maps.google.com/maps/geo?q=#{Geokit::Inflector.url_escape(@address)}&output=xml&key=Google&oe=utf-8"
58
+ Geokit::Geocoders::GoogleGeocoder.expects(:call_geocoder_service).with(url).returns(response)
59
+ res=Geokit::Geocoders::GoogleGeocoder.geocode(@address)
60
+ assert_equal "CA", res.state
61
+ assert_equal "San Francisco", res.city
62
+ assert_equal "37.775,-122.418333", res.ll
63
+ assert res.is_us?
64
+ assert_equal "San Francisco, CA, USA", res.full_address
65
+ assert_nil res.street_address
66
+ assert_equal "google", res.provider
67
+ end
68
+
69
+ def test_google_city_with_geo_loc
70
+ response = MockSuccess.new
71
+ response.expects(:body).returns(GOOGLE_CITY)
72
+ url = "http://maps.google.com/maps/geo?q=#{Geokit::Inflector.url_escape(@address)}&output=xml&key=Google&oe=utf-8"
73
+ Geokit::Geocoders::GoogleGeocoder.expects(:call_geocoder_service).with(url).returns(response)
74
+ res=Geokit::Geocoders::GoogleGeocoder.geocode(@google_city_loc)
75
+ assert_equal "CA", res.state
76
+ assert_equal "San Francisco", res.city
77
+ assert_equal "37.775,-122.418333", res.ll
78
+ assert res.is_us?
79
+ assert_equal "San Francisco, CA, USA", res.full_address
80
+ assert_nil res.street_address
81
+ assert_equal "google", res.provider
82
+ end
83
+
84
+ def test_service_unavailable
85
+ response = MockFailure.new
86
+ url = "http://maps.google.com/maps/geo?q=#{Geokit::Inflector.url_escape(@address)}&output=xml&key=Google&oe=utf-8"
87
+ Geokit::Geocoders::GoogleGeocoder.expects(:call_geocoder_service).with(url).returns(response)
88
+ assert !Geokit::Geocoders::GoogleGeocoder.geocode(@google_city_loc).success
89
+ end
90
+
91
+ def test_multiple_results
92
+ #Geokit::Geocoders::GoogleGeocoder.do_geocode('via Sandro Pertini 8, Ossona, MI')
93
+ response = MockSuccess.new
94
+ response.expects(:body).returns(GOOGLE_MULTI)
95
+ url = "http://maps.google.com/maps/geo?q=#{Geokit::Inflector.url_escape('via Sandro Pertini 8, Ossona, MI')}&output=xml&key=Google&oe=utf-8"
96
+ Geokit::Geocoders::GoogleGeocoder.expects(:call_geocoder_service).with(url).returns(response)
97
+ res=Geokit::Geocoders::GoogleGeocoder.geocode('via Sandro Pertini 8, Ossona, MI')
98
+ assert_equal "Lombardy", res.state
99
+ assert_equal "Mesero", res.city
100
+ assert_equal "45.4966243,8.8527131", res.ll
101
+ assert !res.is_us?
102
+ assert_equal "Via Sandro Pertini, 8, 20010 Mesero MI, Italy", res.full_address
103
+ assert_equal "8 Via Sandro Pertini", res.street_address
104
+ assert_equal "google", res.provider
105
+
106
+ assert_equal 2, res.all.size
107
+ res = res.all[1]
108
+ assert_equal "Lombardy", res.state
109
+ assert_equal "Ossona", res.city
110
+ assert_equal "45.5074444,8.90232", res.ll
111
+ assert !res.is_us?
112
+ assert_equal "Via Sandro Pertini, 20010 Ossona MI, Italy", res.full_address
113
+ assert_equal "Via Sandro Pertini", res.street_address
114
+ assert_equal "google", res.provider
115
+ end
116
+ end
@@ -0,0 +1,49 @@
1
+ require File.join(File.dirname(__FILE__), 'test_base_geocoder')
2
+
3
+ Geokit::Geocoders::google = 'Google'
4
+
5
+ class GoogleReverseGeocoderTest < BaseGeocoderTest #:nodoc: all
6
+
7
+ GOOGLE_REVERSE_FULL=<<-EOF.strip
8
+ <?xml version="1.0" encoding="UTF-8" ?><kml xmlns="http://earth.google.com/kml/2.0"><Response><name>51.457833,7.016685</name><Status><code>200</code><request>geocode</request></Status><Placemark id="p1"><address>Porscheplatz 1, 45127 Essen, Deutschland</address><AddressDetails Accuracy="8" xmlns="urn:oasis:names:tc:ciq:xsdschema:xAL:2.0"><Country><CountryNameCode>DE</CountryNameCode><CountryName>Deutschland</CountryName><AdministrativeArea><AdministrativeAreaName>Nordrhein-Westfalen</AdministrativeAreaName><SubAdministrativeArea><SubAdministrativeAreaName>Essen</SubAdministrativeAreaName><Locality><LocalityName>Essen</LocalityName><DependentLocality><DependentLocalityName>Stadtkern</DependentLocalityName><Thoroughfare><ThoroughfareName>Porscheplatz 1</ThoroughfareName></Thoroughfare><PostalCode><PostalCodeNumber>45127</PostalCodeNumber></PostalCode></DependentLocality></Locality></SubAdministrativeArea></AdministrativeArea></Country></AddressDetails><ExtendedData><LatLonBox north="51.4609805" south="51.4546853" east="7.0198324" west="7.0135372" /></ExtendedData><Point><coordinates>7.0166848,51.4578329,0</coordinates></Point></Placemark><Placemark id="p2"><address>Stadtkern, Essen, Deutschland</address><AddressDetails Accuracy="4" xmlns="urn:oasis:names:tc:ciq:xsdschema:xAL:2.0"><Country><CountryNameCode>DE</CountryNameCode><CountryName>Deutschland</CountryName><AdministrativeArea><AdministrativeAreaName>Nordrhein-Westfalen</AdministrativeAreaName><SubAdministrativeArea><SubAdministrativeAreaName>Essen</SubAdministrativeAreaName><Locality><LocalityName>Essen</LocalityName><DependentLocality><DependentLocalityName>Stadtkern</DependentLocalityName></DependentLocality></Locality></SubAdministrativeArea></AdministrativeArea></Country></AddressDetails><ExtendedData><LatLonBox north="51.4630710" south="51.4506320" east="7.0193200" west="7.0026170" /></ExtendedData><Point><coordinates>7.0124328,51.4568201,0</coordinates></Point></Placemark><Placemark id="p3"><address>45127 Essen, Deutschland</address><AddressDetails Accuracy="5" xmlns="urn:oasis:names:tc:ciq:xsdschema:xAL:2.0"><Country><CountryNameCode>DE</CountryNameCode><CountryName>Deutschland</CountryName><AdministrativeArea><AdministrativeAreaName>Nordrhein-Westfalen</AdministrativeAreaName><SubAdministrativeArea><SubAdministrativeAreaName>Essen</SubAdministrativeAreaName><Locality><LocalityName>Essen</LocalityName><PostalCode><PostalCodeNumber>45127</PostalCodeNumber></PostalCode></Locality></SubAdministrativeArea></AdministrativeArea></Country></AddressDetails><ExtendedData><LatLonBox north="51.4637808" south="51.4503125" east="7.0231080" west="6.9965454" /></ExtendedData><Point><coordinates>7.0104543,51.4556194,0</coordinates></Point></Placemark><Placemark id="p4"><address>Essen, Deutschland</address><AddressDetails Accuracy="4" xmlns="urn:oasis:names:tc:ciq:xsdschema:xAL:2.0"><Country><CountryNameCode>DE</CountryNameCode><CountryName>Deutschland</CountryName><AdministrativeArea><AdministrativeAreaName>Nordrhein-Westfalen</AdministrativeAreaName><SubAdministrativeArea><SubAdministrativeAreaName>Essen</SubAdministrativeAreaName><Locality><LocalityName>Essen</LocalityName></Locality></SubAdministrativeArea></AdministrativeArea></Country></AddressDetails><ExtendedData><LatLonBox north="51.5342070" south="51.3475730" east="7.1376530" west="6.8943470" /></ExtendedData><Point><coordinates>7.0147614,51.4580686,0</coordinates></Point></Placemark><Placemark id="p5"><address>Essen, Deutschland</address><AddressDetails Accuracy="3" xmlns="urn:oasis:names:tc:ciq:xsdschema:xAL:2.0"><Country><CountryNameCode>DE</CountryNameCode><CountryName>Deutschland</CountryName><AdministrativeArea><AdministrativeAreaName>Nordrhein-Westfalen</AdministrativeAreaName><SubAdministrativeArea><SubAdministrativeAreaName>Essen</SubAdministrativeAreaName></SubAdministrativeArea></AdministrativeArea></Country></AddressDetails><ExtendedData><LatLonBox north="51.5342070" south="51.3475730" east="7.1376530" west="6.8943470" /></ExtendedData><Point><coordinates>7.0461136,51.4508381,0</coordinates></Point></Placemark><Placemark id="p6"><address>Nordrhein-Westfalen, Deutschland</address><AddressDetails Accuracy="2" xmlns="urn:oasis:names:tc:ciq:xsdschema:xAL:2.0"><Country><CountryNameCode>DE</CountryNameCode><CountryName>Deutschland</CountryName><AdministrativeArea><AdministrativeAreaName>Nordrhein-Westfalen</AdministrativeAreaName></AdministrativeArea></Country></AddressDetails><ExtendedData><LatLonBox north="52.5314170" south="50.3225720" east="9.4615950" west="5.8663566" /></ExtendedData><Point><coordinates>7.6615938,51.4332367,0</coordinates></Point></Placemark><Placemark id="p7"><address>Deutschland</address><AddressDetails Accuracy="1" xmlns="urn:oasis:names:tc:ciq:xsdschema:xAL:2.0"><Country><CountryNameCode>DE</CountryNameCode><CountryName>Deutschland</CountryName></Country></AddressDetails><ExtendedData><LatLonBox north="55.0568230" south="47.2701270" east="15.0418536" west="5.8663566" /></ExtendedData><Point><coordinates>10.4515260,51.1656910,0</coordinates></Point></Placemark></Response></kml>
9
+ EOF
10
+
11
+
12
+ def test_google_full_address
13
+ response = MockSuccess.new
14
+ response.expects(:body).returns(GOOGLE_REVERSE_FULL)
15
+
16
+
17
+ # http://maps.google.com/maps/geo?output=xml&oe=utf-8&ll=51.4578329,7.0166848&key=asdad
18
+
19
+ # #<Geokit::GeoLoc:0x10ec7ec
20
+ # @city="Essen",
21
+ # @country_code="DE",
22
+ # @full_address="Porscheplatz 1, 45127 Essen, Germany",
23
+ # @lat=51.4578329,
24
+ # @lng=7.0166848,
25
+ # @precision="address",
26
+ # @provider="google",
27
+ # @state="Nordrhein-Westfalen",
28
+ # @street_address="Porscheplatz 1",
29
+ # @success=true,
30
+ # @zip="45127">
31
+ #
32
+
33
+
34
+ @latlng = "51.4578329,7.0166848"
35
+
36
+ url = "http://maps.google.com/maps/geo?ll=#{Geokit::Inflector.url_escape(@latlng)}&output=xml&key=Google&oe=utf-8"
37
+ Geokit::Geocoders::GoogleGeocoder.expects(:call_geocoder_service).with(url).returns(response)
38
+ res=Geokit::Geocoders::GoogleGeocoder.reverse_geocode(@latlng)
39
+ assert_equal "Nordrhein-Westfalen", res.state
40
+ assert_equal "Essen", res.city
41
+ assert_equal "45127", res.zip
42
+ assert_equal "51.4578329,7.0166848", res.ll # slightly dif from yahoo
43
+ assert res.is_us? == false
44
+ assert_equal "Porscheplatz 1, 45127 Essen, Deutschland", res.full_address #slightly different from yahoo
45
+ assert_equal "google", res.provider
46
+ end
47
+
48
+
49
+ end