Polish XmlBeanDefinitionReaderTests

This commit is contained in:
Sam Brannen
2023-07-16 13:22:48 +02:00
parent a92bd42236
commit d6e05ddf2d

View File

@@ -16,8 +16,6 @@
package org.springframework.beans.factory.xml;
import java.util.Arrays;
import org.junit.jupiter.api.Test;
import org.xml.sax.InputSource;
@@ -29,107 +27,98 @@ import org.springframework.beans.testfixture.beans.TestBean;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.InputStreamResource;
import org.springframework.core.io.Resource;
import org.springframework.util.ObjectUtils;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatExceptionOfType;
import static org.assertj.core.api.Assertions.assertThatNoException;
/**
* @author Rick Evans
* @author Juergen Hoeller
* @author Sam Brannen
*/
public class XmlBeanDefinitionReaderTests {
class XmlBeanDefinitionReaderTests {
private final SimpleBeanDefinitionRegistry registry = new SimpleBeanDefinitionRegistry();
private final XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(registry);
@Test
public void setParserClassSunnyDay() {
SimpleBeanDefinitionRegistry registry = new SimpleBeanDefinitionRegistry();
new XmlBeanDefinitionReader(registry).setDocumentReaderClass(DefaultBeanDefinitionDocumentReader.class);
void setReaderClass() {
assertThatNoException().isThrownBy(() -> reader.setDocumentReaderClass(DefaultBeanDefinitionDocumentReader.class));
}
@Test
public void withOpenInputStream() {
SimpleBeanDefinitionRegistry registry = new SimpleBeanDefinitionRegistry();
void withInputStreamResourceWithoutExplicitValidationMode() {
Resource resource = new InputStreamResource(getClass().getResourceAsStream("test.xml"));
assertThatExceptionOfType(BeanDefinitionStoreException.class).isThrownBy(() ->
new XmlBeanDefinitionReader(registry).loadBeanDefinitions(resource));
assertThatExceptionOfType(BeanDefinitionStoreException.class).isThrownBy(() -> reader.loadBeanDefinitions(resource));
}
@Test
public void withOpenInputStreamAndExplicitValidationMode() {
SimpleBeanDefinitionRegistry registry = new SimpleBeanDefinitionRegistry();
void withInputStreamResourceAndExplicitValidationMode() {
Resource resource = new InputStreamResource(getClass().getResourceAsStream("test.xml"));
XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(registry);
reader.setValidationMode(XmlBeanDefinitionReader.VALIDATION_DTD);
reader.loadBeanDefinitions(resource);
testBeanDefinitions(registry);
assertBeanDefinitions(registry);
}
@Test
public void withImport() {
SimpleBeanDefinitionRegistry registry = new SimpleBeanDefinitionRegistry();
void withImport() {
Resource resource = new ClassPathResource("import.xml", getClass());
new XmlBeanDefinitionReader(registry).loadBeanDefinitions(resource);
testBeanDefinitions(registry);
reader.loadBeanDefinitions(resource);
assertBeanDefinitions(registry);
}
@Test
public void withWildcardImport() {
SimpleBeanDefinitionRegistry registry = new SimpleBeanDefinitionRegistry();
void withWildcardImport() {
Resource resource = new ClassPathResource("importPattern.xml", getClass());
new XmlBeanDefinitionReader(registry).loadBeanDefinitions(resource);
testBeanDefinitions(registry);
reader.loadBeanDefinitions(resource);
assertBeanDefinitions(registry);
}
@Test
public void withInputSource() {
SimpleBeanDefinitionRegistry registry = new SimpleBeanDefinitionRegistry();
void withInputSourceWithoutExplicitValidationMode() {
InputSource resource = new InputSource(getClass().getResourceAsStream("test.xml"));
assertThatExceptionOfType(BeanDefinitionStoreException.class).isThrownBy(() ->
new XmlBeanDefinitionReader(registry).loadBeanDefinitions(resource));
assertThatExceptionOfType(BeanDefinitionStoreException.class)
.isThrownBy(() -> reader.loadBeanDefinitions(resource))
.withMessageStartingWith("Unable to determine validation mode for [resource loaded through SAX InputSource]:");
}
@Test
public void withInputSourceAndExplicitValidationMode() {
SimpleBeanDefinitionRegistry registry = new SimpleBeanDefinitionRegistry();
void withInputSourceAndExplicitValidationMode() {
InputSource resource = new InputSource(getClass().getResourceAsStream("test.xml"));
XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(registry);
reader.setValidationMode(XmlBeanDefinitionReader.VALIDATION_DTD);
reader.loadBeanDefinitions(resource);
testBeanDefinitions(registry);
assertBeanDefinitions(registry);
}
@Test
public void withFreshInputStream() {
SimpleBeanDefinitionRegistry registry = new SimpleBeanDefinitionRegistry();
void withClassPathResource() {
Resource resource = new ClassPathResource("test.xml", getClass());
new XmlBeanDefinitionReader(registry).loadBeanDefinitions(resource);
testBeanDefinitions(registry);
reader.loadBeanDefinitions(resource);
assertBeanDefinitions(registry);
}
private void testBeanDefinitions(BeanDefinitionRegistry registry) {
private void assertBeanDefinitions(BeanDefinitionRegistry registry) {
assertThat(registry.getBeanDefinitionCount()).isEqualTo(24);
assertThat(registry.getBeanDefinitionNames()).hasSize(24);
assertThat(Arrays.asList(registry.getBeanDefinitionNames()).contains("rod")).isTrue();
assertThat(Arrays.asList(registry.getBeanDefinitionNames()).contains("aliased")).isTrue();
assertThat(registry.getBeanDefinitionNames()).contains("rod", "aliased");
assertThat(registry.containsBeanDefinition("rod")).isTrue();
assertThat(registry.containsBeanDefinition("aliased")).isTrue();
assertThat(registry.getBeanDefinition("rod").getBeanClassName()).isEqualTo(TestBean.class.getName());
assertThat(registry.getBeanDefinition("aliased").getBeanClassName()).isEqualTo(TestBean.class.getName());
assertThat(registry.isAlias("youralias")).isTrue();
String[] aliases = registry.getAliases("aliased");
assertThat(aliases).hasSize(2);
assertThat(ObjectUtils.containsElement(aliases, "myalias")).isTrue();
assertThat(ObjectUtils.containsElement(aliases, "youralias")).isTrue();
assertThat(registry.getAliases("aliased")).containsExactly("myalias", "youralias");
}
@Test
public void dtdValidationAutodetect() {
void dtdValidationAutodetect() {
doTestValidation("validateWithDtd.xml");
}
@Test
public void xsdValidationAutodetect() {
void xsdValidationAutodetect() {
doTestValidation("validateWithXsd.xml");
}
@@ -137,8 +126,7 @@ public class XmlBeanDefinitionReaderTests {
DefaultListableBeanFactory factory = new DefaultListableBeanFactory();
Resource resource = new ClassPathResource(resourceName, getClass());
new XmlBeanDefinitionReader(factory).loadBeanDefinitions(resource);
TestBean bean = (TestBean) factory.getBean("testBean");
assertThat(bean).isNotNull();
assertThat((TestBean) factory.getBean("testBean")).isNotNull();
}
}