/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.tajo.cli; import org.junit.Test; import java.util.List; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; public class TestSimpleParser { @Test public final void testSpecialCases() throws InvalidStatementException { List<ParsedResult> res1 = SimpleParser.parseScript(""); assertEquals(0, res1.size()); List<ParsedResult> res2 = SimpleParser.parseScript("a"); assertEquals(1, res2.size()); List<ParsedResult> res3 = SimpleParser.parseScript("?"); assertEquals(0, res3.size()); List<ParsedResult> res4 = SimpleParser.parseScript("\\"); assertEquals(1, res4.size()); } @Test public final void testMetaCommands() throws InvalidStatementException { List<ParsedResult> res1 = SimpleParser.parseScript("\\d"); assertEquals(1, res1.size()); assertEquals(ParsedResult.StatementType.META, res1.get(0).getType()); assertEquals("\\d", res1.get(0).getStatement()); List<ParsedResult> res2 = SimpleParser.parseScript("\\d;\\c;\\f;"); assertEquals(3, res2.size()); assertEquals(ParsedResult.StatementType.META, res2.get(0).getType()); assertEquals("\\d", res2.get(0).getStatement()); assertEquals(ParsedResult.StatementType.META, res2.get(1).getType()); assertEquals("\\c", res2.get(1).getStatement()); assertEquals(ParsedResult.StatementType.META, res2.get(2).getType()); assertEquals("\\f", res2.get(2).getStatement()); List<ParsedResult> res3 = SimpleParser.parseScript("\n\t\t \\d;\n\\c;\t\t\\f ;"); assertEquals(3, res3.size()); assertEquals(ParsedResult.StatementType.META, res3.get(0).getType()); assertEquals("\\d", res3.get(0).getStatement()); assertEquals(ParsedResult.StatementType.META, res3.get(1).getType()); assertEquals("\\c", res3.get(1).getStatement()); assertEquals(ParsedResult.StatementType.META, res3.get(2).getType()); assertEquals("\\f", res3.get(2).getStatement()); List<ParsedResult> res4 = SimpleParser.parseScript("\\\td;"); assertEquals(1, res4.size()); assertEquals("\\\td", res4.get(0).getStatement()); } @Test public final void testStatements() throws InvalidStatementException { List<ParsedResult> res1 = SimpleParser.parseScript("select * from test;"); assertEquals(1, res1.size()); assertEquals(ParsedResult.StatementType.STATEMENT, res1.get(0).getType()); assertEquals("select * from test", res1.get(0).getStatement()); List<ParsedResult> res2 = SimpleParser.parseScript("select * from test;"); assertEquals(1, res2.size()); assertEquals(ParsedResult.StatementType.STATEMENT, res2.get(0).getType()); assertEquals("select * from test", res2.get(0).getStatement()); List<ParsedResult> res3 = SimpleParser.parseScript("select * from test1;select * from test2;"); assertEquals(2, res3.size()); assertEquals(ParsedResult.StatementType.STATEMENT, res3.get(0).getType()); assertEquals("select * from test1", res3.get(0).getStatement()); assertEquals(ParsedResult.StatementType.STATEMENT, res3.get(1).getType()); assertEquals("select * from test2", res3.get(1).getStatement()); List<ParsedResult> res4 = SimpleParser.parseScript("\t\t\n\rselect * from \ntest1;select * from test2\n;"); assertEquals(2, res4.size()); assertEquals(ParsedResult.StatementType.STATEMENT, res4.get(0).getType()); assertEquals("select * from \ntest1", res4.get(0).getStatement()); assertEquals(ParsedResult.StatementType.STATEMENT, res4.get(1).getType()); assertEquals("select * from test2", res4.get(1).getStatement()); List<ParsedResult> res5 = SimpleParser.parseScript("\t\t\n\rselect * from \ntest1;\\d test;select * from test2;\n\nselect 1;"); assertEquals(4, res5.size()); assertEquals(ParsedResult.StatementType.STATEMENT, res5.get(0).getType()); assertEquals("select * from \ntest1", res5.get(0).getStatement()); assertEquals(ParsedResult.StatementType.META, res5.get(1).getType()); assertEquals("\\d test", res5.get(1).getStatement()); assertEquals(ParsedResult.StatementType.STATEMENT, res5.get(2).getType()); assertEquals("select * from test2", res5.get(2).getStatement()); assertEquals(ParsedResult.StatementType.STATEMENT, res5.get(3).getType()); assertEquals("select 1", res5.get(3).getStatement()); } @Test public final void testQuoted() throws InvalidStatementException { List<ParsedResult> res1 = SimpleParser.parseScript("select '\n;' from test;"); assertEquals(1, res1.size()); assertEquals(ParsedResult.StatementType.STATEMENT, res1.get(0).getType()); assertEquals("select '\n;' from test", res1.get(0).getStatement()); List<ParsedResult> res2 = SimpleParser.parseScript("select 'abc\nbbc\nddf' from test;"); assertEquals(1, res2.size()); assertEquals(ParsedResult.StatementType.STATEMENT, res2.get(0).getType()); assertEquals("select 'abc\nbbc\nddf' from test", res2.get(0).getStatement()); try { SimpleParser.parseScript("select 'abc"); assertTrue(false); } catch (InvalidStatementException is) { assertTrue(true); } } @Test public final void testParseLines1() throws InvalidStatementException { String [] lines = { "select abc, ", "bbc from test" }; SimpleParser parser = new SimpleParser(); List<ParsedResult> result1 = parser.parseLines(lines[0]); assertEquals(0, result1.size()); List<ParsedResult> result2 = parser.parseLines(lines[1]); assertEquals(0, result2.size()); List<ParsedResult> result3 = parser.EOF(); assertEquals(1, result3.size()); assertEquals(lines[0] + lines[1], result3.get(0).getStatement()); } @Test public final void testParseLines2() throws InvalidStatementException { String [] lines = { "select abc, '", "bbc' from test; select * from test3;" }; SimpleParser parser = new SimpleParser(); List<ParsedResult> result1 = parser.parseLines(lines[0]); assertEquals(0, result1.size()); List<ParsedResult> result2 = parser.parseLines(lines[1]); assertEquals(2, result2.size()); assertEquals("select abc, 'bbc' from test", result2.get(0).getStatement()); assertEquals("select * from test3", result2.get(1).getStatement()); } @Test public final void testParseLines3() throws InvalidStatementException { String [] lines = { "select abc, 'bbc", "' from test; select * from test3;" }; SimpleParser parser = new SimpleParser(); List<ParsedResult> result1 = parser.parseLines(lines[0]); assertEquals(0, result1.size()); List<ParsedResult> result2 = parser.parseLines(lines[1]); assertEquals(2, result2.size()); assertEquals("select abc, 'bbc' from test", result2.get(0).getStatement()); assertEquals("select * from test3", result2.get(1).getStatement()); } }