unit-test: names, types, prefix v_0
authorFrantišek Kučera <franta-hg@frantovo.cz>
Mon, 16 Dec 2013 00:29:22 +0100
branchv_0
changeset 12 2dcb67d90fd2
parent 11 2712ded000ef
child 13 599aad77e986
unit-test: names, types, prefix
java/sql-dk/src/info/globalcode/sql/dk/CLIParser.java
java/sql-dk/test/info/globalcode/sql/dk/CLIParserTest.java
--- a/java/sql-dk/src/info/globalcode/sql/dk/CLIParser.java	Mon Dec 16 00:07:46 2013 +0100
+++ b/java/sql-dk/src/info/globalcode/sql/dk/CLIParser.java	Mon Dec 16 00:29:22 2013 +0100
@@ -44,7 +44,7 @@
 						if (sepatratorIndex == -1) {
 							numberedTypes.add(getType(oneType));
 						} else {
-							String namePart = oneType.substring(0, sepatratorIndex);
+							String namePart = oneType.substring(0, sepatratorIndex).trim();
 							String typePart = oneType.substring(sepatratorIndex + TYPE_NAME_SEPARATOR.length(), oneType.length());
 							namedTypes.put(namePart, getType(typePart));
 						}
--- a/java/sql-dk/test/info/globalcode/sql/dk/CLIParserTest.java	Mon Dec 16 00:07:46 2013 +0100
+++ b/java/sql-dk/test/info/globalcode/sql/dk/CLIParserTest.java	Mon Dec 16 00:29:22 2013 +0100
@@ -1,7 +1,9 @@
 package info.globalcode.sql.dk;
 
 import info.globalcode.sql.dk.CLIParser.Tokens;
+import static info.globalcode.sql.dk.CLIParser.TYPE_NAME_SEPARATOR;
 import java.sql.Types;
+import java.util.Collection;
 import static org.testng.Assert.*;
 import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.Test;
@@ -17,6 +19,9 @@
 	private static final String DATA_1 = "aaa";
 	private static final String DATA_2 = "bbb";
 	private static final String DATA_3 = "ccc";
+	private static final String NAME_1 = "param1";
+	private static final String NAME_2 = "param2";
+	private static final String NAME_3 = "param3";
 	private CLIParser parser;
 
 	@BeforeMethod
@@ -25,6 +30,21 @@
 	}
 
 	@Test
+	public void testParseOptions_QueryNow_NoParams() throws InvalidOptionsException, CLIParserException {
+		String[] args = new String[]{
+			Tokens.DB, DATABASE_NAME_1,
+			Tokens.SQL, SQL_1};
+		CLIOptions options = parser.parseOptions(args);
+		options.validate();
+
+		assertEquals(options.getDatabaseName(), DATABASE_NAME_1);
+		assertEquals(options.getSql(), SQL_1);
+		assertEquals(options.getMode(), CLIOptions.MODE.QUERY_NOW);
+		assertTrue(options.getNamedParameters().isEmpty(), "Named parameters should be empty.");
+		assertTrue(options.getNumberedParameters().isEmpty(), "Numbered parameters should be empty.");
+	}
+
+	@Test
 	public void testParseOptions_QueryNow_Numbered() throws InvalidOptionsException, CLIParserException {
 		String[] args = new String[]{
 			Tokens.DB, DATABASE_NAME_1,
@@ -71,13 +91,49 @@
 	public void testParseOptions_QueryNow_Named() throws InvalidOptionsException, CLIParserException {
 		String[] args = new String[]{
 			Tokens.DB, DATABASE_NAME_1,
-			Tokens.SQL, SQL_1};
+			Tokens.SQL, SQL_1,
+			Tokens.DATA, TYPE_NAME_SEPARATOR + NAME_1, DATA_1, TYPE_NAME_SEPARATOR + NAME_2, DATA_2, TYPE_NAME_SEPARATOR + NAME_3, DATA_3};
 		CLIOptions options = parser.parseOptions(args);
 		options.validate();
 
 		assertEquals(options.getDatabaseName(), DATABASE_NAME_1);
 		assertEquals(options.getSql(), SQL_1);
 		assertEquals(options.getMode(), CLIOptions.MODE.QUERY_NOW);
+		assertEquals(options.getNamedParameters().size(), 3);
+		assertNamedParameter(options.getNamedParameters(), NAME_1, DATA_1, Parameter.DEFAULT_TYPE);
+		assertNamedParameter(options.getNamedParameters(), NAME_2, DATA_2, Parameter.DEFAULT_TYPE);
+		assertNamedParameter(options.getNamedParameters(), NAME_3, DATA_3, Parameter.DEFAULT_TYPE);
+	}
+
+	@Test
+	public void testParseOptions_QueryNow_Named_withTypes() throws InvalidOptionsException, CLIParserException {
+		String[] args = new String[]{
+			Tokens.DB, DATABASE_NAME_1,
+			Tokens.SQL, SQL_1,
+			Tokens.NAME_PREFIX, "$",
+			Tokens.TYPES, " " + NAME_1 + TYPE_NAME_SEPARATOR + "int" + "," + NAME_2 + TYPE_NAME_SEPARATOR + "string" + "," + NAME_3 + TYPE_NAME_SEPARATOR + "boolean",
+			Tokens.DATA, "$" + NAME_1, DATA_1, "$" + NAME_2, DATA_2, "$" + NAME_3, DATA_3};
+		CLIOptions options = parser.parseOptions(args);
+		options.validate();
+
+		assertEquals(options.getDatabaseName(), DATABASE_NAME_1);
+		assertEquals(options.getSql(), SQL_1);
+		assertEquals(options.getMode(), CLIOptions.MODE.QUERY_NOW);
+		assertEquals(options.getNamedParameters().size(), 3);
+		assertNamedParameter(options.getNamedParameters(), NAME_1, DATA_1, Types.INTEGER);
+		assertNamedParameter(options.getNamedParameters(), NAME_2, DATA_2, Types.VARCHAR);
+		assertNamedParameter(options.getNamedParameters(), NAME_3, DATA_3, Types.BOOLEAN);
+	}
+
+	private void assertNamedParameter(Collection<NamedParameter> params, String name, Object value, int type) {
+		for (NamedParameter p : params) {
+			if (name.equals(p.getName())) {
+				assertEquals(p.getValue(), value, "value does not match – name: " + name);
+				assertEquals(p.getType(), type, "value does not match – name: " + name);
+				return;
+			}
+		}
+		fail("Named parameter not found: " + name);
 	}
 
 	@Test