1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1.2 +++ b/java/sql-dk/src/test/java/info/globalcode/sql/dk/CLIParserTest.java Mon Mar 04 20:15:24 2019 +0100
1.3 @@ -0,0 +1,195 @@
1.4 +/**
1.5 + * SQL-DK
1.6 + * Copyright © 2013 František Kučera (frantovo.cz)
1.7 + *
1.8 + * This program is free software: you can redistribute it and/or modify
1.9 + * it under the terms of the GNU General Public License as published by
1.10 + * the Free Software Foundation, either version 3 of the License, or
1.11 + * (at your option) any later version.
1.12 + *
1.13 + * This program is distributed in the hope that it will be useful,
1.14 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
1.15 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
1.16 + * GNU General Public License for more details.
1.17 + *
1.18 + * You should have received a copy of the GNU General Public License
1.19 + * along with this program. If not, see <http://www.gnu.org/licenses/>.
1.20 + */
1.21 +package info.globalcode.sql.dk;
1.22 +
1.23 +import info.globalcode.sql.dk.CLIParser.Tokens;
1.24 +import static info.globalcode.sql.dk.CLIParser.TYPE_NAME_SEPARATOR;
1.25 +import info.globalcode.sql.dk.InfoLister.InfoType;
1.26 +import java.io.ByteArrayInputStream;
1.27 +import java.util.Collection;
1.28 +import static org.testng.Assert.*;
1.29 +import org.testng.annotations.BeforeMethod;
1.30 +import org.testng.annotations.Test;
1.31 +
1.32 +/**
1.33 + *
1.34 + * @author Ing. František Kučera (frantovo.cz)
1.35 + */
1.36 +public class CLIParserTest {
1.37 +
1.38 + private static final String DATABASE_NAME_1 = "some database 1";
1.39 + private static final String SQL_1 = "SELECT * FROM table1";
1.40 + private static final String DATA_1 = "aaa";
1.41 + private static final String DATA_2 = "bbb";
1.42 + private static final String DATA_3 = "ccc";
1.43 + private static final String NAME_1 = "param1";
1.44 + private static final String NAME_2 = "param2";
1.45 + private static final String NAME_3 = "param3";
1.46 + private CLIParser parser;
1.47 +
1.48 + @BeforeMethod
1.49 + public void setUpMethod() throws Exception {
1.50 + parser = new CLIParser();
1.51 + }
1.52 +
1.53 + private CLIOptions parseOptions(String[] args) throws CLIParserException {
1.54 + return parser.parseOptions(args, new ByteArrayInputStream("".getBytes()));
1.55 + }
1.56 +
1.57 + @Test
1.58 + public void testParseOptions_QueryNow_NoParams() throws InvalidOptionsException, CLIParserException {
1.59 + String[] args = new String[]{
1.60 + Tokens.DB, DATABASE_NAME_1,
1.61 + Tokens.SQL, SQL_1};
1.62 + CLIOptions options = parseOptions(args);
1.63 + options.validate();
1.64 +
1.65 + assertEquals(options.getDatabaseName(), DATABASE_NAME_1);
1.66 + assertEquals(options.getSql(), SQL_1);
1.67 + assertEquals(options.getMode(), CLIOptions.MODE.QUERY_NOW);
1.68 + assertTrue(options.getNamedParameters().isEmpty(), "Named parameters should be empty.");
1.69 + assertTrue(options.getNumberedParameters().isEmpty(), "Numbered parameters should be empty.");
1.70 + }
1.71 +
1.72 + @Test
1.73 + public void testParseOptions_QueryNow_Numbered() throws InvalidOptionsException, CLIParserException {
1.74 + String[] args = new String[]{
1.75 + Tokens.DB, DATABASE_NAME_1,
1.76 + Tokens.SQL, SQL_1,
1.77 + Tokens.DATA, DATA_1, DATA_2, DATA_3};
1.78 + CLIOptions options = parseOptions(args);
1.79 + options.validate();
1.80 +
1.81 + assertEquals(options.getDatabaseName(), DATABASE_NAME_1);
1.82 + assertEquals(options.getSql(), SQL_1);
1.83 + assertEquals(options.getMode(), CLIOptions.MODE.QUERY_NOW);
1.84 + assertEquals(options.getNumberedParameters().size(), 3);
1.85 + assertEquals(options.getNumberedParameters().get(0).getValue(), DATA_1);
1.86 + assertEquals(options.getNumberedParameters().get(1).getValue(), DATA_2);
1.87 + assertEquals(options.getNumberedParameters().get(2).getValue(), DATA_3);
1.88 + assertEquals(options.getNumberedParameters().get(0).getType(), Parameter.DEFAULT_TYPE);
1.89 + assertEquals(options.getNumberedParameters().get(1).getType(), Parameter.DEFAULT_TYPE);
1.90 + assertEquals(options.getNumberedParameters().get(2).getType(), Parameter.DEFAULT_TYPE);
1.91 + }
1.92 +
1.93 + @Test
1.94 + public void testParseOptions_QueryNow_Numbered_withTypes() throws InvalidOptionsException, CLIParserException {
1.95 + String[] args = new String[]{
1.96 + Tokens.DB, DATABASE_NAME_1,
1.97 + Tokens.SQL, SQL_1,
1.98 + Tokens.TYPES, " INTEGER,VARCHAR, BOOLEAN",
1.99 + Tokens.DATA, DATA_1, DATA_2, DATA_3};
1.100 + CLIOptions options = parseOptions(args);
1.101 + options.validate();
1.102 +
1.103 + assertEquals(options.getDatabaseName(), DATABASE_NAME_1);
1.104 + assertEquals(options.getSql(), SQL_1);
1.105 + assertEquals(options.getMode(), CLIOptions.MODE.QUERY_NOW);
1.106 + assertEquals(options.getNumberedParameters().size(), 3);
1.107 + assertEquals(options.getNumberedParameters().get(0).getValue(), DATA_1);
1.108 + assertEquals(options.getNumberedParameters().get(1).getValue(), DATA_2);
1.109 + assertEquals(options.getNumberedParameters().get(2).getValue(), DATA_3);
1.110 + assertEquals(options.getNumberedParameters().get(0).getType(), SQLType.INTEGER);
1.111 + assertEquals(options.getNumberedParameters().get(1).getType(), SQLType.VARCHAR);
1.112 + assertEquals(options.getNumberedParameters().get(2).getType(), SQLType.BOOLEAN);
1.113 + }
1.114 +
1.115 + @Test
1.116 + public void testParseOptions_QueryNow_Named() throws InvalidOptionsException, CLIParserException {
1.117 + String[] args = new String[]{
1.118 + Tokens.DB, DATABASE_NAME_1,
1.119 + Tokens.SQL, SQL_1,
1.120 + Tokens.DATA_NAMED, NAME_1, DATA_1, NAME_2, DATA_2, NAME_3, DATA_3};
1.121 + CLIOptions options = parseOptions(args);
1.122 + options.validate();
1.123 +
1.124 + assertEquals(options.getDatabaseName(), DATABASE_NAME_1);
1.125 + assertEquals(options.getSql(), SQL_1);
1.126 + assertEquals(options.getMode(), CLIOptions.MODE.QUERY_NOW);
1.127 + assertEquals(options.getNamedParameters().size(), 3);
1.128 + assertNamedParameter(options.getNamedParameters(), NAME_1, DATA_1, Parameter.DEFAULT_TYPE);
1.129 + assertNamedParameter(options.getNamedParameters(), NAME_2, DATA_2, Parameter.DEFAULT_TYPE);
1.130 + assertNamedParameter(options.getNamedParameters(), NAME_3, DATA_3, Parameter.DEFAULT_TYPE);
1.131 + }
1.132 +
1.133 + @Test
1.134 + public void testParseOptions_QueryNow_Named_withTypes() throws InvalidOptionsException, CLIParserException {
1.135 + String[] args = new String[]{
1.136 + Tokens.DB, DATABASE_NAME_1,
1.137 + Tokens.SQL, SQL_1,
1.138 + Tokens.NAME_PREFIX, "$",
1.139 + Tokens.TYPES, " " + NAME_1 + TYPE_NAME_SEPARATOR + "INTEGER" + "," + NAME_3 + TYPE_NAME_SEPARATOR + "BOOLEAN",
1.140 + Tokens.DATA_NAMED, NAME_1, DATA_1, NAME_2, DATA_2, NAME_3, DATA_3};
1.141 + CLIOptions options = parseOptions(args);
1.142 + options.validate();
1.143 +
1.144 + assertEquals(options.getDatabaseName(), DATABASE_NAME_1);
1.145 + assertEquals(options.getSql(), SQL_1);
1.146 + assertEquals(options.getMode(), CLIOptions.MODE.QUERY_NOW);
1.147 + assertEquals(options.getNamedParameters().size(), 3);
1.148 + assertNamedParameter(options.getNamedParameters(), NAME_1, DATA_1, SQLType.INTEGER);
1.149 + assertNamedParameter(options.getNamedParameters(), NAME_2, DATA_2, Parameter.DEFAULT_TYPE);
1.150 + assertNamedParameter(options.getNamedParameters(), NAME_3, DATA_3, SQLType.BOOLEAN);
1.151 + }
1.152 +
1.153 + private void assertNamedParameter(Collection<NamedParameter> params, String name, Object value, SQLType type) {
1.154 + for (NamedParameter p : params) {
1.155 + if (name.equals(p.getName())) {
1.156 + assertEquals(p.getValue(), value, "value does not match – name: " + name);
1.157 + assertEquals(p.getType(), type, "value does not match – name: " + name);
1.158 + return;
1.159 + }
1.160 + }
1.161 + fail("Named parameter not found: " + name);
1.162 + }
1.163 +
1.164 + @Test
1.165 + public void testParseOptions_PrepareBatch() throws InvalidOptionsException, CLIParserException {
1.166 + String[] args = new String[]{
1.167 + Tokens.BATCH,
1.168 + Tokens.SQL, SQL_1};
1.169 + CLIOptions options = parseOptions(args);
1.170 + options.validate();
1.171 +
1.172 + assertEquals(options.getSql(), SQL_1);
1.173 + assertEquals(options.getMode(), CLIOptions.MODE.PREPARE_BATCH);
1.174 + }
1.175 +
1.176 + @Test
1.177 + public void testParseOptions_ExecuteBatch() throws InvalidOptionsException, CLIParserException {
1.178 + String[] args = new String[]{
1.179 + Tokens.BATCH,
1.180 + Tokens.DB, DATABASE_NAME_1};
1.181 + CLIOptions options = parseOptions(args);
1.182 + options.validate();
1.183 +
1.184 + assertEquals(options.getDatabaseName(), DATABASE_NAME_1);
1.185 + assertEquals(options.getMode(), CLIOptions.MODE.EXECUTE_BATCH);
1.186 + }
1.187 +
1.188 + @Test
1.189 + public void testParseOptions_ShowInfo_Help() throws InvalidOptionsException, CLIParserException {
1.190 + String[] args = new String[]{Tokens.INFO_HELP};
1.191 + CLIOptions options = parseOptions(args);
1.192 + options.validate();
1.193 +
1.194 + assertEquals(options.getMode(), CLIOptions.MODE.JUST_SHOW_INFO);
1.195 + assertEquals(options.getShowInfo().size(), 1);
1.196 + assertTrue(options.getShowInfo().contains(InfoType.HELP));
1.197 + }
1.198 +}
1.199 \ No newline at end of file