KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > springframework > beans > factory > xml > XmlListableBeanFactoryTests


1 /*
2  * Copyright 2002-2005 the original author or authors.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */

16
17 package org.springframework.beans.factory.xml;
18
19 import java.util.Arrays JavaDoc;
20 import java.util.HashMap JavaDoc;
21 import java.util.List JavaDoc;
22 import java.util.Map JavaDoc;
23
24 import org.springframework.beans.BeansException;
25 import org.springframework.beans.ITestBean;
26 import org.springframework.beans.MutablePropertyValues;
27 import org.springframework.beans.TestBean;
28 import org.springframework.beans.factory.AbstractListableBeanFactoryTests;
29 import org.springframework.beans.factory.BeanFactory;
30 import org.springframework.beans.factory.DummyFactory;
31 import org.springframework.beans.factory.LifecycleBean;
32 import org.springframework.beans.factory.config.BeanPostProcessor;
33 import org.springframework.beans.factory.support.DefaultListableBeanFactory;
34 import org.springframework.beans.factory.support.RootBeanDefinition;
35 import org.springframework.core.io.ClassPathResource;
36
37 /**
38  * @author Juergen Hoeller
39  * @since 09.11.2003
40  */

41 public class XmlListableBeanFactoryTests extends AbstractListableBeanFactoryTests {
42
43     private DefaultListableBeanFactory parent;
44
45     private XmlBeanFactory factory;
46
47     protected void setUp() {
48         parent = new DefaultListableBeanFactory();
49         Map JavaDoc m = new HashMap JavaDoc();
50         m.put("name", "Albert");
51         parent.registerBeanDefinition("father",
52             new RootBeanDefinition(TestBean.class, new MutablePropertyValues(m)));
53         m = new HashMap JavaDoc();
54         m.put("name", "Roderick");
55         parent.registerBeanDefinition("rod",
56             new RootBeanDefinition(TestBean.class, new MutablePropertyValues(m)));
57
58         this.factory = new XmlBeanFactory(new ClassPathResource("test.xml", getClass()), parent);
59         this.factory.addBeanPostProcessor(new BeanPostProcessor() {
60             public Object JavaDoc postProcessBeforeInitialization(Object JavaDoc bean, String JavaDoc name) throws BeansException {
61                 if (bean instanceof TestBean) {
62                     ((TestBean) bean).setPostProcessed(true);
63                 }
64                 if (bean instanceof DummyFactory) {
65                     ((DummyFactory) bean).setPostProcessed(true);
66                 }
67                 return bean;
68             }
69             public Object JavaDoc postProcessAfterInitialization(Object JavaDoc bean, String JavaDoc name) throws BeansException {
70                 return bean;
71             }
72         });
73         this.factory.addBeanPostProcessor(new LifecycleBean.PostProcessor());
74         this.factory.preInstantiateSingletons();
75     }
76
77     protected BeanFactory getBeanFactory() {
78         return factory;
79     }
80
81     public void testCount() {
82         assertCount(23);
83     }
84
85     public void testTestBeanCount() {
86         assertTestBeanCount(13);
87     }
88
89     public void testDescriptionButNoProperties() throws Exception JavaDoc {
90         TestBean validEmpty = (TestBean) getBeanFactory().getBean("validEmptyWithDescription");
91         assertEquals(0, validEmpty.getAge());
92     }
93
94     /**
95      * Test that properties with name as well as id creating an alias up front.
96      */

97     public void testAutoAliasing() throws Exception JavaDoc {
98         List JavaDoc beanNames = Arrays.asList(getListableBeanFactory().getBeanDefinitionNames());
99
100         TestBean tb1 = (TestBean) getBeanFactory().getBean("aliased");
101         TestBean alias1 = (TestBean) getBeanFactory().getBean("myalias");
102         assertTrue(tb1 == alias1);
103         List JavaDoc tb1Aliases = Arrays.asList(getBeanFactory().getAliases("aliased"));
104         assertEquals(2, tb1Aliases.size());
105         assertTrue(tb1Aliases.contains("myalias"));
106         assertTrue(tb1Aliases.contains("youralias"));
107         assertTrue(beanNames.contains("aliased"));
108         assertFalse(beanNames.contains("myalias"));
109         assertFalse(beanNames.contains("youralias"));
110
111         TestBean tb2 = (TestBean) getBeanFactory().getBean("multiAliased");
112         TestBean alias2 = (TestBean) getBeanFactory().getBean("alias1");
113         TestBean alias3 = (TestBean) getBeanFactory().getBean("alias2");
114         TestBean alias3a = (TestBean) getBeanFactory().getBean("alias3");
115         TestBean alias3b = (TestBean) getBeanFactory().getBean("alias4");
116         assertTrue(tb2 == alias2);
117         assertTrue(tb2 == alias3);
118         assertTrue(tb2 == alias3a);
119         assertTrue(tb2 == alias3b);
120
121         List JavaDoc tb2Aliases = Arrays.asList(getBeanFactory().getAliases("multiAliased"));
122         assertEquals(4, tb2Aliases.size());
123         assertTrue(tb2Aliases.contains("alias1"));
124         assertTrue(tb2Aliases.contains("alias2"));
125         assertTrue(tb2Aliases.contains("alias3"));
126         assertTrue(tb2Aliases.contains("alias4"));
127         assertTrue(beanNames.contains("multiAliased"));
128         assertFalse(beanNames.contains("alias1"));
129         assertFalse(beanNames.contains("alias2"));
130         assertFalse(beanNames.contains("alias3"));
131         assertFalse(beanNames.contains("alias4"));
132
133         TestBean tb3 = (TestBean) getBeanFactory().getBean("aliasWithoutId1");
134         TestBean alias4 = (TestBean) getBeanFactory().getBean("aliasWithoutId2");
135         TestBean alias5 = (TestBean) getBeanFactory().getBean("aliasWithoutId3");
136         assertTrue(tb3 == alias4);
137         assertTrue(tb3 == alias5);
138         List JavaDoc tb3Aliases = Arrays.asList(getBeanFactory().getAliases("aliasWithoutId1"));
139         assertEquals(2, tb3Aliases.size());
140         assertTrue(tb3Aliases.contains("aliasWithoutId2"));
141         assertTrue(tb3Aliases.contains("aliasWithoutId3"));
142         assertTrue(beanNames.contains("aliasWithoutId1"));
143         assertFalse(beanNames.contains("aliasWithoutId2"));
144         assertFalse(beanNames.contains("aliasWithoutId3"));
145
146         TestBean tb4 = (TestBean) getBeanFactory().getBean(TestBean.class.getName());
147         assertEquals(null, tb4.getName());
148
149         Map JavaDoc drs = getListableBeanFactory().getBeansOfType(DummyReferencer.class, false, false);
150         assertEquals(5, drs.size());
151         assertTrue(drs.containsKey(DummyReferencer.class.getName()));
152         assertTrue(drs.containsKey(DummyReferencer.class.getName() + "#2"));
153         assertTrue(drs.containsKey(DummyReferencer.class.getName() + "#3"));
154     }
155
156     public void testFactoryNesting() {
157         ITestBean father = (ITestBean) getBeanFactory().getBean("father");
158         assertTrue("Bean from root context", father != null);
159
160         TestBean rod = (TestBean) getBeanFactory().getBean("rod");
161         assertTrue("Bean from child context", "Rod".equals(rod.getName()));
162         assertTrue("Bean has external reference", rod.getSpouse() == father);
163
164         rod = (TestBean) parent.getBean("rod");
165         assertTrue("Bean from root context", "Roderick".equals(rod.getName()));
166     }
167
168     public void testFactoryReferences() {
169         DummyFactory factory = (DummyFactory) getBeanFactory().getBean("&singletonFactory");
170
171         DummyReferencer ref = (DummyReferencer) getBeanFactory().getBean("factoryReferencer");
172         assertTrue(ref.getTestBean1() == ref.getTestBean2());
173         assertTrue(ref.getDummyFactory() == factory);
174
175         DummyReferencer ref2 = (DummyReferencer) getBeanFactory().getBean("factoryReferencerWithConstructor");
176         assertTrue(ref2.getTestBean1() == ref2.getTestBean2());
177         assertTrue(ref2.getDummyFactory() == factory);
178     }
179
180     public void testPrototypeReferences() {
181         // check that not broken by circular reference resolution mechanism
182
DummyReferencer ref1 = (DummyReferencer) getBeanFactory().getBean("prototypeReferencer");
183         assertTrue("Not referencing same bean twice", ref1.getTestBean1() != ref1.getTestBean2());
184         DummyReferencer ref2 = (DummyReferencer) getBeanFactory().getBean("prototypeReferencer");
185         assertTrue("Not the same referencer", ref1 != ref2);
186         assertTrue("Not referencing same bean twice", ref2.getTestBean1() != ref2.getTestBean2());
187         assertTrue("Not referencing same bean twice", ref1.getTestBean1() != ref2.getTestBean1());
188         assertTrue("Not referencing same bean twice", ref1.getTestBean2() != ref2.getTestBean2());
189         assertTrue("Not referencing same bean twice", ref1.getTestBean1() != ref2.getTestBean2());
190     }
191
192     public void testBeanPostProcessor() throws Exception JavaDoc {
193         TestBean kerry = (TestBean) getBeanFactory().getBean("kerry");
194         TestBean kathy = (TestBean) getBeanFactory().getBean("kathy");
195         DummyFactory factory = (DummyFactory) getBeanFactory().getBean("&singletonFactory");
196         TestBean factoryCreated = (TestBean) getBeanFactory().getBean("singletonFactory");
197         assertTrue(kerry.isPostProcessed());
198         assertTrue(kathy.isPostProcessed());
199         assertTrue(factory.isPostProcessed());
200         assertTrue(factoryCreated.isPostProcessed());
201     }
202
203     public void testEmptyValues() {
204         TestBean rod = (TestBean) getBeanFactory().getBean("rod");
205         TestBean kerry = (TestBean) getBeanFactory().getBean("kerry");
206         assertTrue("Touchy is empty", "".equals(rod.getTouchy()));
207         assertTrue("Touchy is empty", "".equals(kerry.getTouchy()));
208     }
209
210     public void testCommentsAndCdataInValue() {
211         TestBean bean = (TestBean) getBeanFactory().getBean("commentsInValue");
212         assertEquals("Failed to handle comments and CDATA properly", "this is a <!--comment-->", bean.getName());
213     }
214
215 }
216
Popular Tags