PageRenderTime 48ms CodeModel.GetById 20ms RepoModel.GetById 0ms app.codeStats 0ms

/src/fitnesse/slim/ListExecutorTestBase.java

http://github.com/unclebob/fitnesse
Java | 268 lines | 224 code | 40 blank | 4 comment | 2 complexity | e93e713eeaeaa9ee16af737fa729e889 MD5 | raw file
Possible License(s): BSD-2-Clause, BSD-3-Clause, GPL-2.0
  1. // Copyright (C) 2003-2009 by Object Mentor, Inc. All rights reserved.
  2. // Released under the terms of the CPL Common Public License version 1.0.
  3. package fitnesse.slim;
  4. import static org.junit.Assert.assertEquals;
  5. import static org.junit.Assert.assertTrue;
  6. import static util.ListUtility.list;
  7. import java.io.ByteArrayOutputStream;
  8. import java.io.PrintStream;
  9. import java.util.ArrayList;
  10. import java.util.List;
  11. import java.util.Map;
  12. import fitnesse.html.HtmlUtil;
  13. import fitnesse.slim.converters.VoidConverter;
  14. import org.junit.Before;
  15. import org.junit.Test;
  16. // Extracted Test class to be implemented by all Java based Slim ports
  17. // The tests for PhpSlim and JsSlim implement this class
  18. public abstract class ListExecutorTestBase {
  19. protected List<Object> statements;
  20. protected ListExecutor executor;
  21. protected List<Object> expectedResults = new ArrayList<Object>();
  22. protected String testClass = "TestSlim";
  23. protected abstract ListExecutor getListExecutor() throws Exception;
  24. protected abstract String getTestClassPath();
  25. @Before
  26. public void setup() throws Exception {
  27. executor = getListExecutor();
  28. statements = new ArrayList<Object>();
  29. statements.add(list("i1", "import", getTestClassPath()));
  30. statements.add(list("m1", "make", "testSlim", testClass));
  31. expectedResults.add(list("i1", "OK"));
  32. expectedResults.add(list("m1", "OK"));
  33. }
  34. protected void respondsWith(List<Object> expected) {
  35. expectedResults.addAll(expected);
  36. List<Object> result = executor.execute(statements);
  37. Map<String, Object> expectedMap = SlimClient.resultToMap(expectedResults);
  38. Map<String, Object> resultMap = SlimClient.resultToMap(result);
  39. assertEquals(expectedMap, resultMap);
  40. }
  41. @Test
  42. public void checkSetup()
  43. {
  44. respondsWith(list());
  45. }
  46. @Test()
  47. public void invalidOperation() throws Exception {
  48. statements.add(list("inv1", "invalidOperation"));
  49. assertExceptionReturned("message:<<INVALID_STATEMENT: invalidOperation.>>", "inv1");
  50. }
  51. @Test(expected = SlimError.class)
  52. public void malformedStatement() throws Exception {
  53. statements.add(list("id", "call", "notEnoughArguments"));
  54. assertExceptionReturned("XX", "id");
  55. }
  56. private void assertExceptionReturned(String message, String returnTag) {
  57. Map<String, Object> results = SlimClient.resultToMap(executor.execute(statements));
  58. String result = (String) results.get(returnTag);
  59. assertTrue(result, result.contains(SlimServer.EXCEPTION_TAG) && result.indexOf(message) != -1);
  60. }
  61. @Test
  62. public void noSuchInstance() throws Exception {
  63. statements.add(list("id", "call", "noSuchInstance", "noSuchMethod"));
  64. assertExceptionReturned("message:<<NO_INSTANCE noSuchInstance.noSuchMethod.>>", "id");
  65. }
  66. @Test
  67. public void emptyListReturnsNicely() throws Exception {
  68. statements.clear();
  69. executor.execute(statements);
  70. expectedResults.clear();
  71. respondsWith(list());
  72. }
  73. @Test
  74. public void createWithFullyQualifiedNameWorks() throws Exception {
  75. statements.clear();
  76. statements.add(list("m1", "make", "testSlim", getTestClassPath() + "." + testClass));
  77. expectedResults.clear();
  78. respondsWith(list(list("m1", "OK")));
  79. }
  80. @Test
  81. public void exceptionInConstructorIsPassedThrough() throws Exception {
  82. statements.clear();
  83. expectedResults.clear();
  84. statements.add(list("m1", "make", "x", getTestClassPath() + ".ConstructorThrows", "thrown message"));
  85. assertExceptionReturned("thrown message", "m1");
  86. }
  87. @Test
  88. public void oneFunctionCall() throws Exception {
  89. statements.add(list("id", "call", "testSlim", "returnString"));
  90. respondsWith(list(list("id", "string")));
  91. }
  92. @Test
  93. public void oneFunctionCallVerbose() throws Exception {
  94. executor.setVerbose();
  95. PrintStream oldOut = System.out;
  96. ByteArrayOutputStream os = new ByteArrayOutputStream();
  97. System.setOut(new PrintStream(os));
  98. statements.add(list("id", "call", "testSlim", "returnString"));
  99. executor.execute(statements);
  100. System.setOut(oldOut);
  101. assertEquals("!1 Instructions" + HtmlUtil.ENDL +
  102. "[i1, import, fitnesse.slim.test]\n" +
  103. HtmlUtil.ENDL +
  104. "[i1, OK]" + HtmlUtil.ENDL +
  105. "------" + HtmlUtil.ENDL +
  106. "[m1, make, testSlim, TestSlim]\n" +
  107. HtmlUtil.ENDL +
  108. "[m1, OK]" + HtmlUtil.ENDL +
  109. "------" + HtmlUtil.ENDL +
  110. "[id, call, testSlim, returnString]\n" +
  111. HtmlUtil.ENDL +
  112. "[id, string]" + HtmlUtil.ENDL +
  113. "------" + HtmlUtil.ENDL, os.toString());
  114. }
  115. @Test
  116. public void oneFunctionCallWithBlankArgument() throws Exception {
  117. statements.add(list("id", "call", "testSlim", "echoString", ""));
  118. respondsWith(list(list("id", "")));
  119. }
  120. @Test
  121. public void oneFunctionCallToShowThatLaterImportsTakePrecedence() throws Exception {
  122. statements.add(0,list("i2", "import", getTestClassPath() + ".testSlimInThisPackageShouldNotBeTheOneUsed"));
  123. statements.add(list("id", "call", "testSlim", "returnString"));
  124. expectedResults.add(0, list("i2", "OK"));
  125. respondsWith(list(list("id", "string")));
  126. }
  127. @Test
  128. public void canPassArgumentsToConstructor() throws Exception {
  129. statements.add(list("m2", "make", "testSlim2", testClass, "3"));
  130. statements.add(list("c1", "call", "testSlim2", "returnConstructorArg"));
  131. statements.add(list("c2", "call", "testSlim", "returnConstructorArg"));
  132. respondsWith(
  133. list(
  134. list("m2", "OK"),
  135. list("c1", "3"),
  136. list("c2", "0")
  137. )
  138. );
  139. }
  140. @Test
  141. public void multiFunctionCall() throws Exception {
  142. statements.add(list("id1", "call", "testSlim", "addTo", "1", "2"));
  143. statements.add(list("id2", "call", "testSlim", "addTo", "3", "4"));
  144. respondsWith(list(list("id1", "3"), list("id2", "7")));
  145. }
  146. @Test
  147. public void callAndAssign() throws Exception {
  148. statements.add(list("id1", "callAndAssign", "v", "testSlim", "addTo", "5", "6"));
  149. statements.add(list("id2", "call", "testSlim", "echoInt", "$v"));
  150. respondsWith(list(list("id1", "11"), list("id2", "11")));
  151. }
  152. @Test
  153. public void canReplaceMultipleSymbolsInAnArgument() throws Exception {
  154. statements.add(list("id1", "callAndAssign", "v1", "testSlim", "echoString", "Bob"));
  155. statements.add(list("id2", "callAndAssign", "v2", "testSlim", "echoString", "Martin"));
  156. statements.add(list("id3", "call", "testSlim", "echoString", "name: $v1 $v2"));
  157. respondsWith(list(list("id1", "Bob"), list("id2", "Martin"), list("id3", "name: Bob Martin")));
  158. }
  159. @Test
  160. public void canReplaceMultipleSymbolsInAnArgumentWhenOneVarIsPrefixOfAnother() throws Exception {
  161. statements.add(list("id1", "callAndAssign", "v", "testSlim", "echoString", "Bob"));
  162. statements.add(list("id2", "callAndAssign", "v1", "testSlim", "echoString", "Martin"));
  163. statements.add(list("id3", "call", "testSlim", "echoString", "name: $v $v1"));
  164. respondsWith(list(list("id1", "Bob"), list("id2", "Martin"), list("id3", "name: Bob Martin")));
  165. }
  166. @Test
  167. public void canReplaceSymbolWhenValueIsNull() throws Exception {
  168. statements.add(list("id1", "make", "nf", "NullFixture"));
  169. statements.add(list("id2", "callAndAssign", "v", "nf", "getNull"));
  170. statements.add(list("id3", "call", "testSlim", "echoString", "$v"));
  171. respondsWith(list(list("id1", "OK"), list("id2", null), list("id3", null)));
  172. }
  173. @Test
  174. public void passAndReturnList() throws Exception {
  175. List<String> l = list("one", "two");
  176. statements.add(list("id", "call", "testSlim", "echoList", l));
  177. respondsWith(list(list("id", l)));
  178. }
  179. @Test
  180. public void passAndReturnListWithVariable() throws Exception {
  181. statements.add(list("id1", "callAndAssign", "v", "testSlim", "addTo", "3", "4"));
  182. statements.add(list("id2", "call", "testSlim", "echoList", list("$v")));
  183. respondsWith(list(list("id1", "7"), list("id2", list(7))));
  184. }
  185. @Test
  186. public void callToVoidFunctionReturnsVoidValue() throws Exception {
  187. statements.add(list("id", "call", "testSlim", "voidFunction"));
  188. respondsWith(list(list("id", VoidConverter.VOID_TAG)));
  189. }
  190. @Test
  191. public void callToFunctionReturningNull() throws Exception {
  192. statements.add(list("id", "call", "testSlim", "nullString"));
  193. respondsWith(list(list("id", null)));
  194. }
  195. @Test
  196. public void fixtureChainingWithAssignmentFromFactory() throws Exception {
  197. statements.add(list("id1", "callAndAssign", "v", "testSlim", "createTestSlimWithString",
  198. "test string"));
  199. statements.add(list("m2", "make", "chainedTestSlim", "$v"));
  200. statements.add(list("id2", "call", "chainedTestSlim", "getStringArg"));
  201. respondsWith(list(list("id1", "TestSlim: 0, test string"), list("m2", "OK"),
  202. list("id2", "test string")));
  203. }
  204. @Test
  205. public void methodAcceptsTestSlimFromSymbol() throws Exception {
  206. statements.add(list("id1", "callAndAssign", "v", "testSlim", "createTestSlimWithString",
  207. "test string"));
  208. statements.add(list("id2", "call", "testSlim", "getStringFromOther", "$v"));
  209. respondsWith(list(list("id1", "TestSlim: 0, test string"), list("id2", "test string")));
  210. }
  211. @Test
  212. public void methodAcceptsObjectFromSymbol() throws Exception {
  213. statements.add(list("id1", "callAndAssign", "v", "testSlim", "createTestSlimWithString",
  214. "test string"));
  215. statements.add(list("id2", "call", "testSlim", "isSame", "$v"));
  216. statements.add(list("m2", "make", "chainedTestSlim", "$v"));
  217. statements.add(list("id3", "call", "chainedTestSlim", "isSame", "$v"));
  218. respondsWith(list(list("id1", "TestSlim: 0, test string"), list("id2", "false"), list("m2", "OK"), list("id3", "true")));
  219. }
  220. @Test
  221. public void constructorAcceptsTestSlimFromSymbol() throws Exception {
  222. statements.add(list("id1", "callAndAssign", "v", "testSlim", "createTestSlimWithString",
  223. "test string"));
  224. statements.add(list("m2", "make", "newTestSlim", testClass, "4", "$v"));
  225. statements.add(list("id2", "call", "newTestSlim", "getStringArg"));
  226. respondsWith(list(list("id1", "TestSlim: 0, test string"), list("m2", "OK"), list("id2", "test string")));
  227. }
  228. }