/src/fitnesse/slim/ListExecutorTestBase.java
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
- // Copyright (C) 2003-2009 by Object Mentor, Inc. All rights reserved.
- // Released under the terms of the CPL Common Public License version 1.0.
- package fitnesse.slim;
- import static org.junit.Assert.assertEquals;
- import static org.junit.Assert.assertTrue;
- import static util.ListUtility.list;
- import java.io.ByteArrayOutputStream;
- import java.io.PrintStream;
- import java.util.ArrayList;
- import java.util.List;
- import java.util.Map;
- import fitnesse.html.HtmlUtil;
- import fitnesse.slim.converters.VoidConverter;
- import org.junit.Before;
- import org.junit.Test;
- // Extracted Test class to be implemented by all Java based Slim ports
- // The tests for PhpSlim and JsSlim implement this class
- public abstract class ListExecutorTestBase {
- protected List<Object> statements;
- protected ListExecutor executor;
- protected List<Object> expectedResults = new ArrayList<Object>();
- protected String testClass = "TestSlim";
- protected abstract ListExecutor getListExecutor() throws Exception;
- protected abstract String getTestClassPath();
-
- @Before
- public void setup() throws Exception {
- executor = getListExecutor();
- statements = new ArrayList<Object>();
- statements.add(list("i1", "import", getTestClassPath()));
- statements.add(list("m1", "make", "testSlim", testClass));
- expectedResults.add(list("i1", "OK"));
- expectedResults.add(list("m1", "OK"));
- }
- protected void respondsWith(List<Object> expected) {
- expectedResults.addAll(expected);
- List<Object> result = executor.execute(statements);
- Map<String, Object> expectedMap = SlimClient.resultToMap(expectedResults);
- Map<String, Object> resultMap = SlimClient.resultToMap(result);
- assertEquals(expectedMap, resultMap);
- }
- @Test
- public void checkSetup()
- {
- respondsWith(list());
- }
- @Test()
- public void invalidOperation() throws Exception {
- statements.add(list("inv1", "invalidOperation"));
- assertExceptionReturned("message:<<INVALID_STATEMENT: invalidOperation.>>", "inv1");
- }
- @Test(expected = SlimError.class)
- public void malformedStatement() throws Exception {
- statements.add(list("id", "call", "notEnoughArguments"));
- assertExceptionReturned("XX", "id");
- }
- private void assertExceptionReturned(String message, String returnTag) {
- Map<String, Object> results = SlimClient.resultToMap(executor.execute(statements));
- String result = (String) results.get(returnTag);
- assertTrue(result, result.contains(SlimServer.EXCEPTION_TAG) && result.indexOf(message) != -1);
- }
- @Test
- public void noSuchInstance() throws Exception {
- statements.add(list("id", "call", "noSuchInstance", "noSuchMethod"));
- assertExceptionReturned("message:<<NO_INSTANCE noSuchInstance.noSuchMethod.>>", "id");
- }
- @Test
- public void emptyListReturnsNicely() throws Exception {
- statements.clear();
- executor.execute(statements);
- expectedResults.clear();
- respondsWith(list());
- }
- @Test
- public void createWithFullyQualifiedNameWorks() throws Exception {
- statements.clear();
- statements.add(list("m1", "make", "testSlim", getTestClassPath() + "." + testClass));
- expectedResults.clear();
- respondsWith(list(list("m1", "OK")));
- }
- @Test
- public void exceptionInConstructorIsPassedThrough() throws Exception {
- statements.clear();
- expectedResults.clear();
- statements.add(list("m1", "make", "x", getTestClassPath() + ".ConstructorThrows", "thrown message"));
- assertExceptionReturned("thrown message", "m1");
- }
- @Test
- public void oneFunctionCall() throws Exception {
- statements.add(list("id", "call", "testSlim", "returnString"));
- respondsWith(list(list("id", "string")));
- }
- @Test
- public void oneFunctionCallVerbose() throws Exception {
- executor.setVerbose();
- PrintStream oldOut = System.out;
- ByteArrayOutputStream os = new ByteArrayOutputStream();
- System.setOut(new PrintStream(os));
- statements.add(list("id", "call", "testSlim", "returnString"));
- executor.execute(statements);
- System.setOut(oldOut);
- assertEquals("!1 Instructions" + HtmlUtil.ENDL +
- "[i1, import, fitnesse.slim.test]\n" +
- HtmlUtil.ENDL +
- "[i1, OK]" + HtmlUtil.ENDL +
- "------" + HtmlUtil.ENDL +
- "[m1, make, testSlim, TestSlim]\n" +
- HtmlUtil.ENDL +
- "[m1, OK]" + HtmlUtil.ENDL +
- "------" + HtmlUtil.ENDL +
- "[id, call, testSlim, returnString]\n" +
- HtmlUtil.ENDL +
- "[id, string]" + HtmlUtil.ENDL +
- "------" + HtmlUtil.ENDL, os.toString());
- }
- @Test
- public void oneFunctionCallWithBlankArgument() throws Exception {
- statements.add(list("id", "call", "testSlim", "echoString", ""));
- respondsWith(list(list("id", "")));
- }
- @Test
- public void oneFunctionCallToShowThatLaterImportsTakePrecedence() throws Exception {
- statements.add(0,list("i2", "import", getTestClassPath() + ".testSlimInThisPackageShouldNotBeTheOneUsed"));
- statements.add(list("id", "call", "testSlim", "returnString"));
- expectedResults.add(0, list("i2", "OK"));
- respondsWith(list(list("id", "string")));
- }
- @Test
- public void canPassArgumentsToConstructor() throws Exception {
- statements.add(list("m2", "make", "testSlim2", testClass, "3"));
- statements.add(list("c1", "call", "testSlim2", "returnConstructorArg"));
- statements.add(list("c2", "call", "testSlim", "returnConstructorArg"));
- respondsWith(
- list(
- list("m2", "OK"),
- list("c1", "3"),
- list("c2", "0")
- )
- );
- }
- @Test
- public void multiFunctionCall() throws Exception {
- statements.add(list("id1", "call", "testSlim", "addTo", "1", "2"));
- statements.add(list("id2", "call", "testSlim", "addTo", "3", "4"));
- respondsWith(list(list("id1", "3"), list("id2", "7")));
- }
- @Test
- public void callAndAssign() throws Exception {
- statements.add(list("id1", "callAndAssign", "v", "testSlim", "addTo", "5", "6"));
- statements.add(list("id2", "call", "testSlim", "echoInt", "$v"));
- respondsWith(list(list("id1", "11"), list("id2", "11")));
- }
- @Test
- public void canReplaceMultipleSymbolsInAnArgument() throws Exception {
- statements.add(list("id1", "callAndAssign", "v1", "testSlim", "echoString", "Bob"));
- statements.add(list("id2", "callAndAssign", "v2", "testSlim", "echoString", "Martin"));
- statements.add(list("id3", "call", "testSlim", "echoString", "name: $v1 $v2"));
- respondsWith(list(list("id1", "Bob"), list("id2", "Martin"), list("id3", "name: Bob Martin")));
- }
- @Test
- public void canReplaceMultipleSymbolsInAnArgumentWhenOneVarIsPrefixOfAnother() throws Exception {
- statements.add(list("id1", "callAndAssign", "v", "testSlim", "echoString", "Bob"));
- statements.add(list("id2", "callAndAssign", "v1", "testSlim", "echoString", "Martin"));
- statements.add(list("id3", "call", "testSlim", "echoString", "name: $v $v1"));
- respondsWith(list(list("id1", "Bob"), list("id2", "Martin"), list("id3", "name: Bob Martin")));
- }
- @Test
- public void canReplaceSymbolWhenValueIsNull() throws Exception {
- statements.add(list("id1", "make", "nf", "NullFixture"));
- statements.add(list("id2", "callAndAssign", "v", "nf", "getNull"));
- statements.add(list("id3", "call", "testSlim", "echoString", "$v"));
- respondsWith(list(list("id1", "OK"), list("id2", null), list("id3", null)));
- }
- @Test
- public void passAndReturnList() throws Exception {
- List<String> l = list("one", "two");
- statements.add(list("id", "call", "testSlim", "echoList", l));
- respondsWith(list(list("id", l)));
- }
- @Test
- public void passAndReturnListWithVariable() throws Exception {
- statements.add(list("id1", "callAndAssign", "v", "testSlim", "addTo", "3", "4"));
- statements.add(list("id2", "call", "testSlim", "echoList", list("$v")));
- respondsWith(list(list("id1", "7"), list("id2", list(7))));
- }
- @Test
- public void callToVoidFunctionReturnsVoidValue() throws Exception {
- statements.add(list("id", "call", "testSlim", "voidFunction"));
- respondsWith(list(list("id", VoidConverter.VOID_TAG)));
- }
- @Test
- public void callToFunctionReturningNull() throws Exception {
- statements.add(list("id", "call", "testSlim", "nullString"));
- respondsWith(list(list("id", null)));
- }
- @Test
- public void fixtureChainingWithAssignmentFromFactory() throws Exception {
- statements.add(list("id1", "callAndAssign", "v", "testSlim", "createTestSlimWithString",
- "test string"));
- statements.add(list("m2", "make", "chainedTestSlim", "$v"));
- statements.add(list("id2", "call", "chainedTestSlim", "getStringArg"));
- respondsWith(list(list("id1", "TestSlim: 0, test string"), list("m2", "OK"),
- list("id2", "test string")));
- }
- @Test
- public void methodAcceptsTestSlimFromSymbol() throws Exception {
- statements.add(list("id1", "callAndAssign", "v", "testSlim", "createTestSlimWithString",
- "test string"));
- statements.add(list("id2", "call", "testSlim", "getStringFromOther", "$v"));
- respondsWith(list(list("id1", "TestSlim: 0, test string"), list("id2", "test string")));
- }
- @Test
- public void methodAcceptsObjectFromSymbol() throws Exception {
- statements.add(list("id1", "callAndAssign", "v", "testSlim", "createTestSlimWithString",
- "test string"));
- statements.add(list("id2", "call", "testSlim", "isSame", "$v"));
- statements.add(list("m2", "make", "chainedTestSlim", "$v"));
- statements.add(list("id3", "call", "chainedTestSlim", "isSame", "$v"));
-
- respondsWith(list(list("id1", "TestSlim: 0, test string"), list("id2", "false"), list("m2", "OK"), list("id3", "true")));
- }
- @Test
- public void constructorAcceptsTestSlimFromSymbol() throws Exception {
- statements.add(list("id1", "callAndAssign", "v", "testSlim", "createTestSlimWithString",
- "test string"));
- statements.add(list("m2", "make", "newTestSlim", testClass, "4", "$v"));
- statements.add(list("id2", "call", "newTestSlim", "getStringArg"));
- respondsWith(list(list("id1", "TestSlim: 0, test string"), list("m2", "OK"), list("id2", "test string")));
- }
- }