/src/test/java/com/alibaba/json/bvt/parser/AEHuangliang2Test.java

https://github.com/alibaba/fastjson · Java · 395 lines · 379 code · 13 blank · 3 comment · 7 complexity · d0d481888863309de72599c716199f82 MD5 · raw file

  1. package com.alibaba.json.bvt.parser;
  2. import com.alibaba.fastjson.JSON;
  3. import com.alibaba.fastjson.JSONObject;
  4. import com.alibaba.fastjson.parser.DefaultJSONParser;
  5. import com.alibaba.fastjson.parser.JSONToken;
  6. import com.alibaba.fastjson.parser.ParserConfig;
  7. import com.alibaba.fastjson.parser.deserializer.ObjectDeserializer;
  8. import com.alibaba.json.bvtVO.ae.huangliang2.*;
  9. import junit.framework.TestCase;
  10. import java.lang.reflect.Type;
  11. /**
  12. * Created by wenshao on 09/05/2017.
  13. */
  14. public class AEHuangliang2Test extends TestCase {
  15. static String jsonData = "{\n" +
  16. " \"areas\": [\n" +
  17. " {\n" +
  18. " \"@type\": \"section\",\n" +
  19. " \"templateId\": \"grid\",\n" +
  20. " \"style\": {\n" +
  21. " \"card\" : \"true\",\n" +
  22. " \"column-count\":\"2\",\n" +
  23. " \"aspect-ratio\":\"2\",\n" +
  24. " \"margins\":\"16 0 16 16\",\n" +
  25. " \"background-color\": \"#ffffff\",\n" +
  26. " \"column-gap\": \"10\"\n" +
  27. " },\n" +
  28. " \"children\": [\n" +
  29. " {\n" +
  30. " \"@type\": \"section\",\n" +
  31. " \"templateId\": \"grid\",\n" +
  32. " \"style\": {\n" +
  33. " \"card\" : \"true\",\n" +
  34. " \"column-count\":\"2\",\n" +
  35. " \"aspect-ratio\":\"2\",\n" +
  36. " \"margins\":\"16 0 16 16\",\n" +
  37. " \"background-color\": \"#ffffff\",\n" +
  38. " \"column-gap\": \"10\"\n" +
  39. " },\n" +
  40. " \"children\": [\n" +
  41. " {\n" +
  42. " \"@type\": \"floorV2\",\n" +
  43. " \"templateId\": \"base\",\n" +
  44. " \"image\": \"http://xxx\",\n" +
  45. " \"fields\": [\n" +
  46. " {\n" +
  47. " \"index\": 0,\n" +
  48. " \"value\": \"xxxx\",\n" +
  49. " \"type\": \"text\",\n" +
  50. " \"track\": {\n" +
  51. " \"name\": \"track name\",\n" +
  52. " \"params\": {\n" +
  53. " \"trackParam1\": \"trackParam1\"\n" +
  54. " }\n" +
  55. " },\n" +
  56. " \"extInfo\": {\n" +
  57. " \"likeByMe\": \"true\",\n" +
  58. " \"isFollowed\": \"true\"\n" +
  59. " },\n" +
  60. " \"action\": {\n" +
  61. " \"type\": \"click\",\n" +
  62. " \"action\": \"aecmd://nativie/invokeApi?name=key1&likeId=111&likeByMe=true\"\n" +
  63. " }\n" +
  64. " }\n" +
  65. " ],\n" +
  66. " \"bizId\": \"banner-myae-1-746877468\",\n" +
  67. " \"style\": {\n" +
  68. " \"card\" : \"true\",\n" +
  69. " \"background-color\": \"#000000\"\n" +
  70. " },\n" +
  71. " \"isTest\": false\n" +
  72. " },\n" +
  73. " {\n" +
  74. " \"@type\": \"floorV2\",\n" +
  75. " \"templateId\": \"base\",\n" +
  76. " \"image\": \"http://xxx\",\n" +
  77. " \"fields\": [\n" +
  78. " {\n" +
  79. " \"index\": 0,\n" +
  80. " \"value\": \"xxxx\",\n" +
  81. " \"type\": \"text\",\n" +
  82. " \"track\": {\n" +
  83. " \"name\": \"track name\",\n" +
  84. " \"params\": {\n" +
  85. " \"trackParam1\": \"trackParam1\"\n" +
  86. " }\n" +
  87. " },\n" +
  88. " \"action\": {\n" +
  89. " \"type\": \"click\",\n" +
  90. " \"action\": \"aecmd://xxxx\"\n" +
  91. " }\n" +
  92. " }\n" +
  93. " ],\n" +
  94. " \"extInfo\": {\n" +
  95. " \"likeByMe\": \"true\"\n" +
  96. " },\n" +
  97. " \"bizId\": \"banner-myae-1-746877468\",\n" +
  98. " \"style\": {\n" +
  99. " \"card\" : \"true\",\n" +
  100. " \"background-color\": \"#ffc1c1\"\n" +
  101. " },\n" +
  102. " \"isTest\": false\n" +
  103. " }\n" +
  104. " ]\n" +
  105. " },\n" +
  106. " {\n" +
  107. " \"@type\": \"floorV2\",\n" +
  108. " \"templateId\": \"base\",\n" +
  109. " \"image\": \"http://xxx\",\n" +
  110. " \"fields\": [\n" +
  111. " {\n" +
  112. " \"index\": 0,\n" +
  113. " \"value\": \"xxxx\",\n" +
  114. " \"type\": \"text\",\n" +
  115. " \"track\": {\n" +
  116. " \"name\": \"track name\",\n" +
  117. " \"params\": {\n" +
  118. " \"trackParam1\": \"trackParam1\"\n" +
  119. " }\n" +
  120. " },\n" +
  121. " \"extInfo\": {\n" +
  122. " \"likeByMe\": \"true\",\n" +
  123. " \"isFollowed\": \"true\"\n" +
  124. " },\n" +
  125. " \"action\": {\n" +
  126. " \"type\": \"click\",\n" +
  127. " \"action\": \"aecmd://nativie/invokeApi?name=key1&likeId=111&likeByMe=true\"\n" +
  128. " }\n" +
  129. " }\n" +
  130. " ],\n" +
  131. " \"bizId\": \"banner-myae-1-746877468\",\n" +
  132. " \"style\": {\n" +
  133. " \"card\" : \"true\",\n" +
  134. " \"background-color\": \"#000000\"\n" +
  135. " },\n" +
  136. " \"isTest\": false\n" +
  137. " },\n" +
  138. " {\n" +
  139. " \"@type\": \"floorV2\",\n" +
  140. " \"templateId\": \"base\",\n" +
  141. " \"image\": \"http://xxx\",\n" +
  142. " \"fields\": [\n" +
  143. " {\n" +
  144. " \"index\": 0,\n" +
  145. " \"value\": \"xxxx\",\n" +
  146. " \"type\": \"text\",\n" +
  147. " \"track\": {\n" +
  148. " \"name\": \"track name\",\n" +
  149. " \"params\": {\n" +
  150. " \"trackParam1\": \"trackParam1\"\n" +
  151. " }\n" +
  152. " },\n" +
  153. " \"action\": {\n" +
  154. " \"type\": \"click\",\n" +
  155. " \"action\": \"aecmd://xxxx\"\n" +
  156. " }\n" +
  157. " }\n" +
  158. " ],\n" +
  159. " \"extInfo\": {\n" +
  160. " \"likeByMe\": \"true\"\n" +
  161. " },\n" +
  162. " \"bizId\": \"banner-myae-1-746877468\",\n" +
  163. " \"style\": {\n" +
  164. " \"card\" : \"true\",\n" +
  165. " \"background-color\": \"#ffc1c1\"\n" +
  166. " },\n" +
  167. " \"isTest\": false\n" +
  168. " }\n" +
  169. " ]\n" +
  170. " }\n" +
  171. " ],\n" +
  172. " \"version\": 3,\n" +
  173. " \"currency\": \"RUB\"\n" +
  174. " }";
  175. static String floordata = "{\n" +
  176. " \"isTest\": true,\n" +
  177. " \"mockResult\": {\n" +
  178. " \"body\": {\n" +
  179. " \"areas\": [\n" +
  180. " {\n" +
  181. " \"@type\": \"section\",\n" +
  182. " \"templateId\": \"grid\",\n" +
  183. " \"style\": {\n" +
  184. " \"card\" : \"true\",\n" +
  185. " \"column-count\":\"2\",\n" +
  186. " \"aspect-ratio\":\"2\",\n" +
  187. " \"margins\":\"16 0 16 16\",\n" +
  188. " \"background-color\": \"#ffffff\",\n" +
  189. " \"column-gap\": \"10\"\n" +
  190. " },\n" +
  191. " \"children\": [\n" +
  192. " {\n" +
  193. " \"@type\": \"section\",\n" +
  194. " \"templateId\": \"grid\",\n" +
  195. " \"style\": {\n" +
  196. " \"card\" : \"true\",\n" +
  197. " \"column-count\":\"2\",\n" +
  198. " \"aspect-ratio\":\"2\",\n" +
  199. " \"margins\":\"16 0 16 16\",\n" +
  200. " \"background-color\": \"#ffffff\",\n" +
  201. " \"column-gap\": \"10\"\n" +
  202. " },\n" +
  203. " \"children\": [\n" +
  204. " {\n" +
  205. " \"@type\": \"floorV2\",\n" +
  206. " \"templateId\": \"base\",\n" +
  207. " \"image\": \"http://xxx\",\n" +
  208. " \"fields\": [\n" +
  209. " {\n" +
  210. " \"index\": 0,\n" +
  211. " \"value\": \"xxxx\",\n" +
  212. " \"type\": \"text\",\n" +
  213. " \"track\": {\n" +
  214. " \"name\": \"track name\",\n" +
  215. " \"params\": {\n" +
  216. " \"trackParam1\": \"trackParam1\"\n" +
  217. " }\n" +
  218. " },\n" +
  219. " \"extInfo\": {\n" +
  220. " \"likeByMe\": \"true\",\n" +
  221. " \"isFollowed\": \"true\"\n" +
  222. " },\n" +
  223. " \"action\": {\n" +
  224. " \"type\": \"click\",\n" +
  225. " \"action\": \"aecmd://nativie/invokeApi?name=key1&likeId=111&likeByMe=true\"\n" +
  226. " }\n" +
  227. " }\n" +
  228. " ],\n" +
  229. " \"bizId\": \"banner-myae-1-746877468\",\n" +
  230. " \"style\": {\n" +
  231. " \"card\" : \"true\",\n" +
  232. " \"background-color\": \"#000000\"\n" +
  233. " },\n" +
  234. " \"isTest\": false\n" +
  235. " },\n" +
  236. " {\n" +
  237. " \"@type\": \"floorV2\",\n" +
  238. " \"templateId\": \"base\",\n" +
  239. " \"image\": \"http://xxx\",\n" +
  240. " \"fields\": [\n" +
  241. " {\n" +
  242. " \"index\": 0,\n" +
  243. " \"value\": \"xxxx\",\n" +
  244. " \"type\": \"text\",\n" +
  245. " \"track\": {\n" +
  246. " \"name\": \"track name\",\n" +
  247. " \"params\": {\n" +
  248. " \"trackParam1\": \"trackParam1\"\n" +
  249. " }\n" +
  250. " },\n" +
  251. " \"action\": {\n" +
  252. " \"type\": \"click\",\n" +
  253. " \"action\": \"aecmd://xxxx\"\n" +
  254. " }\n" +
  255. " }\n" +
  256. " ],\n" +
  257. " \"extInfo\": {\n" +
  258. " \"likeByMe\": \"true\"\n" +
  259. " },\n" +
  260. " \"bizId\": \"banner-myae-1-746877468\",\n" +
  261. " \"style\": {\n" +
  262. " \"card\" : \"true\",\n" +
  263. " \"background-color\": \"#ffc1c1\"\n" +
  264. " },\n" +
  265. " \"isTest\": false\n" +
  266. " }\n" +
  267. " ]\n" +
  268. " },\n" +
  269. " {\n" +
  270. " \"@type\": \"floorV2\",\n" +
  271. " \"templateId\": \"base\",\n" +
  272. " \"image\": \"http://xxx\",\n" +
  273. " \"fields\": [\n" +
  274. " {\n" +
  275. " \"index\": 0,\n" +
  276. " \"value\": \"xxxx\",\n" +
  277. " \"type\": \"text\",\n" +
  278. " \"track\": {\n" +
  279. " \"name\": \"track name\",\n" +
  280. " \"params\": {\n" +
  281. " \"trackParam1\": \"trackParam1\"\n" +
  282. " }\n" +
  283. " },\n" +
  284. " \"extInfo\": {\n" +
  285. " \"likeByMe\": \"true\",\n" +
  286. " \"isFollowed\": \"true\"\n" +
  287. " },\n" +
  288. " \"action\": {\n" +
  289. " \"type\": \"click\",\n" +
  290. " \"action\": \"aecmd://nativie/invokeApi?name=key1&likeId=111&likeByMe=true\"\n" +
  291. " }\n" +
  292. " }\n" +
  293. " ],\n" +
  294. " \"bizId\": \"banner-myae-1-746877468\",\n" +
  295. " \"style\": {\n" +
  296. " \"card\" : \"true\",\n" +
  297. " \"background-color\": \"#000000\"\n" +
  298. " },\n" +
  299. " \"isTest\": false\n" +
  300. " },\n" +
  301. " {\n" +
  302. " \"@type\": \"floorV2\",\n" +
  303. " \"templateId\": \"base\",\n" +
  304. " \"image\": \"http://xxx\",\n" +
  305. " \"fields\": [\n" +
  306. " {\n" +
  307. " \"index\": 0,\n" +
  308. " \"value\": \"xxxx\",\n" +
  309. " \"type\": \"text\",\n" +
  310. " \"track\": {\n" +
  311. " \"name\": \"track name\",\n" +
  312. " \"params\": {\n" +
  313. " \"trackParam1\": \"trackParam1\"\n" +
  314. " }\n" +
  315. " },\n" +
  316. " \"action\": {\n" +
  317. " \"type\": \"click\",\n" +
  318. " \"action\": \"aecmd://xxxx\"\n" +
  319. " }\n" +
  320. " }\n" +
  321. " ],\n" +
  322. " \"extInfo\": {\n" +
  323. " \"likeByMe\": \"true\"\n" +
  324. " },\n" +
  325. " \"bizId\": \"banner-myae-1-746877468\",\n" +
  326. " \"style\": {\n" +
  327. " \"card\" : \"true\",\n" +
  328. " \"background-color\": \"#ffc1c1\"\n" +
  329. " },\n" +
  330. " \"isTest\": false\n" +
  331. " }\n" +
  332. " ]\n" +
  333. " }\n" +
  334. " ],\n" +
  335. " \"version\": 3,\n" +
  336. " \"currency\": \"RUB\"\n" +
  337. " },\n" +
  338. " \"head\": {\n" +
  339. " \"message\": \"\",\n" +
  340. " \"serverTime\": 1489473042814,\n" +
  341. " \"code\": \"200\",\n" +
  342. " \"ab\": \"yepxf_B\"\n" +
  343. " }\n" +
  344. "}\n" +
  345. "}";
  346. public void test_for_issue() throws Exception {
  347. ParserConfig.getGlobalInstance().putDeserializer(Area.class, new ObjectDeserializer() {
  348. public <T> T deserialze(DefaultJSONParser parser, Type type, Object fieldName) {
  349. JSONObject jsonObject = (JSONObject) parser.parse();
  350. String areaType;
  351. if (jsonObject.get("type") instanceof String) {
  352. areaType = (String) jsonObject.get("type");
  353. } else {
  354. return null;
  355. }
  356. if (Area.TYPE_SECTION.equals(areaType)) {
  357. String text = jsonObject.toJSONString();
  358. return (T) JSON.parseObject(text, Section.class);
  359. } else if (Area.TYPE_FLOORV1.equals(areaType)) {
  360. String text = jsonObject.toJSONString();
  361. return (T) JSON.parseObject(text, FloorV1.class);
  362. } else if (Area.TYPE_FLOORV2.equals(areaType)) {
  363. String text = jsonObject.toJSONString();
  364. return (T) JSON.parseObject(text, FloorV2.class);
  365. }
  366. return null;
  367. }
  368. public int getFastMatchToken() {
  369. return JSONToken.LBRACE;
  370. }
  371. });
  372. ParserConfig.getGlobalInstance().addAccept("section");
  373. ParserConfig.getGlobalInstance().addAccept("floorV2");
  374. MockResult data = JSON.parseObject(floordata, MockResult.class);
  375. String mockResultJson = JSON.toJSONString(data.mockResult);
  376. NetResponse response = JSON.parseObject(mockResultJson, NetResponse.class);
  377. String bodyJson = JSON.toJSONString(response.body);
  378. System.out.println(bodyJson);
  379. FloorPageData pageData = JSON.parseObject(bodyJson, FloorPageData.class);
  380. assertNotNull(pageData.areas);
  381. }
  382. }