[OLINGO-568] Added exception messages and some tests
Project: http://git-wip-us.apache.org/repos/asf/olingo-odata4/repo Commit: http://git-wip-us.apache.org/repos/asf/olingo-odata4/commit/ae1b2754 Tree: http://git-wip-us.apache.org/repos/asf/olingo-odata4/tree/ae1b2754 Diff: http://git-wip-us.apache.org/repos/asf/olingo-odata4/diff/ae1b2754 Branch: refs/heads/master Commit: ae1b2754b765a2519e7d9c1fa30e1a5af5de3862 Parents: 1a59a58 Author: Michael Bolz <[email protected]> Authored: Tue Nov 17 15:58:28 2015 +0100 Committer: Michael Bolz <[email protected]> Committed: Tue Nov 17 15:58:28 2015 +0100 ---------------------------------------------------------------------- .../core/uri/parser/search/SearchParser.java | 4 +++- .../parser/search/SearchParserException.java | 6 ++++- .../server-core-exceptions-i18n.properties | 9 ++++++++ .../search/SearchParserAndTokenizerTest.java | 24 +++++++++----------- 4 files changed, 28 insertions(+), 15 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/ae1b2754/lib/server-core/src/main/java/org/apache/olingo/server/core/uri/parser/search/SearchParser.java ---------------------------------------------------------------------- diff --git a/lib/server-core/src/main/java/org/apache/olingo/server/core/uri/parser/search/SearchParser.java b/lib/server-core/src/main/java/org/apache/olingo/server/core/uri/parser/search/SearchParser.java index a9fe332..2723024 100644 --- a/lib/server-core/src/main/java/org/apache/olingo/server/core/uri/parser/search/SearchParser.java +++ b/lib/server-core/src/main/java/org/apache/olingo/server/core/uri/parser/search/SearchParser.java @@ -39,7 +39,9 @@ public class SearchParser { try { searchExpression = parse(tokenizer.tokenize(searchQuery)); } catch (SearchTokenizerException e) { - return null; + String message = e.getMessage(); + throw new SearchParserException("Tokenizer exception with message: " + message, + SearchParserException.MessageKeys.TOKENIZER_EXCEPTION, message); } final SearchOptionImpl searchOption = new SearchOptionImpl(); searchOption.setSearchExpression(searchExpression); http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/ae1b2754/lib/server-core/src/main/java/org/apache/olingo/server/core/uri/parser/search/SearchParserException.java ---------------------------------------------------------------------- diff --git a/lib/server-core/src/main/java/org/apache/olingo/server/core/uri/parser/search/SearchParserException.java b/lib/server-core/src/main/java/org/apache/olingo/server/core/uri/parser/search/SearchParserException.java index 78a12be..9e612a0 100644 --- a/lib/server-core/src/main/java/org/apache/olingo/server/core/uri/parser/search/SearchParserException.java +++ b/lib/server-core/src/main/java/org/apache/olingo/server/core/uri/parser/search/SearchParserException.java @@ -24,7 +24,11 @@ public class SearchParserException extends UriParserSyntaxException { private static final long serialVersionUID = 5781553037561337795L; - public static enum MessageKeys implements MessageKey { + public enum MessageKeys implements MessageKey { + /** parameter: message */ + TOKENIZER_EXCEPTION, + /** parameter: tokenCharacter */ + INVALID_TOKEN_CHARACTER_FOUND, /** parameter: operatorkind */ INVALID_BINARY_OPERATOR_POSITION, /** parameter: operatorkind */ http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/ae1b2754/lib/server-core/src/main/resources/server-core-exceptions-i18n.properties ---------------------------------------------------------------------- diff --git a/lib/server-core/src/main/resources/server-core-exceptions-i18n.properties b/lib/server-core/src/main/resources/server-core-exceptions-i18n.properties index 28c6dd7..bfb9440 100644 --- a/lib/server-core/src/main/resources/server-core-exceptions-i18n.properties +++ b/lib/server-core/src/main/resources/server-core-exceptions-i18n.properties @@ -37,6 +37,15 @@ UriParserSyntaxException.SYSTEM_QUERY_OPTION_LEVELS_NOT_ALLOWED_HERE=The system UriParserSyntaxException.SYNTAX=The URI is malformed. UriParserSyntaxException.DUPLICATED_ALIAS=Duplicated alias. An alias '%1$s' was already specified!. +SearchParserException.TOKENIZER_EXCEPTION=Exception during tokenizer creation with message '%1$s'. +SearchParserException.INVALID_TOKEN_CHARACTER_FOUND=Invalid token character with value '%1$s' found. +SearchParserException.INVALID_BINARY_OPERATOR_POSITION=Invalid binary operator position for kind '%1$s' found. +SearchParserException.INVALID_NOT_OPERAND=Invalid not operand for kind '%1$s' found. +SearchParserException.EXPECTED_DIFFERENT_TOKEN=Expected token '%1$s' but found '%2$s'. +SearchParserException.NO_EXPRESSION_FOUND=No expression found. +SearchParserException.INVALID_OPERATOR_AFTER_AND=Invalid operator after AND found of kind '%1$s'. + + UriParserSemanticException.FUNCTION_NOT_FOUND=The function import '%1$s' has no function with parameters '%2$s'. UriParserSemanticException.RESOURCE_PART_ONLY_FOR_TYPED_PARTS='%1$s' is only allowed for typed parts. UriParserSemanticException.RESOURCE_PART_MUST_BE_PRECEDED_BY_STRUCTURAL_TYPE=The resource part '%1$s' must be preceded by a structural type. http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/ae1b2754/lib/server-core/src/test/java/org/apache/olingo/server/core/uri/parser/search/SearchParserAndTokenizerTest.java ---------------------------------------------------------------------- diff --git a/lib/server-core/src/test/java/org/apache/olingo/server/core/uri/parser/search/SearchParserAndTokenizerTest.java b/lib/server-core/src/test/java/org/apache/olingo/server/core/uri/parser/search/SearchParserAndTokenizerTest.java index 23cac8e..fa419a9 100644 --- a/lib/server-core/src/test/java/org/apache/olingo/server/core/uri/parser/search/SearchParserAndTokenizerTest.java +++ b/lib/server-core/src/test/java/org/apache/olingo/server/core/uri/parser/search/SearchParserAndTokenizerTest.java @@ -23,17 +23,19 @@ import static org.apache.olingo.server.api.uri.queryoption.search.SearchBinaryOp import java.lang.reflect.Field; +import org.apache.olingo.server.api.ODataLibraryException; import org.apache.olingo.server.api.uri.queryoption.SearchOption; import org.apache.olingo.server.api.uri.queryoption.search.SearchExpression; import org.apache.olingo.server.api.uri.queryoption.search.SearchUnary; import org.junit.Assert; -import org.junit.Ignore; import org.junit.Test; public class SearchParserAndTokenizerTest { @Test public void basicParsing() throws Exception { + SearchExpressionValidator.init("\"99\"") + .validate(with("99")); SearchExpressionValidator.init("a") .validate(with("a")); SearchExpressionValidator.init("a AND b") @@ -70,16 +72,10 @@ public class SearchParserAndTokenizerTest { .validate("{{'a' OR 'b'} AND {NOT 'c'}}"); } - @Ignore @Test - public void sebuilder() { - System.out.println(with("c", or("a", and("b"))).toString()); - System.out.println(with("a", and("b", and("c"))).toString()); - System.out.println(with("a").toString()); - System.out.println(with(not("a")).toString()); - System.out.println(with("a", and("b")).toString()); - System.out.println(with("a", or("b")).toString()); - System.out.println(with("a", and(not("b"))).toString()); + public void invalidSearchQuery() throws Exception { + SearchExpressionValidator.init("99").validate(SearchParserException.class, + SearchParserException.MessageKeys.TOKENIZER_EXCEPTION); } private static SearchExpression with(String term) { @@ -162,11 +158,13 @@ public class SearchParserAndTokenizerTest { return this; } - private void validate(Class<? extends Exception> exception) throws SearchTokenizerException { + private void validate(Class<? extends ODataLibraryException> exception, ODataLibraryException.MessageKey key) + throws SearchTokenizerException { try { - new SearchTokenizer().tokenize(searchQuery); - } catch (Exception e) { + validate(searchQuery); + } catch (ODataLibraryException e) { Assert.assertEquals(exception, e.getClass()); + Assert.assertEquals(key, e.getMessageKey()); return; } Assert.fail("Expected exception " + exception.getClass().getSimpleName() + " was not thrown.");
