package dbfit.environment; import dbfit.util.Direction; import static dbfit.util.Direction.*; import static dbfit.test.matchers.IsParameter.*; import org.junit.Test; import static org.junit.Assert.assertThat; import java.util.List; public class MySqlProcedureParametersParserTest { private MySqlProcedureParametersParser parser = new MySqlProcedureParametersParser(); private List<ParamDescriptor> params; @Test public void canParseParametersWithoutOptions() { parse("p1 decimal, p2 number"); assertThat(params, containsParameters( p("p1", INPUT, "decimal"), p("p2", INPUT, "number"))); } @Test public void canParseParametersWithLength() { parse("p1 varchar2(20), in p2 decimal ( 6 )"); assertThat(params, containsParameters( p("p1", INPUT, "varchar2"), p("p2", INPUT, "decimal"))); } @Test public void canParseParametersWithDirectionSpecifiers() { parse("p1 varchar2(20), IN p2 decimal(6), inout p3 int, out p4 decimal"); assertThat(params, containsParameters( p("p1", INPUT, "varchar2"), p("p2", INPUT, "decimal"), p("p3", INPUT_OUTPUT, "int"), p("p4", OUTPUT, "decimal"))); } @Test public void canParseParametersWithPrecisionAndScale() { parse("p1 decimal(6, 2), out p2 decimal(6,3)"); assertThat(params, containsParameters( p("p1", INPUT, "decimal"), p("p2", OUTPUT, "decimal"))); } @Test public void canParseSingleParameter() { assertThat(parse("p1 int"), containsParameters(p("p1", INPUT, "int"))); } @Test public void canParseReturnValue() { assertThat(parseReturn("decimal (6, 3)"), hasReturnType("decimal")); } // Helpers private List<ParamDescriptor> parse(String parametersList) { params = parser.parseParameters(parametersList); return params; } private ParamDescriptor parseReturn(String returnTypeExpression) { return parser.parseReturnType(returnTypeExpression); } private ParamDescriptor p(String name, Direction direction, String type) { return new ParamDescriptor(name, direction, type); } }