/**
*
*/
package vnet.sms.gateway.server.framework.description;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertSame;
import java.util.concurrent.atomic.AtomicReference;
import org.junit.Test;
import org.springframework.context.support.StaticApplicationContext;
import vnet.sms.gateway.server.framework.GatewayServerDescriptionAware;
import vnet.sms.gateway.server.framework.internal.description.GatewayServerDescriptionInjector;
import vnet.sms.gateway.server.framework.spi.GatewayServerDescription;
/**
* @author obergner
*
*/
public class GatewayServerDescriptionInjectorTest {
@Test
public final void assertThatPostProcessBeforeInitializationReturnsBeanPassedIn() {
final Object beanPassedIn = new Object();
final GatewayServerDescriptionInjector objectUnderTest = new GatewayServerDescriptionInjector();
final Object returnedBean = objectUnderTest
.postProcessBeforeInitialization(beanPassedIn,
"assertThatPostProcessBeforeInitializationReturnsBeanPassedIn");
assertSame(
"postProcessBeforeInitialization() did not return the bean that has been passed in",
beanPassedIn, returnedBean);
}
@Test
public final void assertThatPostProcessAfterInitializationReturnsBeanPassedIn() {
final Object beanPassedIn = new Object();
final GatewayServerDescriptionInjector objectUnderTest = new GatewayServerDescriptionInjector();
final Object returnedBean = objectUnderTest
.postProcessAfterInitialization(beanPassedIn,
"assertThatPostProcessAfterInitializationReturnsBeanPassedIn");
assertSame(
"postProcessAfterInitialization() did not return the bean that has been passed in",
beanPassedIn, returnedBean);
}
@Test(expected = IllegalStateException.class)
public final void assertThatPostProcessBeforeInitializationRecognizesMissingApplicationContext() {
final AtomicReference<GatewayServerDescription> gatewayServerDescriptionHolder = new AtomicReference<GatewayServerDescription>();
final GatewayServerDescriptionAware extensionPoint = new GatewayServerDescriptionAware() {
@Override
public void setGatewayServerDescription(
final GatewayServerDescription description) {
gatewayServerDescriptionHolder.set(description);
}
};
final GatewayServerDescriptionInjector objectUnderTest = new GatewayServerDescriptionInjector();
objectUnderTest
.postProcessBeforeInitialization(extensionPoint,
"assertThatPostProcessBeforeInitializationRecognizesMissingApplicationContext");
}
@Test
public final void assertThatPostProcessBeforeInitializationInjectsGatewayServerDescriptionIntoGatewayServerDescriptionAwareBean() {
final AtomicReference<GatewayServerDescription> descriptionHolder = new AtomicReference<GatewayServerDescription>();
final GatewayServerDescriptionAware extensionPoint = new GatewayServerDescriptionAware() {
@Override
public void setGatewayServerDescription(
final GatewayServerDescription description) {
descriptionHolder.set(description);
}
};
final StaticApplicationContext appContext = new StaticApplicationContext();
appContext
.registerSingleton(
"assertThatPostProcessBeforeInitializationInjectsGatewayServerDescriptionIntoGatewayServerDescriptionAwareBean",
TestGatewayServerDescription.class);
final GatewayServerDescriptionInjector objectUnderTest = new GatewayServerDescriptionInjector();
objectUnderTest.setApplicationContext(appContext);
objectUnderTest
.postProcessBeforeInitialization(
extensionPoint,
"assertThatPostProcessBeforeInitializationInjectsGatewayServerDescriptionIntoGatewayServerDescriptionAwareBean");
assertNotNull(
"postProcessBeforeInitialization() did NOT inject GatewayServerDescription into GatewayServerDescriptionAware bean",
descriptionHolder.get());
}
@SuppressWarnings("serial")
private static final class TestGatewayServerDescription extends
GatewayServerDescription {
public TestGatewayServerDescription() {
super("Test", 1, 0, 0, "BETA", "15");
}
}
@Test(expected = IllegalArgumentException.class)
public final void assertThatSetApplicationContextRejectsNullApplicationContext() {
final GatewayServerDescriptionInjector objectUnderTest = new GatewayServerDescriptionInjector();
objectUnderTest.setApplicationContext(null);
}
}