--- /dev/null
+require File.join(File.dirname(__FILE__), 'base_geocoder_test')
+
+GeoKit::Geocoders::provider_order=[:google,:yahoo,:us]
+
+class MultiGeocoderTest < BaseGeocoderTest #:nodoc: all
+
+ def setup
+ super
+ @failure = GeoKit::GeoLoc.new
+ end
+
+ def test_successful_first
+ GeoKit::Geocoders::GoogleGeocoder.expects(:geocode).with(@address).returns(@success)
+ assert_equal @success, GeoKit::Geocoders::MultiGeocoder.geocode(@address)
+ end
+
+ def test_failover
+ GeoKit::Geocoders::GoogleGeocoder.expects(:geocode).with(@address).returns(@failure)
+ GeoKit::Geocoders::YahooGeocoder.expects(:geocode).with(@address).returns(@success)
+ assert_equal @success, GeoKit::Geocoders::MultiGeocoder.geocode(@address)
+ end
+
+ def test_double_failover
+ GeoKit::Geocoders::GoogleGeocoder.expects(:geocode).with(@address).returns(@failure)
+ GeoKit::Geocoders::YahooGeocoder.expects(:geocode).with(@address).returns(@failure)
+ GeoKit::Geocoders::UsGeocoder.expects(:geocode).with(@address).returns(@success)
+ assert_equal @success, GeoKit::Geocoders::MultiGeocoder.geocode(@address)
+ end
+
+ def test_failure
+ GeoKit::Geocoders::GoogleGeocoder.expects(:geocode).with(@address).returns(@failure)
+ GeoKit::Geocoders::YahooGeocoder.expects(:geocode).with(@address).returns(@failure)
+ GeoKit::Geocoders::UsGeocoder.expects(:geocode).with(@address).returns(@failure)
+ assert_equal @failure, GeoKit::Geocoders::MultiGeocoder.geocode(@address)
+ end
+
+ def test_invalid_provider
+ temp = GeoKit::Geocoders::provider_order
+ GeoKit::Geocoders.provider_order = [:bogus]
+ assert_equal @failure, GeoKit::Geocoders::MultiGeocoder.geocode(@address)
+ GeoKit::Geocoders.provider_order = temp
+ end
+
+end
\ No newline at end of file