/** * * Copyright * 2009-2015 Jayway Products AB * 2016-2017 Föreningen Sambruk * * Licensed under AGPL, Version 3.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.gnu.org/licenses/agpl.txt * * 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 se.streamsource.dci.value.table.gdq; import static org.junit.Assert.*; import java.util.Arrays; import org.junit.Test; public class GdQueryParserTest { @Test public void parseEmptyString() { GdQuery q = GdQueryParser.parse(""); assertNotNull(q); assertNull(q.select); assertNull(q.where); assertNotNull(q.orderBy); assertEquals(0, q.orderBy.size()); assertNull(q.limit); assertNull(q.offset); assertNull(q.options); } @Test public void parseSelect() { GdQuery q = GdQueryParser.parse("select *"); assertNotNull(q); assertEquals(Arrays.asList("*"), q.select); } @Test public void parseSelectMultiple() { GdQuery q = GdQueryParser.parse("select foo, bar"); assertNotNull(q); assertEquals(Arrays.asList("foo", "bar"), q.select); } @Test(expected = GdQueryParseException.class) public void parseEmptySelect() { GdQueryParser.parse("select"); } @Test(expected = GdQueryParseException.class) public void parseEmptySelect2() { GdQueryParser.parse("select where foo"); } @Test public void parseWhere() { GdQuery q = GdQueryParser.parse("where foo"); assertNotNull(q); assertEquals("foo", q.where); } @Test public void parseWhereMultiple() { GdQuery q = GdQueryParser.parse("where foo bar"); assertNotNull(q); assertEquals("foo bar", q.where); } @Test public void parseEmptyWhere() { GdQuery q = GdQueryParser.parse("where"); assertNotNull(q); assertEquals("", q.where); } @Test public void parseEmptyWhere2() { GdQuery q = GdQueryParser.parse("where limit 10"); assertNotNull(q); assertEquals("", q.where); } @Test public void parseOrderBy() { GdQuery q = GdQueryParser.parse("order by foo"); assertNotNull(q); assertEquals(1, q.orderBy.size()); assertNotNull(q.orderBy.get(0)); assertEquals("foo", q.orderBy.get(0).name); assertEquals(OrderByDirection.UNDEFINED, q.orderBy.get(0).direction); } @Test public void parseOrderByAscending() { GdQuery q = GdQueryParser.parse("order by foo asc"); assertNotNull(q); assertEquals(1, q.orderBy.size()); assertNotNull(q.orderBy.get(0)); assertEquals("foo", q.orderBy.get(0).name); assertEquals(OrderByDirection.ASCENDING, q.orderBy.get(0).direction); } @Test public void parseOrderByDescending() { GdQuery q = GdQueryParser.parse("order by foo desc"); assertNotNull(q); assertEquals(1, q.orderBy.size()); assertNotNull(q.orderBy.get(0)); assertEquals("foo", q.orderBy.get(0).name); assertEquals(OrderByDirection.DESCENDING, q.orderBy.get(0).direction); } @Test(expected = GdQueryParseException.class) public void parseEmptyOrderBy() { GdQueryParser.parse("order by"); } @Test(expected = GdQueryParseException.class) public void parseEmptyOrderBy2() { GdQueryParser.parse("order by limit"); } @Test(expected = GdQueryParseException.class) public void parseMalformedOrderBy() { GdQueryParser.parse("order foo asc"); } @Test(expected = GdQueryParseException.class) public void parseMalformedOrderBy2() { GdQueryParser.parse("order by foo bar"); } @Test public void parseLimit() { GdQuery q = GdQueryParser.parse("limit 10"); assertNotNull(q); assertEquals(new Integer(10), q.limit); } @Test(expected = GdQueryParseException.class) public void parseInvalidLimit() { GdQueryParser.parse("limit invalid"); } @Test(expected = GdQueryParseException.class) public void parseEmptyLimit() { GdQueryParser.parse("limit"); } @Test(expected = GdQueryParseException.class) public void parseEmptyLimit2() { GdQueryParser.parse("limit offset 10"); } @Test public void parseOffset() { GdQuery q = GdQueryParser.parse("offset 20"); assertNotNull(q); assertEquals(new Integer(20), q.offset); } @Test(expected = GdQueryParseException.class) public void parseInvalidOffset() { GdQueryParser.parse("offset invalid"); } @Test(expected = GdQueryParseException.class) public void parseEmptyOffset() { GdQueryParser.parse("offset"); } @Test(expected = GdQueryParseException.class) public void parseEmptyOffset2() { GdQueryParser.parse("offset limit 10"); } @Test public void parseOptions() { GdQuery q = GdQueryParser.parse("options foo"); assertNotNull(q); assertEquals("foo", q.options); } @Test public void parseOptionsMultiple() { GdQuery q = GdQueryParser.parse("options foo bar"); assertNotNull(q); assertEquals("foo bar", q.options); } public void parseEmptyOptions() { GdQuery q = GdQueryParser.parse("options"); assertNotNull(q); assertEquals("", q.options); } @Test public void parseLongQuery() { GdQuery q = GdQueryParser.parse("select * where foo order by bar, baz desc limit 10 offset 20 options qux"); assertNotNull(q); assertEquals(Arrays.asList("*"), q.select); assertEquals("foo", q.where); assertNotNull(q.orderBy); assertEquals(2, q.orderBy.size()); assertNotNull(q.orderBy.get(0)); assertEquals("bar", q.orderBy.get(0).name); assertEquals(OrderByDirection.UNDEFINED, q.orderBy.get(0).direction); assertNotNull(q.orderBy.get(1)); assertEquals("baz", q.orderBy.get(1).name); assertEquals(OrderByDirection.DESCENDING, q.orderBy.get(1).direction); assertEquals(new Integer(10), q.limit); assertEquals(new Integer(20), q.offset); assertNotNull(q.options); assertEquals("qux", q.options); } @Test(expected = GdQueryParseException.class) public void parseInvalidClauseOrder() { GdQueryParser.parse("where foo select bar"); } @Test(expected = GdQueryParseException.class) public void groupByShouldBeUnsupported() { GdQueryParser.parse("group by foo"); } @Test(expected = GdQueryParseException.class) public void pivotShouldBeUnsupported() { GdQueryParser.parse("pivot foo"); } @Test(expected = GdQueryParseException.class) public void formatShouldBeUnsupported() { GdQueryParser.parse("format foo"); } @Test(expected = GdQueryParseException.class) public void labelShouldBeUnsupported() { GdQueryParser.parse("label foo bar"); } }