java/sql-dk/test/info/globalcode/sql/dk/CLIParserTest.java
branchv_0
changeset 12 2dcb67d90fd2
parent 11 2712ded000ef
child 13 599aad77e986
     1.1 --- a/java/sql-dk/test/info/globalcode/sql/dk/CLIParserTest.java	Mon Dec 16 00:07:46 2013 +0100
     1.2 +++ b/java/sql-dk/test/info/globalcode/sql/dk/CLIParserTest.java	Mon Dec 16 00:29:22 2013 +0100
     1.3 @@ -1,7 +1,9 @@
     1.4  package info.globalcode.sql.dk;
     1.5  
     1.6  import info.globalcode.sql.dk.CLIParser.Tokens;
     1.7 +import static info.globalcode.sql.dk.CLIParser.TYPE_NAME_SEPARATOR;
     1.8  import java.sql.Types;
     1.9 +import java.util.Collection;
    1.10  import static org.testng.Assert.*;
    1.11  import org.testng.annotations.BeforeMethod;
    1.12  import org.testng.annotations.Test;
    1.13 @@ -17,6 +19,9 @@
    1.14  	private static final String DATA_1 = "aaa";
    1.15  	private static final String DATA_2 = "bbb";
    1.16  	private static final String DATA_3 = "ccc";
    1.17 +	private static final String NAME_1 = "param1";
    1.18 +	private static final String NAME_2 = "param2";
    1.19 +	private static final String NAME_3 = "param3";
    1.20  	private CLIParser parser;
    1.21  
    1.22  	@BeforeMethod
    1.23 @@ -25,6 +30,21 @@
    1.24  	}
    1.25  
    1.26  	@Test
    1.27 +	public void testParseOptions_QueryNow_NoParams() throws InvalidOptionsException, CLIParserException {
    1.28 +		String[] args = new String[]{
    1.29 +			Tokens.DB, DATABASE_NAME_1,
    1.30 +			Tokens.SQL, SQL_1};
    1.31 +		CLIOptions options = parser.parseOptions(args);
    1.32 +		options.validate();
    1.33 +
    1.34 +		assertEquals(options.getDatabaseName(), DATABASE_NAME_1);
    1.35 +		assertEquals(options.getSql(), SQL_1);
    1.36 +		assertEquals(options.getMode(), CLIOptions.MODE.QUERY_NOW);
    1.37 +		assertTrue(options.getNamedParameters().isEmpty(), "Named parameters should be empty.");
    1.38 +		assertTrue(options.getNumberedParameters().isEmpty(), "Numbered parameters should be empty.");
    1.39 +	}
    1.40 +
    1.41 +	@Test
    1.42  	public void testParseOptions_QueryNow_Numbered() throws InvalidOptionsException, CLIParserException {
    1.43  		String[] args = new String[]{
    1.44  			Tokens.DB, DATABASE_NAME_1,
    1.45 @@ -71,13 +91,49 @@
    1.46  	public void testParseOptions_QueryNow_Named() throws InvalidOptionsException, CLIParserException {
    1.47  		String[] args = new String[]{
    1.48  			Tokens.DB, DATABASE_NAME_1,
    1.49 -			Tokens.SQL, SQL_1};
    1.50 +			Tokens.SQL, SQL_1,
    1.51 +			Tokens.DATA, TYPE_NAME_SEPARATOR + NAME_1, DATA_1, TYPE_NAME_SEPARATOR + NAME_2, DATA_2, TYPE_NAME_SEPARATOR + NAME_3, DATA_3};
    1.52  		CLIOptions options = parser.parseOptions(args);
    1.53  		options.validate();
    1.54  
    1.55  		assertEquals(options.getDatabaseName(), DATABASE_NAME_1);
    1.56  		assertEquals(options.getSql(), SQL_1);
    1.57  		assertEquals(options.getMode(), CLIOptions.MODE.QUERY_NOW);
    1.58 +		assertEquals(options.getNamedParameters().size(), 3);
    1.59 +		assertNamedParameter(options.getNamedParameters(), NAME_1, DATA_1, Parameter.DEFAULT_TYPE);
    1.60 +		assertNamedParameter(options.getNamedParameters(), NAME_2, DATA_2, Parameter.DEFAULT_TYPE);
    1.61 +		assertNamedParameter(options.getNamedParameters(), NAME_3, DATA_3, Parameter.DEFAULT_TYPE);
    1.62 +	}
    1.63 +
    1.64 +	@Test
    1.65 +	public void testParseOptions_QueryNow_Named_withTypes() throws InvalidOptionsException, CLIParserException {
    1.66 +		String[] args = new String[]{
    1.67 +			Tokens.DB, DATABASE_NAME_1,
    1.68 +			Tokens.SQL, SQL_1,
    1.69 +			Tokens.NAME_PREFIX, "$",
    1.70 +			Tokens.TYPES, " " + NAME_1 + TYPE_NAME_SEPARATOR + "int" + "," + NAME_2 + TYPE_NAME_SEPARATOR + "string" + "," + NAME_3 + TYPE_NAME_SEPARATOR + "boolean",
    1.71 +			Tokens.DATA, "$" + NAME_1, DATA_1, "$" + NAME_2, DATA_2, "$" + NAME_3, DATA_3};
    1.72 +		CLIOptions options = parser.parseOptions(args);
    1.73 +		options.validate();
    1.74 +
    1.75 +		assertEquals(options.getDatabaseName(), DATABASE_NAME_1);
    1.76 +		assertEquals(options.getSql(), SQL_1);
    1.77 +		assertEquals(options.getMode(), CLIOptions.MODE.QUERY_NOW);
    1.78 +		assertEquals(options.getNamedParameters().size(), 3);
    1.79 +		assertNamedParameter(options.getNamedParameters(), NAME_1, DATA_1, Types.INTEGER);
    1.80 +		assertNamedParameter(options.getNamedParameters(), NAME_2, DATA_2, Types.VARCHAR);
    1.81 +		assertNamedParameter(options.getNamedParameters(), NAME_3, DATA_3, Types.BOOLEAN);
    1.82 +	}
    1.83 +
    1.84 +	private void assertNamedParameter(Collection<NamedParameter> params, String name, Object value, int type) {
    1.85 +		for (NamedParameter p : params) {
    1.86 +			if (name.equals(p.getName())) {
    1.87 +				assertEquals(p.getValue(), value, "value does not match – name: " + name);
    1.88 +				assertEquals(p.getType(), type, "value does not match – name: " + name);
    1.89 +				return;
    1.90 +			}
    1.91 +		}
    1.92 +		fail("Named parameter not found: " + name);
    1.93  	}
    1.94  
    1.95  	@Test