package org.springframework.context.annotation;
import junit.framework.TestCase;
import org.springframework.beans.factory.annotation.AnnotatedBeanDefinition;
import org.springframework.beans.factory.annotation.AnnotatedGenericBeanDefinition;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.test.AssertThrows;
/**
* Unit tests for the {@link AnnotationScopeMetadataResolver} class.
*
* @author Rick Evans
*/
public final class AnnotationScopeMetadataResolverTests extends TestCase {
private AnnotationScopeMetadataResolver scopeMetadataResolver;
@Override
protected void setUp() throws Exception {
this.scopeMetadataResolver = new AnnotationScopeMetadataResolver();
}
public void testThatResolveScopeMetadataDoesNotApplyScopedProxyModeToASingleton() {
AnnotatedBeanDefinition bd = new AnnotatedGenericBeanDefinition(AnnotatedWithSingletonScope.class);
ScopeMetadata scopeMetadata = this.scopeMetadataResolver.resolveScopeMetadata(bd);
assertNotNull("resolveScopeMetadata(..) must *never* return null.", scopeMetadata);
assertEquals(BeanDefinition.SCOPE_SINGLETON, scopeMetadata.getScopeName());
assertEquals(ScopedProxyMode.NO, scopeMetadata.getScopedProxyMode());
}
public void testThatResolveScopeMetadataDoesApplyScopedProxyModeToAPrototype() {
this.scopeMetadataResolver = new AnnotationScopeMetadataResolver(ScopedProxyMode.INTERFACES);
AnnotatedBeanDefinition bd = new AnnotatedGenericBeanDefinition(AnnotatedWithPrototypeScope.class);
ScopeMetadata scopeMetadata = this.scopeMetadataResolver.resolveScopeMetadata(bd);
assertNotNull("resolveScopeMetadata(..) must *never* return null.", scopeMetadata);
assertEquals(BeanDefinition.SCOPE_PROTOTYPE, scopeMetadata.getScopeName());
assertEquals(ScopedProxyMode.INTERFACES, scopeMetadata.getScopedProxyMode());
}
public void testCtorWithNullScopedProxyMode() {
new AssertThrows(IllegalArgumentException.class) {
public void test() throws Exception {
new AnnotationScopeMetadataResolver(null);
}
}.runTest();
}
public void testSetScopeAnnotationTypeWithNullType() {
new AssertThrows(IllegalArgumentException.class) {
public void test() throws Exception {
scopeMetadataResolver.setScopeAnnotationType(null);
}
}.runTest();
}
@Scope("singleton")
private static final class AnnotatedWithSingletonScope {
}
@Scope("prototype")
private static final class AnnotatedWithPrototypeScope {
}
}