java/sql-dk/test/info/globalcode/sql/dk/CLIParserTest.java
author František Kučera <franta-hg@frantovo.cz>
Mon, 16 Dec 2013 12:10:45 +0100
branchv_0
changeset 13 599aad77e986
parent 12 2dcb67d90fd2
child 14 189b1260b942
permissions -rw-r--r--
fix: try/catch
     1 package info.globalcode.sql.dk;
     2 
     3 import info.globalcode.sql.dk.CLIParser.Tokens;
     4 import static info.globalcode.sql.dk.CLIParser.TYPE_NAME_SEPARATOR;
     5 import java.sql.Types;
     6 import java.util.Collection;
     7 import static org.testng.Assert.*;
     8 import org.testng.annotations.BeforeMethod;
     9 import org.testng.annotations.Test;
    10 
    11 /**
    12  *
    13  * @author Ing. František Kučera (frantovo.cz)
    14  */
    15 public class CLIParserTest {
    16 
    17 	private static final String DATABASE_NAME_1 = "some database 1";
    18 	private static final String SQL_1 = "SELECT * FROM table1";
    19 	private static final String DATA_1 = "aaa";
    20 	private static final String DATA_2 = "bbb";
    21 	private static final String DATA_3 = "ccc";
    22 	private static final String NAME_1 = "param1";
    23 	private static final String NAME_2 = "param2";
    24 	private static final String NAME_3 = "param3";
    25 	private CLIParser parser;
    26 
    27 	@BeforeMethod
    28 	public void setUpMethod() throws Exception {
    29 		parser = new CLIParser();
    30 	}
    31 
    32 	@Test
    33 	public void testParseOptions_QueryNow_NoParams() throws InvalidOptionsException, CLIParserException {
    34 		String[] args = new String[]{
    35 			Tokens.DB, DATABASE_NAME_1,
    36 			Tokens.SQL, SQL_1};
    37 		CLIOptions options = parser.parseOptions(args);
    38 		options.validate();
    39 
    40 		assertEquals(options.getDatabaseName(), DATABASE_NAME_1);
    41 		assertEquals(options.getSql(), SQL_1);
    42 		assertEquals(options.getMode(), CLIOptions.MODE.QUERY_NOW);
    43 		assertTrue(options.getNamedParameters().isEmpty(), "Named parameters should be empty.");
    44 		assertTrue(options.getNumberedParameters().isEmpty(), "Numbered parameters should be empty.");
    45 	}
    46 
    47 	@Test
    48 	public void testParseOptions_QueryNow_Numbered() throws InvalidOptionsException, CLIParserException {
    49 		String[] args = new String[]{
    50 			Tokens.DB, DATABASE_NAME_1,
    51 			Tokens.SQL, SQL_1,
    52 			Tokens.DATA, DATA_1, DATA_2, DATA_3};
    53 		CLIOptions options = parser.parseOptions(args);
    54 		options.validate();
    55 
    56 		assertEquals(options.getDatabaseName(), DATABASE_NAME_1);
    57 		assertEquals(options.getSql(), SQL_1);
    58 		assertEquals(options.getMode(), CLIOptions.MODE.QUERY_NOW);
    59 		assertEquals(options.getNumberedParameters().size(), 3);
    60 		assertEquals(options.getNumberedParameters().get(0).getValue(), DATA_1);
    61 		assertEquals(options.getNumberedParameters().get(1).getValue(), DATA_2);
    62 		assertEquals(options.getNumberedParameters().get(2).getValue(), DATA_3);
    63 		assertEquals(options.getNumberedParameters().get(0).getType(), Parameter.DEFAULT_TYPE);
    64 		assertEquals(options.getNumberedParameters().get(1).getType(), Parameter.DEFAULT_TYPE);
    65 		assertEquals(options.getNumberedParameters().get(2).getType(), Parameter.DEFAULT_TYPE);
    66 	}
    67 
    68 	@Test
    69 	public void testParseOptions_QueryNow_Numbered_withTypes() throws InvalidOptionsException, CLIParserException {
    70 		String[] args = new String[]{
    71 			Tokens.DB, DATABASE_NAME_1,
    72 			Tokens.SQL, SQL_1,
    73 			Tokens.TYPES, " int,string, boolean",
    74 			Tokens.DATA, DATA_1, DATA_2, DATA_3};
    75 		CLIOptions options = parser.parseOptions(args);
    76 		options.validate();
    77 
    78 		assertEquals(options.getDatabaseName(), DATABASE_NAME_1);
    79 		assertEquals(options.getSql(), SQL_1);
    80 		assertEquals(options.getMode(), CLIOptions.MODE.QUERY_NOW);
    81 		assertEquals(options.getNumberedParameters().size(), 3);
    82 		assertEquals(options.getNumberedParameters().get(0).getValue(), DATA_1);
    83 		assertEquals(options.getNumberedParameters().get(1).getValue(), DATA_2);
    84 		assertEquals(options.getNumberedParameters().get(2).getValue(), DATA_3);
    85 		assertEquals(options.getNumberedParameters().get(0).getType(), Types.INTEGER);
    86 		assertEquals(options.getNumberedParameters().get(1).getType(), Types.VARCHAR);
    87 		assertEquals(options.getNumberedParameters().get(2).getType(), Types.BOOLEAN);
    88 	}
    89 
    90 	@Test
    91 	public void testParseOptions_QueryNow_Named() throws InvalidOptionsException, CLIParserException {
    92 		String[] args = new String[]{
    93 			Tokens.DB, DATABASE_NAME_1,
    94 			Tokens.SQL, SQL_1,
    95 			Tokens.DATA, TYPE_NAME_SEPARATOR + NAME_1, DATA_1, TYPE_NAME_SEPARATOR + NAME_2, DATA_2, TYPE_NAME_SEPARATOR + NAME_3, DATA_3};
    96 		CLIOptions options = parser.parseOptions(args);
    97 		options.validate();
    98 
    99 		assertEquals(options.getDatabaseName(), DATABASE_NAME_1);
   100 		assertEquals(options.getSql(), SQL_1);
   101 		assertEquals(options.getMode(), CLIOptions.MODE.QUERY_NOW);
   102 		assertEquals(options.getNamedParameters().size(), 3);
   103 		assertNamedParameter(options.getNamedParameters(), NAME_1, DATA_1, Parameter.DEFAULT_TYPE);
   104 		assertNamedParameter(options.getNamedParameters(), NAME_2, DATA_2, Parameter.DEFAULT_TYPE);
   105 		assertNamedParameter(options.getNamedParameters(), NAME_3, DATA_3, Parameter.DEFAULT_TYPE);
   106 	}
   107 
   108 	@Test
   109 	public void testParseOptions_QueryNow_Named_withTypes() throws InvalidOptionsException, CLIParserException {
   110 		String[] args = new String[]{
   111 			Tokens.DB, DATABASE_NAME_1,
   112 			Tokens.SQL, SQL_1,
   113 			Tokens.NAME_PREFIX, "$",
   114 			Tokens.TYPES, " " + NAME_1 + TYPE_NAME_SEPARATOR + "int" + "," + NAME_3 + TYPE_NAME_SEPARATOR + "boolean",
   115 			Tokens.DATA, "$" + NAME_1, DATA_1, "$" + NAME_2, DATA_2, "$" + NAME_3, DATA_3};
   116 		CLIOptions options = parser.parseOptions(args);
   117 		options.validate();
   118 
   119 		assertEquals(options.getDatabaseName(), DATABASE_NAME_1);
   120 		assertEquals(options.getSql(), SQL_1);
   121 		assertEquals(options.getMode(), CLIOptions.MODE.QUERY_NOW);
   122 		assertEquals(options.getNamedParameters().size(), 3);
   123 		assertNamedParameter(options.getNamedParameters(), NAME_1, DATA_1, Types.INTEGER);
   124 		assertNamedParameter(options.getNamedParameters(), NAME_2, DATA_2, Parameter.DEFAULT_TYPE);
   125 		assertNamedParameter(options.getNamedParameters(), NAME_3, DATA_3, Types.BOOLEAN);
   126 	}
   127 
   128 	private void assertNamedParameter(Collection<NamedParameter> params, String name, Object value, int type) {
   129 		for (NamedParameter p : params) {
   130 			if (name.equals(p.getName())) {
   131 				assertEquals(p.getValue(), value, "value does not match – name: " + name);
   132 				assertEquals(p.getType(), type, "value does not match – name: " + name);
   133 				return;
   134 			}
   135 		}
   136 		fail("Named parameter not found: " + name);
   137 	}
   138 
   139 	@Test
   140 	public void testParseOptions_PrepareBatch() throws InvalidOptionsException, CLIParserException {
   141 		String[] args = new String[]{
   142 			Tokens.BATCH,
   143 			Tokens.SQL, SQL_1};
   144 		CLIOptions options = parser.parseOptions(args);
   145 		options.validate();
   146 
   147 		assertEquals(options.getSql(), SQL_1);
   148 		assertEquals(options.getMode(), CLIOptions.MODE.PREPARE_BATCH);
   149 	}
   150 
   151 	@Test
   152 	public void testParseOptions_ExecuteBatch() throws InvalidOptionsException, CLIParserException {
   153 		String[] args = new String[]{
   154 			Tokens.BATCH,
   155 			Tokens.DB, DATABASE_NAME_1};
   156 		CLIOptions options = parser.parseOptions(args);
   157 		options.validate();
   158 
   159 		assertEquals(options.getDatabaseName(), DATABASE_NAME_1);
   160 		assertEquals(options.getMode(), CLIOptions.MODE.EXECUTE_BATCH);
   161 	}
   162 }