package io.graceland.application; import java.util.List; import org.junit.Test; import com.google.common.collect.ImmutableList; import io.graceland.plugin.Plugin; import static org.hamcrest.Matchers.contains; import static org.hamcrest.Matchers.equalTo; import static org.junit.Assert.assertThat; import static org.mockito.Mockito.mock; public abstract class ApplicationTest { protected Application application = newApplication(); protected abstract Application newApplication(); @Test public void getPlugins_stay_the_same() { application.loadPlugin(mock(Plugin.class)); ImmutableList<Plugin> plugins1 = application.getPlugins(); ImmutableList<Plugin> plugins2 = application.getPlugins(); assertThat(plugins1, equalTo(plugins2)); } @Test(expected = IllegalStateException.class) public void must_load_at_least_one_plugin() { application.getPlugins(); } @Test(expected = NullPointerException.class) public void loadPlugin_cannot_take_null() { application.loadPlugin(null); } @Test public void can_load_multiple_plugins() { final Plugin plugin1 = mock(Plugin.class); final Plugin plugin2 = mock(Plugin.class); application.loadPlugin(plugin1); application.loadPlugin(plugin2); List<Plugin> plugins = application.getPlugins(); assertThat(plugins, contains(plugin1, plugin2)); } }