/** * Copyright 2011-2017 Asakusa Framework Team. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.asakusafw.testdriver.windgate; import static org.hamcrest.Matchers.*; import static org.junit.Assert.*; import java.io.Closeable; import java.io.IOException; import java.util.concurrent.Callable; import org.junit.Test; /** * Test for {@link PluginClassLoader}. */ public class PluginClassLoaderTest { /** * Test method for {@link PluginClassLoader#loadDirect(java.lang.Class)}. * @throws Exception if failed */ @Test public void loadDirect_simple() throws Exception { PluginClassLoader loader = new PluginClassLoader(getClass().getClassLoader()); try { Callable<?> callable = (Callable<?>) loader.loadDirect(MockCallable.class).newInstance(); assertThat(callable.getClass(), is(not((Object) MockCallable.class))); assertThat(callable.call(), is((Object) "Hello, world!")); } finally { dispose(loader); } } /** * Test method for {@link PluginClassLoader#loadDirect(java.lang.Class)}. * @throws Exception if failed */ @Test public void loadDirect_cached() throws Exception { PluginClassLoader loader = new PluginClassLoader(getClass().getClassLoader()); try { Class<?> c1 = loader.loadDirect(MockCallable.class); Class<?> c2 = loader.loadDirect(MockCallable.class); assertThat(c2, is(sameInstance((Object) c1))); } finally { dispose(loader); } } private void dispose(Object object) throws IOException { if (object instanceof Closeable) { ((Closeable) object).close(); } } /** * {@link Callable} class for testing. */ public static class MockCallable implements Callable<String> { @Override public String call() throws Exception { return "Hello, world!"; } } }