PageRenderTime 48ms CodeModel.GetById 14ms RepoModel.GetById 0ms app.codeStats 1ms

/projects/springframework-3.0.5/projects/org.springframework.beans/src/test/java/org/springframework/beans/factory/xml/XmlBeanCollectionTests.java

https://gitlab.com/essere.lab.public/qualitas.class-corpus
Java | 534 lines | 412 code | 85 blank | 37 comment | 46 complexity | 9df62a17f209e0926327163298b1473b MD5 | raw file
  1. /*
  2. * Copyright 2002-2009 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. package org.springframework.beans.factory.xml;
  17. import java.util.ArrayList;
  18. import java.util.Iterator;
  19. import java.util.LinkedHashMap;
  20. import java.util.LinkedHashSet;
  21. import java.util.LinkedList;
  22. import java.util.List;
  23. import java.util.Map;
  24. import java.util.Properties;
  25. import java.util.Set;
  26. import java.util.TreeMap;
  27. import java.util.TreeSet;
  28. import java.util.IdentityHashMap;
  29. import java.util.HashSet;
  30. import java.util.concurrent.CopyOnWriteArraySet;
  31. import org.junit.Test;
  32. import static org.junit.Assert.*;
  33. import test.beans.TestBean;
  34. import org.springframework.beans.factory.BeanCreationException;
  35. import org.springframework.beans.factory.BeanDefinitionStoreException;
  36. import org.springframework.beans.factory.config.ListFactoryBean;
  37. import org.springframework.beans.factory.config.MapFactoryBean;
  38. import org.springframework.beans.factory.config.SetFactoryBean;
  39. import org.springframework.core.io.ClassPathResource;
  40. /**
  41. * Tests for collections in XML bean definitions.
  42. *
  43. * @author Juergen Hoeller
  44. * @author Chris Beams
  45. * @since 19.12.2004
  46. */
  47. public class XmlBeanCollectionTests {
  48. private final XmlBeanFactory beanFactory;
  49. public XmlBeanCollectionTests() {
  50. this.beanFactory = new XmlBeanFactory(new ClassPathResource("collections.xml", getClass()));
  51. }
  52. @Test
  53. public void testCollectionFactoryDefaults() throws Exception {
  54. ListFactoryBean listFactory = new ListFactoryBean();
  55. listFactory.setSourceList(new LinkedList());
  56. listFactory.afterPropertiesSet();
  57. assertTrue(listFactory.getObject() instanceof ArrayList);
  58. SetFactoryBean setFactory = new SetFactoryBean();
  59. setFactory.setSourceSet(new TreeSet());
  60. setFactory.afterPropertiesSet();
  61. assertTrue(setFactory.getObject() instanceof LinkedHashSet);
  62. MapFactoryBean mapFactory = new MapFactoryBean();
  63. mapFactory.setSourceMap(new TreeMap());
  64. mapFactory.afterPropertiesSet();
  65. assertTrue(mapFactory.getObject() instanceof LinkedHashMap);
  66. }
  67. @Test
  68. public void testRefSubelement() throws Exception {
  69. //assertTrue("5 beans in reftypes, not " + this.beanFactory.getBeanDefinitionCount(), this.beanFactory.getBeanDefinitionCount() == 5);
  70. TestBean jen = (TestBean) this.beanFactory.getBean("jenny");
  71. TestBean dave = (TestBean) this.beanFactory.getBean("david");
  72. assertTrue(jen.getSpouse() == dave);
  73. }
  74. @Test
  75. public void testPropertyWithLiteralValueSubelement() throws Exception {
  76. TestBean verbose = (TestBean) this.beanFactory.getBean("verbose");
  77. assertTrue(verbose.getName().equals("verbose"));
  78. }
  79. @Test
  80. public void testPropertyWithIdRefLocalAttrSubelement() throws Exception {
  81. TestBean verbose = (TestBean) this.beanFactory.getBean("verbose2");
  82. assertTrue(verbose.getName().equals("verbose"));
  83. }
  84. @Test
  85. public void testPropertyWithIdRefBeanAttrSubelement() throws Exception {
  86. TestBean verbose = (TestBean) this.beanFactory.getBean("verbose3");
  87. assertTrue(verbose.getName().equals("verbose"));
  88. }
  89. @Test
  90. public void testRefSubelementsBuildCollection() throws Exception {
  91. TestBean jen = (TestBean) this.beanFactory.getBean("jenny");
  92. TestBean dave = (TestBean) this.beanFactory.getBean("david");
  93. TestBean rod = (TestBean) this.beanFactory.getBean("rod");
  94. // Must be a list to support ordering
  95. // Our bean doesn't modify the collection:
  96. // of course it could be a different copy in a real object.
  97. Object[] friends = rod.getFriends().toArray();
  98. assertTrue(friends.length == 2);
  99. assertTrue("First friend must be jen, not " + friends[0], friends[0] == jen);
  100. assertTrue(friends[1] == dave);
  101. // Should be ordered
  102. }
  103. @Test
  104. public void testRefSubelementsBuildCollectionWithPrototypes() throws Exception {
  105. TestBean jen = (TestBean) this.beanFactory.getBean("pJenny");
  106. TestBean dave = (TestBean) this.beanFactory.getBean("pDavid");
  107. TestBean rod = (TestBean) this.beanFactory.getBean("pRod");
  108. Object[] friends = rod.getFriends().toArray();
  109. assertTrue(friends.length == 2);
  110. assertTrue("First friend must be jen, not " + friends[0],
  111. friends[0].toString().equals(jen.toString()));
  112. assertTrue("Jen not same instance", friends[0] != jen);
  113. assertTrue(friends[1].toString().equals(dave.toString()));
  114. assertTrue("Dave not same instance", friends[1] != dave);
  115. assertEquals("Jen", dave.getSpouse().getName());
  116. TestBean rod2 = (TestBean) this.beanFactory.getBean("pRod");
  117. Object[] friends2 = rod2.getFriends().toArray();
  118. assertTrue(friends2.length == 2);
  119. assertTrue("First friend must be jen, not " + friends2[0],
  120. friends2[0].toString().equals(jen.toString()));
  121. assertTrue("Jen not same instance", friends2[0] != friends[0]);
  122. assertTrue(friends2[1].toString().equals(dave.toString()));
  123. assertTrue("Dave not same instance", friends2[1] != friends[1]);
  124. }
  125. @Test
  126. public void testRefSubelementsBuildCollectionFromSingleElement() throws Exception {
  127. TestBean loner = (TestBean) this.beanFactory.getBean("loner");
  128. TestBean dave = (TestBean) this.beanFactory.getBean("david");
  129. assertTrue(loner.getFriends().size() == 1);
  130. assertTrue(loner.getFriends().contains(dave));
  131. }
  132. @Test
  133. public void testBuildCollectionFromMixtureOfReferencesAndValues() throws Exception {
  134. MixedCollectionBean jumble = (MixedCollectionBean) this.beanFactory.getBean("jumble");
  135. assertTrue("Expected 5 elements, not " + jumble.getJumble().size(),
  136. jumble.getJumble().size() == 5);
  137. List l = (List) jumble.getJumble();
  138. assertTrue(l.get(0).equals(this.beanFactory.getBean("david")));
  139. assertTrue(l.get(1).equals("literal"));
  140. assertTrue(l.get(2).equals(this.beanFactory.getBean("jenny")));
  141. assertTrue(l.get(3).equals("rod"));
  142. Object[] array = (Object[]) l.get(4);
  143. assertTrue(array[0].equals(this.beanFactory.getBean("david")));
  144. assertTrue(array[1].equals("literal2"));
  145. }
  146. @Test
  147. public void testInvalidBeanNameReference() throws Exception {
  148. try {
  149. this.beanFactory.getBean("jumble2");
  150. fail("Should have thrown BeanCreationException");
  151. }
  152. catch (BeanCreationException ex) {
  153. assertTrue(ex.getCause() instanceof BeanDefinitionStoreException);
  154. assertTrue(ex.getCause().getMessage().contains("rod2"));
  155. }
  156. }
  157. @Test
  158. public void testEmptyMap() throws Exception {
  159. HasMap hasMap = (HasMap) this.beanFactory.getBean("emptyMap");
  160. assertTrue(hasMap.getMap().size() == 0);
  161. }
  162. @Test
  163. public void testMapWithLiteralsOnly() throws Exception {
  164. HasMap hasMap = (HasMap) this.beanFactory.getBean("literalMap");
  165. assertTrue(hasMap.getMap().size() == 3);
  166. assertTrue(hasMap.getMap().get("foo").equals("bar"));
  167. assertTrue(hasMap.getMap().get("fi").equals("fum"));
  168. assertTrue(hasMap.getMap().get("fa") == null);
  169. }
  170. @Test
  171. public void testMapWithLiteralsAndReferences() throws Exception {
  172. HasMap hasMap = (HasMap) this.beanFactory.getBean("mixedMap");
  173. assertTrue(hasMap.getMap().size() == 3);
  174. assertTrue(hasMap.getMap().get("foo").equals(new Integer(10)));
  175. TestBean jenny = (TestBean) this.beanFactory.getBean("jenny");
  176. assertTrue(hasMap.getMap().get("jenny") == jenny);
  177. assertTrue(hasMap.getMap().get(new Integer(5)).equals("david"));
  178. }
  179. @Test
  180. public void testMapWithLiteralsAndPrototypeReferences() throws Exception {
  181. TestBean jenny = (TestBean) this.beanFactory.getBean("pJenny");
  182. HasMap hasMap = (HasMap) this.beanFactory.getBean("pMixedMap");
  183. assertTrue(hasMap.getMap().size() == 2);
  184. assertTrue(hasMap.getMap().get("foo").equals("bar"));
  185. assertTrue(hasMap.getMap().get("jenny").toString().equals(jenny.toString()));
  186. assertTrue("Not same instance", hasMap.getMap().get("jenny") != jenny);
  187. HasMap hasMap2 = (HasMap) this.beanFactory.getBean("pMixedMap");
  188. assertTrue(hasMap2.getMap().size() == 2);
  189. assertTrue(hasMap2.getMap().get("foo").equals("bar"));
  190. assertTrue(hasMap2.getMap().get("jenny").toString().equals(jenny.toString()));
  191. assertTrue("Not same instance", hasMap2.getMap().get("jenny") != hasMap.getMap().get("jenny"));
  192. }
  193. @Test
  194. public void testMapWithLiteralsReferencesAndList() throws Exception {
  195. HasMap hasMap = (HasMap) this.beanFactory.getBean("mixedMapWithList");
  196. assertTrue(hasMap.getMap().size() == 4);
  197. assertTrue(hasMap.getMap().get(null).equals("bar"));
  198. TestBean jenny = (TestBean) this.beanFactory.getBean("jenny");
  199. assertTrue(hasMap.getMap().get("jenny").equals(jenny));
  200. // Check list
  201. List l = (List) hasMap.getMap().get("list");
  202. assertNotNull(l);
  203. assertTrue(l.size() == 4);
  204. assertTrue(l.get(0).equals("zero"));
  205. assertTrue(l.get(3) == null);
  206. // Check nested map in list
  207. Map m = (Map) l.get(1);
  208. assertNotNull(m);
  209. assertTrue(m.size() == 2);
  210. assertTrue(m.get("fo").equals("bar"));
  211. assertTrue("Map element 'jenny' should be equal to jenny bean, not " + m.get("jen"),
  212. m.get("jen").equals(jenny));
  213. // Check nested list in list
  214. l = (List) l.get(2);
  215. assertNotNull(l);
  216. assertTrue(l.size() == 2);
  217. assertTrue(l.get(0).equals(jenny));
  218. assertTrue(l.get(1).equals("ba"));
  219. // Check nested map
  220. m = (Map) hasMap.getMap().get("map");
  221. assertNotNull(m);
  222. assertTrue(m.size() == 2);
  223. assertTrue(m.get("foo").equals("bar"));
  224. assertTrue("Map element 'jenny' should be equal to jenny bean, not " + m.get("jenny"),
  225. m.get("jenny").equals(jenny));
  226. }
  227. @Test
  228. public void testEmptySet() throws Exception {
  229. HasMap hasMap = (HasMap) this.beanFactory.getBean("emptySet");
  230. assertTrue(hasMap.getSet().size() == 0);
  231. }
  232. @Test
  233. public void testPopulatedSet() throws Exception {
  234. HasMap hasMap = (HasMap) this.beanFactory.getBean("set");
  235. assertTrue(hasMap.getSet().size() == 3);
  236. assertTrue(hasMap.getSet().contains("bar"));
  237. TestBean jenny = (TestBean) this.beanFactory.getBean("jenny");
  238. assertTrue(hasMap.getSet().contains(jenny));
  239. assertTrue(hasMap.getSet().contains(null));
  240. Iterator it = hasMap.getSet().iterator();
  241. assertEquals("bar", it.next());
  242. assertEquals(jenny, it.next());
  243. assertEquals(null, it.next());
  244. }
  245. @Test
  246. public void testPopulatedConcurrentSet() throws Exception {
  247. HasMap hasMap = (HasMap) this.beanFactory.getBean("concurrentSet");
  248. assertTrue(hasMap.getConcurrentSet().size() == 3);
  249. assertTrue(hasMap.getConcurrentSet().contains("bar"));
  250. TestBean jenny = (TestBean) this.beanFactory.getBean("jenny");
  251. assertTrue(hasMap.getConcurrentSet().contains(jenny));
  252. assertTrue(hasMap.getConcurrentSet().contains(null));
  253. }
  254. @Test
  255. public void testPopulatedIdentityMap() throws Exception {
  256. HasMap hasMap = (HasMap) this.beanFactory.getBean("identityMap");
  257. assertTrue(hasMap.getIdentityMap().size() == 2);
  258. HashSet set = new HashSet(hasMap.getIdentityMap().keySet());
  259. assertTrue(set.contains("foo"));
  260. assertTrue(set.contains("jenny"));
  261. }
  262. @Test
  263. public void testEmptyProps() throws Exception {
  264. HasMap hasMap = (HasMap) this.beanFactory.getBean("emptyProps");
  265. assertTrue(hasMap.getProps().size() == 0);
  266. assertEquals(hasMap.getProps().getClass(), Properties.class);
  267. }
  268. @Test
  269. public void testPopulatedProps() throws Exception {
  270. HasMap hasMap = (HasMap) this.beanFactory.getBean("props");
  271. assertTrue(hasMap.getProps().size() == 2);
  272. assertTrue(hasMap.getProps().get("foo").equals("bar"));
  273. assertTrue(hasMap.getProps().get("2").equals("TWO"));
  274. }
  275. @Test
  276. public void testObjectArray() throws Exception {
  277. HasMap hasMap = (HasMap) this.beanFactory.getBean("objectArray");
  278. assertTrue(hasMap.getObjectArray().length == 2);
  279. assertTrue(hasMap.getObjectArray()[0].equals("one"));
  280. assertTrue(hasMap.getObjectArray()[1].equals(this.beanFactory.getBean("jenny")));
  281. }
  282. @Test
  283. public void testClassArray() throws Exception {
  284. HasMap hasMap = (HasMap) this.beanFactory.getBean("classArray");
  285. assertTrue(hasMap.getClassArray().length == 2);
  286. assertTrue(hasMap.getClassArray()[0].equals(String.class));
  287. assertTrue(hasMap.getClassArray()[1].equals(Exception.class));
  288. }
  289. @Test
  290. public void testIntegerArray() throws Exception {
  291. HasMap hasMap = (HasMap) this.beanFactory.getBean("integerArray");
  292. assertTrue(hasMap.getIntegerArray().length == 3);
  293. assertTrue(hasMap.getIntegerArray()[0].intValue() == 0);
  294. assertTrue(hasMap.getIntegerArray()[1].intValue() == 1);
  295. assertTrue(hasMap.getIntegerArray()[2].intValue() == 2);
  296. }
  297. @Test
  298. public void testProps() throws Exception {
  299. HasMap hasMap = (HasMap) this.beanFactory.getBean("props");
  300. assertEquals(2, hasMap.getProps().size());
  301. assertEquals("bar", hasMap.getProps().getProperty("foo"));
  302. assertEquals("TWO", hasMap.getProps().getProperty("2"));
  303. HasMap hasMap2 = (HasMap) this.beanFactory.getBean("propsViaMap");
  304. assertEquals(2, hasMap2.getProps().size());
  305. assertEquals("bar", hasMap2.getProps().getProperty("foo"));
  306. assertEquals("TWO", hasMap2.getProps().getProperty("2"));
  307. }
  308. @Test
  309. public void testListFactory() throws Exception {
  310. List list = (List) this.beanFactory.getBean("listFactory");
  311. assertTrue(list instanceof LinkedList);
  312. assertTrue(list.size() == 2);
  313. assertEquals("bar", list.get(0));
  314. assertEquals("jenny", list.get(1));
  315. }
  316. @Test
  317. public void testPrototypeListFactory() throws Exception {
  318. List list = (List) this.beanFactory.getBean("pListFactory");
  319. assertTrue(list instanceof LinkedList);
  320. assertTrue(list.size() == 2);
  321. assertEquals("bar", list.get(0));
  322. assertEquals("jenny", list.get(1));
  323. }
  324. @Test
  325. public void testSetFactory() throws Exception {
  326. Set set = (Set) this.beanFactory.getBean("setFactory");
  327. assertTrue(set instanceof TreeSet);
  328. assertTrue(set.size() == 2);
  329. assertTrue(set.contains("bar"));
  330. assertTrue(set.contains("jenny"));
  331. }
  332. @Test
  333. public void testPrototypeSetFactory() throws Exception {
  334. Set set = (Set) this.beanFactory.getBean("pSetFactory");
  335. assertTrue(set instanceof TreeSet);
  336. assertTrue(set.size() == 2);
  337. assertTrue(set.contains("bar"));
  338. assertTrue(set.contains("jenny"));
  339. }
  340. @Test
  341. public void testMapFactory() throws Exception {
  342. Map map = (Map) this.beanFactory.getBean("mapFactory");
  343. assertTrue(map instanceof TreeMap);
  344. assertTrue(map.size() == 2);
  345. assertEquals("bar", map.get("foo"));
  346. assertEquals("jenny", map.get("jen"));
  347. }
  348. @Test
  349. public void testPrototypeMapFactory() throws Exception {
  350. Map map = (Map) this.beanFactory.getBean("pMapFactory");
  351. assertTrue(map instanceof TreeMap);
  352. assertTrue(map.size() == 2);
  353. assertEquals("bar", map.get("foo"));
  354. assertEquals("jenny", map.get("jen"));
  355. }
  356. @Test
  357. public void testChoiceBetweenSetAndMap() {
  358. MapAndSet sam = (MapAndSet) this.beanFactory.getBean("setAndMap");
  359. assertTrue("Didn't choose constructor with Map argument", sam.getObject() instanceof Map);
  360. Map map = (Map) sam.getObject();
  361. assertEquals(3, map.size());
  362. assertEquals("val1", map.get("key1"));
  363. assertEquals("val2", map.get("key2"));
  364. assertEquals("val3", map.get("key3"));
  365. }
  366. @Test
  367. public void testEnumSetFactory() throws Exception {
  368. Set set = (Set) this.beanFactory.getBean("enumSetFactory");
  369. assertTrue(set.size() == 2);
  370. assertTrue(set.contains("ONE"));
  371. assertTrue(set.contains("TWO"));
  372. }
  373. public static class MapAndSet {
  374. private Object obj;
  375. public MapAndSet(Map map) {
  376. this.obj = map;
  377. }
  378. public MapAndSet(Set set) {
  379. this.obj = set;
  380. }
  381. public Object getObject() {
  382. return obj;
  383. }
  384. }
  385. }
  386. /**
  387. * Bean exposing a map. Used for bean factory tests.
  388. *
  389. * @author Rod Johnson
  390. * @since 05.06.2003
  391. */
  392. class HasMap {
  393. private Map map;
  394. private IdentityHashMap identityMap;
  395. private Set set;
  396. private CopyOnWriteArraySet concurrentSet;
  397. private Properties props;
  398. private Object[] objectArray;
  399. private Class[] classArray;
  400. private Integer[] intArray;
  401. public Map getMap() {
  402. return map;
  403. }
  404. public void setMap(Map map) {
  405. this.map = map;
  406. }
  407. public IdentityHashMap getIdentityMap() {
  408. return identityMap;
  409. }
  410. public void setIdentityMap(IdentityHashMap identityMap) {
  411. this.identityMap = identityMap;
  412. }
  413. public Set getSet() {
  414. return set;
  415. }
  416. public void setSet(Set set) {
  417. this.set = set;
  418. }
  419. public CopyOnWriteArraySet getConcurrentSet() {
  420. return concurrentSet;
  421. }
  422. public void setConcurrentSet(CopyOnWriteArraySet concurrentSet) {
  423. this.concurrentSet = concurrentSet;
  424. }
  425. public Properties getProps() {
  426. return props;
  427. }
  428. public void setProps(Properties props) {
  429. this.props = props;
  430. }
  431. public Object[] getObjectArray() {
  432. return objectArray;
  433. }
  434. public void setObjectArray(Object[] objectArray) {
  435. this.objectArray = objectArray;
  436. }
  437. public Class[] getClassArray() {
  438. return classArray;
  439. }
  440. public void setClassArray(Class[] classArray) {
  441. this.classArray = classArray;
  442. }
  443. public Integer[] getIntegerArray() {
  444. return intArray;
  445. }
  446. public void setIntegerArray(Integer[] is) {
  447. intArray = is;
  448. }
  449. }