Browse Source

Add tests for name-based dependency resolution against util:map

See gh-35690
pull/35708/head
Juergen Hoeller 2 months ago
parent
commit
b53fb13f30
  1. 55
      spring-beans/src/test/java/org/springframework/beans/factory/xml/UtilNamespaceHandlerTests.java

55
spring-beans/src/test/java/org/springframework/beans/factory/xml/UtilNamespaceHandlerTests.java

@ -28,6 +28,7 @@ import org.assertj.core.api.InstanceOfAssertFactories;
import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.config.DependencyDescriptor;
import org.springframework.beans.factory.config.FieldRetrievingFactoryBean; import org.springframework.beans.factory.config.FieldRetrievingFactoryBean;
import org.springframework.beans.factory.config.PropertiesFactoryBean; import org.springframework.beans.factory.config.PropertiesFactoryBean;
import org.springframework.beans.factory.parsing.ComponentDefinition; import org.springframework.beans.factory.parsing.ComponentDefinition;
@ -46,7 +47,6 @@ import static org.assertj.core.api.Assertions.assertThat;
* @author Juergen Hoeller * @author Juergen Hoeller
* @author Mark Fisher * @author Mark Fisher
*/ */
@SuppressWarnings("rawtypes")
class UtilNamespaceHandlerTests { class UtilNamespaceHandlerTests {
private DefaultListableBeanFactory beanFactory; private DefaultListableBeanFactory beanFactory;
@ -55,7 +55,7 @@ class UtilNamespaceHandlerTests {
@BeforeEach @BeforeEach
void setUp() { void setup() {
this.beanFactory = new DefaultListableBeanFactory(); this.beanFactory = new DefaultListableBeanFactory();
XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(this.beanFactory); XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(this.beanFactory);
reader.setEventListener(this.listener); reader.setEventListener(this.listener);
@ -109,17 +109,17 @@ class UtilNamespaceHandlerTests {
@Test @Test
void testSimpleMap() { void testSimpleMap() {
Map<?, ?> map = (Map) this.beanFactory.getBean("simpleMap"); Map<?, ?> map = (Map<?, ?>) this.beanFactory.getBean("simpleMap");
assertThat(map.get("foo")).isEqualTo("bar"); assertThat(map.get("foo")).isEqualTo("bar");
Map<?, ?> map2 = (Map) this.beanFactory.getBean("simpleMap"); Map<?, ?> map2 = (Map<?, ?>) this.beanFactory.getBean("simpleMap");
assertThat(map).isSameAs(map2); assertThat(map).isSameAs(map2);
} }
@Test @Test
void testScopedMap() { void testScopedMap() {
Map<?, ?> map = (Map) this.beanFactory.getBean("scopedMap"); Map<?, ?> map = (Map<?, ?>) this.beanFactory.getBean("scopedMap");
assertThat(map.get("foo")).isEqualTo("bar"); assertThat(map.get("foo")).isEqualTo("bar");
Map<?, ?> map2 = (Map) this.beanFactory.getBean("scopedMap"); Map<?, ?> map2 = (Map<?, ?>) this.beanFactory.getBean("scopedMap");
assertThat(map2.get("foo")).isEqualTo("bar"); assertThat(map2.get("foo")).isEqualTo("bar");
assertThat(map).isNotSameAs(map2); assertThat(map).isNotSameAs(map2);
} }
@ -164,17 +164,23 @@ class UtilNamespaceHandlerTests {
} }
@Test @Test
void testMapWithRef() { void testMapWithRef() throws Exception {
Map<?, ?> map = (Map) this.beanFactory.getBean("mapWithRef"); Map<?, ?> map = (Map<?, ?>) this.beanFactory.getBean("mapWithRef");
assertThat(map).isInstanceOf(TreeMap.class); assertThat(map).isInstanceOf(TreeMap.class);
assertThat(map.get("bean")).isEqualTo(this.beanFactory.getBean("testBean")); assertThat(map.get("bean")).isEqualTo(this.beanFactory.getBean("testBean"));
assertThat(this.beanFactory.resolveDependency(
new DependencyDescriptor(getClass().getDeclaredField("mapWithRef"), true), null))
.isSameAs(map);
} }
@Test @Test
void testMapWithTypes() { void testMapWithTypes() throws Exception {
Map<?, ?> map = (Map) this.beanFactory.getBean("mapWithTypes"); Map<?, ?> map = (Map<?, ?>) this.beanFactory.getBean("mapWithTypes");
assertThat(map).isInstanceOf(LinkedCaseInsensitiveMap.class); assertThat(map).isInstanceOf(LinkedCaseInsensitiveMap.class);
assertThat(map.get("bean")).isEqualTo(this.beanFactory.getBean("testBean")); assertThat(map.get("bean")).isEqualTo(this.beanFactory.getBean("testBean"));
assertThat(this.beanFactory.resolveDependency(
new DependencyDescriptor(getClass().getDeclaredField("mapWithTypes"), true), null))
.isSameAs(map);
} }
@Test @Test
@ -240,11 +246,11 @@ class UtilNamespaceHandlerTests {
void testCircularCollections() { void testCircularCollections() {
TestBean bean = (TestBean) this.beanFactory.getBean("circularCollectionsBean"); TestBean bean = (TestBean) this.beanFactory.getBean("circularCollectionsBean");
assertThat(bean.getSomeList()).singleElement().isEqualTo(bean); assertThat(bean.getSomeList()).singleElement().isSameAs(bean);
assertThat(bean.getSomeSet()).singleElement().isEqualTo(bean); assertThat(bean.getSomeSet()).singleElement().isSameAs(bean);
assertThat(bean.getSomeMap()).hasSize(1).allSatisfy((key, value) -> { assertThat(bean.getSomeMap()).hasSize(1).allSatisfy((key, value) -> {
assertThat(key).isEqualTo("foo"); assertThat(key).isEqualTo("foo");
assertThat(value).isEqualTo(bean); assertThat(value).isSameAs(bean);
}); });
} }
@ -255,17 +261,17 @@ class UtilNamespaceHandlerTests {
List<?> list = bean.getSomeList(); List<?> list = bean.getSomeList();
assertThat(Proxy.isProxyClass(list.getClass())).isTrue(); assertThat(Proxy.isProxyClass(list.getClass())).isTrue();
assertThat(list).singleElement().isEqualTo(bean); assertThat(list).singleElement().isSameAs(bean);
Set<?> set = bean.getSomeSet(); Set<?> set = bean.getSomeSet();
assertThat(Proxy.isProxyClass(set.getClass())).isFalse(); assertThat(Proxy.isProxyClass(set.getClass())).isFalse();
assertThat(set).singleElement().isEqualTo(bean); assertThat(set).singleElement().isSameAs(bean);
Map<?, ?> map = bean.getSomeMap(); Map<?, ?> map = bean.getSomeMap();
assertThat(Proxy.isProxyClass(map.getClass())).isFalse(); assertThat(Proxy.isProxyClass(map.getClass())).isFalse();
assertThat(map).hasSize(1).allSatisfy((key, value) -> { assertThat(map).hasSize(1).allSatisfy((key, value) -> {
assertThat(key).isEqualTo("foo"); assertThat(key).isEqualTo("foo");
assertThat(value).isEqualTo(bean); assertThat(value).isSameAs(bean);
}); });
} }
@ -276,17 +282,17 @@ class UtilNamespaceHandlerTests {
List<?> list = bean.getSomeList(); List<?> list = bean.getSomeList();
assertThat(Proxy.isProxyClass(list.getClass())).isFalse(); assertThat(Proxy.isProxyClass(list.getClass())).isFalse();
assertThat(list).singleElement().isEqualTo(bean); assertThat(list).singleElement().isSameAs(bean);
Set<?> set = bean.getSomeSet(); Set<?> set = bean.getSomeSet();
assertThat(Proxy.isProxyClass(set.getClass())).isTrue(); assertThat(Proxy.isProxyClass(set.getClass())).isTrue();
assertThat(set).singleElement().isEqualTo(bean); assertThat(set).singleElement().isSameAs(bean);
Map<?, ?> map = bean.getSomeMap(); Map<?, ?> map = bean.getSomeMap();
assertThat(Proxy.isProxyClass(map.getClass())).isFalse(); assertThat(Proxy.isProxyClass(map.getClass())).isFalse();
assertThat(map).hasSize(1).allSatisfy((key, value) -> { assertThat(map).hasSize(1).allSatisfy((key, value) -> {
assertThat(key).isEqualTo("foo"); assertThat(key).isEqualTo("foo");
assertThat(value).isEqualTo(bean); assertThat(value).isSameAs(bean);
}); });
} }
@ -297,17 +303,17 @@ class UtilNamespaceHandlerTests {
List<?> list = bean.getSomeList(); List<?> list = bean.getSomeList();
assertThat(Proxy.isProxyClass(list.getClass())).isFalse(); assertThat(Proxy.isProxyClass(list.getClass())).isFalse();
assertThat(list).singleElement().isEqualTo(bean); assertThat(list).singleElement().isSameAs(bean);
Set<?> set = bean.getSomeSet(); Set<?> set = bean.getSomeSet();
assertThat(Proxy.isProxyClass(set.getClass())).isFalse(); assertThat(Proxy.isProxyClass(set.getClass())).isFalse();
assertThat(set).singleElement().isEqualTo(bean); assertThat(set).singleElement().isSameAs(bean);
Map<?, ?> map = bean.getSomeMap(); Map<?, ?> map = bean.getSomeMap();
assertThat(Proxy.isProxyClass(map.getClass())).isTrue(); assertThat(Proxy.isProxyClass(map.getClass())).isTrue();
assertThat(map).hasSize(1).allSatisfy((key, value) -> { assertThat(map).hasSize(1).allSatisfy((key, value) -> {
assertThat(key).isEqualTo("foo"); assertThat(key).isEqualTo("foo");
assertThat(value).isEqualTo(bean); assertThat(value).isSameAs(bean);
}); });
} }
@ -372,4 +378,9 @@ class UtilNamespaceHandlerTests {
assertThat(props).as("Incorrect property value").containsEntry("foo2", "local2"); assertThat(props).as("Incorrect property value").containsEntry("foo2", "local2");
} }
// For DependencyDescriptor resolution
private Map<String, TestBean> mapWithRef;
private Map<String, TestBean> mapWithTypes;
} }

Loading…
Cancel
Save