package dbfit.util.oracle; import org.junit.Before; import org.junit.Test; import java.util.HashMap; import java.util.Map; import dbfit.util.Direction; import static dbfit.util.Direction.*; import static dbfit.util.oracle.OracleBooleanSpTestsFactory.*; import static org.junit.Assert.assertEquals; public class OracleSpParameterTest { private Map<Direction, String> expectedDirections; private SpGeneratorOutput output; private OracleBooleanSpTestsFactory factory; private OracleSpParameter pin; private Map<String, OracleSpParameter> spParams; public void initExpectedDirections() { expectedDirections = new HashMap<Direction, String>(); expectedDirections.put(INPUT, "IN"); expectedDirections.put(OUTPUT, "OUT"); expectedDirections.put(INPUT_OUTPUT, "IN OUT"); expectedDirections.put(RETURN_VALUE, "RETURN"); } private void initOracleSpParameters() { spParams = factory.createSampleSpParameters(); } @Before public void prepare() { output = new SpGeneratorOutput(); factory = new OracleBooleanSpTestsFactory(output); initOracleSpParameters(); initExpectedDirections(); } @Test public void inputParameterDirectionNameTest() { HashMap<Integer, String> expectedNames = new HashMap<Integer, String>(); int i = 1; for (Map.Entry<Direction, String> entry: expectedDirections.entrySet()) { OracleSpParameter p = factory.makeSpParameter("p_" + i, entry.getKey()); assertEquals(entry.getValue(), p.getDirectionName()); ++i; } } private void checkShortDirectionName(Direction direction, String expected) { OracleSpParameter p = factory.makeSpParameter("p1", direction); assertEquals(p.getShortDirectionName(), expected); } @Test public void inputParameterShortDirectionNameTest() { checkShortDirectionName(INPUT, "in"); checkShortDirectionName(OUTPUT, "out"); checkShortDirectionName(INPUT_OUTPUT, "inout"); checkShortDirectionName(RETURN_VALUE, "ret"); } private void checkParameterDeclaration(String paramName, String expected) { OracleSpParameter arg = spParams.get(paramName); arg.declareArgument(); assertEquals(expected, arg.toString()); } private void checkVariableDeclaration(String paramName, String expected) { OracleSpParameter arg = spParams.get(paramName); arg.declareVariable(); assertEquals(expected, arg.toString().trim()); } @Test public void inputParameterDeclareArgumentChrTest() { checkParameterDeclaration(SP_ARG_CHR_IN, "z_" + SP_ARG_CHR_IN + " IN VARCHAR2"); } @Test public void inputParameterDeclareArgumentBooleanTest() { checkParameterDeclaration(SP_ARG_BOOL_IN, "z_" + SP_ARG_BOOL_IN + " IN BOOLEAN"); } @Test public void outputParameterDeclareArgumentBooleanTest() { checkParameterDeclaration(SP_ARG_BOOL_OUT, "z_" + SP_ARG_BOOL_OUT + " OUT VARCHAR2"); } @Test public void inoutParameterDeclareArgumentBooleanTest() { checkParameterDeclaration(SP_ARG_BOOL_INOUT, "z_" + SP_ARG_BOOL_INOUT + " IN OUT VARCHAR2"); } @Test public void inputParameterDeclareArgumentNumberTest() { checkParameterDeclaration(SP_ARG_NUM_IN, "z_" + SP_ARG_NUM_IN + " IN NUMBER"); } @Test public void variableDeclarChrInTest() { checkVariableDeclaration(SP_ARG_CHR_IN, ""); } @Test public void variableDeclareBooleanInTest() { checkVariableDeclaration(SP_ARG_BOOL_IN, ""); } @Test public void variableDeclareBooleanOutTest() { checkVariableDeclaration(SP_ARG_BOOL_OUT, "z_v_" + SP_ARG_BOOL_OUT + "_out BOOLEAN;"); } @Test public void variableDeclareBooleanInoutTest() { checkVariableDeclaration(SP_ARG_BOOL_INOUT, "z_v_" + SP_ARG_BOOL_INOUT + "_inout BOOLEAN := z_chr2bool( z_" + SP_ARG_BOOL_INOUT + " );"); } @Test public void variableDeclareNumberInTest() { checkVariableDeclaration(SP_ARG_NUM_IN, ""); } @Test public void boolArgInCallShouldBeWrapped() { OracleSpParameter arg = spParams.get(SP_ARG_BOOL_IN); assertEquals("z_chr2bool( ? )", arg.getCallArgument()); } @Test public void boolArgOutCallShouldNotBeWrapped() { OracleSpParameter arg = spParams.get(SP_ARG_BOOL_OUT); assertEquals("?", arg.getCallArgument()); } @Test public void testAssignVariable() { OracleSpParameter p = factory.makeSpParameter("p", OUTPUT, "BOOLEAN", "z"); p.assignOutputVariable(); assertEquals("z_p := z_bool2chr( z_v_p_out );", p.toString().trim()); } }