package vnet.sms.common.shell.clamshellspring.internal;
import static org.junit.Assert.assertSame;
import static org.junit.Assert.assertTrue;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import org.clamshellcli.api.Command;
import org.clamshellcli.api.Context;
import org.junit.Test;
public class SpringCommandRegistryTest {
@Test(expected = UnsupportedOperationException.class)
public final void assertThatGetCommandsReturnsImmutableList() {
final SpringCommandRegistry objectUnderTest = new SpringCommandRegistry();
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,
"assertThatGetCommandsReturnsImmutableList");
final List<Command> commands = objectUnderTest.getCommands();
commands.remove(0);
}
@Test(expected = UnsupportedOperationException.class)
public final void assertThatGetCommandsByNamespaceReturnsAnImmutableList() {
final SpringCommandRegistry objectUnderTest = new SpringCommandRegistry();
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,
"assertThatGetCommandsByNamespaceReturnsAnImmutableList");
final List<Command> commands = objectUnderTest
.getCommandsByNamespace("namespace");
commands.remove(0);
}
@Test(expected = UnsupportedOperationException.class)
public final void assertThatMapCommandsReturnsAnImmutableMap() {
final SpringCommandRegistry objectUnderTest = new SpringCommandRegistry();
final Map<String, Command> commands = objectUnderTest
.mapCommands(Collections.<Command> emptyList());
commands.remove(0);
}
@Test
public final void assertThatPostProcessBeforeInitializationReturnsBeanPassedIn() {
final SpringCommandRegistry objectUnderTest = new SpringCommandRegistry();
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 SpringCommandRegistry objectUnderTest = new SpringCommandRegistry();
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 assertThatPostProcessAfterInitializationIgnoresNonCommandBeans() {
final SpringCommandRegistry objectUnderTest = new SpringCommandRegistry();
final Object nonPluginBean = new Object();
objectUnderTest
.postProcessAfterInitialization(nonPluginBean,
"assertThatPostProcessAfterInitializationIgnoresNonPluginBeans");
assertTrue(
"postProcessAfterInitialization(...) should have ignored a bean that does not implement "
+ Command.class.getName()
+ ", yet it registered it as a Plugin", objectUnderTest
.getCommands().isEmpty());
}
@Test
public final void assertThatPostProcessAfterInitializationRegistersACommand() {
final SpringCommandRegistry objectUnderTest = new SpringCommandRegistry();
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,
"assertThatPostProcessAfterInitializationRegistersACommand");
assertTrue(
"postProcessAfterInitialization(...) should have registered a bean that implements "
+ Command.class.getName() + ", yet it ignored it",
objectUnderTest.getCommands().size() == 1);
}
}