PageRenderTime 51ms CodeModel.GetById 18ms RepoModel.GetById 0ms app.codeStats 0ms

/etlunit-core/src/test/java/org/bitbucket/bradleysmithllc/etlunit/parser/test/ETLTestValueObjectBuilderTest.java

https://bitbucket.org/bradleysmithllc/etl-unit
Java | 358 lines | 277 code | 62 blank | 19 comment | 0 complexity | 6c4eef0a1444cca96b7256837e60c00a MD5 | raw file
  1. package org.bitbucket.bradleysmithllc.etlunit.parser.test;
  2. /*
  3. * #%L
  4. * etlunit-core
  5. * %%
  6. * Copyright (C) 2010 - 2014 bradleysmithllc
  7. * %%
  8. * Licensed under the Apache License, Version 2.0 (the "License");
  9. * you may not use this file except in compliance with the License.
  10. * You may obtain a copy of the License at
  11. *
  12. * http://www.apache.org/licenses/LICENSE-2.0
  13. *
  14. * Unless required by applicable law or agreed to in writing, software
  15. * distributed under the License is distributed on an "AS IS" BASIS,
  16. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  17. * See the License for the specific language governing permissions and
  18. * limitations under the License.
  19. * #L%
  20. */
  21. import org.bitbucket.bradleysmithllc.etlunit.parser.*;
  22. import org.junit.Assert;
  23. import org.junit.Test;
  24. import java.util.List;
  25. import java.util.Map;
  26. public class ETLTestValueObjectBuilderTest
  27. {
  28. @Test(expected = IllegalStateException.class)
  29. public void builderNeedsContext()
  30. {
  31. ETLTestValueObjectBuilder builder = new ETLTestValueObjectBuilder();
  32. builder.toObject();
  33. }
  34. @Test(expected = IllegalStateException.class)
  35. public void removeKeyNeedsContext()
  36. {
  37. ETLTestValueObjectBuilder builder = new ETLTestValueObjectBuilder();
  38. builder.removeKey("");
  39. }
  40. @Test(expected = IllegalStateException.class)
  41. public void keyNeedsContext()
  42. {
  43. ETLTestValueObjectBuilder builder = new ETLTestValueObjectBuilder();
  44. builder.key("");
  45. }
  46. @Test(expected = IllegalStateException.class)
  47. public void cantRemoveCurrentKey()
  48. {
  49. ETLTestValueObjectBuilder builder = new ETLTestValueObjectBuilder();
  50. builder.key("A").removeKey("A");
  51. }
  52. @Test(expected = IllegalStateException.class)
  53. public void dontCallKeyTwiceInARow()
  54. {
  55. ETLTestValueObjectBuilder builder = new ETLTestValueObjectBuilder();
  56. builder.object().key("").key("");
  57. }
  58. @Test(expected = IllegalStateException.class)
  59. public void valueNeedsContext()
  60. {
  61. ETLTestValueObjectBuilder builder = new ETLTestValueObjectBuilder();
  62. builder.value("");
  63. }
  64. @Test(expected = IllegalStateException.class)
  65. public void pojoValueNeedsContext()
  66. {
  67. ETLTestValueObjectBuilder builder = new ETLTestValueObjectBuilder();
  68. builder.pojoValue(builder);
  69. }
  70. @Test(expected = IllegalStateException.class)
  71. public void jsonValueNeedsContext()
  72. {
  73. ETLTestValueObjectBuilder builder = new ETLTestValueObjectBuilder();
  74. builder.jsonValue("{}");
  75. }
  76. @Test(expected = IllegalStateException.class)
  77. public void listsDoNotHaveKeys()
  78. {
  79. ETLTestValueObjectBuilder builder = new ETLTestValueObjectBuilder();
  80. builder.list().key("");
  81. }
  82. @Test(expected = IllegalStateException.class)
  83. public void listsDoNotRemoveKeys()
  84. {
  85. ETLTestValueObjectBuilder builder = new ETLTestValueObjectBuilder();
  86. builder.list().removeKey("");
  87. }
  88. @Test
  89. public void addKeyThenRemove()
  90. {
  91. ETLTestValueObject obj = new ETLTestValueObjectBuilder()
  92. .object()
  93. .key("key")
  94. .value("Hello1")
  95. .key("key2")
  96. .value("Hello2")
  97. .removeKey("key")
  98. .endObject()
  99. .toObject();
  100. Assert.assertEquals(ETLTestValueObject.value_type.object, obj.getValueType());
  101. Assert.assertEquals(1, obj.getValueAsMap().size());
  102. Assert.assertEquals("Hello2", obj.getValueAsMap().get("key2").getValueAsString());
  103. Assert.assertNull(obj.getValueAsMap().get("key"));
  104. }
  105. @Test
  106. public void simpleList()
  107. {
  108. ETLTestValueObject obj = new ETLTestValueObjectBuilder()
  109. .list()
  110. .value("Hello1")
  111. .value("Hello2")
  112. .value("Hello3")
  113. .endList()
  114. .toObject();
  115. Assert.assertEquals(ETLTestValueObject.value_type.list, obj.getValueType());
  116. Assert.assertEquals(3, obj.getValueAsListOfStrings().size());
  117. Assert.assertEquals("Hello1", obj.getValueAsListOfStrings().get(0));
  118. Assert.assertEquals("Hello2", obj.getValueAsListOfStrings().get(1));
  119. Assert.assertEquals("Hello3", obj.getValueAsListOfStrings().get(2));
  120. }
  121. @Test
  122. public void simpleMap()
  123. {
  124. ETLTestValueObjectBuilder builder = new ETLTestValueObjectBuilder();
  125. builder = builder.object();
  126. builder = builder.key("Hello");
  127. builder = builder.value("Hello1");
  128. builder = builder.endObject();
  129. ETLTestValueObject obj = builder.toObject();
  130. Assert.assertEquals(ETLTestValueObject.value_type.object, obj.getValueType());
  131. Assert.assertEquals(1, obj.getValueAsMap().size());
  132. Assert.assertEquals("Hello1", obj.getValueAsMap().get("Hello").getValueAsString());
  133. }
  134. @Test(expected = IllegalStateException.class)
  135. public void duplicateKeyValues()
  136. {
  137. ETLTestValueObjectBuilder builder = new ETLTestValueObjectBuilder();
  138. builder = builder.object();
  139. builder = builder.key("key1");
  140. builder = builder.value("value1");
  141. builder = builder.key("key1");
  142. }
  143. @Test
  144. public void allOverThePlace()
  145. {
  146. Object pojo = new Object();
  147. ETLTestValueObjectBuilder builder = new ETLTestValueObjectBuilder();
  148. builder = builder.object();
  149. builder = builder.key("key1");
  150. builder = builder.value("value1");
  151. builder = builder.key("key2");
  152. builder = builder.list();
  153. builder = builder.value("listvalue1");
  154. builder = builder.value("listvalue2");
  155. builder = builder.value("listvalue3");
  156. builder = builder.jsonValue("{happy: 'days'}");
  157. builder = builder.pojoValue(pojo);
  158. builder = builder.endList();
  159. builder = builder.endObject();
  160. ETLTestValueObject obj = builder.toObject();
  161. Assert.assertEquals(ETLTestValueObject.value_type.object, obj.getValueType());
  162. Assert.assertEquals(2, obj.getValueAsMap().size());
  163. Assert.assertNotNull(obj.query("key1"));
  164. Assert.assertEquals("value1", obj.query("key1").getValueAsString());
  165. ETLTestValueObject key2 = obj.query("key2");
  166. Assert.assertNotNull(key2);
  167. Assert.assertEquals(ETLTestValueObject.value_type.list, key2.getValueType());
  168. List<ETLTestValueObject> valueAsList = key2.getValueAsList();
  169. Assert.assertEquals(5, valueAsList.size());
  170. Assert.assertEquals("listvalue1", valueAsList.get(0).getValueAsString());
  171. Assert.assertEquals("listvalue2", valueAsList.get(1).getValueAsString());
  172. Assert.assertEquals("listvalue3", valueAsList.get(2).getValueAsString());
  173. ETLTestValueObject listObject = valueAsList.get(3);
  174. Assert.assertEquals(ETLTestValueObject.value_type.object, listObject.getValueType());
  175. ETLTestValueObject happy = listObject.query("happy");
  176. Assert.assertNotNull(happy);
  177. Assert.assertEquals("days", happy.getValueAsString());
  178. ETLTestValueObject pojoObject = valueAsList.get(4);
  179. Assert.assertEquals(ETLTestValueObject.value_type.pojo, pojoObject.getValueType());
  180. Assert.assertEquals(pojo, pojoObject.getValueAsPojo());
  181. }
  182. @Test(expected = IllegalStateException.class)
  183. public void unbalancedEndsListToObject()
  184. {
  185. ETLTestValueObjectBuilder builder = new ETLTestValueObjectBuilder();
  186. builder = builder.object();
  187. builder = builder.key("key1");
  188. builder = builder.list();
  189. builder = builder.endObject();
  190. }
  191. @Test(expected = IllegalStateException.class)
  192. public void unbalancedEndsObjectToList()
  193. {
  194. ETLTestValueObjectBuilder builder = new ETLTestValueObjectBuilder();
  195. builder = builder.list();
  196. builder = builder.object();
  197. builder = builder.key("key1");
  198. builder = builder.value("key1");
  199. builder = builder.endList();
  200. }
  201. @Test(expected = IllegalStateException.class)
  202. public void danglingObjectKeys()
  203. {
  204. ETLTestValueObjectBuilder builder = new ETLTestValueObjectBuilder();
  205. builder = builder.object();
  206. builder = builder.key("key1");
  207. builder = builder.endObject();
  208. }
  209. @Test(expected = IllegalStateException.class)
  210. public void danglingListKeys()
  211. {
  212. ETLTestValueObjectBuilder builder = new ETLTestValueObjectBuilder();
  213. builder = builder.object();
  214. builder = builder.key("key1");
  215. builder = builder.endList();
  216. }
  217. @Test(expected = IllegalStateException.class)
  218. public void unbalancedEndsObject()
  219. {
  220. ETLTestValueObjectBuilder builder = new ETLTestValueObjectBuilder();
  221. builder = builder.object();
  222. builder = builder.endList();
  223. }
  224. @Test(expected = IllegalStateException.class)
  225. public void unbalancedEndsList()
  226. {
  227. ETLTestValueObjectBuilder builder = new ETLTestValueObjectBuilder();
  228. builder = builder.list();
  229. builder = builder.endObject();
  230. }
  231. @Test(expected = IllegalArgumentException.class)
  232. public void cantExtendAStringValue()
  233. {
  234. ETLTestValueObjectBuilder builder = new ETLTestValueObjectBuilder(new ETLTestValueObjectImpl("Hi"));
  235. }
  236. @Test(expected = IllegalArgumentException.class)
  237. public void cantExtendAPojoValue()
  238. {
  239. ETLTestValueObjectBuilder builder = new ETLTestValueObjectBuilder(new ETLTestValueObjectImpl(new Object()));
  240. }
  241. @Test
  242. public void extendAListValue() throws ParseException
  243. {
  244. ETLTestValueObject list = new ETLTestValueObjectBuilder()
  245. .list()
  246. .value("a")
  247. .value("b")
  248. .endList()
  249. .toObject();
  250. ETLTestValueObject builder = new ETLTestValueObjectBuilder(list)
  251. .value("Hello1")
  252. .value("Hello2")
  253. .value("Hello3")
  254. .endList()
  255. .toObject();
  256. List<String> listValueAsListOfStrings = list.getValueAsListOfStrings();
  257. List<String> builderValueAsListOfStrings = builder.getValueAsListOfStrings();
  258. Assert.assertEquals(listValueAsListOfStrings.get(0), builderValueAsListOfStrings.get(0));
  259. Assert.assertEquals(listValueAsListOfStrings.get(1), builderValueAsListOfStrings.get(1));
  260. Assert.assertEquals(listValueAsListOfStrings.get(2), builderValueAsListOfStrings.get(2));
  261. Assert.assertEquals(listValueAsListOfStrings.get(3), builderValueAsListOfStrings.get(3));
  262. Assert.assertEquals(listValueAsListOfStrings.get(4), builderValueAsListOfStrings.get(4));
  263. }
  264. @Test
  265. public void extendAMapValue() throws ParseException
  266. {
  267. ETLTestValueObject map = ETLTestParser.loadObject("{a: 'a', b: 'b'}");
  268. ETLTestValueObject builder = new ETLTestValueObjectBuilder(map)
  269. .key("c")
  270. .value("c")
  271. .endObject()
  272. .toObject();
  273. Map<String, ETLTestValueObject> mapValue = builder.getValueAsMap();
  274. Map<String, ETLTestValueObject> builderMap = map.getValueAsMap();
  275. Assert.assertEquals(mapValue.get("a").getValueAsString(), builderMap.get("a").getValueAsString());
  276. Assert.assertEquals(mapValue.get("b").getValueAsString(), builderMap.get("b").getValueAsString());
  277. Assert.assertEquals(mapValue.get("c").getValueAsString(), builderMap.get("c").getValueAsString());
  278. }
  279. @Test
  280. public void extendAMapValueAndRemoveKeys() throws ParseException
  281. {
  282. ETLTestValueObject map = ETLTestParser.loadObject("{a: 'a', b: 'b'}");
  283. ETLTestValueObject builder = new ETLTestValueObjectBuilder(map)
  284. .key("c")
  285. .value("c")
  286. .removeKey("a")
  287. .endObject()
  288. .toObject();
  289. Map<String, ETLTestValueObject> mapValue = builder.getValueAsMap();
  290. Map<String, ETLTestValueObject> builderMap = map.getValueAsMap();
  291. Assert.assertNull(mapValue.get("a"));
  292. Assert.assertNull(builderMap.get("a"));
  293. Assert.assertEquals(mapValue.get("b").getValueAsString(), builderMap.get("b").getValueAsString());
  294. Assert.assertEquals(mapValue.get("c").getValueAsString(), builderMap.get("c").getValueAsString());
  295. }
  296. }