package io.graceland.plugin.loaders; import java.util.ServiceLoader; import org.junit.Test; import org.junit.runner.RunWith; import org.powermock.api.mockito.PowerMockito; import org.powermock.core.classloader.annotations.PrepareForTest; import org.powermock.modules.junit4.PowerMockRunner; import com.google.common.collect.ImmutableList; import io.graceland.plugin.Plugin; import static org.mockito.Matchers.any; import static org.mockito.Matchers.eq; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @RunWith(PowerMockRunner.class) @PrepareForTest(NativePluginLoader.class) public class NativePluginLoaderTest extends PluginLoaderTest<NativePluginLoader> { @Override protected NativePluginLoader newPluginLoader() { return NativePluginLoader.newLoader(); } @Test public void gets_plugins_from_serviceloader() { Plugin plugin1 = mock(Plugin.class); Plugin plugin2 = mock(Plugin.class); Plugin plugin3 = mock(Plugin.class); ServiceLoader dummyLoader = PowerMockito.mock(ServiceLoader.class); when(dummyLoader.iterator()).thenReturn(ImmutableList.of(plugin1, plugin2, plugin3).iterator()); PowerMockito.mockStatic(ServiceLoader.class); when(ServiceLoader.load(any(Class.class))).thenReturn(dummyLoader); pluginLoader.loadInto(application); verify(application).loadPlugin(eq(plugin1)); verify(application).loadPlugin(eq(plugin2)); verify(application).loadPlugin(eq(plugin3)); } }