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.

SerializerTest.java 18KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469
  1. /*
  2. * Copyright 2000-2014 Vaadin Ltd.
  3. *
  4. * Licensed under the Apache License, Version 2.0 (the "License"); you may not
  5. * use this file except in compliance with the License. You may obtain a copy of
  6. * 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, WITHOUT
  12. * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
  13. * License for the specific language governing permissions and limitations under
  14. * the License.
  15. */
  16. package com.vaadin.tests.serialization;
  17. import java.text.DateFormat;
  18. import java.util.Arrays;
  19. import java.util.Collection;
  20. import java.util.Collections;
  21. import java.util.Date;
  22. import java.util.HashMap;
  23. import java.util.HashSet;
  24. import java.util.List;
  25. import java.util.Locale;
  26. import java.util.Map;
  27. import java.util.Map.Entry;
  28. import java.util.Set;
  29. import java.util.TimeZone;
  30. import com.vaadin.annotations.Widgetset;
  31. import com.vaadin.server.VaadinRequest;
  32. import com.vaadin.shared.Connector;
  33. import com.vaadin.shared.ui.label.ContentMode;
  34. import com.vaadin.tests.components.AbstractTestUI;
  35. import com.vaadin.tests.util.Log;
  36. import com.vaadin.tests.widgetset.client.ComplexTestBean;
  37. import com.vaadin.tests.widgetset.client.SerializerTestRpc;
  38. import com.vaadin.tests.widgetset.client.SerializerTestState;
  39. import com.vaadin.tests.widgetset.client.SimpleTestBean;
  40. import com.vaadin.tests.widgetset.server.SerializerTestExtension;
  41. @Widgetset("com.vaadin.tests.widgetset.TestingWidgetSet")
  42. public class SerializerTest extends AbstractTestUI {
  43. private Log log = new Log(40);
  44. @Override
  45. protected void setup(VaadinRequest request) {
  46. final SerializerTestExtension testExtension = new SerializerTestExtension();
  47. addExtension(testExtension);
  48. // Don't show row numbers to make it easier to add tests without
  49. // changing all numbers
  50. log.setNumberLogRows(false);
  51. addComponent(log);
  52. SerializerTestRpc rpc = testExtension
  53. .getRpcProxy(SerializerTestRpc.class);
  54. SerializerTestState state = testExtension.getState();
  55. rpc.sendBeanSubclass(new SimpleTestBean() {
  56. @Override
  57. public int getValue() {
  58. return 42;
  59. }
  60. });
  61. state.simpleTestBean = new SimpleTestBean() {
  62. @Override
  63. public int getValue() {
  64. return 42;
  65. }
  66. };
  67. rpc.sendBoolean(true, Boolean.FALSE, new boolean[] { true, true, false,
  68. true, false, false });
  69. state.booleanValue = true;
  70. state.booleanObjectValue = Boolean.FALSE;
  71. state.booleanArray = new boolean[] { true, true, false, true, false,
  72. false };
  73. rpc.sendByte((byte) 5, Byte.valueOf((byte) -12), new byte[] { 3, 1, 2 });
  74. state.byteValue = (byte) 5;
  75. state.byteObjectValue = Byte.valueOf((byte) -12);
  76. state.byteArray = new byte[] { 3, 1, 2 };
  77. rpc.sendChar('\u222b', Character.valueOf('å'), "aBcD".toCharArray());
  78. state.charValue = '\u222b';
  79. state.charObjectValue = Character.valueOf('å');
  80. state.charArray = "aBcD".toCharArray();
  81. rpc.sendInt(Integer.MAX_VALUE, Integer.valueOf(0), new int[] { 5, 7 });
  82. state.intValue = Integer.MAX_VALUE;
  83. state.intObjectValue = Integer.valueOf(0);
  84. state.intArray = new int[] { 5, 7 };
  85. rpc.sendLong(577431841358l, Long.valueOf(0), new long[] {
  86. -57841235865l, 57 });
  87. state.longValue = 577431841358l;
  88. state.longObjectValue = Long.valueOf(0);
  89. state.longArray = new long[] { -57841235865l, 57 };
  90. rpc.sendFloat(3.14159f, Float.valueOf(Math.nextUp(1)), new float[] {
  91. 57, 0, -12 });
  92. state.floatValue = 3.14159f;
  93. state.floatObjectValue = Float.valueOf(Math.nextUp(1));
  94. state.floatArray = new float[] { 57, 0, -12 };
  95. rpc.sendDouble(Math.PI, Double.valueOf(-Math.E), new double[] {
  96. Double.MAX_VALUE, Double.MIN_VALUE });
  97. state.doubleValue = Math.PI;
  98. state.doubleValue = Double.valueOf(-Math.E);
  99. state.doubleArray = new double[] { Double.MAX_VALUE, Double.MIN_VALUE };
  100. rpc.sendString("This is a tesing string ‡");
  101. state.string = "This is a tesing string ‡";
  102. rpc.sendConnector(this);
  103. state.connector = this;
  104. rpc.sendBean(
  105. new ComplexTestBean(new SimpleTestBean(0),
  106. new SimpleTestBean(1), Arrays.asList(
  107. new SimpleTestBean(3), new SimpleTestBean(4)),
  108. 5), new SimpleTestBean(6),
  109. new SimpleTestBean[] { new SimpleTestBean(7) });
  110. state.complexTestBean = new ComplexTestBean(new SimpleTestBean(0),
  111. new SimpleTestBean(1), Arrays.asList(new SimpleTestBean(3),
  112. new SimpleTestBean(4)), 5);
  113. state.simpleTestBean = new SimpleTestBean(6);
  114. state.simpleTestBeanArray = new SimpleTestBean[] { new SimpleTestBean(7) };
  115. rpc.sendNull("Not null", null);
  116. state.nullString = null;
  117. rpc.sendNestedArray(new int[][] { { 5 }, { 7 } },
  118. new SimpleTestBean[][] { { new SimpleTestBean(4),
  119. new SimpleTestBean(2) } });
  120. state.nestedIntArray = new int[][] { { 5 }, { 7 } };
  121. state.nestedBeanArray = new SimpleTestBean[][] { {
  122. new SimpleTestBean(4), new SimpleTestBean(2) } };
  123. rpc.sendList(Arrays.asList(5, 8, -234), Arrays.<Connector> asList(this,
  124. testExtension), Arrays.asList(new SimpleTestBean(234),
  125. new SimpleTestBean(-568)));
  126. state.intList = Arrays.asList(5, 8, -234);
  127. state.connectorList = Arrays.<Connector> asList(this, testExtension);
  128. state.simpleTestBeanList = Arrays.asList(new SimpleTestBean(234),
  129. new SimpleTestBean(-568));
  130. rpc.sendArrayList(
  131. Arrays.asList(new int[] { 1, 2 }, new int[] { 3, 4 }),
  132. Arrays.asList(new Integer[] { 5, 6 }, new Integer[] { 7, 8 }),
  133. Collections
  134. .singletonList(new SimpleTestBean[] { new SimpleTestBean(
  135. 7) }));
  136. state.primitiveArrayList = Arrays.asList(new int[] { 1, 2 }, new int[] {
  137. 3, 4 });
  138. state.objectArrayList = Arrays.asList(new Integer[] { 5, 6 },
  139. new Integer[] { 7, 8 });
  140. state.beanArrayList = Collections
  141. .singletonList(new SimpleTestBean[] { new SimpleTestBean(7) });
  142. // Disabled because of #8861
  143. // rpc.sendListArray(
  144. // new List[] { Arrays.asList(1, 2), Arrays.asList(3, 4) },
  145. // new List[] { Collections.singletonList(new SimpleTestBean(-1)) });
  146. rpc.sendSet(new HashSet<Integer>(Arrays.asList(4, 7, 12)), Collections
  147. .singleton((Connector) this), new HashSet<SimpleTestBean>(
  148. Arrays.asList(new SimpleTestBean(1), new SimpleTestBean(2))));
  149. state.intSet = new HashSet<Integer>(Arrays.asList(4, 7, 12));
  150. state.connectorSet = Collections.singleton((Connector) this);
  151. state.beanSet = new HashSet<SimpleTestBean>(Arrays.asList(
  152. new SimpleTestBean(1), new SimpleTestBean(2)));
  153. rpc.sendMap(new HashMap<String, SimpleTestBean>() {
  154. {
  155. put("1", new SimpleTestBean(1));
  156. put("2", new SimpleTestBean(2));
  157. }
  158. }, new HashMap<Connector, SimpleTestBean>() {
  159. {
  160. put(testExtension, new SimpleTestBean(3));
  161. put(getUI(), new SimpleTestBean(4));
  162. }
  163. }, new HashMap<Integer, Connector>() {
  164. {
  165. put(5, testExtension);
  166. put(10, getUI());
  167. }
  168. }, new HashMap<SimpleTestBean, SimpleTestBean>() {
  169. {
  170. put(new SimpleTestBean(5), new SimpleTestBean(-5));
  171. put(new SimpleTestBean(-4), new SimpleTestBean(4));
  172. }
  173. });
  174. state.stringMap = new HashMap<String, SimpleTestBean>() {
  175. {
  176. put("1", new SimpleTestBean(1));
  177. put("2", new SimpleTestBean(2));
  178. }
  179. };
  180. state.connectorMap = new HashMap<Connector, SimpleTestBean>() {
  181. {
  182. put(testExtension, new SimpleTestBean(3));
  183. put(getUI(), new SimpleTestBean(4));
  184. }
  185. };
  186. state.intMap = new HashMap<Integer, Connector>() {
  187. {
  188. put(5, testExtension);
  189. put(10, getUI());
  190. }
  191. };
  192. state.beanMap = new HashMap<SimpleTestBean, SimpleTestBean>() {
  193. {
  194. put(new SimpleTestBean(5), new SimpleTestBean(-5));
  195. put(new SimpleTestBean(-4), new SimpleTestBean(4));
  196. }
  197. };
  198. rpc.sendWrappedGenerics(new HashMap<Set<SimpleTestBean>, Map<Integer, List<SimpleTestBean>>>() {
  199. {
  200. put(Collections.singleton(new SimpleTestBean(42)),
  201. new HashMap<Integer, List<SimpleTestBean>>() {
  202. {
  203. put(1, Arrays.asList(new SimpleTestBean(1),
  204. new SimpleTestBean(3)));
  205. }
  206. });
  207. }
  208. });
  209. state.generics = new HashMap<Set<SimpleTestBean>, Map<Integer, List<SimpleTestBean>>>() {
  210. {
  211. put(Collections.singleton(new SimpleTestBean(42)),
  212. new HashMap<Integer, List<SimpleTestBean>>() {
  213. {
  214. put(1, Arrays.asList(new SimpleTestBean(1),
  215. new SimpleTestBean(3)));
  216. }
  217. });
  218. }
  219. };
  220. rpc.sendEnum(ContentMode.TEXT, new ContentMode[] {
  221. ContentMode.PREFORMATTED, ContentMode.XML },
  222. Arrays.asList(ContentMode.HTML, ContentMode.RAW));
  223. state.contentMode = ContentMode.TEXT;
  224. state.array = new ContentMode[] { ContentMode.PREFORMATTED,
  225. ContentMode.XML };
  226. state.list = Arrays.asList(ContentMode.HTML, ContentMode.RAW);
  227. rpc.sendDate(new Date(1));
  228. rpc.sendDate(new Date(2013 - 1900, 5 - 1, 31, 11, 12, 13));
  229. state.date1 = new Date(1);
  230. state.date2 = new Date(2013 - 1900, 5 - 1, 31, 11, 12, 13);
  231. testExtension.registerRpc(new SerializerTestRpc() {
  232. @Override
  233. public void sendBoolean(boolean value, Boolean boxedValue,
  234. boolean[] array) {
  235. log.log("sendBoolean: " + value + ", " + boxedValue + ", "
  236. + Arrays.toString(array));
  237. }
  238. @Override
  239. public void sendByte(byte value, Byte boxedValue, byte[] array) {
  240. log.log("sendByte: " + value + ", " + boxedValue + ", "
  241. + Arrays.toString(array));
  242. }
  243. @Override
  244. public void sendChar(char value, Character boxedValue, char[] array) {
  245. log.log("sendChar: " + value + ", " + boxedValue + ", "
  246. + Arrays.toString(array));
  247. }
  248. @Override
  249. public void sendInt(int value, Integer boxedValue, int[] array) {
  250. log.log("sendInt: " + value + ", " + boxedValue + ", "
  251. + Arrays.toString(array));
  252. }
  253. @Override
  254. public void sendLong(long value, Long boxedValue, long[] array) {
  255. log.log("sendLong: " + value + ", " + boxedValue + ", "
  256. + Arrays.toString(array));
  257. }
  258. @Override
  259. public void sendFloat(float value, Float boxedValue, float[] array) {
  260. log.log("sendFloat: " + value + ", " + boxedValue + ", "
  261. + Arrays.toString(array));
  262. }
  263. @Override
  264. public void sendDouble(double value, Double boxedValue,
  265. double[] array) {
  266. log.log("sendDouble: " + value + ", " + boxedValue + ", "
  267. + Arrays.toString(array));
  268. }
  269. @Override
  270. public void sendString(String value) {
  271. log.log("sendString: " + value);
  272. }
  273. @Override
  274. public void sendConnector(Connector connector) {
  275. log.log("sendConnector: " + connector.getClass().getName());
  276. }
  277. @Override
  278. public void sendBean(ComplexTestBean complexBean,
  279. SimpleTestBean simpleBean, SimpleTestBean[] array) {
  280. log.log("sendBean: " + complexBean + ", " + simpleBean + ", "
  281. + Arrays.toString(array));
  282. }
  283. @Override
  284. public void sendNull(String value1, String value2) {
  285. log.log("sendNull: " + value1 + ", " + value2);
  286. }
  287. @Override
  288. public void sendNestedArray(int[][] nestedIntArray,
  289. SimpleTestBean[][] nestedBeanArray) {
  290. log.log("sendNestedArray: "
  291. + Arrays.deepToString(nestedIntArray) + ", "
  292. + Arrays.deepToString(nestedBeanArray));
  293. }
  294. @Override
  295. public void sendList(List<Integer> intList,
  296. List<Connector> connectorList, List<SimpleTestBean> beanList) {
  297. log.log("sendList: " + intList + ", "
  298. + connectorCollectionToString(connectorList) + ", "
  299. + beanList);
  300. }
  301. private String connectorCollectionToString(
  302. Collection<Connector> collection) {
  303. StringBuilder sb = new StringBuilder();
  304. for (Connector connector : collection) {
  305. if (sb.length() != 0) {
  306. sb.append(", ");
  307. }
  308. sb.append(connector.getClass());
  309. }
  310. String string = sb.toString();
  311. return string;
  312. }
  313. @Override
  314. public void sendArrayList(List<int[]> primitiveArrayList,
  315. List<Integer[]> objectArrayList,
  316. List<SimpleTestBean[]> beanArrayList) {
  317. log.log("sendArrayList: "
  318. + Arrays.deepToString(primitiveArrayList.toArray())
  319. + ", " + Arrays.deepToString(objectArrayList.toArray())
  320. + ", " + Arrays.deepToString(beanArrayList.toArray()));
  321. }
  322. @Override
  323. public void sendListArray(List<Integer>[] objectListArray,
  324. List<SimpleTestBean>[] beanListArray) {
  325. log.log("sendArrayList: " + Arrays.toString(objectListArray)
  326. + ", " + Arrays.toString(beanListArray));
  327. }
  328. @Override
  329. public void sendSet(Set<Integer> intSet,
  330. Set<Connector> connectorSet, Set<SimpleTestBean> beanSet) {
  331. log.log("sendSet: " + intSet + ", "
  332. + connectorCollectionToString(connectorSet) + ", "
  333. + beanSet);
  334. }
  335. @Override
  336. public void sendMap(Map<String, SimpleTestBean> stringMap,
  337. Map<Connector, SimpleTestBean> connectorMap,
  338. Map<Integer, Connector> intMap,
  339. Map<SimpleTestBean, SimpleTestBean> beanMap) {
  340. StringBuilder sb = new StringBuilder();
  341. for (Entry<Connector, SimpleTestBean> entry : connectorMap
  342. .entrySet()) {
  343. if (sb.length() == 0) {
  344. sb.append('[');
  345. } else {
  346. sb.append(", ");
  347. }
  348. sb.append(entry.getKey().getClass().getName());
  349. sb.append('=');
  350. sb.append(entry.getValue());
  351. }
  352. sb.append(']');
  353. String connectorMapString = sb.toString();
  354. sb = new StringBuilder();
  355. for (Entry<Integer, Connector> entry : intMap.entrySet()) {
  356. if (sb.length() == 0) {
  357. sb.append('[');
  358. } else {
  359. sb.append(", ");
  360. }
  361. sb.append(entry.getKey());
  362. sb.append('=');
  363. sb.append(entry.getValue().getClass().getName());
  364. }
  365. sb.append(']');
  366. String intMapString = sb.toString();
  367. log.log("sendMap: " + stringMap + ", " + connectorMapString
  368. + ", " + intMapString + ", " + beanMap);
  369. }
  370. @Override
  371. public void sendWrappedGenerics(
  372. Map<Set<SimpleTestBean>, Map<Integer, List<SimpleTestBean>>> generics) {
  373. log.log("sendWrappedGenerics: " + generics.toString());
  374. }
  375. @Override
  376. public void sendEnum(ContentMode contentMode, ContentMode[] array,
  377. List<ContentMode> list) {
  378. log.log("sendEnum: " + contentMode + ", "
  379. + Arrays.toString(array) + ", " + list);
  380. }
  381. @Override
  382. public void sendBeanSubclass(SimpleTestBean bean) {
  383. log.log("sendBeanSubclass: " + bean.getValue());
  384. }
  385. @Override
  386. public void sendDate(Date date) {
  387. DateFormat format = DateFormat.getDateTimeInstance(
  388. DateFormat.LONG, DateFormat.FULL,
  389. new Locale("en", "fi"));
  390. format.setTimeZone(TimeZone.getTimeZone("UTC"));
  391. log.log("sendDate: " + format.format(date));
  392. }
  393. @Override
  394. public void log(String string) {
  395. log.log(string);
  396. }
  397. });
  398. }
  399. @Override
  400. protected String getTestDescription() {
  401. return "Test for lots of different cases of encoding and decoding variuos data types";
  402. }
  403. @Override
  404. protected Integer getTicketNumber() {
  405. return Integer.valueOf(8655);
  406. }
  407. }