package vnet.sms.common.shell.clamshellspring.internal;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertSame;
import static org.junit.Assert.assertTrue;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.List;
import org.clamshellcli.api.Command;
import org.clamshellcli.api.Context;
import org.clamshellcli.api.IOConsole;
import org.clamshellcli.api.Plugin;
import org.clamshellcli.api.Prompt;
import org.clamshellcli.api.Shell;
import org.clamshellcli.api.SplashScreen;
import org.junit.Test;
public class SpringPluginRegistryTest {
@Test(expected = UnsupportedOperationException.class)
public final void assertThatGetPluginsReturnsAnImmutableList() {
final SpringPluginRegistry objectUnderTest = new SpringPluginRegistry();
final Plugin pluginBean = new Plugin() {
@Override
public void plug(final Context arg0) {
}
};
objectUnderTest.postProcessAfterInitialization(pluginBean,
"assertThatGetPluginsReturnsAnImmutableList");
final List<Plugin> plugins = objectUnderTest.getPlugins();
plugins.remove(0);
}
@Test(expected = UnsupportedOperationException.class)
public final void assertThatGetPluginsByTypeReturnsAnImmutableList() {
final SpringPluginRegistry objectUnderTest = new SpringPluginRegistry();
final Plugin pluginBean = new Plugin() {
@Override
public void plug(final Context arg0) {
}
};
objectUnderTest.postProcessAfterInitialization(pluginBean,
"assertThatGetPluginsReturnsAnImmutableList");
final List<Plugin> plugins = objectUnderTest
.getPluginsByType(Plugin.class);
plugins.remove(0);
}
@Test(expected = IllegalStateException.class)
public final void assertThatGetShellRecognizesThatNoShellHasBeenRegistered() {
final SpringPluginRegistry objectUnderTest = new SpringPluginRegistry();
objectUnderTest.getShell();
}
@Test(expected = IllegalStateException.class)
public final void assertThatGetShellRecognizesThatMoreThaOneShellHasBeenRegistered() {
final SpringPluginRegistry objectUnderTest = new SpringPluginRegistry();
final Shell shellOne = new Shell() {
@Override
public void plug(final Context arg0) {
}
@Override
public void exec(final Context arg0) {
}
};
objectUnderTest
.postProcessAfterInitialization(shellOne,
"assertThatGetShellRecognizesThatMoreThaOneShellHasBeenRegistered");
final Shell shellTwo = new Shell() {
@Override
public void plug(final Context arg0) {
}
@Override
public void exec(final Context arg0) {
}
};
objectUnderTest
.postProcessAfterInitialization(shellTwo,
"assertThatGetShellRecognizesThatMoreThaOneShellHasBeenRegistered");
objectUnderTest.getShell();
}
@Test(expected = IllegalStateException.class)
public final void assertThatGetIOConsoleRecognizesThatNoIOConsoleHasBeenRegistered() {
final SpringPluginRegistry objectUnderTest = new SpringPluginRegistry();
objectUnderTest.getIOConsole();
}
@Test(expected = IllegalStateException.class)
public final void assertThatGetIOConsoleRecognizesThatMoreThaOneIOConsoleHasBeenRegistered() {
final SpringPluginRegistry objectUnderTest = new SpringPluginRegistry();
final IOConsole one = new IOConsole() {
@Override
public void plug(final Context arg0) {
}
@Override
public InputStream getInputStream() {
return null;
}
@Override
public OutputStream getOutputStream() {
return null;
}
@Override
public String readInput(final String arg0) {
return null;
}
@Override
public void writeOutput(final String arg0) {
}
};
objectUnderTest
.postProcessAfterInitialization(one,
"assertThatGetIOConsoleRecognizesThatMoreThaOneIOConsoleHasBeenRegistered");
final IOConsole two = new IOConsole() {
@Override
public void plug(final Context arg0) {
}
@Override
public InputStream getInputStream() {
return null;
}
@Override
public OutputStream getOutputStream() {
return null;
}
@Override
public String readInput(final String arg0) {
return null;
}
@Override
public void writeOutput(final String arg0) {
}
};
objectUnderTest
.postProcessAfterInitialization(two,
"assertThatGetIOConsoleRecognizesThatMoreThaOneIOConsoleHasBeenRegistered");
objectUnderTest.getIOConsole();
}
@Test
public final void assertThatGetPromptReturnsDefaultPromptIfNoPromptHasBeenRegistered() {
final SpringPluginRegistry objectUnderTest = new SpringPluginRegistry();
final Prompt defaultPrompt = objectUnderTest.getPrompt();
assertNotNull(
"SpringPluginRegistry should have returned a default Prompt if none has been explicitly registered",
defaultPrompt);
}
@Test(expected = IllegalStateException.class)
public final void assertThatGetPromptRecognizesThatMoreThaOnePromptHasBeenRegistered() {
final SpringPluginRegistry objectUnderTest = new SpringPluginRegistry();
final Prompt one = new Prompt() {
@Override
public void plug(final Context arg0) {
}
@Override
public String getValue(final Context arg0) {
return null;
}
};
objectUnderTest
.postProcessAfterInitialization(one,
"assertThatGetPromptRecognizesThatMoreThaOnePromptHasBeenRegistered");
final Prompt two = new Prompt() {
@Override
public void plug(final Context arg0) {
}
@Override
public String getValue(final Context arg0) {
return null;
}
};
objectUnderTest
.postProcessAfterInitialization(two,
"assertThatGetPromptRecognizesThatMoreThaOnePromptHasBeenRegistered");
objectUnderTest.getPrompt();
}
@Test
public final void assertThatGetSplashScreenReturnsNullIfNoSplashScreenHasBeenRegistered() {
final SpringPluginRegistry objectUnderTest = new SpringPluginRegistry();
final SplashScreen nullSplashScreen = objectUnderTest.getSplashScreen();
assertNull(
"getSplashScreen() should return null if no splash screen has been registered",
nullSplashScreen);
}
@Test(expected = IllegalStateException.class)
public final void assertThatGetSplashScreenRecognizesThatMoreThaOneSplashScreenHasBeenRegistered() {
final SpringPluginRegistry objectUnderTest = new SpringPluginRegistry();
final SplashScreen one = new SplashScreen() {
@Override
public void plug(final Context arg0) {
}
@Override
public void render(final Context arg0) {
}
};
objectUnderTest
.postProcessAfterInitialization(
one,
"assertThatGetSplashScreenRecognizesThatMoreThaOneSplashScreenHasBeenRegistered");
final SplashScreen two = new SplashScreen() {
@Override
public void plug(final Context arg0) {
}
@Override
public void render(final Context arg0) {
}
};
objectUnderTest
.postProcessAfterInitialization(
two,
"assertThatGetSplashScreenRecognizesThatMoreThaOneSplashScreenHasBeenRegistered");
objectUnderTest.getSplashScreen();
}
@Test
public final void assertThatPostProcessBeforeInitializationReturnsBeanPassedIn() {
final SpringPluginRegistry objectUnderTest = new SpringPluginRegistry();
final Object beanPassedIn = new Object();
final Object beanReturned = objectUnderTest
.postProcessBeforeInitialization(beanPassedIn,
"assertThatPostProcessBeforeInitializationReturnsBeanPassedIn");
assertSame(
"postProcessBeforeInitialization(...) should have returned the bean passed in, yet it didn't",
beanPassedIn, beanReturned);
}
@Test
public final void assertThatPostProcessAfterInitializationReturnsBeanPassedIn() {
final SpringPluginRegistry objectUnderTest = new SpringPluginRegistry();
final Object beanPassedIn = new Object();
final Object beanReturned = objectUnderTest
.postProcessAfterInitialization(beanPassedIn,
"assertThatPostProcessAfterInitializationReturnsBeanPassedIn");
assertSame(
"postProcessAfterInitialization(...) should have returned the bean passed in, yet it didn't",
beanPassedIn, beanReturned);
}
@Test
public final void assertThatPostProcessAfterInitializationIgnoresNonPluginBeans() {
final SpringPluginRegistry objectUnderTest = new SpringPluginRegistry();
final Object nonPluginBean = new Object();
objectUnderTest
.postProcessAfterInitialization(nonPluginBean,
"assertThatPostProcessAfterInitializationIgnoresNonPluginBeans");
assertTrue(
"postProcessAfterInitialization(...) should have ignored a bean that does not implement "
+ Plugin.class.getName()
+ ", yet it registered it as a Plugin", objectUnderTest
.getPlugins().isEmpty());
}
@Test
public final void assertThatPostProcessAfterInitializationIgnoresCommandBeans() {
final SpringPluginRegistry objectUnderTest = new SpringPluginRegistry();
final Command commandBean = new Command() {
@Override
public void plug(final Context arg0) {
}
@Override
public Object execute(final Context arg0) {
return null;
}
@Override
public Descriptor getDescriptor() {
return null;
}
};
objectUnderTest.postProcessAfterInitialization(commandBean,
"assertThatPostProcessAfterInitializationIgnoresCommandBeans");
assertTrue(
"postProcessAfterInitialization(...) should have ignored a bean that implements "
+ Command.class.getName()
+ ", yet it registered it as a Plugin", objectUnderTest
.getPlugins().isEmpty());
}
@Test
public final void assertThatPostProcessAfterInitializationRegistersAPluginThatIsNotACommand() {
final SpringPluginRegistry objectUnderTest = new SpringPluginRegistry();
final Plugin pluginBean = new Plugin() {
@Override
public void plug(final Context arg0) {
}
};
objectUnderTest
.postProcessAfterInitialization(pluginBean,
"assertThatPostProcessAfterInitializationRegistersAPluginThatIsNotACommand");
assertTrue(
"postProcessAfterInitialization(...) should have registered a bean that implements "
+ Plugin.class.getName()
+ " and is not a "
+ Command.class.getName() + ", yet it ignored it",
objectUnderTest.getPlugins().size() == 1);
}
}