package org.skife.url; import com.google.common.base.Charsets; import com.google.common.io.CharStreams; import org.junit.Test; import java.io.IOException; import java.io.InputStreamReader; import java.io.Reader; import java.net.URL; import static org.fest.assertions.Assertions.assertThat; public class UrlSchemeRegistryTest { @Test public void testRegisterHandler() throws Exception { UrlSchemeRegistry.register("dinner", DinnerHandler.class); assertThat(read(new URL("dinner://steak"))).isEqualTo("steak"); } @Test(expected = IllegalStateException.class) public void testOnlyAllowsOneSchemePerUrl() throws Exception { UrlSchemeRegistry.register("dinner", DinnerHandler.class); UrlSchemeRegistry.register("dinner", DinnerHandler2.class); } /* Tests for internal package registration logic -- registerPackage is NOT public API */ @Test public void testSinglePackageRegistration() throws Exception { UrlSchemeRegistry.registerPackage("org.skife.url.one"); URL url = new URL("breakfast://pancakes"); Reader in = new InputStreamReader(url.openStream(), Charsets.UTF_8); String body = CharStreams.toString(in); in.close(); assertThat(body).isEqualTo("pancakes"); } @Test public void testMultiplePackageRegistration() throws Exception { UrlSchemeRegistry.registerPackage("org.skife.url.one"); UrlSchemeRegistry.registerPackage("org.skife.url.two"); assertThat(read(new URL("breakfast://pancakes"))).isEqualTo("pancakes"); assertThat(read(new URL("lunch://sammy"))).isEqualTo("sammy"); } private static String read(URL url) throws IOException { Reader r = new InputStreamReader(url.openStream(), Charsets.UTF_8); String body = CharStreams.toString(r); r.close(); return body; } }