Repository: olingo-odata4 Updated Branches: refs/heads/OLINGO-834_Filter_Parser 8919d3ef1 -> 8925274c0
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/8925274c/lib/server-test/src/test/java/org/apache/olingo/server/core/uri/antlr/TestLexer.java ---------------------------------------------------------------------- diff --git a/lib/server-test/src/test/java/org/apache/olingo/server/core/uri/antlr/TestLexer.java b/lib/server-test/src/test/java/org/apache/olingo/server/core/uri/antlr/TestLexer.java index 6df6759..6102fd8 100644 --- a/lib/server-test/src/test/java/org/apache/olingo/server/core/uri/antlr/TestLexer.java +++ b/lib/server-test/src/test/java/org/apache/olingo/server/core/uri/antlr/TestLexer.java @@ -18,16 +18,22 @@ */ package org.apache.olingo.server.core.uri.antlr; -import org.antlr.v4.runtime.Lexer; -import org.apache.olingo.server.core.uri.testutil.TokenValidator; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; + +import org.apache.olingo.server.core.uri.parser.UriTokenizer; +import org.apache.olingo.server.core.uri.parser.UriTokenizer.TokenKind; import org.junit.Test; +/** + * Tests originally written for the ANTLR lexer. + */ public class TestLexer { private TokenValidator test = null; - private static final String cPCT_ENCODED = "%45%46%47" + "%22" + "%5C";// last two chars are not in - // cPCT_ENCODED_UNESCAPED + // The last two chars are not in cPCT_ENCODED_UNESCAPED. + private static final String cPCT_ENCODED = "%45%46%47" + "%22" + "%5C"; private static final String cUNRESERVED = "ABCabc123-._~"; private static final String cOTHER_DELIMS = "!()*+,;"; private static final String cSUB_DELIMS = "$&'=" + cOTHER_DELIMS; @@ -39,265 +45,279 @@ public class TestLexer { } @Test - public void test() { - - // test.log(1).run("ESAllPrim?$orderby=PropertyDouble eq 3.5E+38"); + public void unary() { + test.run("-a eq a").has(TokenKind.MinusOperator, TokenKind.ODataIdentifier, TokenKind.EqualsOperator, + TokenKind.ODataIdentifier).isInput(); } - // ;------------------------------------------------------------------------------ - // ; 0. URI - // ;------------------------------------------------------------------------------ - @Test - public void testUnary() { - test.run("- a eq a").isAllInput(); + public void uriTokens() { +// test.run("#").isType(TokenKind.FRAGMENT).isInput(); + test.run("$count").has(TokenKind.COUNT).isInput(); + test.run("$ref").has(TokenKind.REF).isInput(); + test.run("$value").has(TokenKind.VALUE).isInput(); } @Test - public void testUriTokens() { - test.globalMode(UriLexer.MODE_QUERY); - test.run("#").isText("#").isType(UriLexer.FRAGMENT); - test.run("$count").isText("$count").isType(UriLexer.COUNT); - test.run("$ref").isText("$ref").isType(UriLexer.REF); - test.run("$value").isText("$value").isType(UriLexer.VALUE); + public void queryOptionsTokens() { + test.run("$skip=1").has(TokenKind.SKIP, TokenKind.EQ, TokenKind.IntegerValue).isInput(); + test.run("$skip=2").has(TokenKind.SKIP, TokenKind.EQ, TokenKind.IntegerValue).isInput(); + test.run("$skip=123").has(TokenKind.SKIP, TokenKind.EQ, TokenKind.IntegerValue).isInput(); + + test.run("$top=1").has(TokenKind.TOP, TokenKind.EQ, TokenKind.IntegerValue).isInput(); + test.run("$top=2").has(TokenKind.TOP, TokenKind.EQ, TokenKind.IntegerValue).isInput(); + test.run("$top=123").has(TokenKind.TOP, TokenKind.EQ, TokenKind.IntegerValue).isInput(); + + test.run("$levels=1").has(TokenKind.LEVELS, TokenKind.EQ, TokenKind.IntegerValue).isInput(); + test.run("$levels=2").has(TokenKind.LEVELS, TokenKind.EQ, TokenKind.IntegerValue).isInput(); + test.run("$levels=123").has(TokenKind.LEVELS, TokenKind.EQ, TokenKind.IntegerValue).isInput(); + test.run("$levels=max").has(TokenKind.LEVELS, TokenKind.EQ, TokenKind.MAX).isInput(); + +// test.run("$format=atom").has(TokenKind.FORMAT, TokenKind.EQ, TokenKind.ODataIdentifier).isInput(); +// test.run("$format=json").has(TokenKind.FORMAT, TokenKind.EQ, TokenKind.ODataIdentifier).isInput(); +// test.run("$format=xml").has(TokenKind.FORMAT,, TokenKind.EQ, TokenKind.ODataIdentifier).isInput(); +// test.run("$format=abc/def").has(TokenKind.FORMAT, TokenKind.EQ, +// TokenKind.ODataIdentifier, TokenKind.SLASH, TokenKind.ODataIdentifier).isInput(); + +// test.run("$id=123").has(TokenKind.ID, TokenKind.EQ, TokenKind.IntegerValue).isInput(); +// test.run("$id=ABC").has(TokenKind.ID, TokenKind.EQ, TokenKind.ODataIdentifier).isInput(); + +// test.run("$skiptoken=ABC").has(TokenKind.SKIPTOKEN, TokenKind.EQ, TokenKind.ODataIdentifier).isInput(); +// test.run("$skiptoken=ABC").has(TokenKind.SKIPTOKEN, TokenKind.EQ, TokenKind.ODataIdentifier).isInput(); + + test.run("$search=\"ABC\"").has(TokenKind.SEARCH, TokenKind.EQ, TokenKind.Phrase).isInput(); + test.run("$search=ABC").has(TokenKind.SEARCH, TokenKind.EQ, TokenKind.Word).isInput(); + test.run("$search=\"A%20B%20C\"").has(TokenKind.SEARCH, TokenKind.EQ, TokenKind.Phrase).isInput(); + test.run("$search=Test Test").has(TokenKind.SEARCH, TokenKind.EQ, TokenKind.Word, + TokenKind.AndOperatorSearch, TokenKind.Word).isInput(); + test.run("$search=Test&$filter=ABC eq 1").has(TokenKind.SEARCH, TokenKind.EQ, TokenKind.Word); } - // ;------------------------------------------------------------------------------ - // ; 2. Query Options - // ;------------------------------------------------------------------------------ @Test - public void testQueryOptionsTokens() { - - test.globalMode(UriLexer.MODE_QUERY); - test.run("$skip=1").isAllText("$skip=1").isType(UriLexer.SKIP_QO); - test.run("$skip=2").isAllText("$skip=2").isType(UriLexer.SKIP_QO); - test.run("$skip=123").isAllText("$skip=123").isType(UriLexer.SKIP_QO); - - test.run("$top=1").isAllText("$top=1").isType(UriLexer.TOP); - test.run("$top=2").isAllText("$top=2").isType(UriLexer.TOP); - test.run("$top=123").isAllText("$top=123").isType(UriLexer.TOP); - - test.run("$levels=1").isAllText("$levels=1").isType(UriLexer.LEVELS); - test.run("$levels=2").isAllText("$levels=2").isType(UriLexer.LEVELS); - test.run("$levels=123").isAllText("$levels=123").isType(UriLexer.LEVELS); - test.run("$levels=max").isAllText("$levels=max").isType(UriLexer.LEVELS); - - test.run("$format=atom").isAllText("$format=atom").isType(UriLexer.FORMAT); - test.run("$format=json").isAllText("$format=json").isType(UriLexer.FORMAT); - test.run("$format=xml").isAllText("$format=xml").isType(UriLexer.FORMAT); - test.run("$format=abc/def").isAllText("$format=abc/def").isType(UriLexer.FORMAT); - - test.run("$id=123").isAllText("$id=123").isType(UriLexer.ID); - test.run("$id=ABC").isAllText("$id=ABC").isType(UriLexer.ID); - - test.run("$skiptoken=ABC").isAllText("$skiptoken=ABC").isType(UriLexer.SKIPTOKEN); - test.run("$skiptoken=ABC").isAllText("$skiptoken=ABC").isType(UriLexer.SKIPTOKEN); - - test.run("$search=\"ABC\"").isAllText("$search=\"ABC\"").isType(UriLexer.SEARCH); - test.run("$search=ABC").isAllText("$search=ABC").isType(UriLexer.SEARCH); - test.run("$search=\"A%20B%20C\"").isAllText("$search=\"A%20B%20C\"").isType(UriLexer.SEARCH); - test.run("$search=Test Test").isAllText("$search=Test Test").isType(UriLexer.SEARCH); - test.run("$search=Test&$filter=ABC eq 1").isAllText("$search=Test&$filter=ABC eq 1").isType(UriLexer.SEARCH); - } - - @Test - public void testQueryOptionsDefaultMode() { - // First set query mode, than use expand(switches to default mode) and use nested system query options - test.globalMode(UriLexer.MODE_QUERY); - test.run("$expand=ABC($skip=1)").isAllText("$expand=ABC($skip=1)").at(4).isType(UriLexer.SKIP_QO); - test.run("$expand=ABC($skip=2)").isAllText("$expand=ABC($skip=2)").at(4).isType(UriLexer.SKIP_QO); - test.run("$expand=ABC($skip=123)").isAllText("$expand=ABC($skip=123)").at(4).isType(UriLexer.SKIP_QO); - test.run("$expand=ABC($search=abc)").isAllText("$expand=ABC($search=abc)").at(4).isType(UriLexer.SEARCH_INLINE); - test.run("$expand=ABC($search=\"123\")").isAllText("$expand=ABC($search=\"123\")") - .at(4).isType(UriLexer.SEARCH_INLINE) - .at(6).isType(UriLexer.SEARCHPHRASE); - test.run("$expand=ABC($top=1)").isAllText("$expand=ABC($top=1)").at(4).isType(UriLexer.TOP); - test.run("$expand=ABC($top=2)").isAllText("$expand=ABC($top=2)").at(4).isType(UriLexer.TOP); - test.run("$expand=ABC($top=123)").isAllText("$expand=ABC($top=123)").at(4).isType(UriLexer.TOP); - - test.run("$expand=ABC($expand=DEF($skip=1))").isAllText("$expand=ABC($expand=DEF($skip=1))") - .at(8).isType(UriLexer.SKIP_QO); - test.run("$expand=ABC($expand=DEF($skip=2))").isAllText("$expand=ABC($expand=DEF($skip=2))") - .at(8).isType(UriLexer.SKIP_QO); - test.run("$expand=ABC($expand=DEF($skip=123))").isAllText("$expand=ABC($expand=DEF($skip=123))") - .at(8).isType(UriLexer.SKIP_QO); - - test.run("$expand=ABC($expand=DEF($top=1))").isAllText("$expand=ABC($expand=DEF($top=1))") - .at(8).isType(UriLexer.TOP); - test.run("$expand=ABC($expand=DEF($top=2))").isAllText("$expand=ABC($expand=DEF($top=2))") - .at(8).isType(UriLexer.TOP); - test.run("$expand=ABC($expand=DEF($top=123))").isAllText("$expand=ABC($expand=DEF($top=123))") - .at(8).isType(UriLexer.TOP); - test.run("$expand=ABC($expand=DEF($search=Test Test))").isAllText("$expand=ABC($expand=DEF($search=Test Test))") - .at(8).isType(UriLexer.SEARCH_INLINE) - .at(10).isType(UriLexer.SEARCHWORD) - .at(12).isType(UriLexer.SEARCHWORD); + public void queryOptionsDefaultMode() { + test.run("$expand=ABC($skip=1)").has(TokenKind.EXPAND, TokenKind.EQ, TokenKind.ODataIdentifier, + TokenKind.OPEN, TokenKind.SKIP, TokenKind.EQ, TokenKind.IntegerValue, TokenKind.CLOSE).isInput(); + test.run("$expand=ABC($skip=123)").has(TokenKind.EXPAND, TokenKind.EQ, TokenKind.ODataIdentifier, + TokenKind.OPEN, TokenKind.SKIP, TokenKind.EQ, TokenKind.IntegerValue, TokenKind.CLOSE).isInput(); + test.run("$expand=ABC($search=abc)").has(TokenKind.EXPAND, TokenKind.EQ, TokenKind.ODataIdentifier, + TokenKind.OPEN, TokenKind.SEARCH, TokenKind.EQ, TokenKind.Word, TokenKind.CLOSE).isInput(); + test.run("$expand=ABC($search=\"123\")").has(TokenKind.EXPAND, TokenKind.EQ, TokenKind.ODataIdentifier, + TokenKind.OPEN, TokenKind.SEARCH, TokenKind.EQ, TokenKind.Phrase, TokenKind.CLOSE).isInput(); + test.run("$expand=ABC($top=1)").has(TokenKind.EXPAND, TokenKind.EQ, TokenKind.ODataIdentifier, + TokenKind.OPEN, TokenKind.TOP, TokenKind.EQ, TokenKind.IntegerValue, TokenKind.CLOSE).isInput(); + test.run("$expand=ABC($top=123)").has(TokenKind.EXPAND, TokenKind.EQ, TokenKind.ODataIdentifier, + TokenKind.OPEN, TokenKind.TOP, TokenKind.EQ, TokenKind.IntegerValue, TokenKind.CLOSE).isInput(); + + test.run("$expand=ABC($expand=DEF($skip=1))").has(TokenKind.EXPAND, TokenKind.EQ, TokenKind.ODataIdentifier, + TokenKind.OPEN, TokenKind.EXPAND, TokenKind.EQ, TokenKind.ODataIdentifier, + TokenKind.OPEN, TokenKind.SKIP, TokenKind.EQ, TokenKind.IntegerValue, TokenKind.CLOSE, TokenKind.CLOSE) + .isInput(); + test.run("$expand=ABC($expand=DEF($skip=123))").has(TokenKind.EXPAND, TokenKind.EQ, TokenKind.ODataIdentifier, + TokenKind.OPEN, TokenKind.EXPAND, TokenKind.EQ, TokenKind.ODataIdentifier, + TokenKind.OPEN, TokenKind.SKIP, TokenKind.EQ, TokenKind.IntegerValue, TokenKind.CLOSE, TokenKind.CLOSE) + .isInput(); + + test.run("$expand=ABC($expand=DEF($top=1))").has(TokenKind.EXPAND, TokenKind.EQ, TokenKind.ODataIdentifier, + TokenKind.OPEN, TokenKind.EXPAND, TokenKind.EQ, TokenKind.ODataIdentifier, + TokenKind.OPEN, TokenKind.TOP, TokenKind.EQ, TokenKind.IntegerValue, TokenKind.CLOSE, TokenKind.CLOSE) + .isInput(); + test.run("$expand=ABC($expand=DEF($top=123))").has(TokenKind.EXPAND, TokenKind.EQ, TokenKind.ODataIdentifier, + TokenKind.OPEN, TokenKind.EXPAND, TokenKind.EQ, TokenKind.ODataIdentifier, + TokenKind.OPEN, TokenKind.TOP, TokenKind.EQ, TokenKind.IntegerValue, TokenKind.CLOSE, TokenKind.CLOSE) + .isInput(); + + test.run("$expand=ABC($expand=DEF($search=Test Test))") + .has(TokenKind.EXPAND, TokenKind.EQ, TokenKind.ODataIdentifier, + TokenKind.OPEN, TokenKind.EXPAND, TokenKind.EQ, TokenKind.ODataIdentifier, + TokenKind.OPEN, TokenKind.SEARCH, TokenKind.EQ, TokenKind.Word, + TokenKind.AndOperatorSearch, TokenKind.Word, TokenKind.CLOSE, TokenKind.CLOSE) + .isInput(); test.run("$expand=ABC($expand=DEF($search=\"Test\" \"Test\"))") - .isAllText("$expand=ABC($expand=DEF($search=\"Test\" \"Test\"))") - .at(8).isType(UriLexer.SEARCH_INLINE) - .at(10).isType(UriLexer.SEARCHPHRASE) - .at(12).isType(UriLexer.SEARCHPHRASE); + .has(TokenKind.EXPAND, TokenKind.EQ, TokenKind.ODataIdentifier, + TokenKind.OPEN, TokenKind.EXPAND, TokenKind.EQ, TokenKind.ODataIdentifier, + TokenKind.OPEN, TokenKind.SEARCH, TokenKind.EQ, TokenKind.Phrase, + TokenKind.AndOperatorSearch, TokenKind.Phrase, TokenKind.CLOSE, TokenKind.CLOSE) + .isInput(); test.run("$expand=ABC($expand=DEF($search=\"Test\" \"Test\";$filter=PropertyInt16 eq 0;$orderby=PropertyInt16))") - .isAllText("$expand=ABC($expand=DEF($search=\"Test\" \"Test\";$filter=PropertyInt16 " + - "eq 0;$orderby=PropertyInt16))") - .at(8).isType(UriLexer.SEARCH_INLINE) - .at(10).isType(UriLexer.SEARCHPHRASE) - .at(12).isType(UriLexer.SEARCHPHRASE) - .at(13).isType(UriLexer.SEMI) - .at(14).isType(UriLexer.FILTER) - .at(22).isType(UriLexer.ORDERBY); + .has(TokenKind.EXPAND, TokenKind.EQ, TokenKind.ODataIdentifier, + TokenKind.OPEN, TokenKind.EXPAND, TokenKind.EQ, TokenKind.ODataIdentifier, + TokenKind.OPEN, TokenKind.SEARCH, TokenKind.EQ, TokenKind.Phrase, + TokenKind.AndOperatorSearch, TokenKind.Phrase, TokenKind.SEMI, + TokenKind.FILTER, TokenKind.EQ, TokenKind.ODataIdentifier, TokenKind.EqualsOperator, + TokenKind.IntegerValue, TokenKind.SEMI, + TokenKind.ORDERBY, TokenKind.EQ, TokenKind.ODataIdentifier, TokenKind.CLOSE, TokenKind.CLOSE) + .isInput(); } - - // ;------------------------------------------------------------------------------ - // ; 4. Expressions - // ;------------------------------------------------------------------------------ - @Test - public void testQueryExpressions() { - test.globalMode(Lexer.DEFAULT_MODE); - - test.run("$it").isText("$it").isType(UriLexer.IT); - - test.run("$filter=contains(").at(2).isText("contains(").isType(UriLexer.CONTAINS_WORD); - - test.run("$filter=containsabc").at(2).isText("containsabc") - .isType(UriLexer.ODATAIDENTIFIER); // test that this is a ODI - - test.run("$filter=startswith(").at(2).isText("startswith(").isType(UriLexer.STARTSWITH_WORD); - test.run("$filter=endswith(").at(2).isText("endswith(").isType(UriLexer.ENDSWITH_WORD); - test.run("$filter=length(").at(2).isText("length(").isType(UriLexer.LENGTH_WORD); - test.run("$filter=indexof(").at(2).isText("indexof(").isType(UriLexer.INDEXOF_WORD); - test.run("$filter=substring(").at(2).isText("substring(").isType(UriLexer.SUBSTRING_WORD); - test.run("$filter=tolower(").at(2).isText("tolower(").isType(UriLexer.TOLOWER_WORD); - test.run("$filter=toupper(").at(2).isText("toupper(").isType(UriLexer.TOUPPER_WORD); - test.run("$filter=trim(").at(2).isText("trim(").isType(UriLexer.TRIM_WORD); - test.run("$filter=concat(").at(2).isText("concat(").isType(UriLexer.CONCAT_WORD); + @Test + public void queryExpressions() { + test.run("$it").has(TokenKind.IT).isText("$it"); + + test.run("$filter=contains(").has(TokenKind.FILTER, TokenKind.EQ, TokenKind.ContainsMethod).isText("contains("); + + test.run("$filter=containsabc").has(TokenKind.FILTER, TokenKind.EQ, TokenKind.ODataIdentifier) + .isText("containsabc"); + + test.run("$filter=startswith(").has(TokenKind.FILTER, TokenKind.EQ, TokenKind.StartswithMethod) + .isText("startswith("); + test.run("$filter=endswith(").has(TokenKind.FILTER, TokenKind.EQ, TokenKind.EndswithMethod).isText("endswith("); + test.run("$filter=length(").has(TokenKind.FILTER, TokenKind.EQ, TokenKind.LengthMethod).isText("length("); + test.run("$filter=indexof(").has(TokenKind.FILTER, TokenKind.EQ, TokenKind.IndexofMethod).isText("indexof("); + test.run("$filter=substring(").has(TokenKind.FILTER, TokenKind.EQ, TokenKind.SubstringMethod).isText("substring("); + test.run("$filter=tolower(").has(TokenKind.FILTER, TokenKind.EQ, TokenKind.TolowerMethod).isText("tolower("); + test.run("$filter=toupper(").has(TokenKind.FILTER, TokenKind.EQ, TokenKind.ToupperMethod).isText("toupper("); + test.run("$filter=trim(").has(TokenKind.FILTER, TokenKind.EQ, TokenKind.TrimMethod).isText("trim("); + test.run("$filter=concat(").has(TokenKind.FILTER, TokenKind.EQ, TokenKind.ConcatMethod).isText("concat("); } - // ;------------------------------------------------------------------------------ - // ; 7. Literal Data Values - // ;------------------------------------------------------------------------------ - @Test - public void testLiteralDataValues() { - test.globalMode(Lexer.DEFAULT_MODE); + public void literalDataValues() { // null - test.run("null").isInput().isType(UriLexer.NULLVALUE); + test.run("null").has(TokenKind.NULL).isInput(); // binary - test.run("binary'ABCD'").isInput().isType(UriLexer.BINARY); - test.run("BiNaRy'ABCD'").isInput().isType(UriLexer.BINARY); + test.run("binary'ABCD'").has(TokenKind.BinaryValue).isInput(); + test.run("BiNaRy'ABCD'").has(TokenKind.BinaryValue).isInput(); // boolean - test.run("true").isInput().isType(UriLexer.TRUE); - test.run("false").isInput().isType(UriLexer.FALSE); - test.run("TrUe").isInput().isType(UriLexer.BOOLEAN); - test.run("FaLsE").isInput().isType(UriLexer.BOOLEAN); + test.run("true").has(TokenKind.BooleanValue).isInput(); + test.run("false").has(TokenKind.BooleanValue).isInput(); + test.run("TrUe").has(TokenKind.BooleanValue).isInput(); + test.run("FaLsE").has(TokenKind.BooleanValue).isInput(); // Lexer rule INT - test.run("123").isInput().isType(UriLexer.INT); - test.run("123456789").isInput().isType(UriLexer.INT); - test.run("+123").isInput().isType(UriLexer.INT); - test.run("+123456789").isInput().isType(UriLexer.INT); - test.run("-123").isInput().isType(UriLexer.INT); - test.run("-123456789").isInput().isType(UriLexer.INT); + test.run("123").has(TokenKind.IntegerValue).isInput(); + test.run("123456789").has(TokenKind.IntegerValue).isInput(); + test.run("+123").has(TokenKind.IntegerValue).isInput(); + test.run("+123456789").has(TokenKind.IntegerValue).isInput(); + test.run("-123").has(TokenKind.IntegerValue).isInput(); + test.run("-123456789").has(TokenKind.IntegerValue).isInput(); // Lexer rule DECIMAL - test.run("0.1").isInput().isType(UriLexer.DECIMAL); - test.run("1.1").isInput().isType(UriLexer.DECIMAL); - test.run("+0.1").isInput().isType(UriLexer.DECIMAL); - test.run("+1.1").isInput().isType(UriLexer.DECIMAL); - test.run("-0.1").isInput().isType(UriLexer.DECIMAL); - test.run("-1.1").isInput().isType(UriLexer.DECIMAL); + test.run("0.1").has(TokenKind.DecimalValue).isInput(); + test.run("1.1").has(TokenKind.DecimalValue).isInput(); + test.run("+0.1").has(TokenKind.DecimalValue).isInput(); + test.run("+1.1").has(TokenKind.DecimalValue).isInput(); + test.run("-0.1").has(TokenKind.DecimalValue).isInput(); + test.run("-1.1").has(TokenKind.DecimalValue).isInput(); // Lexer rule EXP - test.run("1.1e+1").isInput().isType(UriLexer.DECIMAL); - test.run("1.1e-1").isInput().isType(UriLexer.DECIMAL); + test.run("1.1e+1").has(TokenKind.DoubleValue).isInput(); + test.run("1.1e-1").has(TokenKind.DoubleValue).isInput(); - test.run("NaN").isInput().isType(UriLexer.NANINFINITY); - test.run("-INF").isInput().isType(UriLexer.NANINFINITY); - test.run("INF").isInput().isType(UriLexer.NANINFINITY); + test.run("NaN").has(TokenKind.DoubleValue).isInput(); + test.run("-INF").has(TokenKind.DoubleValue).isInput(); + test.run("INF").has(TokenKind.DoubleValue).isInput(); // Lexer rule GUID - test.run("1234ABCD-12AB-23CD-45EF-123456780ABC").isInput().isType(UriLexer.GUID); - test.run("1234ABCD-12AB-23CD-45EF-123456780ABC").isInput().isType(UriLexer.GUID); + test.run("1234ABCD-12AB-23CD-45EF-123456780ABC").has(TokenKind.GuidValue).isInput(); + test.run("1234ABCD-12AB-23CD-45EF-123456780ABC").has(TokenKind.GuidValue).isInput(); // Lexer rule DATE - test.run("2013-11-15").isInput().isType(UriLexer.DATE); + test.run("2013-11-15").has(TokenKind.DateValue).isInput(); // Lexer rule DATETIMEOFFSET - test.run("2013-11-15T13:35Z").isInput().isType(UriLexer.DATETIMEOFFSET); - test.run("2013-11-15T13:35:10Z").isInput().isType(UriLexer.DATETIMEOFFSET); - test.run("2013-11-15T13:35:10.1234Z").isInput().isType(UriLexer.DATETIMEOFFSET); + test.run("2013-11-15T13:35Z").has(TokenKind.DateTimeOffsetValue).isInput(); + test.run("2013-11-15T13:35:10Z").has(TokenKind.DateTimeOffsetValue).isInput(); + test.run("2013-11-15T13:35:10.1234Z").has(TokenKind.DateTimeOffsetValue).isInput(); - test.run("2013-11-15T13:35:10.1234+01:30").isInput().isType(UriLexer.DATETIMEOFFSET); - test.run("2013-11-15T13:35:10.1234-01:12").isInput().isType(UriLexer.DATETIMEOFFSET); + test.run("2013-11-15T13:35:10.1234+01:30").has(TokenKind.DateTimeOffsetValue).isInput(); + test.run("2013-11-15T13:35:10.1234-01:12").has(TokenKind.DateTimeOffsetValue).isInput(); - test.run("2013-11-15T13:35Z").isInput().isType(UriLexer.DATETIMEOFFSET); + test.run("2013-11-15T13:35Z").has(TokenKind.DateTimeOffsetValue).isInput(); // Lexer rule DURATION - test.run("duration'PT67S'").isInput().isType(UriLexer.DURATION); - test.run("duration'PT67.89S'").isInput().isType(UriLexer.DURATION); - - test.run("duration'PT5M'").isInput().isType(UriLexer.DURATION); - test.run("duration'PT5M67S'").isInput().isType(UriLexer.DURATION); - test.run("duration'PT5M67.89S'").isInput().isType(UriLexer.DURATION); - - test.run("duration'PT4H'").isInput().isType(UriLexer.DURATION); - test.run("duration'PT4H67S'").isInput().isType(UriLexer.DURATION); - test.run("duration'PT4H67.89S'").isInput().isType(UriLexer.DURATION); - test.run("duration'PT4H5M'").isInput().isType(UriLexer.DURATION); - test.run("duration'PT4H5M67S'").isInput().isType(UriLexer.DURATION); - test.run("duration'PT4H5M67.89S'").isInput().isType(UriLexer.DURATION); - - test.run("duration'P3D'"); - test.run("duration'P3DT67S'").isInput().isType(UriLexer.DURATION); - test.run("duration'P3DT67.89S'").isInput().isType(UriLexer.DURATION); - test.run("duration'P3DT5M'").isInput().isType(UriLexer.DURATION); - test.run("duration'P3DT5M67S'").isInput().isType(UriLexer.DURATION); - test.run("duration'P3DT5M67.89S'").isInput().isType(UriLexer.DURATION); - test.run("duration'P3DT4H'").isInput().isType(UriLexer.DURATION); - test.run("duration'P3DT4H67S'").isInput().isType(UriLexer.DURATION); - test.run("duration'P3DT4H67.89S'").isInput().isType(UriLexer.DURATION); - test.run("duration'P3DT4H5M'").isInput().isType(UriLexer.DURATION); - test.run("duration'P3DT4H5M67S'").isInput().isType(UriLexer.DURATION); - test.run("duration'P3DT4H5M67.89S'").isInput().isType(UriLexer.DURATION); - - test.run("DuRaTiOn'P3DT4H5M67.89S'").isInput().isType(UriLexer.DURATION); - test.run("DuRaTiOn'-P3DT4H5M67.89S'").isInput().isType(UriLexer.DURATION); - - test.run("20:00").isInput().isType(UriLexer.TIMEOFDAY); - test.run("20:15:01").isInput().isType(UriLexer.TIMEOFDAY); - test.run("20:15:01.02").isInput().isType(UriLexer.TIMEOFDAY); - - test.run("20:15:01.02").isInput().isType(UriLexer.TIMEOFDAY); + test.run("duration'PT67S'").has(TokenKind.DurationValue).isInput(); + test.run("duration'PT67.89S'").has(TokenKind.DurationValue).isInput(); + + test.run("duration'PT5M'").has(TokenKind.DurationValue).isInput(); + test.run("duration'PT5M67S'").has(TokenKind.DurationValue).isInput(); + test.run("duration'PT5M67.89S'").has(TokenKind.DurationValue).isInput(); + + test.run("duration'PT4H'").has(TokenKind.DurationValue).isInput(); + test.run("duration'PT4H67S'").has(TokenKind.DurationValue).isInput(); + test.run("duration'PT4H67.89S'").has(TokenKind.DurationValue).isInput(); + test.run("duration'PT4H5M'").has(TokenKind.DurationValue).isInput(); + test.run("duration'PT4H5M67S'").has(TokenKind.DurationValue).isInput(); + test.run("duration'PT4H5M67.89S'").has(TokenKind.DurationValue).isInput(); + + test.run("duration'P3D'").has(TokenKind.DurationValue).isInput(); + test.run("duration'P3DT67S'").has(TokenKind.DurationValue).isInput(); + test.run("duration'P3DT67.89S'").has(TokenKind.DurationValue).isInput(); + test.run("duration'P3DT5M'").has(TokenKind.DurationValue).isInput(); + test.run("duration'P3DT5M67S'").has(TokenKind.DurationValue).isInput(); + test.run("duration'P3DT5M67.89S'").has(TokenKind.DurationValue).isInput(); + test.run("duration'P3DT4H'").has(TokenKind.DurationValue).isInput(); + test.run("duration'P3DT4H67S'").has(TokenKind.DurationValue).isInput(); + test.run("duration'P3DT4H67.89S'").has(TokenKind.DurationValue).isInput(); + test.run("duration'P3DT4H5M'").has(TokenKind.DurationValue).isInput(); + test.run("duration'P3DT4H5M67S'").has(TokenKind.DurationValue).isInput(); + test.run("duration'P3DT4H5M67.89S'").has(TokenKind.DurationValue).isInput(); + + test.run("DuRaTiOn'P3DT4H5M67.89S'").has(TokenKind.DurationValue).isInput(); + test.run("DuRaTiOn'-P3DT4H5M67.89S'").has(TokenKind.DurationValue).isInput(); + + test.run("20:00").has(TokenKind.TimeOfDayValue).isInput(); + test.run("20:15:01").has(TokenKind.TimeOfDayValue).isInput(); + test.run("20:15:01.02").has(TokenKind.TimeOfDayValue).isInput(); + + test.run("20:15:01.02").has(TokenKind.TimeOfDayValue).isInput(); // String - test.run("'ABC'").isText("'ABC'").isType(UriLexer.STRING); - test.run("'A%20C'").isInput().isType(UriLexer.STRING); - test.run("'%20%20%20ABC'").isInput().isType(UriLexer.STRING); - + test.run("'ABC'").has(TokenKind.StringValue).isInput(); + test.run("'A%20C'").has(TokenKind.StringValue).isInput(); + test.run("'%20%20%20ABC'").has(TokenKind.StringValue).isInput(); } @Test - public void testDelims() { - String reserved = "/"; - test.globalMode(UriLexer.MODE_QUERY); + public void delims() { + final String reserved = "/"; // Test lexer rule UNRESERVED - test.run("$format=A/" + cUNRESERVED).isAllInput().isType(UriLexer.FORMAT); - test.run("$format=A/" + cUNRESERVED + reserved).isType(UriLexer.FORMAT).at(4).isText(cUNRESERVED); +// test.run("$format=A/" + cUNRESERVED).has(TokenKind.FORMAT).isInput(); +// test.run("$format=A/" + cUNRESERVED + reserved).has(TokenKind.FORMAT).isText(cUNRESERVED); // Test lexer rule PCT_ENCODED - test.run("$format=A/" + cPCT_ENCODED).isAllInput().isType(UriLexer.FORMAT); - test.run("$format=A/" + cPCT_ENCODED + reserved).isType(UriLexer.FORMAT).at(4).isText(cPCT_ENCODED); +// test.run("$format=A/" + cPCT_ENCODED).has(TokenKind.FORMAT).isInput(); +// test.run("$format=A/" + cPCT_ENCODED + reserved).has(TokenKind.FORMAT).isText(cPCT_ENCODED); // Test lexer rule SUB_DELIMS - test.run("$format=A/" + cSUB_DELIMS).isAllInput().isType(UriLexer.FORMAT); - test.run("$format=A/" + cSUB_DELIMS + reserved).isType(UriLexer.FORMAT).at(4).isText("$"); +// test.run("$format=A/" + cSUB_DELIMS).has(TokenKind.FORMAT).isInput(); +// test.run("$format=A/" + cSUB_DELIMS + reserved).has(TokenKind.FORMAT).isText("$"); // Test lexer rule PCHAR rest - test.run("$format=A/:@").isAllText("$format=A/:@").isType(UriLexer.FORMAT); - test.run("$format=A/:@" + reserved).isType(UriLexer.FORMAT).at(4).isText(":@"); +// test.run("$format=A/:@").has(TokenKind.FORMAT).isInput(); +// test.run("$format=A/:@" + reserved).has(TokenKind.FORMAT).isText(":@"); // Test lexer rule PCHAR all - test.run("$format=" + cPCHAR + "/" + cPCHAR).isAllInput().isType(UriLexer.FORMAT); - +// test.run("$format=" + cPCHAR + "/" + cPCHAR).has(TokenKind.FORMAT).isInput(); } + public class TokenValidator { + + private String input = null; + private UriTokenizer tokenizer = null; + private String curText = null; + + public TokenValidator run(final String uri) { + input = uri; + tokenizer = new UriTokenizer(uri); + curText = ""; + return this; + } + + public TokenValidator has(final TokenKind... expected) { + for (final TokenKind kind : expected) { + assertTrue(tokenizer.next(kind)); + curText += tokenizer.getText(); + } + return this; + } + + public TokenValidator isText(final String expected) { + assertEquals(expected, tokenizer.getText()); + return this; + } + + public TokenValidator isInput() { + assertEquals(input, curText); + assertTrue(tokenizer.next(TokenKind.EOF)); + return this; + } + } } http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/8925274c/lib/server-test/src/test/java/org/apache/olingo/server/core/uri/antlr/TestUriParserImpl.java ---------------------------------------------------------------------- diff --git a/lib/server-test/src/test/java/org/apache/olingo/server/core/uri/antlr/TestUriParserImpl.java b/lib/server-test/src/test/java/org/apache/olingo/server/core/uri/antlr/TestUriParserImpl.java index 8790766..dd517f9 100644 --- a/lib/server-test/src/test/java/org/apache/olingo/server/core/uri/antlr/TestUriParserImpl.java +++ b/lib/server-test/src/test/java/org/apache/olingo/server/core/uri/antlr/TestUriParserImpl.java @@ -27,7 +27,7 @@ import org.apache.olingo.server.api.edmx.EdmxReference; import org.apache.olingo.server.api.uri.UriInfoKind; import org.apache.olingo.server.api.uri.UriResourceKind; import org.apache.olingo.server.api.uri.queryoption.expression.MethodKind; -import org.apache.olingo.server.core.uri.parser.UriParserSyntaxException; +import org.apache.olingo.server.core.uri.parser.UriParserSemanticException; import org.apache.olingo.server.core.uri.testutil.FilterValidator; import org.apache.olingo.server.core.uri.testutil.ResourceValidator; import org.apache.olingo.server.core.uri.testutil.TestUriValidator; @@ -67,8 +67,7 @@ public class TestUriParserImpl { + "," + PropertyDateTimeOffset + "," + PropertyDuration + "," + PropertyGuid + "," + PropertyTimeOfDay; @Test - public void testBoundFunctionImport_VarParameters() { - + public void boundFunctionImport_VarParameters() { // no input testRes.run("ESKeyNav(1)/olingo.odata.test1.BFCETKeyNavRTETKeyNav()") .at(0).isUriPathInfoKind(UriResourceKind.entitySet) @@ -89,9 +88,8 @@ public class TestUriParserImpl { } @Test - public void testFunctionBound_varReturnType() { - - String esTwoKeyNav = "ESTwoKeyNav(PropertyInt16=1,PropertyString='ABC')"; + public void functionBound_varReturnType() { + final String esTwoKeyNav = "ESTwoKeyNav(PropertyInt16=1,PropertyString='ABC')"; // returning primitive testRes.run("ESTwoKeyNav/olingo.odata.test1.BFCESTwoKeyNavRTString()") @@ -151,8 +149,7 @@ public class TestUriParserImpl { } @Test - public void runActionImport_VarReturnType() { - + public void actionImport_VarReturnType() { testRes.run(ContainerProvider.AIRT_STRING).isKind(UriInfoKind.resource) .first() .isActionImport(ContainerProvider.AIRT_STRING) @@ -189,7 +186,6 @@ public class TestUriParserImpl { @Test public void count() { - // count entity set testRes.run("ESAllPrim/$count") .at(0) @@ -216,7 +212,7 @@ public class TestUriParserImpl { } @Test - public void runCrossJoin() throws Exception { + public void crossJoin() throws Exception { testUri.run("$crossjoin(ESAllKey)") .isKind(UriInfoKind.crossjoin) .isCrossJoinEntityList(Arrays.asList("ESAllKey")); @@ -226,29 +222,15 @@ public class TestUriParserImpl { .isCrossJoinEntityList(Arrays.asList("ESAllKey", "ESTwoPrim")); } - @Test(expected = UriValidationException.class) - public void testEntityFailOnValidation1() throws Exception { + @Test + public void entityFailOnValidation() throws Exception { // simple entity set; with qualifiedentityTypeName; with filter - testUri.run("$entity/olingo.odata.test1.ETTwoPrim", "$filter=PropertyInt16 eq 123&$id=ESAllKey") - .isIdText("ESAllKey") - .goFilter().is("<<PropertyInt16> eq <123>>"); - } - - @Test(expected = UriParserSyntaxException.class) - public void testEntityFailOnValidation2() throws Exception { - // simple entity set; with qualifiedentityTypeName; with 2xformat(before and after), expand, filter - testUri.run("$entity/olingo.odata.test1.ETTwoPrim", - "$format=xml&$expand=*&abc=123&$id=ESBase&xyz=987&$filter=PropertyInt16 eq 123&$format=atom&$select=*") - .isFormatText("atom") - .isCustomParameter(0, "abc", "123") - .isIdText("ESBase") - .isCustomParameter(1, "xyz", "987") - .isSelectItemStar(0); + testUri.runEx("$entity/olingo.odata.test1.ETTwoPrim", "$filter=PropertyInt16 eq 123&$id=ESAllKey") + .isExValidation(UriValidationException.MessageKeys.SYSTEM_QUERY_OPTION_NOT_ALLOWED); } @Test - public void testEntity() throws Exception { - + public void entity() throws Exception { // simple entity set testUri.run("$entity", "$id=ESAllPrim").isKind(UriInfoKind.entityId) .isKind(UriInfoKind.entityId) @@ -311,14 +293,11 @@ public class TestUriParserImpl { .isKind(UriInfoKind.entityId) .isEntityType(EntityTypeProvider.nameETBase) .isIdText("ESTwoPrim") - .isExpandText("*") .goExpand().first().isSegmentStar(); - } @Test public void entitySet() throws Exception { - // plain entity set testRes.run("ESAllPrim") .isEntitySet("ESAllPrim") @@ -342,7 +321,7 @@ public class TestUriParserImpl { .isKeyPredicate(1, "PropertyString", "'ABC'"); // with all keys - testRes.run("ESAllKey(" + encode(allKeys) + ")") + testRes.run("ESAllKey(" + allKeys + ")") .isEntitySet("ESAllKey") .isKeyPredicate(0, "PropertyString", "'ABC'") .isKeyPredicate(1, "PropertyInt16", "1") @@ -360,10 +339,7 @@ public class TestUriParserImpl { } @Test - public void testEntitySet_NavigationProperty() { - - // plain entity set ... - + public void entitySet_NavigationProperty() { // with navigation property testRes.run("ESKeyNav(1)/NavPropertyETTwoKeyNavOne") .at(0) @@ -467,10 +443,7 @@ public class TestUriParserImpl { } @Test - public void testEntitySet_Property() { - - // plain entity set ... - + public void entitySet_Property() { // with property testRes.run("ESAllPrim(1)/PropertyString") .at(0) @@ -499,8 +472,7 @@ public class TestUriParserImpl { } @Test - public void testEntitySet_TypeFilter() { - + public void entitySet_TypeFilter() { // filter testRes.run("ESTwoPrim/olingo.odata.test1.ETBase") .at(0) @@ -556,57 +528,53 @@ public class TestUriParserImpl { .at(1) .isPrimitiveProperty("AdditionalPropertyString_5", PropertyProvider.nameString, false) .isType(PropertyProvider.nameString); - } @Test public void unary() throws Exception { - testFilter.runOnETAllPrim("not PropertyBoolean").isCompr("<not <PropertyBoolean>>"); - testFilter.runOnETAllPrim("-PropertyInt16 eq PropertyInt16").isCompr("<<- <PropertyInt16>> eq <PropertyInt16>>"); + testFilter.runOnETAllPrim("not PropertyBoolean").is("<not <PropertyBoolean>>"); + testFilter.runOnETAllPrim("-PropertyInt16 eq PropertyInt16").is("<<- <PropertyInt16>> eq <PropertyInt16>>"); } - // TODO: Use correct types. @Test - @Ignore public void filterComplexMixedPriority() throws Exception { - testFilter.runOnETAllPrim("PropertyInt16 or PropertyInt32 and PropertyInt64") - .isCompr("<<PropertyInt16> or <<PropertyInt32> and <PropertyInt64>>>"); - testFilter.runOnETAllPrim("PropertyInt16 or PropertyInt32 and PropertyInt64 eq PropertyByte") - .isCompr("<<PropertyInt16> or <<PropertyInt32> and <<PropertyInt64> eq <PropertyByte>>>>"); - testFilter.runOnETAllPrim("PropertyInt16 or PropertyInt32 eq PropertyInt64 and PropertyByte") - .isCompr("<<PropertyInt16> or <<<PropertyInt32> eq <PropertyInt64>> and <PropertyByte>>>"); - testFilter.runOnETAllPrim("PropertyInt16 or PropertyInt32 eq PropertyInt64 and PropertyByte eq PropertySByte") - .isCompr("<<PropertyInt16> or <<<PropertyInt32> eq <PropertyInt64>> " + testFilter.runOnETAllPrim("PropertyBoolean or true and false") + .is("<<PropertyBoolean> or <<true> and <false>>>"); + testFilter.runOnETAllPrim("PropertyBoolean or true and PropertyInt64 eq PropertyByte") + .is("<<PropertyBoolean> or <<true> and <<PropertyInt64> eq <PropertyByte>>>>"); + testFilter.runOnETAllPrim("PropertyBoolean or PropertyInt32 eq PropertyInt64 and true") + .is("<<PropertyBoolean> or <<<PropertyInt32> eq <PropertyInt64>> and <true>>>"); + testFilter.runOnETAllPrim("PropertyBoolean or PropertyInt32 eq PropertyInt64 and PropertyByte eq PropertySByte") + .is("<<PropertyBoolean> or <<<PropertyInt32> eq <PropertyInt64>> " + "and <<PropertyByte> eq <PropertySByte>>>>"); - testFilter.runOnETAllPrim("PropertyInt16 eq PropertyInt32 or PropertyInt64 and PropertyByte") - .isCompr("<<<PropertyInt16> eq <PropertyInt32>> or <<PropertyInt64> and <PropertyByte>>>"); - testFilter.runOnETAllPrim("PropertyInt16 eq PropertyInt32 or PropertyInt64 and PropertyByte eq PropertySByte") - .isCompr("<<<PropertyInt16> eq <PropertyInt32>> " - + "or <<PropertyInt64> and <<PropertyByte> eq <PropertySByte>>>>"); - testFilter.runOnETAllPrim("PropertyInt16 eq PropertyInt32 or PropertyInt64 eq PropertyByte and PropertySByte") - .isCompr("<<<PropertyInt16> eq <PropertyInt32>> " - + "or <<<PropertyInt64> eq <PropertyByte>> and <PropertySByte>>>"); + testFilter.runOnETAllPrim("PropertyInt16 eq PropertyInt32 or PropertyBoolean and true") + .is("<<<PropertyInt16> eq <PropertyInt32>> or <<PropertyBoolean> and <true>>>"); + testFilter.runOnETAllPrim("PropertyInt16 eq PropertyInt32 or PropertyBoolean and PropertyByte eq PropertySByte") + .is("<<<PropertyInt16> eq <PropertyInt32>> " + + "or <<PropertyBoolean> and <<PropertyByte> eq <PropertySByte>>>>"); + testFilter.runOnETAllPrim("PropertyInt16 eq PropertyInt32 or PropertyInt64 eq PropertyByte and PropertyBoolean") + .is("<<<PropertyInt16> eq <PropertyInt32>> " + + "or <<<PropertyInt64> eq <PropertyByte>> and <PropertyBoolean>>>"); testFilter.runOnETAllPrim("PropertyInt16 eq PropertyInt32 or PropertyInt64 eq PropertyByte " + "and PropertySByte eq PropertyDecimal") - .isCompr("<<<PropertyInt16> eq <PropertyInt32>> or <<<PropertyInt64> eq <PropertyByte>> " + .is("<<<PropertyInt16> eq <PropertyInt32>> or <<<PropertyInt64> eq <PropertyByte>> " + "and <<PropertySByte> eq <PropertyDecimal>>>>"); } @Test public void filterSimpleSameBinaryBinaryBinaryPriority() throws Exception { - testFilter.runOnETAllPrim("1 add 2 add 3 add 4").isCompr("<<< <1> add <2>> add <3>> add <4>>"); - testFilter.runOnETAllPrim("1 add 2 add 3 div 4").isCompr("<< <1> add <2>> add <<3> div <4>>>"); - testFilter.runOnETAllPrim("1 add 2 div 3 add 4").isCompr("<< <1> add <<2> div <3>>> add <4>>"); - testFilter.runOnETAllPrim("1 add 2 div 3 div 4").isCompr("< <1> add <<<2> div <3>> div <4>>>"); - testFilter.runOnETAllPrim("1 div 2 add 3 add 4").isCompr("<<< <1> div <2>> add <3>> add <4>>"); - testFilter.runOnETAllPrim("1 div 2 add 3 div 4").isCompr("<< <1> div <2>> add <<3> div <4>>>"); - testFilter.runOnETAllPrim("1 div 2 div 3 add 4").isCompr("<<< <1> div <2>> div <3>> add <4>>"); - testFilter.runOnETAllPrim("1 div 2 div 3 div 4").isCompr("<<< <1> div <2>> div <3>> div <4>>"); + testFilter.runOnETAllPrim("1 add 2 add 3 add 4 ge 0").isCompr("<<<< <1> add <2>> add <3>> add <4>> ge <0>>"); + testFilter.runOnETAllPrim("1 add 2 add 3 div 4 ge 0").isCompr("<<< <1> add <2>> add <<3> div <4>>> ge <0>>"); + testFilter.runOnETAllPrim("1 add 2 div 3 add 4 ge 0").isCompr("<<< <1> add <<2> div <3>>> add <4>> ge <0>>"); + testFilter.runOnETAllPrim("1 add 2 div 3 div 4 ge 0").isCompr("<< <1> add <<<2> div <3>> div <4>>> ge <0>>"); + testFilter.runOnETAllPrim("1 div 2 add 3 add 4 ge 0").isCompr("<<<< <1> div <2>> add <3>> add <4>> ge <0>>"); + testFilter.runOnETAllPrim("1 div 2 add 3 div 4 ge 0").isCompr("<<< <1> div <2>> add <<3> div <4>>> ge <0>>"); + testFilter.runOnETAllPrim("1 div 2 div 3 add 4 ge 0").isCompr("<<<< <1> div <2>> div <3>> add <4>> ge <0>>"); + testFilter.runOnETAllPrim("1 div 2 div 3 div 4 ge 0").isCompr("<<<< <1> div <2>> div <3>> div <4>> ge <0>>"); } @Test - public void testFunctionImport_VarParameters() { - + public void functionImport_VarParameters() { // no input testRes.run("FINRTInt16()") .isFunctionImport("FINRTInt16") @@ -627,7 +595,7 @@ public class TestUriParserImpl { } @Test - public void testFunctionImport_VarReturning() { + public void functionImport_VarReturning() { // returning primitive testRes.run("FINRTInt16()") .isFunctionImport("FINRTInt16") @@ -666,8 +634,7 @@ public class TestUriParserImpl { } @Test - public void testFunctionImportChain() { - + public void functionImportChain() { // test chain; returning single complex testRes.run("FICRTCTAllPrimTwoParam(ParameterString='ABC',ParameterInt16=1)/PropertyInt16") .at(0) @@ -710,12 +677,10 @@ public class TestUriParserImpl { .isKeyPredicate(1, "PropertyString", "'ABC'") .at(1) .isPrimitiveProperty("PropertyInt16", PropertyProvider.nameInt16, false); - } @Test - public void testMetaData() throws Exception { - + public void metaData() throws Exception { // Parsing the fragment may be used if a uri has to be parsed on the consumer side. // On the producer side this feature is currently not supported, so the context fragment // part is only available as text. @@ -879,12 +844,12 @@ public class TestUriParserImpl { } @Test - public void testRef() throws Exception { + public void ref() throws Exception { testUri.run("ESKeyNav(1)/NavPropertyETTwoKeyNavOne/$ref"); } @Test - public void testSingleton() { + public void singleton() { // plain singleton testRes.run("SINav") .isSingleton("SINav") @@ -892,10 +857,7 @@ public class TestUriParserImpl { } @Test - public void testNavigationProperty() { - - // plain entity set ... - + public void navigationProperty() { // with navigation property testRes.run("ESKeyNav(1)/NavPropertyETTwoKeyNavOne") .at(0).isEntitySet("ESKeyNav") @@ -969,10 +931,7 @@ public class TestUriParserImpl { } @Test - public void testSingleton_Property() { - - // plain singleton ... - + public void singleton_Property() { // with property testRes.run("SINav/PropertyInt16") .at(0) @@ -1002,72 +961,51 @@ public class TestUriParserImpl { } @Test - public void testValue() throws Exception { + public void value() throws Exception { testUri.run("ESAllPrim(1)/PropertyString/$value"); } - @Test(expected = UriValidationException.class) - public void testMemberStartingWithCastFailOnValidation1() throws Exception { + @Test + public void memberStartingWithCastFailOnValidation1() throws Exception { // on EntityType entry - testUri.run("ESTwoKeyNav(ParameterInt16=1,PropertyString='ABC')", + testUri.runEx("ESTwoKeyNav(Property16=1,PropertyString='ABC')", "$filter=olingo.odata.test1.ETBaseTwoKeyNav/PropertyDate") - .goFilter().root().isMember() - .isMemberStartType(EntityTypeProvider.nameETBaseTwoKeyNav).goPath() - // .at(0) - // .isUriPathInfoKind(UriResourceKind.startingTypeFilter) - // .isType(EntityTypeProvider.nameETTwoKeyNav, false) - // .isTypeFilterOnEntry(EntityTypeProvider.nameETBaseTwoKeyNav) - .at(0).isType(PropertyProvider.nameDate); + .isExValidation(UriValidationException.MessageKeys.INVALID_KEY_PROPERTY); } - @Test(expected = UriValidationException.class) - public void testMemberStartingWithCastFailOnValidation2() throws Exception { - testUri.run("FICRTCTTwoPrimTwoParam(ParameterInt16=1,ParameterString='2')", + @Test + public void memberStartingWithCastFailOnValidation2() throws Exception { + testUri.runEx("FICRTCTTwoPrimTwoParam(ParameterInt16=1,ParameterString='2')", "$filter=olingo.odata.test1.CTBase/AdditionalPropString") - .goFilter().root().isMember() - .isMemberStartType(ComplexTypeProvider.nameCTBase).goPath() - // .at(0) - // .isUriPathInfoKind(UriResourceKind.startingTypeFilter) - // .isType(ComplexTypeProvider.nameCTTwoPrim, false) - // .isTypeFilterOnEntry(ComplexTypeProvider.nameCTBase) - .at(0).isType(PropertyProvider.nameString); + .isExSemantic(UriParserSemanticException.MessageKeys.TYPES_NOT_COMPATIBLE); } @Test - public void testMemberStartingWithCast() throws Exception { - + public void memberStartingWithCast() throws Exception { // on EntityType collection - testUri.run("ESTwoKeyNav", "$filter=olingo.odata.test1.ETBaseTwoKeyNav/PropertyDate") - .goFilter().root().isMember() + testFilter.runOnETTwoKeyNav("olingo.odata.test1.ETBaseTwoKeyNav/PropertyDate eq null") + .left() + .isMember() .isMemberStartType(EntityTypeProvider.nameETBaseTwoKeyNav).goPath() - // .at(0) - // .isUriPathInfoKind(UriResourceKind.startingTypeFilter) - // .isType(EntityTypeProvider.nameETTwoKeyNav, true) - // .isTypeFilterOnCollection(EntityTypeProvider.nameETBaseTwoKeyNav) .at(0).isType(PropertyProvider.nameDate); // on Complex collection testUri.run("FICRTCollCTTwoPrimTwoParam(ParameterInt16=1,ParameterString='2')", - "$filter=olingo.odata.test1.CTBase/AdditionalPropString") - .goFilter().root().isMember() + "$filter=olingo.odata.test1.CTBase/AdditionalPropString eq null") + .goFilter().left().isMember() .isMemberStartType(ComplexTypeProvider.nameCTBase).goPath() - // .at(0) - // .isUriPathInfoKind(UriResourceKind.startingTypeFilter) - // .isType(ComplexTypeProvider.nameCTTwoPrim, true) - // .isTypeFilterOnCollection(ComplexTypeProvider.nameCTBase) .at(0).isType(PropertyProvider.nameString); - } @Test - public void testComplexTypeCastFollowingAsCollection() throws Exception { + public void complexTypeCastFollowingAsCollection() throws Exception { testUri.run("FICRTCollCTTwoPrimTwoParam(ParameterInt16=1,ParameterString='2')/olingo.odata.test1.CTBase"); } @Test - public void testAlias() throws Exception { - testUri.run("ESAllPrim", "$filter=PropertyInt16 eq @p1&@p1=1") - .goFilter().is("<<PropertyInt16> eq <@p1>>"); + public void alias() throws Exception { + testFilter.runOnETAllPrim("PropertyInt16 eq @p1&@p1=1") + .is("<<PropertyInt16> eq <@p1>>"); } @Test @@ -1087,26 +1025,22 @@ public class TestUriParserImpl { @Test public void customQueryOption() throws Exception { testUri.run("ESTwoKeyNav", "custom") - .isCustomParameter(0, "custom", ""); + .isCustomParameter(0, "custom", ""); testUri.run("ESTwoKeyNav", "custom=ABC") - .isCustomParameter(0, "custom", "ABC"); + .isCustomParameter(0, "custom", "ABC"); } @Test @Ignore("Geo types are not supported yet.") public void geo() throws Exception { testFilter.runOnETAllPrim("geo.distance(PropertySByte,PropertySByte)") - .is("<geo.distance(<PropertySByte>,<PropertySByte>)>") - .isMethod(MethodKind.GEODISTANCE, 2); + .is("<geo.distance(<PropertySByte>,<PropertySByte>)>") + .isMethod(MethodKind.GEODISTANCE, 2); testFilter.runOnETAllPrim("geo.length(PropertySByte)") - .is("<geo.length(<PropertySByte>)>") - .isMethod(MethodKind.GEOLENGTH, 1); + .is("<geo.length(<PropertySByte>)>") + .isMethod(MethodKind.GEOLENGTH, 1); testFilter.runOnETAllPrim("geo.intersects(PropertySByte,PropertySByte)") - .is("<geo.intersects(<PropertySByte>,<PropertySByte>)>") - .isMethod(MethodKind.GEOINTERSECTS, 2); - } - - private final String encode(final String uriPart) { - return uriPart.replaceAll(":", "%3A"); + .is("<geo.intersects(<PropertySByte>,<PropertySByte>)>") + .isMethod(MethodKind.GEOINTERSECTS, 2); } } http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/8925274c/lib/server-test/src/test/java/org/apache/olingo/server/core/uri/parser/ParserTest.java ---------------------------------------------------------------------- diff --git a/lib/server-test/src/test/java/org/apache/olingo/server/core/uri/parser/ParserTest.java b/lib/server-test/src/test/java/org/apache/olingo/server/core/uri/parser/ParserTest.java index f54ad04..af523aa 100644 --- a/lib/server-test/src/test/java/org/apache/olingo/server/core/uri/parser/ParserTest.java +++ b/lib/server-test/src/test/java/org/apache/olingo/server/core/uri/parser/ParserTest.java @@ -18,12 +18,18 @@ */ package org.apache.olingo.server.core.uri.parser; +import java.util.Collections; + import org.apache.olingo.commons.api.edm.Edm; import org.apache.olingo.commons.api.edm.EdmEntityContainer; import org.apache.olingo.commons.api.edm.EdmEntitySet; import org.apache.olingo.commons.api.edm.EdmEntityType; +import org.apache.olingo.commons.api.edm.EdmKeyPropertyRef; import org.apache.olingo.commons.api.edm.EdmNavigationProperty; +import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeKind; +import org.apache.olingo.commons.api.edm.EdmProperty; import org.apache.olingo.commons.api.edm.FullQualifiedName; +import org.apache.olingo.server.api.OData; import org.apache.olingo.server.api.uri.UriInfoKind; import org.apache.olingo.server.core.uri.testutil.TestUriValidator; import org.junit.Test; @@ -33,17 +39,57 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.fail; /** - * All Tests which involves the <code>Parser</code> implementation - * (and with that also the <code>UriParseTreeVisitor</code>). + * Tests of the <code>Parser</code> implementation that require mocking of the EDM. */ public class ParserTest { + @Test + public void navPropertySameNameAsEntitySet() throws Exception { + final String namespace = "namespace"; + final String entityTypeName = "ETNavProp"; + final FullQualifiedName nameETNavProp = new FullQualifiedName(namespace, entityTypeName); + final String entitySetName = "ESNavProp"; + final String keyPropertyName = "a"; + EdmProperty keyProperty = Mockito.mock(EdmProperty.class); + Mockito.when(keyProperty.getType()) + .thenReturn(OData.newInstance().createPrimitiveTypeInstance(EdmPrimitiveTypeKind.Byte)); + EdmKeyPropertyRef keyPropertyRef = Mockito.mock(EdmKeyPropertyRef.class); + Mockito.when(keyPropertyRef.getName()).thenReturn(keyPropertyName); + Mockito.when(keyPropertyRef.getProperty()).thenReturn(keyProperty); + EdmNavigationProperty navProperty = Mockito.mock(EdmNavigationProperty.class); + Mockito.when(navProperty.getName()).thenReturn(entitySetName); + Mockito.when(navProperty.isCollection()).thenReturn(true); + EdmEntityType entityType = Mockito.mock(EdmEntityType.class); + Mockito.when(entityType.getFullQualifiedName()).thenReturn(nameETNavProp); + Mockito.when(entityType.getKeyPredicateNames()).thenReturn(Collections.singletonList(keyPropertyName)); + Mockito.when(entityType.getKeyPropertyRefs()).thenReturn(Collections.singletonList(keyPropertyRef)); + Mockito.when(entityType.getNavigationProperty(entitySetName)).thenReturn(navProperty); + Mockito.when(navProperty.getType()).thenReturn(entityType); + EdmEntitySet entitySet = Mockito.mock(EdmEntitySet.class); + Mockito.when(entitySet.getName()).thenReturn(entitySetName); + Mockito.when(entitySet.getEntityType()).thenReturn(entityType); + EdmEntityContainer container = Mockito.mock(EdmEntityContainer.class); + Mockito.when(container.getEntitySet(entitySetName)).thenReturn(entitySet); + Edm mockedEdm = Mockito.mock(Edm.class); + Mockito.when(mockedEdm.getEntityContainer()).thenReturn(container); + new TestUriValidator().setEdm(mockedEdm) + .run("ESNavProp(1)/ESNavProp(2)/ESNavProp(3)/ESNavProp") + .goPath() + .at(0).isEntitySet(entitySetName) + .at(0).isKeyPredicate(0, keyPropertyName, "1") + .at(1).isNavProperty(entitySetName, nameETNavProp, false) + .at(1).isKeyPredicate(0, keyPropertyName, "2") + .at(2).isNavProperty(entitySetName, nameETNavProp, false) + .at(2).isKeyPredicate(0, keyPropertyName, "3") + .at(3).isNavProperty(entitySetName, nameETNavProp, true); + } + /** * Test for EntitySet and NavigationProperty with same name defined in metadata. * (related to Olingo issue OLINGO-741) */ @Test - public void parseEntitySetAndNavigationPropertyWithSameName() throws Exception { + public void expandNavigationPropertyWithSameNameAsEntitySet() throws Exception { TestUriValidator testUri = new TestUriValidator(); Edm mockEdm = Mockito.mock(Edm.class); @@ -60,7 +106,7 @@ public class ParserTest { Mockito.when(typeCategory.getNamespace()).thenReturn("NS"); Mockito.when(esCategory.getEntityType()).thenReturn(typeCategory); Mockito.when(productsNavigation.getName()).thenReturn("Products"); - Mockito.when(typeCategory.getProperty("Products")).thenReturn(productsNavigation); + Mockito.when(typeCategory.getNavigationProperty("Products")).thenReturn(productsNavigation); Mockito.when(container.getEntitySet("Category")).thenReturn(esCategory); Mockito.when(container.getEntitySet("Products")).thenReturn(esProduct); Mockito.when(productsType.getFullQualifiedName()).thenReturn(nameProducts); @@ -122,7 +168,7 @@ public class ParserTest { .isType(new FullQualifiedName("NS", "Category"), false); fail("Expected exception was not thrown."); } catch (final UriParserException e) { - assertEquals("NavigationProperty 'Category' not found in type 'NS.Products'", e.getMessage()); + assertEquals("Navigation Property 'Category' not found in type 'NS.Products'.", e.getMessage()); } } } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/8925274c/lib/server-test/src/test/java/org/apache/olingo/server/core/uri/testutil/ExpandValidator.java ---------------------------------------------------------------------- diff --git a/lib/server-test/src/test/java/org/apache/olingo/server/core/uri/testutil/ExpandValidator.java b/lib/server-test/src/test/java/org/apache/olingo/server/core/uri/testutil/ExpandValidator.java index 5638227..35245b4 100644 --- a/lib/server-test/src/test/java/org/apache/olingo/server/core/uri/testutil/ExpandValidator.java +++ b/lib/server-test/src/test/java/org/apache/olingo/server/core/uri/testutil/ExpandValidator.java @@ -19,6 +19,7 @@ package org.apache.olingo.server.core.uri.testutil; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; @@ -151,12 +152,6 @@ public class ExpandValidator implements TestValidator { return this; } - public ExpandValidator isSelectText(final String text) { - final QueryOption option = expandItem.getSelectOption(); - assertEquals(text, option.getText()); - return this; - } - public ExpandValidator isSelectItemStar(final int index) { SelectOption select = expandItem.getSelectOption(); SelectItem item = select.getSelectItems().get(index); @@ -171,12 +166,6 @@ public class ExpandValidator implements TestValidator { return this; } - public ExpandValidator isFilterOptionText(final String text) { - QueryOption option = expandItem.getFilterOption(); - assertEquals(text, option.getText()); - return this; - } - public ExpandValidator isFilterSerialized(final String serialized) { FilterOption filter = expandItem.getFilterOption(); @@ -201,7 +190,13 @@ public class ExpandValidator implements TestValidator { } public ExpandValidator isExpandStartType(final FullQualifiedName fullName) { + assertNotNull(expandItem.getStartTypeFilter()); assertEquals(fullName, expandItem.getStartTypeFilter().getFullQualifiedName()); return this; } + + public ExpandValidator isSearchSerialized(final String serialized) { + assertEquals(serialized, expandItem.getSearchOption().getSearchExpression().toString()); + return this; + } } http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/8925274c/lib/server-test/src/test/java/org/apache/olingo/server/core/uri/testutil/FilterValidator.java ---------------------------------------------------------------------- diff --git a/lib/server-test/src/test/java/org/apache/olingo/server/core/uri/testutil/FilterValidator.java b/lib/server-test/src/test/java/org/apache/olingo/server/core/uri/testutil/FilterValidator.java index 0800dd0..161299c 100644 --- a/lib/server-test/src/test/java/org/apache/olingo/server/core/uri/testutil/FilterValidator.java +++ b/lib/server-test/src/test/java/org/apache/olingo/server/core/uri/testutil/FilterValidator.java @@ -46,13 +46,16 @@ import org.apache.olingo.server.api.uri.queryoption.expression.Member; import org.apache.olingo.server.api.uri.queryoption.expression.Method; import org.apache.olingo.server.api.uri.queryoption.expression.MethodKind; import org.apache.olingo.server.api.uri.queryoption.expression.TypeLiteral; +import org.apache.olingo.server.api.uri.queryoption.expression.Unary; import org.apache.olingo.server.core.uri.UriResourceFunctionImpl; import org.apache.olingo.server.core.uri.parser.Parser; import org.apache.olingo.server.core.uri.parser.UriParserException; import org.apache.olingo.server.core.uri.parser.UriParserSemanticException; import org.apache.olingo.server.core.uri.parser.UriParserSyntaxException; +import org.apache.olingo.server.core.uri.queryoption.expression.BinaryImpl; import org.apache.olingo.server.core.uri.queryoption.expression.MemberImpl; import org.apache.olingo.server.core.uri.queryoption.expression.MethodImpl; +import org.apache.olingo.server.core.uri.queryoption.expression.UnaryImpl; import org.apache.olingo.server.core.uri.validator.UriValidationException; public class FilterValidator implements TestValidator { @@ -127,7 +130,7 @@ public class FilterValidator implements TestValidator { } public FilterValidator runOrderByOnETTwoKeyNavEx(final String orderBy) throws UriParserException { - return runUriOrderByEx("ESTwoKeyNav", "$orderby=" + orderBy.trim()); + return runUriEx("ESTwoKeyNav", "$orderby=" + orderBy.trim()); } public FilterValidator runOnETTwoKeyNav(final String filter) throws UriParserException, UriValidationException { @@ -225,19 +228,6 @@ public class FilterValidator implements TestValidator { return this; } - public FilterValidator runUriOrderByEx(final String path, final String query) { - exception = null; - try { - new Parser(edm, odata).parseUri(path, query, null); - fail("Expected exception not thrown."); - } catch (final UriParserException e) { - exception = e; - } catch (final UriValidationException e) { - exception = e; - } - return this; - } - // --- Navigation --- public ExpandValidator goUpToExpandValidator() { @@ -274,8 +264,8 @@ public class FilterValidator implements TestValidator { // --- Validation --- /** - * Validates the serialized filterTree against a given filterString - * The given expected filterString is compressed before to allow better readable code in the unit tests + * Validates the serialized filterTree against a given filterString. + * The given expected filterString is compressed before to allow better readable code in the unit tests. * @param toBeCompr * @return {@link FilterValidator} */ @@ -310,14 +300,19 @@ public class FilterValidator implements TestValidator { EdmType actualType = null; if (curExpression instanceof Member) { - Member member = (Member) curExpression; - actualType = member.getType(); + actualType = ((Member) curExpression).getType(); } else if (curExpression instanceof TypeLiteral) { - TypeLiteral typeLiteral = (TypeLiteral) curExpression; - actualType = typeLiteral.getType(); + actualType = ((TypeLiteral) curExpression).getType(); } else if (curExpression instanceof Literal) { - Literal typeLiteral = (Literal) curExpression; - actualType = typeLiteral.getType(); + actualType = ((Literal) curExpression).getType(); + } else if (curExpression instanceof Enumeration) { + actualType = ((Enumeration) curExpression).getType(); + } else if (curExpression instanceof Unary) { + actualType = ((UnaryImpl) curExpression).getType(); + } else if (curExpression instanceof Binary) { + actualType = ((BinaryImpl) curExpression).getType(); + } else if (curExpression instanceof Method) { + actualType = ((MethodImpl) curExpression).getType(); } if (actualType == null) { @@ -349,7 +344,6 @@ public class FilterValidator implements TestValidator { curExpression = ((Binary) curExpression).getRightOperand(); return this; - } public FilterValidator isLiteral(final String literalText) { @@ -361,9 +355,9 @@ public class FilterValidator implements TestValidator { assertEquals(literalText, actualLiteralText); return this; } - - public FilterValidator isLiteralType(EdmType edmType) { - if(!(curExpression instanceof Literal)) { + + public FilterValidator isLiteralType(final EdmType edmType) { + if (!(curExpression instanceof Literal)) { fail("Current expression is not a literal"); } @@ -374,7 +368,7 @@ public class FilterValidator implements TestValidator { } public FilterValidator isNullLiteralType() { - if(!(curExpression instanceof Literal)) { + if (!(curExpression instanceof Literal)) { fail("Current expression is not a literal"); } @@ -495,12 +489,4 @@ public class FilterValidator implements TestValidator { assertEquals(messageKey, exception.getMessageKey()); return this; } - - public FilterValidator isNull() { - return isLiteral("null"); - } - - public FilterValidator isTrue() { - return isLiteral("true"); - } } http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/8925274c/lib/server-test/src/test/java/org/apache/olingo/server/core/uri/testutil/TestUriValidator.java ---------------------------------------------------------------------- diff --git a/lib/server-test/src/test/java/org/apache/olingo/server/core/uri/testutil/TestUriValidator.java b/lib/server-test/src/test/java/org/apache/olingo/server/core/uri/testutil/TestUriValidator.java index 1dbe62b..fbce5c9 100644 --- a/lib/server-test/src/test/java/org/apache/olingo/server/core/uri/testutil/TestUriValidator.java +++ b/lib/server-test/src/test/java/org/apache/olingo/server/core/uri/testutil/TestUriValidator.java @@ -140,6 +140,20 @@ public class TestUriValidator implements TestValidator { return this; } + public TestUriValidator isSelectItemStar(final int index) { + final SelectOption select = uriInfo.getSelectOption(); + SelectItem item = select.getSelectItems().get(index); + assertTrue(item.isStar()); + return this; + } + + public TestUriValidator isSelectItemAllOp(final int index, final FullQualifiedName fqn) { + final SelectOption select = uriInfo.getSelectOption(); + SelectItem item = select.getSelectItems().get(index); + assertEquals(fqn, item.getAllOperationsInSchemaNameSpace()); + return this; + } + // Validation public TestUriValidator isKind(final UriInfoKind kind) { assertEquals(kind, uriInfo.getKind()); @@ -202,16 +216,6 @@ public class TestUriValidator implements TestValidator { return this; } - public TestUriValidator isExpandText(final String text) { - assertEquals(text, uriInfo.getExpandOption().getText()); - return this; - } - - public TestUriValidator isSelectText(final String text) { - assertEquals(text, uriInfo.getSelectOption().getText()); - return this; - } - public TestUriValidator isFormatText(final String text) { assertEquals(text, uriInfo.getFormatOption().getText()); return this; @@ -234,18 +238,4 @@ public class TestUriValidator implements TestValidator { assertEquals(fullName, uriInfo.getEntityTypeCast().getFullQualifiedName()); return this; } - - public TestUriValidator isSelectItemStar(final int index) { - final SelectOption select = uriInfo.getSelectOption(); - SelectItem item = select.getSelectItems().get(index); - assertTrue(item.isStar()); - return this; - } - - public TestUriValidator isSelectItemAllOp(final int index, final FullQualifiedName fqn) { - final SelectOption select = uriInfo.getSelectOption(); - SelectItem item = select.getSelectItems().get(index); - assertEquals(fqn, item.getAllOperationsInSchemaNameSpace()); - return this; - } } http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/8925274c/lib/server-test/src/test/java/org/apache/olingo/server/core/uri/testutil/TokenValidator.java ---------------------------------------------------------------------- diff --git a/lib/server-test/src/test/java/org/apache/olingo/server/core/uri/testutil/TokenValidator.java b/lib/server-test/src/test/java/org/apache/olingo/server/core/uri/testutil/TokenValidator.java deleted file mode 100644 index 547c2ea..0000000 --- a/lib/server-test/src/test/java/org/apache/olingo/server/core/uri/testutil/TokenValidator.java +++ /dev/null @@ -1,127 +0,0 @@ -/* - * 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.olingo.server.core.uri.testutil; - -import static org.junit.Assert.assertEquals; - -import java.util.List; - -import org.antlr.v4.runtime.ANTLRInputStream; -import org.antlr.v4.runtime.Token; -import org.apache.olingo.server.core.uri.antlr.UriLexer; - -public class TokenValidator { - - private String input = null; - private List<? extends Token> tokens = null; - private Token curToken = null; - private Exception curException = null; - - private int startMode; - - // --- Execution --- - - public TokenValidator run(final String uri) { - input = uri; - tokens = parseInput(uri); - first(); - return this; - } - - // --- Navigation --- - - // navigate within the tokenlist - public TokenValidator first() { - try { - curToken = tokens.get(0); - } catch (IndexOutOfBoundsException ex) { - curToken = null; - } - return this; - } - - public TokenValidator last() { - curToken = tokens.get(tokens.size() - 1); - return this; - } - - public TokenValidator at(final int index) { - try { - curToken = tokens.get(index); - } catch (IndexOutOfBoundsException ex) { - curToken = null; - } - return this; - } - - // --- Validation --- - - public TokenValidator isText(final String expected) { - assertEquals(expected, curToken.getText()); - return this; - } - - public TokenValidator isAllText(final String expected) { - String actual = ""; - - for (Token curToken : tokens) { - actual += curToken.getText(); - } - assertEquals(expected, actual); - return this; - } - - public TokenValidator isAllInput() { - String actual = ""; - - for (Token curToken : tokens) { - actual += curToken.getText(); - } - assertEquals(input, actual); - return this; - } - - public TokenValidator isInput() { - assertEquals(input, curToken.getText()); - return this; - } - - public TokenValidator isType(final int expected) { - assertEquals(UriLexer.VOCABULARY.getDisplayName(expected), UriLexer.VOCABULARY.getDisplayName(curToken.getType())); - return this; - } - - public TokenValidator isExType(final Class<?> exClass) { - assertEquals(exClass, curException.getClass()); - return this; - } - - public void globalMode(final int mode) { - startMode = mode; - } - - // --- Helper --- - - private List<? extends Token> parseInput(final String input) { - ANTLRInputStream inputStream = new ANTLRInputStream(input); - UriLexer lexer = new UriLexer(inputStream); - lexer.mode(startMode); - return lexer.getAllTokens(); - } -}
