You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

PropertySetItemTest.java 13KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437
  1. package com.vaadin.v7.data.util;
  2. import static org.junit.Assert.assertEquals;
  3. import static org.junit.Assert.assertFalse;
  4. import static org.junit.Assert.assertNotNull;
  5. import static org.junit.Assert.assertNull;
  6. import static org.junit.Assert.assertTrue;
  7. import java.util.Iterator;
  8. import org.easymock.EasyMock;
  9. import org.junit.After;
  10. import org.junit.Before;
  11. import org.junit.Test;
  12. import com.vaadin.v7.data.Item.PropertySetChangeEvent;
  13. import com.vaadin.v7.data.Item.PropertySetChangeListener;
  14. public class PropertySetItemTest {
  15. private static final String ID1 = "id1";
  16. private static final String ID2 = "id2";
  17. private static final String ID3 = "id3";
  18. private static final String VALUE1 = "value1";
  19. private static final String VALUE2 = "value2";
  20. private static final String VALUE3 = "value3";
  21. private ObjectProperty<String> prop1;
  22. private ObjectProperty<String> prop2;
  23. private ObjectProperty<String> prop3;
  24. private PropertySetChangeListener propertySetListenerMock;
  25. private PropertySetChangeListener propertySetListenerMock2;
  26. @Before
  27. public void setUp() {
  28. prop1 = new ObjectProperty<String>(VALUE1, String.class);
  29. prop2 = new ObjectProperty<String>(VALUE2, String.class);
  30. prop3 = new ObjectProperty<String>(VALUE3, String.class);
  31. propertySetListenerMock = EasyMock
  32. .createStrictMock(PropertySetChangeListener.class);
  33. propertySetListenerMock2 = EasyMock
  34. .createMock(PropertySetChangeListener.class);
  35. }
  36. @After
  37. public void tearDown() {
  38. prop1 = null;
  39. prop2 = null;
  40. prop3 = null;
  41. propertySetListenerMock = null;
  42. propertySetListenerMock2 = null;
  43. }
  44. private PropertysetItem createPropertySetItem() {
  45. return new PropertysetItem();
  46. }
  47. @Test
  48. public void testEmptyItem() {
  49. PropertysetItem item = createPropertySetItem();
  50. assertNotNull(item.getItemPropertyIds());
  51. assertEquals(0, item.getItemPropertyIds().size());
  52. }
  53. @Test
  54. public void testGetProperty() {
  55. PropertysetItem item = createPropertySetItem();
  56. assertNull(item.getItemProperty(ID1));
  57. item.addItemProperty(ID1, prop1);
  58. assertEquals(prop1, item.getItemProperty(ID1));
  59. assertNull(item.getItemProperty(ID2));
  60. }
  61. @Test
  62. public void testAddSingleProperty() {
  63. PropertysetItem item = createPropertySetItem();
  64. item.addItemProperty(ID1, prop1);
  65. assertEquals(1, item.getItemPropertyIds().size());
  66. Object firstValue = item.getItemPropertyIds().iterator().next();
  67. assertEquals(ID1, firstValue);
  68. assertEquals(prop1, item.getItemProperty(ID1));
  69. }
  70. @Test
  71. public void testAddMultipleProperties() {
  72. PropertysetItem item = createPropertySetItem();
  73. item.addItemProperty(ID1, prop1);
  74. assertEquals(1, item.getItemPropertyIds().size());
  75. assertEquals(prop1, item.getItemProperty(ID1));
  76. item.addItemProperty(ID2, prop2);
  77. assertEquals(2, item.getItemPropertyIds().size());
  78. assertEquals(prop1, item.getItemProperty(ID1));
  79. assertEquals(prop2, item.getItemProperty(ID2));
  80. item.addItemProperty(ID3, prop3);
  81. assertEquals(3, item.getItemPropertyIds().size());
  82. }
  83. @Test
  84. public void testAddedPropertyOrder() {
  85. PropertysetItem item = createPropertySetItem();
  86. item.addItemProperty(ID1, prop1);
  87. item.addItemProperty(ID2, prop2);
  88. item.addItemProperty(ID3, prop3);
  89. Iterator<?> it = item.getItemPropertyIds().iterator();
  90. assertEquals(ID1, it.next());
  91. assertEquals(ID2, it.next());
  92. assertEquals(ID3, it.next());
  93. }
  94. @Test
  95. public void testAddPropertyTwice() {
  96. PropertysetItem item = createPropertySetItem();
  97. assertTrue(item.addItemProperty(ID1, prop1));
  98. assertFalse(item.addItemProperty(ID1, prop1));
  99. assertEquals(1, item.getItemPropertyIds().size());
  100. assertEquals(prop1, item.getItemProperty(ID1));
  101. }
  102. @Test
  103. public void testCannotChangeProperty() {
  104. PropertysetItem item = createPropertySetItem();
  105. assertTrue(item.addItemProperty(ID1, prop1));
  106. assertEquals(prop1, item.getItemProperty(ID1));
  107. assertFalse(item.addItemProperty(ID1, prop2));
  108. assertEquals(1, item.getItemPropertyIds().size());
  109. assertEquals(prop1, item.getItemProperty(ID1));
  110. }
  111. @Test
  112. public void testRemoveProperty() {
  113. PropertysetItem item = createPropertySetItem();
  114. item.addItemProperty(ID1, prop1);
  115. item.removeItemProperty(ID1);
  116. assertEquals(0, item.getItemPropertyIds().size());
  117. assertNull(item.getItemProperty(ID1));
  118. }
  119. @Test
  120. public void testRemovePropertyOrder() {
  121. PropertysetItem item = createPropertySetItem();
  122. item.addItemProperty(ID1, prop1);
  123. item.addItemProperty(ID2, prop2);
  124. item.addItemProperty(ID3, prop3);
  125. item.removeItemProperty(ID2);
  126. Iterator<?> it = item.getItemPropertyIds().iterator();
  127. assertEquals(ID1, it.next());
  128. assertEquals(ID3, it.next());
  129. }
  130. @Test
  131. public void testRemoveNonExistentListener() {
  132. PropertysetItem item = createPropertySetItem();
  133. item.removeListener(propertySetListenerMock);
  134. }
  135. @Test
  136. public void testRemoveListenerTwice() {
  137. PropertysetItem item = createPropertySetItem();
  138. item.addListener(propertySetListenerMock);
  139. item.removeListener(propertySetListenerMock);
  140. item.removeListener(propertySetListenerMock);
  141. }
  142. @Test
  143. public void testAddPropertyNotification() {
  144. // exactly one notification each time
  145. PropertysetItem item = createPropertySetItem();
  146. // Expectations and start test
  147. propertySetListenerMock.itemPropertySetChange(
  148. EasyMock.isA(PropertySetChangeEvent.class));
  149. EasyMock.replay(propertySetListenerMock);
  150. // Add listener and add a property -> should end up in listener once
  151. item.addListener(propertySetListenerMock);
  152. item.addItemProperty(ID1, prop1);
  153. // Ensure listener was called once
  154. EasyMock.verify(propertySetListenerMock);
  155. // Remove the listener -> should not end up in listener when adding a
  156. // property
  157. item.removeListener(propertySetListenerMock);
  158. item.addItemProperty(ID2, prop2);
  159. // Ensure listener still has been called only once
  160. EasyMock.verify(propertySetListenerMock);
  161. }
  162. @Test
  163. public void testRemovePropertyNotification() {
  164. // exactly one notification each time
  165. PropertysetItem item = createPropertySetItem();
  166. item.addItemProperty(ID1, prop1);
  167. item.addItemProperty(ID2, prop2);
  168. // Expectations and start test
  169. propertySetListenerMock.itemPropertySetChange(
  170. EasyMock.isA(PropertySetChangeEvent.class));
  171. EasyMock.replay(propertySetListenerMock);
  172. // Add listener and add a property -> should end up in listener once
  173. item.addListener(propertySetListenerMock);
  174. item.removeItemProperty(ID1);
  175. // Ensure listener was called once
  176. EasyMock.verify(propertySetListenerMock);
  177. // Remove the listener -> should not end up in listener
  178. item.removeListener(propertySetListenerMock);
  179. item.removeItemProperty(ID2);
  180. // Ensure listener still has been called only once
  181. EasyMock.verify(propertySetListenerMock);
  182. }
  183. @Test
  184. public void testItemEqualsNull() {
  185. PropertysetItem item = createPropertySetItem();
  186. assertFalse(item.equals(null));
  187. }
  188. @Test
  189. public void testEmptyItemEquals() {
  190. PropertysetItem item1 = createPropertySetItem();
  191. PropertysetItem item2 = createPropertySetItem();
  192. assertTrue(item1.equals(item2));
  193. }
  194. @Test
  195. public void testItemEqualsSingleProperty() {
  196. PropertysetItem item1 = createPropertySetItem();
  197. PropertysetItem item2 = createPropertySetItem();
  198. item2.addItemProperty(ID1, prop1);
  199. PropertysetItem item3 = createPropertySetItem();
  200. item3.addItemProperty(ID1, prop1);
  201. PropertysetItem item4 = createPropertySetItem();
  202. item4.addItemProperty(ID1, prop2);
  203. PropertysetItem item5 = createPropertySetItem();
  204. item5.addItemProperty(ID2, prop2);
  205. assertFalse(item1.equals(item2));
  206. assertFalse(item1.equals(item3));
  207. assertFalse(item1.equals(item4));
  208. assertFalse(item1.equals(item5));
  209. assertTrue(item2.equals(item3));
  210. assertFalse(item2.equals(item4));
  211. assertFalse(item2.equals(item5));
  212. assertFalse(item3.equals(item4));
  213. assertFalse(item3.equals(item5));
  214. assertFalse(item4.equals(item5));
  215. assertFalse(item2.equals(item1));
  216. }
  217. @Test
  218. public void testItemEqualsMultipleProperties() {
  219. PropertysetItem item1 = createPropertySetItem();
  220. item1.addItemProperty(ID1, prop1);
  221. PropertysetItem item2 = createPropertySetItem();
  222. item2.addItemProperty(ID1, prop1);
  223. item2.addItemProperty(ID2, prop2);
  224. PropertysetItem item3 = createPropertySetItem();
  225. item3.addItemProperty(ID1, prop1);
  226. item3.addItemProperty(ID2, prop2);
  227. assertFalse(item1.equals(item2));
  228. assertTrue(item2.equals(item3));
  229. }
  230. @Test
  231. public void testItemEqualsPropertyOrder() {
  232. PropertysetItem item1 = createPropertySetItem();
  233. item1.addItemProperty(ID1, prop1);
  234. item1.addItemProperty(ID2, prop2);
  235. PropertysetItem item2 = createPropertySetItem();
  236. item2.addItemProperty(ID2, prop2);
  237. item2.addItemProperty(ID1, prop1);
  238. assertFalse(item1.equals(item2));
  239. }
  240. @Test
  241. public void testEqualsSingleListener() {
  242. PropertysetItem item1 = createPropertySetItem();
  243. PropertysetItem item2 = createPropertySetItem();
  244. item1.addListener(propertySetListenerMock);
  245. assertFalse(item1.equals(item2));
  246. assertFalse(item2.equals(item1));
  247. item2.addListener(propertySetListenerMock);
  248. assertTrue(item1.equals(item2));
  249. assertTrue(item2.equals(item1));
  250. }
  251. @Test
  252. public void testEqualsMultipleListeners() {
  253. PropertysetItem item1 = createPropertySetItem();
  254. PropertysetItem item2 = createPropertySetItem();
  255. item1.addListener(propertySetListenerMock);
  256. item1.addListener(propertySetListenerMock2);
  257. item2.addListener(propertySetListenerMock);
  258. assertFalse(item1.equals(item2));
  259. assertFalse(item2.equals(item1));
  260. item2.addListener(propertySetListenerMock2);
  261. assertTrue(item1.equals(item2));
  262. assertTrue(item2.equals(item1));
  263. }
  264. @Test
  265. public void testEqualsAddRemoveListener() {
  266. PropertysetItem item1 = createPropertySetItem();
  267. PropertysetItem item2 = createPropertySetItem();
  268. item1.addListener(propertySetListenerMock);
  269. item1.removeListener(propertySetListenerMock);
  270. assertTrue(item1.equals(item2));
  271. assertTrue(item2.equals(item1));
  272. }
  273. @Test
  274. public void testItemHashCodeEmpty() {
  275. PropertysetItem item1 = createPropertySetItem();
  276. PropertysetItem item2 = createPropertySetItem();
  277. assertEquals(item1.hashCode(), item2.hashCode());
  278. }
  279. @Test
  280. public void testItemHashCodeAddProperties() {
  281. PropertysetItem item1 = createPropertySetItem();
  282. PropertysetItem item2 = createPropertySetItem();
  283. assertEquals(item1.hashCode(), item2.hashCode());
  284. item1.addItemProperty(ID1, prop1);
  285. item1.addItemProperty(ID2, prop2);
  286. // hashCodes can be equal even if items are different
  287. item2.addItemProperty(ID1, prop1);
  288. item2.addItemProperty(ID2, prop2);
  289. // but here hashCodes must be equal
  290. assertEquals(item1.hashCode(), item2.hashCode());
  291. }
  292. @Test
  293. public void testItemHashCodeAddListeners() {
  294. PropertysetItem item1 = createPropertySetItem();
  295. PropertysetItem item2 = createPropertySetItem();
  296. assertEquals(item1.hashCode(), item2.hashCode());
  297. item1.addListener(propertySetListenerMock);
  298. // hashCodes can be equal even if items are different
  299. item2.addListener(propertySetListenerMock);
  300. // but here hashCodes must be equal
  301. assertEquals(item1.hashCode(), item2.hashCode());
  302. }
  303. @Test
  304. public void testItemHashCodeAddRemoveProperty() {
  305. PropertysetItem item1 = createPropertySetItem();
  306. PropertysetItem item2 = createPropertySetItem();
  307. item1.addItemProperty(ID1, prop1);
  308. item1.removeItemProperty(ID1);
  309. assertEquals(item1.hashCode(), item2.hashCode());
  310. }
  311. @Test
  312. public void testItemHashCodeAddRemoveListener() {
  313. PropertysetItem item1 = createPropertySetItem();
  314. PropertysetItem item2 = createPropertySetItem();
  315. item1.addListener(propertySetListenerMock);
  316. item1.removeListener(propertySetListenerMock);
  317. assertEquals(item1.hashCode(), item2.hashCode());
  318. }
  319. @Test
  320. public void testToString() {
  321. // toString() behavior is specified in the class javadoc
  322. PropertysetItem item = createPropertySetItem();
  323. assertEquals("", item.toString());
  324. item.addItemProperty(ID1, prop1);
  325. assertEquals(String.valueOf(prop1.getValue()), item.toString());
  326. item.addItemProperty(ID2, prop2);
  327. assertEquals(String.valueOf(prop1.getValue()) + " "
  328. + String.valueOf(prop2.getValue()), item.toString());
  329. }
  330. }