You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@olingo.apache.org by il...@apache.org on 2014/02/21 17:28:07 UTC

[04/14] git commit: [OLINGO-63] Uri Parser: add unit tests for errors

[OLINGO-63] Uri Parser: add unit tests for errors


Project: http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/commit/217fe957
Tree: http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/tree/217fe957
Diff: http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/diff/217fe957

Branch: refs/heads/olingo169
Commit: 217fe9579b0f61159847b983a6d0f6b4b545b70a
Parents: 32467b8
Author: Sven Kobler <sv...@sap.com>
Authored: Fri Feb 21 13:38:30 2014 +0100
Committer: Sven Kobler <sv...@sap.com>
Committed: Fri Feb 21 13:38:30 2014 +0100

----------------------------------------------------------------------
 .../api/uri/queryoption/FormatOption.java       |    2 +-
 .../uri/queryoption/SupportedQueryOptions.java  |    2 +-
 .../odata4/server/core/uri/antlr/UriParser.g4   |    8 +-
 .../odata4/server/core/uri/UriInfoImpl.java     |    2 +-
 .../odata4/server/core/uri/parser/Parser.java   |   18 -
 .../server/core/uri/parser/UriDecoder.java      |   12 +-
 .../core/uri/parser/UriParseTreeVisitor.java    |   82 +-
 .../core/uri/parser/UriParserException.java     |    1 -
 .../uri/parser/UriParserSemanticException.java  |    4 -
 .../core/uri/queryoption/CountOptionImpl.java   |    2 +-
 .../core/uri/queryoption/ExpandItemImpl.java    |    2 +-
 .../core/uri/queryoption/SearchOptionImpl.java  |    3 +-
 .../odata4/server/core/uri/RawUriTest.java      |   21 +-
 .../server/core/uri/UriParameterImplTest.java   |  502 -------
 .../server/core/uri/UriResourceImplTest.java    |  505 +++++++
 .../core/uri/antlr/TestFullResourcePath.java    |  148 +-
 .../odata4/server/core/uri/antlr/TestLexer.java |  167 +--
 .../server/core/uri/antlr/TestParser.java       | 1359 ------------------
 .../core/uri/antlr/TestUriParserImpl.java       |   76 +-
 .../core/uri/queryoption/QueryOptionTest.java   |    2 +-
 .../core/uri/testutil/ParserValidator.java      |   81 --
 .../core/uri/testutil/ResourceValidator.java    |   17 +-
 22 files changed, 682 insertions(+), 2334 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/217fe957/odata4-lib/odata4-server-api/src/main/java/org/apache/olingo/odata4/server/api/uri/queryoption/FormatOption.java
----------------------------------------------------------------------
diff --git a/odata4-lib/odata4-server-api/src/main/java/org/apache/olingo/odata4/server/api/uri/queryoption/FormatOption.java b/odata4-lib/odata4-server-api/src/main/java/org/apache/olingo/odata4/server/api/uri/queryoption/FormatOption.java
index 56cdff0..f672b6b 100644
--- a/odata4-lib/odata4-server-api/src/main/java/org/apache/olingo/odata4/server/api/uri/queryoption/FormatOption.java
+++ b/odata4-lib/odata4-server-api/src/main/java/org/apache/olingo/odata4/server/api/uri/queryoption/FormatOption.java
@@ -20,6 +20,6 @@ package org.apache.olingo.odata4.server.api.uri.queryoption;
 
 public interface FormatOption extends SystemQueryOption {
 
-  // TODO planned: define best representation for format
+  // TODO planned: define best representation for format to enable plugging in custom formats
   String getFormat();
 }

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/217fe957/odata4-lib/odata4-server-api/src/main/java/org/apache/olingo/odata4/server/api/uri/queryoption/SupportedQueryOptions.java
----------------------------------------------------------------------
diff --git a/odata4-lib/odata4-server-api/src/main/java/org/apache/olingo/odata4/server/api/uri/queryoption/SupportedQueryOptions.java b/odata4-lib/odata4-server-api/src/main/java/org/apache/olingo/odata4/server/api/uri/queryoption/SupportedQueryOptions.java
index 047fb81..1d4d544 100644
--- a/odata4-lib/odata4-server-api/src/main/java/org/apache/olingo/odata4/server/api/uri/queryoption/SupportedQueryOptions.java
+++ b/odata4-lib/odata4-server-api/src/main/java/org/apache/olingo/odata4/server/api/uri/queryoption/SupportedQueryOptions.java
@@ -23,7 +23,7 @@ public enum SupportedQueryOptions {
   FORMAT("$format"),
   EXPAND("$expand"),
   ID("$id"),
-  INLINECOUNT("$inlinecount"),
+  COUNT("$count"),
   ORDERBY("$orderby"),
   SEARCH("$search"),
   SELECT("$select"),

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/217fe957/odata4-lib/odata4-server-core/src/main/antlr4/org/apache/olingo/odata4/server/core/uri/antlr/UriParser.g4
----------------------------------------------------------------------
diff --git a/odata4-lib/odata4-server-core/src/main/antlr4/org/apache/olingo/odata4/server/core/uri/antlr/UriParser.g4 b/odata4-lib/odata4-server-core/src/main/antlr4/org/apache/olingo/odata4/server/core/uri/antlr/UriParser.g4
index d94302f..3c36782 100644
--- a/odata4-lib/odata4-server-core/src/main/antlr4/org/apache/olingo/odata4/server/core/uri/antlr/UriParser.g4
+++ b/odata4-lib/odata4-server-core/src/main/antlr4/org/apache/olingo/odata4/server/core/uri/antlr/UriParser.g4
@@ -81,14 +81,12 @@ value               : VALUE;
 //; 2. Query Options
 //;------------------------------------------------------------------------------
 
-queryOptions        : vlQO+=queryOption ( AMP vlQO+=queryOption )*;
+queryOptions        : vlQO+=queryOption ( AMP vlQO+=queryOption )*;//TODO can this be removed
 
-queryOption         : systemQueryOption
-                    | AT_Q aliasAndValue;
+queryOption         : systemQueryOption; 
 
 systemQueryOption   : expand
                     | filter 
-                    | format 
                     | inlinecount 
                     | orderBy
                     | search
@@ -148,7 +146,7 @@ orderByItem         : vC=commonExpr ( WSP ( vA=ASC | vD=DESC ) )?;
 
 skip                : SKIP EQ INT;
 top                 : TOP EQ INT;
-format              : FORMAT EQ ( ATOM | JSON | XML | PCHARS ( SLASH PCHARS)?);
+//format              : FORMAT EQ ( ATOM | JSON | XML | PCHARS ( SLASH PCHARS)?);
 
 inlinecount         : COUNT EQ booleanNonCase;
 

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/217fe957/odata4-lib/odata4-server-core/src/main/java/org/apache/olingo/odata4/server/core/uri/UriInfoImpl.java
----------------------------------------------------------------------
diff --git a/odata4-lib/odata4-server-core/src/main/java/org/apache/olingo/odata4/server/core/uri/UriInfoImpl.java b/odata4-lib/odata4-server-core/src/main/java/org/apache/olingo/odata4/server/core/uri/UriInfoImpl.java
index e527feb..eae850e 100644
--- a/odata4-lib/odata4-server-core/src/main/java/org/apache/olingo/odata4/server/core/uri/UriInfoImpl.java
+++ b/odata4-lib/odata4-server-core/src/main/java/org/apache/olingo/odata4/server/core/uri/UriInfoImpl.java
@@ -256,7 +256,7 @@ public class UriInfoImpl implements UriInfo {
       formatOption = (FormatOptionImpl) systemOption;
     } else if (systemOption.getKind() == SupportedQueryOptions.ID) {
       idOption = (IdOptionImpl) systemOption;
-    } else if (systemOption.getKind() == SupportedQueryOptions.INLINECOUNT) {
+    } else if (systemOption.getKind() == SupportedQueryOptions.COUNT) {
       inlineCountOption = (CountOptionImpl) systemOption;
     } else if (systemOption.getKind() == SupportedQueryOptions.ORDERBY) {
       orderByOption = (OrderByOptionImpl) systemOption;

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/217fe957/odata4-lib/odata4-server-core/src/main/java/org/apache/olingo/odata4/server/core/uri/parser/Parser.java
----------------------------------------------------------------------
diff --git a/odata4-lib/odata4-server-core/src/main/java/org/apache/olingo/odata4/server/core/uri/parser/Parser.java b/odata4-lib/odata4-server-core/src/main/java/org/apache/olingo/odata4/server/core/uri/parser/Parser.java
index df72c82..1094404 100644
--- a/odata4-lib/odata4-server-core/src/main/java/org/apache/olingo/odata4/server/core/uri/parser/Parser.java
+++ b/odata4-lib/odata4-server-core/src/main/java/org/apache/olingo/odata4/server/core/uri/parser/Parser.java
@@ -195,12 +195,6 @@ public class Parser {
             idOption.setText(option.value);
             idOption.setValue(option.value);
             context.contextUriInfo.setSystemQueryOption(idOption);
-          } else if (option.name.equals("$inlinecount")) {
-            CountOptionImpl inlineCountOption = new CountOptionImpl();
-            inlineCountOption.setName(option.name);
-            inlineCountOption.setText(option.value);
-            inlineCountOption.setValue(option.value.equals("true") ? true : false);
-            context.contextUriInfo.setSystemQueryOption(inlineCountOption);
           } else if (option.name.equals("$orderby")) {
             OrderByEOFContext ctxFilterExpression =
                 (OrderByEOFContext) parseRule(option.value, ParserEntryRules.Orderby);
@@ -244,19 +238,7 @@ public class Parser {
             inlineCountOption.setText(option.value);
             inlineCountOption.setValue(option.value.equals("true") ? true : false);
             context.contextUriInfo.setSystemQueryOption(inlineCountOption);
-          } else if (option.name.equals("$level")) {
-            LevelsOptionImpl inlineCountOption = new LevelsOptionImpl();
-            inlineCountOption.setName(option.name);
-            inlineCountOption.setText(option.value);
-            if (option.value.equals("max")) {
-              inlineCountOption.setMax();
-            } else {
-              inlineCountOption.setValue(Integer.parseInt(option.value));
-            }
-
-            context.contextUriInfo.setSystemQueryOption(inlineCountOption);
           }
-
         }
       }
 

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/217fe957/odata4-lib/odata4-server-core/src/main/java/org/apache/olingo/odata4/server/core/uri/parser/UriDecoder.java
----------------------------------------------------------------------
diff --git a/odata4-lib/odata4-server-core/src/main/java/org/apache/olingo/odata4/server/core/uri/parser/UriDecoder.java b/odata4-lib/odata4-server-core/src/main/java/org/apache/olingo/odata4/server/core/uri/parser/UriDecoder.java
index 2369961..84d51ec 100644
--- a/odata4-lib/odata4-server-core/src/main/java/org/apache/olingo/odata4/server/core/uri/parser/UriDecoder.java
+++ b/odata4-lib/odata4-server-core/src/main/java/org/apache/olingo/odata4/server/core/uri/parser/UriDecoder.java
@@ -96,10 +96,8 @@ public class UriDecoder {
   public static void splittPath(final RawUri rawUri, int scipSegments) {
     List<String> list = splitt(rawUri.path, '/');
 
-    if (list.size() > 0) {
-      if (list.get(0).length() == 0) {
-        scipSegments++;
-      }
+    if (list.get(0).length() == 0) {
+      scipSegments++;
     }
 
     if (scipSegments > 0) {
@@ -121,9 +119,9 @@ public class UriDecoder {
       start = end + 1;
     }
 
-    if (end == -1) {
-      list.add(input.substring(start));
-    }
+    
+    list.add(input.substring(start));
+    
 
     return list;
   }

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/217fe957/odata4-lib/odata4-server-core/src/main/java/org/apache/olingo/odata4/server/core/uri/parser/UriParseTreeVisitor.java
----------------------------------------------------------------------
diff --git a/odata4-lib/odata4-server-core/src/main/java/org/apache/olingo/odata4/server/core/uri/parser/UriParseTreeVisitor.java b/odata4-lib/odata4-server-core/src/main/java/org/apache/olingo/odata4/server/core/uri/parser/UriParseTreeVisitor.java
index f98e53b..a4eaeda 100644
--- a/odata4-lib/odata4-server-core/src/main/java/org/apache/olingo/odata4/server/core/uri/parser/UriParseTreeVisitor.java
+++ b/odata4-lib/odata4-server-core/src/main/java/org/apache/olingo/odata4/server/core/uri/parser/UriParseTreeVisitor.java
@@ -108,7 +108,6 @@ import org.apache.olingo.odata4.server.core.uri.antlr.UriParserParser.ExpandRefO
 import org.apache.olingo.odata4.server.core.uri.antlr.UriParserParser.FilterContext;
 import org.apache.olingo.odata4.server.core.uri.antlr.UriParserParser.FilterExpressionEOFContext;
 import org.apache.olingo.odata4.server.core.uri.antlr.UriParserParser.FloorMethodCallExprContext;
-import org.apache.olingo.odata4.server.core.uri.antlr.UriParserParser.FormatContext;
 import org.apache.olingo.odata4.server.core.uri.antlr.UriParserParser.FractionalsecondsMethodCallExprContext;
 import org.apache.olingo.odata4.server.core.uri.antlr.UriParserParser.GeoDistanceMethodCallExprContext;
 import org.apache.olingo.odata4.server.core.uri.antlr.UriParserParser.GeoIntersectsMethodCallExprContext;
@@ -189,22 +188,16 @@ import org.apache.olingo.odata4.server.core.uri.queryoption.expression.TypeLiter
 /**
  * UriVisitor
  * 
- * Converts the URI parse tree from the generate URI parser into an internal representation
- * which maybe (TODO) given to the application.
- * While converting the tree is validated against the EDM.
+ * Converts the URI parse tree the generated by ANTLR into an internal representation
+ * which maybe is given to the application.
+ * While converting the tree is only validated against the EDM if necessary.
  * 
  * Attention:
- * <li> This UriVisitor is at some point more lax than the original ABNF:
+ * <li> This UriVisitor is at somes point more lax than the original ABNF
  * <li> It is more tolerable against additional white spaces
- * - Whenever it is possible to move edm validation to the AST classes then
- * this should be done ( see visit {@link #visitSelectSegment} for example)
- * 
- * Not supported
- * <li>Parsing the context of $metadata
- * 
- * TODO planned
- * <li>Overview testcases
- * <li>search
+ * Currently not supported
+ * <li>Parsing the context of $metadata</li>
+ * <li>Parsing $search</li>
  */
 public class UriParseTreeVisitor extends UriParserBaseVisitor<Object> {
 
@@ -218,7 +211,6 @@ public class UriParseTreeVisitor extends UriParserBaseVisitor<Object> {
     }
 
     public TypeInformation() {
-      // TODO Auto-generated constructor stub
     }
   }
 
@@ -228,14 +220,6 @@ public class UriParseTreeVisitor extends UriParserBaseVisitor<Object> {
 
   // --- class ---
 
-  public void setContext(final UriContext context) {
-    this.context = context;
-  }
-
-  public UriInfoImpl getUriInfo() {
-    return context.contextUriInfo;
-  }
-
   public UriParseTreeVisitor(final Edm edm, final UriContext context) {
     this.edm = edm;
     this.context = context;
@@ -642,15 +626,6 @@ public class UriParseTreeVisitor extends UriParserBaseVisitor<Object> {
   }
 
   @Override
-  public Object visitAliasAndValue(final AliasAndValueContext ctx) {
-    AliasQueryOptionImpl alias = new AliasQueryOptionImpl();
-    alias.setName(ctx.vODI.getText());
-    alias.setText(ctx.vV.getText());
-    alias.setAliasValue((ExpressionImpl) ctx.vV.accept(this));
-    return alias;
-  }
-
-  @Override
   public Object visitAllEOF(final AllEOFContext ctx) {
     UriInfoImpl crossJoin = new UriInfoImpl().setKind(UriInfoKind.all);
     context.contextUriInfo = crossJoin;
@@ -1011,7 +986,7 @@ public class UriParseTreeVisitor extends UriParserBaseVisitor<Object> {
         if (type instanceof EdmEntityType) {
           context.contextUriInfo.addResourcePart(new UriResourceRefImpl());
         } else {
-          throw wrap(new UriParserSemanticException("$ref only allowd on endity types"));
+          throw wrap(new UriParserSemanticException("$ref only allowed on endity types"));
         }
       } else {
         throw wrap(new UriParserSemanticException("$ref only allowed on typed properties"));
@@ -1122,7 +1097,6 @@ public class UriParseTreeVisitor extends UriParserBaseVisitor<Object> {
         levels.setText(ctx.vM.getText());
         expandItem.setSystemQueryOption(levels);
       } else if (ctx.vL != null) {
-        // TODO set value as integer
         LevelsOptionImpl levels = new LevelsOptionImpl();
         String text = ctx.vL.getText();
         levels.setText(text);
@@ -1256,35 +1230,6 @@ public class UriParseTreeVisitor extends UriParserBaseVisitor<Object> {
   }
 
   @Override
-  public Object visitFormat(final FormatContext ctx) {
-    FormatOptionImpl format = new FormatOptionImpl();
-
-    TerminalNodeImpl c2 = (TerminalNodeImpl) ctx.children.get(2);
-    if (c2.symbol.getType() == UriLexer.ATOM) {
-      format.setFormat("atom");
-    } else if (c2.symbol.getType() == UriLexer.JSON) {
-      format.setFormat("json");
-    } else if (c2.symbol.getType() == UriLexer.XML) {
-      format.setFormat("xml");
-    } else if (c2.symbol.getType() == UriLexer.PCHARS) {
-      if (ctx.getChildCount() == 2) {
-        format.setFormat(c2.getText());
-      } else {
-        format.setFormat(c2.getText() + "/" + ctx.children.get(4).getText());
-      }
-    }
-    String text = ctx.children.get(2).getText();
-    if (ctx.getChildCount() > 4) {
-      text += ctx.children.get(3).getText();
-      text += ctx.children.get(4).getText();
-    }
-
-    format.setText(text);
-
-    return format;
-  }
-
-  @Override
   public ExpressionImpl visitFractionalsecondsMethodCallExpr(final FractionalsecondsMethodCallExprContext ctx) {
     return new MethodCallImpl()
         .setMethod(MethodCallKind.FRACTIONALSECONDS)
@@ -1365,9 +1310,11 @@ public class UriParseTreeVisitor extends UriParserBaseVisitor<Object> {
 
     if (text.equals("max")) {
       levels.setMax();
+    } else    {
+      levels.setValue(Integer.parseInt(text));
     }
     levels.setText(text);
-    // TODO set value as integer
+    
 
     return levels;
 
@@ -2036,7 +1983,6 @@ public class UriParseTreeVisitor extends UriParserBaseVisitor<Object> {
 
       // check for action
       EdmAction action = edm.getAction(fullName, finalTypeName, null);
-      // TODO verify that null ignores if it is a collection
 
       if (action != null) {
         UriResourceActionImpl uriAction = new UriResourceActionImpl();
@@ -2048,7 +1994,6 @@ public class UriParseTreeVisitor extends UriParserBaseVisitor<Object> {
 
       // check for function
       EdmFunction function = edm.getFunction(fullName, finalTypeName, null, null);
-      // TODO verify that null ignores if it is a collection
 
       if (function != null) {
         UriResourceFunctionImpl uriFunction = new UriResourceFunctionImpl();
@@ -2153,11 +2098,6 @@ public class UriParseTreeVisitor extends UriParserBaseVisitor<Object> {
         .addParameter((ExpressionImpl) ctx.vE1.accept(this));
   }
 
-  @Override
-  public Object visitUnary(final UnaryContext ctx) {
-    // TODO implement
-    return super.visitUnary(ctx);
-  }
 
   @Override
   public ExpressionImpl visitYearMethodCallExpr(final YearMethodCallExprContext ctx) {

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/217fe957/odata4-lib/odata4-server-core/src/main/java/org/apache/olingo/odata4/server/core/uri/parser/UriParserException.java
----------------------------------------------------------------------
diff --git a/odata4-lib/odata4-server-core/src/main/java/org/apache/olingo/odata4/server/core/uri/parser/UriParserException.java b/odata4-lib/odata4-server-core/src/main/java/org/apache/olingo/odata4/server/core/uri/parser/UriParserException.java
index 7c2a8ea..db42556 100644
--- a/odata4-lib/odata4-server-core/src/main/java/org/apache/olingo/odata4/server/core/uri/parser/UriParserException.java
+++ b/odata4-lib/odata4-server-core/src/main/java/org/apache/olingo/odata4/server/core/uri/parser/UriParserException.java
@@ -18,7 +18,6 @@
  ******************************************************************************/
 package org.apache.olingo.odata4.server.core.uri.parser;
 
-//TODO Check name of this exception when implementing proper error handling
 public class UriParserException extends Exception {
   /**
    * 

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/217fe957/odata4-lib/odata4-server-core/src/main/java/org/apache/olingo/odata4/server/core/uri/parser/UriParserSemanticException.java
----------------------------------------------------------------------
diff --git a/odata4-lib/odata4-server-core/src/main/java/org/apache/olingo/odata4/server/core/uri/parser/UriParserSemanticException.java b/odata4-lib/odata4-server-core/src/main/java/org/apache/olingo/odata4/server/core/uri/parser/UriParserSemanticException.java
index 4e13b93..2f8f1d6 100644
--- a/odata4-lib/odata4-server-core/src/main/java/org/apache/olingo/odata4/server/core/uri/parser/UriParserSemanticException.java
+++ b/odata4-lib/odata4-server-core/src/main/java/org/apache/olingo/odata4/server/core/uri/parser/UriParserSemanticException.java
@@ -18,12 +18,8 @@
  ******************************************************************************/
 package org.apache.olingo.odata4.server.core.uri.parser;
 
-//TODO Check name of this exception when implementing proper error handling
 public class UriParserSemanticException extends UriParserException {
 
-  /**
-   * 
-   */
   private static final long serialVersionUID = 1L;
 
   public UriParserSemanticException(final String message, final Throwable cause) {

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/217fe957/odata4-lib/odata4-server-core/src/main/java/org/apache/olingo/odata4/server/core/uri/queryoption/CountOptionImpl.java
----------------------------------------------------------------------
diff --git a/odata4-lib/odata4-server-core/src/main/java/org/apache/olingo/odata4/server/core/uri/queryoption/CountOptionImpl.java b/odata4-lib/odata4-server-core/src/main/java/org/apache/olingo/odata4/server/core/uri/queryoption/CountOptionImpl.java
index a9a2fe0..7975dcc 100644
--- a/odata4-lib/odata4-server-core/src/main/java/org/apache/olingo/odata4/server/core/uri/queryoption/CountOptionImpl.java
+++ b/odata4-lib/odata4-server-core/src/main/java/org/apache/olingo/odata4/server/core/uri/queryoption/CountOptionImpl.java
@@ -26,7 +26,7 @@ public class CountOptionImpl extends SystemQueryOptionImpl implements CountOptio
   private boolean count;
 
   public CountOptionImpl() {
-    setKind(SupportedQueryOptions.INLINECOUNT);
+    setKind(SupportedQueryOptions.COUNT);
   }
 
   @Override

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/217fe957/odata4-lib/odata4-server-core/src/main/java/org/apache/olingo/odata4/server/core/uri/queryoption/ExpandItemImpl.java
----------------------------------------------------------------------
diff --git a/odata4-lib/odata4-server-core/src/main/java/org/apache/olingo/odata4/server/core/uri/queryoption/ExpandItemImpl.java b/odata4-lib/odata4-server-core/src/main/java/org/apache/olingo/odata4/server/core/uri/queryoption/ExpandItemImpl.java
index 1c30657..f26d900 100644
--- a/odata4-lib/odata4-server-core/src/main/java/org/apache/olingo/odata4/server/core/uri/queryoption/ExpandItemImpl.java
+++ b/odata4-lib/odata4-server-core/src/main/java/org/apache/olingo/odata4/server/core/uri/queryoption/ExpandItemImpl.java
@@ -60,7 +60,7 @@ public class ExpandItemImpl implements ExpandItem {
       expandOption = (ExpandOptionImpl) sysItem;
     } else if (sysItem.getKind() == SupportedQueryOptions.FILTER) {
       filterOption = (FilterOptionImpl) sysItem;
-    } else if (sysItem.getKind() == SupportedQueryOptions.INLINECOUNT) {
+    } else if (sysItem.getKind() == SupportedQueryOptions.COUNT) {
       inlineCountOption = (CountOptionImpl) sysItem;
     } else if (sysItem.getKind() == SupportedQueryOptions.ORDERBY) {
       orderByOption = (OrderByOptionImpl) sysItem;

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/217fe957/odata4-lib/odata4-server-core/src/main/java/org/apache/olingo/odata4/server/core/uri/queryoption/SearchOptionImpl.java
----------------------------------------------------------------------
diff --git a/odata4-lib/odata4-server-core/src/main/java/org/apache/olingo/odata4/server/core/uri/queryoption/SearchOptionImpl.java b/odata4-lib/odata4-server-core/src/main/java/org/apache/olingo/odata4/server/core/uri/queryoption/SearchOptionImpl.java
index c7320bd..397d77e 100644
--- a/odata4-lib/odata4-server-core/src/main/java/org/apache/olingo/odata4/server/core/uri/queryoption/SearchOptionImpl.java
+++ b/odata4-lib/odata4-server-core/src/main/java/org/apache/olingo/odata4/server/core/uri/queryoption/SearchOptionImpl.java
@@ -23,7 +23,7 @@ import org.apache.olingo.odata4.server.api.uri.queryoption.SearchOption;
 import org.apache.olingo.odata4.server.api.uri.queryoption.SupportedQueryOptions;
 import org.apache.olingo.odata4.server.api.uri.queryoption.search.SearchExpression;
 
-// TODO $search is not supported yet
+// TODO planned: support $search 
 public class SearchOptionImpl extends SystemQueryOptionImpl implements SearchOption {
 
   public SearchOptionImpl() {
@@ -32,7 +32,6 @@ public class SearchOptionImpl extends SystemQueryOptionImpl implements SearchOpt
 
   @Override
   public SearchExpression getSearchExpression() {
-    // TODO $search is not supported yet
     return null;
   }
 

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/217fe957/odata4-lib/odata4-server-core/src/test/java/org/apache/olingo/odata4/server/core/uri/RawUriTest.java
----------------------------------------------------------------------
diff --git a/odata4-lib/odata4-server-core/src/test/java/org/apache/olingo/odata4/server/core/uri/RawUriTest.java b/odata4-lib/odata4-server-core/src/test/java/org/apache/olingo/odata4/server/core/uri/RawUriTest.java
index 4333a06..a9405e0 100644
--- a/odata4-lib/odata4-server-core/src/test/java/org/apache/olingo/odata4/server/core/uri/RawUriTest.java
+++ b/odata4-lib/odata4-server-core/src/test/java/org/apache/olingo/odata4/server/core/uri/RawUriTest.java
@@ -124,16 +124,17 @@ public class RawUriTest {
     checkPath(rawUri, "nonServiceSegment/entitySet", Arrays.asList("entitySet"));
   }
 
-  /*
-   * @Test
-   * public void testSplitt() {
-   * UriRawParser.splitt("", '/');
-   * UriRawParser.splitt("a", '/');
-   * UriRawParser.splitt("a/", '/');
-   * UriRawParser.splitt("/a", '/');
-   * UriRawParser.splitt("a/a", '/');
-   * }
-   */
+  
+    @Test
+    public void testSplitt() {
+    UriDecoder.splitt("", '/');
+    UriDecoder.splitt("/", '/');
+    UriDecoder.splitt("a", '/');
+    UriDecoder.splitt("a/", '/');
+    UriDecoder.splitt("/a", '/');
+    UriDecoder.splitt("a/a", '/');
+    }
+   
 
   private void checkPath(final RawUri rawUri, final String path, final List<String> list) {
     assertEquals(path, rawUri.path);

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/217fe957/odata4-lib/odata4-server-core/src/test/java/org/apache/olingo/odata4/server/core/uri/UriParameterImplTest.java
----------------------------------------------------------------------
diff --git a/odata4-lib/odata4-server-core/src/test/java/org/apache/olingo/odata4/server/core/uri/UriParameterImplTest.java b/odata4-lib/odata4-server-core/src/test/java/org/apache/olingo/odata4/server/core/uri/UriParameterImplTest.java
deleted file mode 100644
index 1462ab9..0000000
--- a/odata4-lib/odata4-server-core/src/test/java/org/apache/olingo/odata4/server/core/uri/UriParameterImplTest.java
+++ /dev/null
@@ -1,502 +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.odata4.server.core.uri;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
-import org.apache.olingo.odata4.commons.api.edm.Edm;
-import org.apache.olingo.odata4.commons.api.edm.EdmAction;
-import org.apache.olingo.odata4.commons.api.edm.EdmActionImport;
-import org.apache.olingo.odata4.commons.api.edm.EdmEntityType;
-import org.apache.olingo.odata4.commons.api.edm.EdmFunction;
-import org.apache.olingo.odata4.commons.api.edm.EdmFunctionImport;
-import org.apache.olingo.odata4.commons.api.edm.EdmNavigationProperty;
-import org.apache.olingo.odata4.commons.api.edm.EdmProperty;
-import org.apache.olingo.odata4.commons.api.edm.EdmType;
-import org.apache.olingo.odata4.commons.core.edm.primitivetype.EdmPrimitiveTypeKind;
-import org.apache.olingo.odata4.server.api.uri.UriResourceKind;
-import org.apache.olingo.odata4.server.core.edm.provider.EdmComplexTypeImpl;
-import org.apache.olingo.odata4.server.core.edm.provider.EdmEntitySetImpl;
-import org.apache.olingo.odata4.server.core.edm.provider.EdmProviderImpl;
-import org.apache.olingo.odata4.server.core.edm.provider.EdmSingletonImpl;
-import org.apache.olingo.odata4.server.core.testutil.EdmTechProvider;
-import org.apache.olingo.odata4.server.core.testutil.EdmTechTestProvider;
-import org.apache.olingo.odata4.server.core.uri.queryoption.expression.ExpressionImpl;
-import org.apache.olingo.odata4.server.core.uri.queryoption.expression.LiteralImpl;
-import org.junit.Test;
-
-public class UriParameterImplTest {
-  Edm edm = new EdmProviderImpl(new EdmTechTestProvider());
-
-  @Test
-  public void testUriParameterImpl() {
-    UriParameterImpl impl = new UriParameterImpl();
-    ExpressionImpl expression = new LiteralImpl().setText("Expression");
-
-    impl.setText("Text");
-    impl.setName("A");
-    impl.setAlias("@A");
-    impl.setExpression(expression);
-
-    assertEquals("Text", impl.getText());
-    assertEquals("A", impl.getName());
-    assertEquals("@A", impl.getAlias());
-    assertEquals(expression, impl.getExression());
-  }
-
-  @Test
-  public void testUriResourceActionImpl() {
-    UriResourceActionImpl impl = new UriResourceActionImpl();
-    assertEquals(UriResourceKind.action, impl.getKind());
-    assertEquals("", impl.toString());
-
-    // action
-    EdmAction action = edm.getAction(EdmTechProvider.nameUARTETParam, null, null);
-    impl.setAction(action);
-    assertEquals(action, impl.getAction());
-    assertEquals(EdmTechProvider.nameUARTETParam.getName(), impl.toString());
-
-    // action import
-    impl = new UriResourceActionImpl();
-    EdmActionImport actionImport = edm.getEntityContainer(null).getActionImport("AIRTPrimParam");
-    impl.setActionImport(actionImport);
-    assertEquals(actionImport, impl.getActionImport());
-    assertEquals(actionImport.getAction(), impl.getAction());
-    assertEquals(false, impl.isCollection());
-    assertEquals("AIRTPrimParam", impl.toString());
-    assertEquals(actionImport.getAction().getReturnType().getType(), impl.getType());
-  }
-
-  @Test
-  public void testUriResourceLambdaAllImpl() {
-    UriResourceLambdaAllImpl impl = new UriResourceLambdaAllImpl();
-    assertEquals(UriResourceKind.lambdaAll, impl.getKind());
-
-    ExpressionImpl expression = new LiteralImpl().setText("Expression");
-    impl.setExpression(expression);
-    impl.setLamdaVariable("A");
-
-    assertEquals(false, impl.isCollection());
-    assertEquals(expression, impl.getExpression());
-    assertEquals("A", impl.getLamdaVariable());
-    assertEquals(EdmPrimitiveTypeKind.Boolean.getEdmPrimitiveTypeInstance(), impl.getType());
-    assertEquals("all", impl.toString());
-  }
-
-  @Test
-  public void testUriResourceLambdaAnyImpl() {
-    UriResourceLambdaAnyImpl impl = new UriResourceLambdaAnyImpl();
-    assertEquals(UriResourceKind.lambdaAny, impl.getKind());
-
-    ExpressionImpl expression = new LiteralImpl().setText("Expression");
-    impl.setExpression(expression);
-    impl.setLamdaVariable("A");
-
-    assertEquals(false, impl.isCollection());
-    assertEquals(expression, impl.getExpression());
-    assertEquals("A", impl.getLamdaVariable());
-    assertEquals(EdmPrimitiveTypeKind.Boolean.getEdmPrimitiveTypeInstance(), impl.getType());
-    assertEquals("any", impl.toString());
-  }
-
-  @Test
-  public void testUriResourceComplexPropertyImpl() {
-    UriResourceComplexPropertyImpl impl = new UriResourceComplexPropertyImpl();
-    assertEquals(UriResourceKind.complexProperty, impl.getKind());
-
-    EdmEntityType entityType = edm.getEntityType(EdmTechProvider.nameETKeyNav);
-    EdmProperty property = (EdmProperty) entityType.getProperty("PropertyComplex");
-    impl.setProperty(property);
-
-    assertEquals(property, impl.getProperty());
-    assertEquals(property.getName(), impl.toString());
-    assertEquals(false, impl.isCollection());
-    assertEquals(property.getType(), impl.getType());
-    assertEquals(property.getType(), impl.getComplexType());
-    impl.getComplexType();
-
-    EdmComplexTypeImpl complexTypeImplType =
-        (EdmComplexTypeImpl) edm.getComplexType(EdmTechProvider.nameCTBasePrimCompNav);
-
-    impl.setTypeFilter(complexTypeImplType);
-    assertEquals(complexTypeImplType, impl.getTypeFilter());
-    assertEquals(complexTypeImplType, impl.getComplexTypeFilter());
-    impl.getComplexTypeFilter();
-
-  }
-
-  @Test
-  public void testUriResourcePrimitivePropertyImpl() {
-    UriResourcePrimitivePropertyImpl impl = new UriResourcePrimitivePropertyImpl();
-    assertEquals(UriResourceKind.primitiveProperty, impl.getKind());
-
-    EdmEntityType entityType = edm.getEntityType(EdmTechProvider.nameETKeyNav);
-    EdmProperty property = (EdmProperty) entityType.getProperty("PropertyInt16");
-    impl.setProperty(property);
-
-    assertEquals(property, impl.getProperty());
-    assertEquals(property.getName(), impl.toString());
-    assertEquals(false, impl.isCollection());
-    assertEquals(property.getType(), impl.getType());
-  }
-
-  @Test
-  public void testUriResourceCountImpl() {
-    UriResourceCountImpl impl = new UriResourceCountImpl();
-    assertEquals(UriResourceKind.count, impl.getKind());
-    assertEquals("$count", impl.toString());
-  }
-
-  @Test
-  public void testUriResourceEntitySetImpl() {
-    UriResourceEntitySetImpl impl = new UriResourceEntitySetImpl();
-    assertEquals(UriResourceKind.entitySet, impl.getKind());
-
-    EdmEntitySetImpl entitySet = (EdmEntitySetImpl) edm.getEntityContainer(null).getEntitySet("ESAllPrim");
-    impl.setEntitSet(entitySet);
-
-    assertEquals("ESAllPrim", impl.toString());
-    assertEquals(entitySet, impl.getEntitySet());
-
-    assertEquals(entitySet.getEntityType(), impl.getType());
-    assertEquals(entitySet.getEntityType(), impl.getEntityType());
-    impl.getEntityType();
-
-    // is Collection
-    assertEquals(true, impl.isCollection());
-    impl.setKeyPredicates(new ArrayList<UriParameterImpl>());
-    assertEquals(false, impl.isCollection());
-  }
-
-  @Test
-  public void testUriResourceFunctionImpl() {
-    UriResourceFunctionImpl impl = new UriResourceFunctionImpl();
-    assertEquals(UriResourceKind.function, impl.getKind());
-    assertEquals("", impl.toString());
-
-    // function
-    EdmFunction function = (EdmFunction) edm.getEntityContainer(null).getFunctionImport("FINRTInt16")
-        .getFunction(new ArrayList<String>());
-    assertNotNull(function);
-    impl.setFunction(function);
-
-    assertEquals(function, impl.getFunction());
-    assertEquals("UFNRTInt16", impl.toString());
-    assertEquals(function.getReturnType().getType(), impl.getType());
-
-    // function import
-    impl = new UriResourceFunctionImpl();
-    EdmFunctionImport functionImport = edm.getEntityContainer(null).getFunctionImport("FINRTInt16");
-    impl.setFunctionImport(functionImport, new ArrayList<UriParameterImpl>());
-    assertEquals(functionImport, impl.getFunctionImport());
-    assertEquals("FINRTInt16", impl.toString());
-
-    // function collection
-    impl = new UriResourceFunctionImpl();
-    functionImport = edm.getEntityContainer(null).getFunctionImport("FICRTESTwoKeyNavParam");
-    assertNotNull(function);
-    UriParameterImpl parameter = new UriParameterImpl().setName("ParameterInt16");
-    impl.setFunctionImport(functionImport, Arrays.asList(parameter));
-    assertEquals("FICRTESTwoKeyNavParam", impl.toString());
-
-    impl.setFunction(functionImport.getFunction(Arrays.asList("ParameterInt16")));
-    assertEquals(true, impl.isCollection());
-    impl.setKeyPredicates(new ArrayList<UriParameterImpl>());
-    assertEquals(false, impl.isCollection());
-
-    assertEquals(parameter, impl.getParameters().get(0));
-  }
-
-  @Test
-  public void testUriResourceImplKeyPred() {
-    class Mock extends UriResourceWithKeysImpl {
-      EdmType type;
-
-      public Mock() {
-        super(UriResourceKind.action);
-      }
-
-      @Override
-      public EdmType getType() {
-        return type;
-      }
-
-      public Mock setType(final EdmType type) {
-        this.type = type;
-        return this;
-      }
-
-      @Override
-      public boolean isCollection() {
-        return false;
-      }
-
-      @Override
-      public String toString() {
-        return "mock";
-      }
-    }
-
-    Mock impl = new Mock();
-    EdmEntityType entityType = edm.getEntityType(EdmTechProvider.nameETTwoKeyNav);
-    EdmEntityType entityTypeBaseColl = edm.getEntityType(EdmTechProvider.nameETBaseTwoKeyNav);
-    EdmEntityType entityTypeBaseEntry = edm.getEntityType(EdmTechProvider.nameETTwoBaseTwoKeyNav);
-
-    impl.setType(entityType);
-    assertEquals(entityType, impl.getType());
-    assertEquals("mock", impl.toString(false));
-    assertEquals("mock", impl.toString(true));
-
-    // set both
-    impl.setCollectionTypeFilter(entityTypeBaseColl);
-    assertEquals(entityTypeBaseColl, impl.getTypeFilterOnCollection());
-    assertEquals("mock", impl.toString(false));
-    assertEquals("mock/com.sap.odata.test1.ETBaseTwoKeyNav", impl.toString(true));
-    impl.setEntryTypeFilter(entityTypeBaseEntry);
-    assertEquals(entityTypeBaseEntry, impl.getTypeFilterOnEntry());
-    assertEquals("mock", impl.toString(false));
-    assertEquals("mock/com.sap.odata.test1.ETBaseTwoKeyNav/()com.sap.odata.test1.ETTwoBaseTwoKeyNav",
-        impl.toString(true));
-
-    // set entry
-    impl = new Mock();
-    impl.setType(entityType);
-    impl.setEntryTypeFilter(entityTypeBaseEntry);
-    assertEquals(entityTypeBaseEntry, impl.getTypeFilterOnEntry());
-    assertEquals("mock", impl.toString(false));
-    assertEquals("mock/com.sap.odata.test1.ETTwoBaseTwoKeyNav", impl.toString(true));
-
-    // set collection
-    impl = new Mock();
-    impl.setType(entityType);
-    impl.setCollectionTypeFilter(entityTypeBaseColl);
-    assertEquals(entityTypeBaseColl, impl.getTypeFilterOnCollection());
-    assertEquals("mock", impl.toString(false));
-    assertEquals("mock/com.sap.odata.test1.ETBaseTwoKeyNav", impl.toString(true));
-
-    impl = new Mock();
-    UriParameterImpl parameter = new UriParameterImpl().setName("ParameterInt16");
-    List<UriParameterImpl> keyPredicates = new ArrayList<UriParameterImpl>();
-    keyPredicates.add(parameter);
-
-    impl.setKeyPredicates(keyPredicates);
-    assertNotNull(null, impl.getKeyPredicates());
-
-  }
-
-  @Test
-  public void testUriResourceImplTyped() {
-    class Mock extends UriResourceTypedImpl {
-      EdmType type;
-
-      public Mock() {
-        super(UriResourceKind.action);
-      }
-
-      @Override
-      public EdmType getType() {
-        return type;
-      }
-
-      @Override
-      public boolean isCollection() {
-        return false;
-      }
-
-      public Mock setType(final EdmType type) {
-        this.type = type;
-        return this;
-      }
-
-      @Override
-      public String toString() {
-        return "mock";
-      }
-
-    }
-
-    Mock impl = new Mock();
-    EdmEntityType entityType = edm.getEntityType(EdmTechProvider.nameETTwoKeyNav);
-    EdmEntityType entityTypeBaseColl = edm.getEntityType(EdmTechProvider.nameETBaseTwoKeyNav);
-    edm.getEntityType(EdmTechProvider.nameETTwoBaseTwoKeyNav);
-
-    impl.setType(entityType);
-    assertEquals("mock", impl.toString());
-    assertEquals("mock", impl.toString(true));
-    assertEquals("mock", impl.toString(false));
-
-    impl.setTypeFilter(entityTypeBaseColl);
-    assertEquals(entityTypeBaseColl, impl.getTypeFilter());
-    assertEquals("mock", impl.toString());
-    assertEquals("mock/com.sap.odata.test1.ETBaseTwoKeyNav", impl.toString(true));
-    assertEquals("mock", impl.toString(false));
-    //
-  }
-
-  @Test
-  public void testUriResourceItImpl() {
-    UriResourceItImpl impl = new UriResourceItImpl();
-    assertEquals(UriResourceKind.it, impl.getKind());
-
-    EdmEntityType entityType = edm.getEntityType(EdmTechProvider.nameETTwoKeyNav);
-    assertEquals("$it", impl.toString());
-
-    impl.setType(entityType);
-    assertEquals(entityType, impl.getType());
-
-    UriParameterImpl parameter = new UriParameterImpl().setName("ParameterInt16");
-    List<UriParameterImpl> keyPredicates = new ArrayList<UriParameterImpl>();
-    keyPredicates.add(parameter);
-
-    assertEquals(false, impl.isCollection());
-    impl.setCollection(true);
-    assertEquals(true, impl.isCollection());
-    impl.setKeyPredicates(keyPredicates);
-    assertEquals(false, impl.isCollection());
-  }
-
-  @Test
-  public void testUriResourceNavigationPropertyImpl() {
-    UriResourceNavigationPropertyImpl impl = new UriResourceNavigationPropertyImpl();
-    assertEquals(UriResourceKind.navigationProperty, impl.getKind());
-
-    EdmEntityType entityType = edm.getEntityType(EdmTechProvider.nameETTwoKeyNav);
-    EdmNavigationProperty property = (EdmNavigationProperty) entityType.getProperty("NavPropertyETKeyNavMany");
-    assertNotNull(property);
-
-    impl.setNavigationProperty(property);
-    assertEquals(property, impl.getProperty());
-
-    assertEquals("NavPropertyETKeyNavMany", impl.toString());
-    assertEquals(property.getType(), impl.getType());
-
-    UriParameterImpl parameter = new UriParameterImpl().setName("ParameterInt16");
-    List<UriParameterImpl> keyPredicates = new ArrayList<UriParameterImpl>();
-    keyPredicates.add(parameter);
-
-    assertEquals(true, impl.isCollection());
-    impl.setKeyPredicates(keyPredicates);
-    assertEquals(false, impl.isCollection());
-  }
-
-  @Test
-  public void testUriResourceRefImpl() {
-    UriResourceRefImpl impl = new UriResourceRefImpl();
-    assertEquals(UriResourceKind.ref, impl.getKind());
-    assertEquals("$ref", impl.toString());
-  }
-
-  @Test
-  public void testUriResourceRootImpl() {
-    UriResourceRootImpl impl = new UriResourceRootImpl();
-    assertEquals(UriResourceKind.root, impl.getKind());
-
-    EdmEntityType entityType = edm.getEntityType(EdmTechProvider.nameETTwoKeyNav);
-    assertEquals("$root", impl.toString());
-
-    impl.setType(entityType);
-    assertEquals(entityType, impl.getType());
-
-    UriParameterImpl parameter = new UriParameterImpl().setName("ParameterInt16");
-    List<UriParameterImpl> keyPredicates = new ArrayList<UriParameterImpl>();
-    keyPredicates.add(parameter);
-
-    assertEquals(false, impl.isCollection());
-    impl.setCollection(true);
-    assertEquals(true, impl.isCollection());
-    impl.setKeyPredicates(keyPredicates);
-    assertEquals(false, impl.isCollection());
-  }
-
-  @Test
-  public void testUriResourceSingletonImpl() {
-    UriResourceSingletonImpl impl = new UriResourceSingletonImpl();
-    assertEquals(UriResourceKind.singleton, impl.getKind());
-
-    EdmSingletonImpl singleton = (EdmSingletonImpl) edm.getEntityContainer(null).getSingleton("SINav");
-    EdmEntityType entityTypeBaseColl = edm.getEntityType(EdmTechProvider.nameETBaseTwoKeyNav);
-    impl.setSingleton(singleton);
-
-    assertEquals("SINav", impl.toString());
-    assertEquals(singleton, impl.getSingleton());
-
-    assertEquals(singleton.getEntityType(), impl.getType());
-    assertEquals(singleton.getEntityType(), impl.getEntityType());
-    impl.getEntityType();
-
-    impl.setTypeFilter(entityTypeBaseColl);
-    assertEquals(entityTypeBaseColl, impl.getEntityTypeFilter());
-
-    // is Collection
-    assertEquals(false, impl.isCollection());
-  }
-
-  @Test
-  public void testUriResourceValueImpl() {
-    UriResourceValueImpl impl = new UriResourceValueImpl();
-    assertEquals(UriResourceKind.value, impl.getKind());
-    assertEquals("$value", impl.toString());
-  }
-
-  @Test
-  public void testUriResourceLambdaVarImpl() {
-    UriResourceLambdaVarImpl impl = new UriResourceLambdaVarImpl();
-    assertEquals(UriResourceKind.lambdaVariable, impl.getKind());
-
-    EdmEntityType entityType = edm.getEntityType(EdmTechProvider.nameETTwoKeyNav);
-    impl.setType(entityType);
-    impl.setVariableText("A");
-
-    assertEquals("A", impl.toString());
-    assertEquals(entityType, impl.getType());
-    assertEquals("A", impl.getVariableText());
-    assertEquals(false, impl.isCollection());
-    impl.setCollection(true);
-    assertEquals(true, impl.isCollection());
-  }
-
-  /*
-  @Test
-  public void testUriResourceStartingTypeFilterImpl() {
-    UriResourceStartingTypeFilterImpl impl = new UriResourceStartingTypeFilterImpl();
-    assertEquals(UriResourceKind.startingTypeFilter, impl.getKind());
-
-    EdmEntityType entityType = edm.getEntityType(EdmTechProvider.nameETTwoKeyNav);
-
-    impl.setType(entityType);
-    assertEquals("com.sap.odata.test1.ETTwoKeyNav", impl.toString());
-    assertEquals(entityType, impl.getType());
-
-    UriParameterImpl parameter = new UriParameterImpl().setName("ParameterInt16");
-    List<UriParameterImpl> keyPredicates = new ArrayList<UriParameterImpl>();
-    keyPredicates.add(parameter);
-
-    assertEquals(false, impl.isCollection());
-    impl.setCollection(true);
-    assertEquals(true, impl.isCollection());
-    impl.setKeyPredicates(keyPredicates);
-    assertEquals(false, impl.isCollection());
-
-  }*/
-}

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/217fe957/odata4-lib/odata4-server-core/src/test/java/org/apache/olingo/odata4/server/core/uri/UriResourceImplTest.java
----------------------------------------------------------------------
diff --git a/odata4-lib/odata4-server-core/src/test/java/org/apache/olingo/odata4/server/core/uri/UriResourceImplTest.java b/odata4-lib/odata4-server-core/src/test/java/org/apache/olingo/odata4/server/core/uri/UriResourceImplTest.java
new file mode 100644
index 0000000..c55488f
--- /dev/null
+++ b/odata4-lib/odata4-server-core/src/test/java/org/apache/olingo/odata4/server/core/uri/UriResourceImplTest.java
@@ -0,0 +1,505 @@
+/*******************************************************************************
+ * 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.odata4.server.core.uri;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import org.apache.olingo.odata4.commons.api.edm.Edm;
+import org.apache.olingo.odata4.commons.api.edm.EdmAction;
+import org.apache.olingo.odata4.commons.api.edm.EdmActionImport;
+import org.apache.olingo.odata4.commons.api.edm.EdmEntityType;
+import org.apache.olingo.odata4.commons.api.edm.EdmFunction;
+import org.apache.olingo.odata4.commons.api.edm.EdmFunctionImport;
+import org.apache.olingo.odata4.commons.api.edm.EdmNavigationProperty;
+import org.apache.olingo.odata4.commons.api.edm.EdmProperty;
+import org.apache.olingo.odata4.commons.api.edm.EdmType;
+import org.apache.olingo.odata4.commons.core.edm.primitivetype.EdmPrimitiveTypeKind;
+import org.apache.olingo.odata4.server.api.uri.UriResourceKind;
+import org.apache.olingo.odata4.server.core.edm.provider.EdmComplexTypeImpl;
+import org.apache.olingo.odata4.server.core.edm.provider.EdmEntitySetImpl;
+import org.apache.olingo.odata4.server.core.edm.provider.EdmProviderImpl;
+import org.apache.olingo.odata4.server.core.edm.provider.EdmSingletonImpl;
+import org.apache.olingo.odata4.server.core.testutil.EdmTechProvider;
+import org.apache.olingo.odata4.server.core.testutil.EdmTechTestProvider;
+import org.apache.olingo.odata4.server.core.uri.queryoption.expression.ExpressionImpl;
+import org.apache.olingo.odata4.server.core.uri.queryoption.expression.LiteralImpl;
+import org.junit.Test;
+
+public class UriResourceImplTest {
+  Edm edm = new EdmProviderImpl(new EdmTechTestProvider());
+
+  @Test
+  public void testUriParameterImpl() {
+    UriParameterImpl impl = new UriParameterImpl();
+    ExpressionImpl expression = new LiteralImpl().setText("Expression");
+
+    impl.setText("Text");
+    impl.setName("A");
+    impl.setAlias("@A");
+    impl.setExpression(expression);
+
+    assertEquals("Text", impl.getText());
+    assertEquals("A", impl.getName());
+    assertEquals("@A", impl.getAlias());
+    assertEquals(expression, impl.getExression());
+  }
+
+  @Test
+  public void testUriResourceActionImpl() {
+    UriResourceActionImpl impl = new UriResourceActionImpl();
+    assertEquals(UriResourceKind.action, impl.getKind());
+    assertEquals("", impl.toString());
+
+    // action
+    EdmAction action = edm.getAction(EdmTechProvider.nameUARTETParam, null, null);
+    impl.setAction(action);
+    assertEquals(action, impl.getAction());
+    assertEquals(EdmTechProvider.nameUARTETParam.getName(), impl.toString());
+
+    // action import
+    impl = new UriResourceActionImpl();
+    EdmActionImport actionImport = edm.getEntityContainer(null).getActionImport("AIRTPrimParam");
+    impl.setActionImport(actionImport);
+    assertEquals(actionImport, impl.getActionImport());
+    assertEquals(actionImport.getAction(), impl.getAction());
+    assertEquals(false, impl.isCollection());
+    assertEquals("AIRTPrimParam", impl.toString());
+    assertEquals(actionImport.getAction().getReturnType().getType(), impl.getType());
+  }
+
+  @Test
+  public void testUriResourceLambdaAllImpl() {
+    UriResourceLambdaAllImpl impl = new UriResourceLambdaAllImpl();
+    assertEquals(UriResourceKind.lambdaAll, impl.getKind());
+
+    ExpressionImpl expression = new LiteralImpl().setText("Expression");
+    impl.setExpression(expression);
+    impl.setLamdaVariable("A");
+
+    assertEquals(false, impl.isCollection());
+    assertEquals(expression, impl.getExpression());
+    assertEquals("A", impl.getLamdaVariable());
+    assertEquals(EdmPrimitiveTypeKind.Boolean.getEdmPrimitiveTypeInstance(), impl.getType());
+    assertEquals("all", impl.toString());
+  }
+
+  @Test
+  public void testUriResourceLambdaAnyImpl() {
+    UriResourceLambdaAnyImpl impl = new UriResourceLambdaAnyImpl();
+    assertEquals(UriResourceKind.lambdaAny, impl.getKind());
+
+    ExpressionImpl expression = new LiteralImpl().setText("Expression");
+    impl.setExpression(expression);
+    impl.setLamdaVariable("A");
+
+    assertEquals(false, impl.isCollection());
+    assertEquals(expression, impl.getExpression());
+    assertEquals("A", impl.getLamdaVariable());
+    assertEquals(EdmPrimitiveTypeKind.Boolean.getEdmPrimitiveTypeInstance(), impl.getType());
+    assertEquals("any", impl.toString());
+  }
+
+  @Test
+  public void testUriResourceComplexPropertyImpl() {
+    UriResourceComplexPropertyImpl impl = new UriResourceComplexPropertyImpl();
+    assertEquals(UriResourceKind.complexProperty, impl.getKind());
+
+    EdmEntityType entityType = edm.getEntityType(EdmTechProvider.nameETKeyNav);
+    EdmProperty property = (EdmProperty) entityType.getProperty("PropertyComplex");
+    impl.setProperty(property);
+
+    assertEquals(property, impl.getProperty());
+    assertEquals(property.getName(), impl.toString());
+    assertEquals(false, impl.isCollection());
+    assertEquals(property.getType(), impl.getType());
+    assertEquals(property.getType(), impl.getComplexType());
+    impl.getComplexType();
+
+    EdmComplexTypeImpl complexTypeImplType =
+        (EdmComplexTypeImpl) edm.getComplexType(EdmTechProvider.nameCTBasePrimCompNav);
+
+    impl.setTypeFilter(complexTypeImplType);
+    assertEquals(complexTypeImplType, impl.getTypeFilter());
+    assertEquals(complexTypeImplType, impl.getComplexTypeFilter());
+    impl.getComplexTypeFilter();
+
+  }
+
+  @Test
+  public void testUriResourcePrimitivePropertyImpl() {
+    UriResourcePrimitivePropertyImpl impl = new UriResourcePrimitivePropertyImpl();
+    assertEquals(UriResourceKind.primitiveProperty, impl.getKind());
+
+    EdmEntityType entityType = edm.getEntityType(EdmTechProvider.nameETKeyNav);
+    EdmProperty property = (EdmProperty) entityType.getProperty("PropertyInt16");
+    impl.setProperty(property);
+
+    assertEquals(property, impl.getProperty());
+    assertEquals(property.getName(), impl.toString());
+    assertEquals(false, impl.isCollection());
+    assertEquals(property.getType(), impl.getType());
+  }
+
+  @Test
+  public void testUriResourceCountImpl() {
+    UriResourceCountImpl impl = new UriResourceCountImpl();
+    assertEquals(UriResourceKind.count, impl.getKind());
+    assertEquals("$count", impl.toString());
+  }
+
+  @Test
+  public void testUriResourceEntitySetImpl() {
+    UriResourceEntitySetImpl impl = new UriResourceEntitySetImpl();
+    assertEquals(UriResourceKind.entitySet, impl.getKind());
+
+    EdmEntitySetImpl entitySet = (EdmEntitySetImpl) edm.getEntityContainer(null).getEntitySet("ESAllPrim");
+    impl.setEntitSet(entitySet);
+
+    assertEquals("ESAllPrim", impl.toString());
+    assertEquals(entitySet, impl.getEntitySet());
+
+    assertEquals(entitySet.getEntityType(), impl.getType());
+    assertEquals(entitySet.getEntityType(), impl.getEntityType());
+    impl.getEntityType();
+
+    // is Collection
+    assertEquals(true, impl.isCollection());
+    impl.setKeyPredicates(new ArrayList<UriParameterImpl>());
+    assertEquals(false, impl.isCollection());
+  }
+
+  @Test
+  public void testUriResourceFunctionImpl() {
+    UriResourceFunctionImpl impl = new UriResourceFunctionImpl();
+    assertEquals(UriResourceKind.function, impl.getKind());
+    assertEquals("", impl.toString());
+
+    // function
+    EdmFunction function = (EdmFunction) edm.getEntityContainer(null).getFunctionImport("FINRTInt16")
+        .getFunction(new ArrayList<String>());
+    assertNotNull(function);
+    impl.setFunction(function);
+    
+
+    assertEquals(function, impl.getFunction());
+    assertEquals("UFNRTInt16", impl.toString());
+    assertEquals(function.getReturnType().getType(), impl.getType());
+    assertEquals(false,impl.isParameterListFilled());
+
+    // function import
+    impl = new UriResourceFunctionImpl();
+    EdmFunctionImport functionImport = edm.getEntityContainer(null).getFunctionImport("FINRTInt16");
+    impl.setFunctionImport(functionImport, new ArrayList<UriParameterImpl>());
+    assertEquals(functionImport, impl.getFunctionImport());
+    assertEquals("FINRTInt16", impl.toString());
+
+    // function collection
+    impl = new UriResourceFunctionImpl();
+    functionImport = edm.getEntityContainer(null).getFunctionImport("FICRTESTwoKeyNavParam");
+    assertNotNull(function);
+    UriParameterImpl parameter = new UriParameterImpl().setName("ParameterInt16");
+    impl.setFunctionImport(functionImport, Arrays.asList(parameter));
+    assertEquals("FICRTESTwoKeyNavParam", impl.toString());
+
+    impl.setFunction(functionImport.getFunction(Arrays.asList("ParameterInt16")));
+    assertEquals(true, impl.isCollection());
+    impl.setKeyPredicates(new ArrayList<UriParameterImpl>());
+    assertEquals(false, impl.isCollection());
+
+    assertEquals(parameter, impl.getParameters().get(0));
+    assertEquals(true,impl.isParameterListFilled());
+  }
+
+  @Test
+  public void testUriResourceImplKeyPred() {
+    class Mock extends UriResourceWithKeysImpl {
+      EdmType type;
+
+      public Mock() {
+        super(UriResourceKind.action);
+      }
+
+      @Override
+      public EdmType getType() {
+        return type;
+      }
+
+      public Mock setType(final EdmType type) {
+        this.type = type;
+        return this;
+      }
+
+      @Override
+      public boolean isCollection() {
+        return false;
+      }
+
+      @Override
+      public String toString() {
+        return "mock";
+      }
+    }
+
+    Mock impl = new Mock();
+    EdmEntityType entityType = edm.getEntityType(EdmTechProvider.nameETTwoKeyNav);
+    EdmEntityType entityTypeBaseColl = edm.getEntityType(EdmTechProvider.nameETBaseTwoKeyNav);
+    EdmEntityType entityTypeBaseEntry = edm.getEntityType(EdmTechProvider.nameETTwoBaseTwoKeyNav);
+
+    impl.setType(entityType);
+    assertEquals(entityType, impl.getType());
+    assertEquals("mock", impl.toString(false));
+    assertEquals("mock", impl.toString(true));
+
+    // set both
+    impl.setCollectionTypeFilter(entityTypeBaseColl);
+    assertEquals(entityTypeBaseColl, impl.getTypeFilterOnCollection());
+    assertEquals("mock", impl.toString(false));
+    assertEquals("mock/com.sap.odata.test1.ETBaseTwoKeyNav", impl.toString(true));
+    impl.setEntryTypeFilter(entityTypeBaseEntry);
+    assertEquals(entityTypeBaseEntry, impl.getTypeFilterOnEntry());
+    assertEquals("mock", impl.toString(false));
+    assertEquals("mock/com.sap.odata.test1.ETBaseTwoKeyNav/()com.sap.odata.test1.ETTwoBaseTwoKeyNav",
+        impl.toString(true));
+
+    // set entry
+    impl = new Mock();
+    impl.setType(entityType);
+    impl.setEntryTypeFilter(entityTypeBaseEntry);
+    assertEquals(entityTypeBaseEntry, impl.getTypeFilterOnEntry());
+    assertEquals("mock", impl.toString(false));
+    assertEquals("mock/com.sap.odata.test1.ETTwoBaseTwoKeyNav", impl.toString(true));
+
+    // set collection
+    impl = new Mock();
+    impl.setType(entityType);
+    impl.setCollectionTypeFilter(entityTypeBaseColl);
+    assertEquals(entityTypeBaseColl, impl.getTypeFilterOnCollection());
+    assertEquals("mock", impl.toString(false));
+    assertEquals("mock/com.sap.odata.test1.ETBaseTwoKeyNav", impl.toString(true));
+
+    impl = new Mock();
+    UriParameterImpl parameter = new UriParameterImpl().setName("ParameterInt16");
+    List<UriParameterImpl> keyPredicates = new ArrayList<UriParameterImpl>();
+    keyPredicates.add(parameter);
+
+    impl.setKeyPredicates(keyPredicates);
+    assertNotNull(null, impl.getKeyPredicates());
+
+  }
+
+  @Test
+  public void testUriResourceImplTyped() {
+    class Mock extends UriResourceTypedImpl {
+      EdmType type;
+
+      public Mock() {
+        super(UriResourceKind.action);
+      }
+
+      @Override
+      public EdmType getType() {
+        return type;
+      }
+
+      @Override
+      public boolean isCollection() {
+        return false;
+      }
+
+      public Mock setType(final EdmType type) {
+        this.type = type;
+        return this;
+      }
+
+      @Override
+      public String toString() {
+        return "mock";
+      }
+
+    }
+
+    Mock impl = new Mock();
+    EdmEntityType entityType = edm.getEntityType(EdmTechProvider.nameETTwoKeyNav);
+    EdmEntityType entityTypeBaseColl = edm.getEntityType(EdmTechProvider.nameETBaseTwoKeyNav);
+    edm.getEntityType(EdmTechProvider.nameETTwoBaseTwoKeyNav);
+
+    impl.setType(entityType);
+    assertEquals("mock", impl.toString());
+    assertEquals("mock", impl.toString(true));
+    assertEquals("mock", impl.toString(false));
+
+    impl.setTypeFilter(entityTypeBaseColl);
+    assertEquals(entityTypeBaseColl, impl.getTypeFilter());
+    assertEquals("mock", impl.toString());
+    assertEquals("mock/com.sap.odata.test1.ETBaseTwoKeyNav", impl.toString(true));
+    assertEquals("mock", impl.toString(false));
+    //
+  }
+
+  @Test
+  public void testUriResourceItImpl() {
+    UriResourceItImpl impl = new UriResourceItImpl();
+    assertEquals(UriResourceKind.it, impl.getKind());
+
+    EdmEntityType entityType = edm.getEntityType(EdmTechProvider.nameETTwoKeyNav);
+    assertEquals("$it", impl.toString());
+
+    impl.setType(entityType);
+    assertEquals(entityType, impl.getType());
+
+    UriParameterImpl parameter = new UriParameterImpl().setName("ParameterInt16");
+    List<UriParameterImpl> keyPredicates = new ArrayList<UriParameterImpl>();
+    keyPredicates.add(parameter);
+
+    assertEquals(false, impl.isCollection());
+    impl.setCollection(true);
+    assertEquals(true, impl.isCollection());
+    impl.setKeyPredicates(keyPredicates);
+    assertEquals(false, impl.isCollection());
+  }
+
+  @Test
+  public void testUriResourceNavigationPropertyImpl() {
+    UriResourceNavigationPropertyImpl impl = new UriResourceNavigationPropertyImpl();
+    assertEquals(UriResourceKind.navigationProperty, impl.getKind());
+
+    EdmEntityType entityType = edm.getEntityType(EdmTechProvider.nameETTwoKeyNav);
+    EdmNavigationProperty property = (EdmNavigationProperty) entityType.getProperty("NavPropertyETKeyNavMany");
+    assertNotNull(property);
+
+    impl.setNavigationProperty(property);
+    assertEquals(property, impl.getProperty());
+
+    assertEquals("NavPropertyETKeyNavMany", impl.toString());
+    assertEquals(property.getType(), impl.getType());
+
+    UriParameterImpl parameter = new UriParameterImpl().setName("ParameterInt16");
+    List<UriParameterImpl> keyPredicates = new ArrayList<UriParameterImpl>();
+    keyPredicates.add(parameter);
+
+    assertEquals(true, impl.isCollection());
+    impl.setKeyPredicates(keyPredicates);
+    assertEquals(false, impl.isCollection());
+  }
+
+  @Test
+  public void testUriResourceRefImpl() {
+    UriResourceRefImpl impl = new UriResourceRefImpl();
+    assertEquals(UriResourceKind.ref, impl.getKind());
+    assertEquals("$ref", impl.toString());
+  }
+
+  @Test
+  public void testUriResourceRootImpl() {
+    UriResourceRootImpl impl = new UriResourceRootImpl();
+    assertEquals(UriResourceKind.root, impl.getKind());
+
+    EdmEntityType entityType = edm.getEntityType(EdmTechProvider.nameETTwoKeyNav);
+    assertEquals("$root", impl.toString());
+
+    impl.setType(entityType);
+    assertEquals(entityType, impl.getType());
+
+    UriParameterImpl parameter = new UriParameterImpl().setName("ParameterInt16");
+    List<UriParameterImpl> keyPredicates = new ArrayList<UriParameterImpl>();
+    keyPredicates.add(parameter);
+
+    assertEquals(false, impl.isCollection());
+    impl.setCollection(true);
+    assertEquals(true, impl.isCollection());
+    impl.setKeyPredicates(keyPredicates);
+    assertEquals(false, impl.isCollection());
+  }
+
+  @Test
+  public void testUriResourceSingletonImpl() {
+    UriResourceSingletonImpl impl = new UriResourceSingletonImpl();
+    assertEquals(UriResourceKind.singleton, impl.getKind());
+
+    EdmSingletonImpl singleton = (EdmSingletonImpl) edm.getEntityContainer(null).getSingleton("SINav");
+    EdmEntityType entityTypeBaseColl = edm.getEntityType(EdmTechProvider.nameETBaseTwoKeyNav);
+    impl.setSingleton(singleton);
+
+    assertEquals("SINav", impl.toString());
+    assertEquals(singleton, impl.getSingleton());
+
+    assertEquals(singleton.getEntityType(), impl.getType());
+    assertEquals(singleton.getEntityType(), impl.getEntityType());
+    impl.getEntityType();
+
+    impl.setTypeFilter(entityTypeBaseColl);
+    assertEquals(entityTypeBaseColl, impl.getEntityTypeFilter());
+
+    // is Collection
+    assertEquals(false, impl.isCollection());
+  }
+
+  @Test
+  public void testUriResourceValueImpl() {
+    UriResourceValueImpl impl = new UriResourceValueImpl();
+    assertEquals(UriResourceKind.value, impl.getKind());
+    assertEquals("$value", impl.toString());
+  }
+
+  @Test
+  public void testUriResourceLambdaVarImpl() {
+    UriResourceLambdaVarImpl impl = new UriResourceLambdaVarImpl();
+    assertEquals(UriResourceKind.lambdaVariable, impl.getKind());
+
+    EdmEntityType entityType = edm.getEntityType(EdmTechProvider.nameETTwoKeyNav);
+    impl.setType(entityType);
+    impl.setVariableText("A");
+
+    assertEquals("A", impl.toString());
+    assertEquals(entityType, impl.getType());
+    assertEquals("A", impl.getVariableText());
+    assertEquals(false, impl.isCollection());
+    impl.setCollection(true);
+    assertEquals(true, impl.isCollection());
+  }
+
+  
+  @Test
+  public void testUriResourceStartingTypeFilterImpl() {
+    UriResourceStartingTypeFilterImpl impl = new UriResourceStartingTypeFilterImpl();
+    assertEquals(UriResourceKind.startingTypeFilter, impl.getKind());
+
+    EdmEntityType entityType = edm.getEntityType(EdmTechProvider.nameETTwoKeyNav);
+
+    impl.setType(entityType);
+    assertEquals("com.sap.odata.test1.ETTwoKeyNav", impl.toString());
+    assertEquals(entityType, impl.getType());
+
+    UriParameterImpl parameter = new UriParameterImpl().setName("ParameterInt16");
+    List<UriParameterImpl> keyPredicates = new ArrayList<UriParameterImpl>();
+    keyPredicates.add(parameter);
+
+    assertEquals(false, impl.isCollection());
+    impl.setCollection(true);
+    assertEquals(true, impl.isCollection());
+    impl.setKeyPredicates(keyPredicates);
+    assertEquals(false, impl.isCollection());
+
+  }
+}

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/217fe957/odata4-lib/odata4-server-core/src/test/java/org/apache/olingo/odata4/server/core/uri/antlr/TestFullResourcePath.java
----------------------------------------------------------------------
diff --git a/odata4-lib/odata4-server-core/src/test/java/org/apache/olingo/odata4/server/core/uri/antlr/TestFullResourcePath.java b/odata4-lib/odata4-server-core/src/test/java/org/apache/olingo/odata4/server/core/uri/antlr/TestFullResourcePath.java
index ecbcaaf..1d4ee7b 100644
--- a/odata4-lib/odata4-server-core/src/test/java/org/apache/olingo/odata4/server/core/uri/antlr/TestFullResourcePath.java
+++ b/odata4-lib/odata4-server-core/src/test/java/org/apache/olingo/odata4/server/core/uri/antlr/TestFullResourcePath.java
@@ -18,17 +18,12 @@
  ******************************************************************************/
 package org.apache.olingo.odata4.server.core.uri.antlr;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.fail;
-
 import java.io.UnsupportedEncodingException;
 import java.net.URLEncoder;
 import java.util.Arrays;
 
 import org.apache.olingo.odata4.commons.api.ODataApplicationException;
 import org.apache.olingo.odata4.commons.api.edm.Edm;
-import org.apache.olingo.odata4.commons.api.edm.EdmType;
-import org.apache.olingo.odata4.commons.api.edm.FullQualifiedName;
 import org.apache.olingo.odata4.server.api.uri.UriInfoKind;
 import org.apache.olingo.odata4.server.api.uri.UriResourceKind;
 import org.apache.olingo.odata4.server.api.uri.queryoption.expression.BinaryOperatorKind;
@@ -38,7 +33,6 @@ import org.apache.olingo.odata4.server.core.edm.provider.EdmProviderImpl;
 import org.apache.olingo.odata4.server.core.testutil.EdmTechProvider;
 import org.apache.olingo.odata4.server.core.testutil.EdmTechTestProvider;
 import org.apache.olingo.odata4.server.core.uri.parser.UriParserException;
-import org.apache.olingo.odata4.server.core.uri.queryoption.expression.MemberImpl;
 import org.apache.olingo.odata4.server.core.uri.testutil.FilterValidator;
 import org.apache.olingo.odata4.server.core.uri.testutil.ResourceValidator;
 import org.apache.olingo.odata4.server.core.uri.testutil.UriValidator;
@@ -68,8 +62,7 @@ public class TestFullResourcePath {
     testUri.run("ESTwoKeyNav/com.sap.odata.test1.BFCESTwoKeyNavRTESTwoKeyNav()").goPath()
         .at(0)
         .isUriPathInfoKind(UriResourceKind.entitySet)
-        .isType(EdmTechProvider.nameETTwoKeyNav)
-        .isCollection(true)
+        .isType(EdmTechProvider.nameETTwoKeyNav, true)
         .at(1)
         .isUriPathInfoKind(UriResourceKind.function)
         .isType(EdmTechProvider.nameETTwoKeyNav);
@@ -78,8 +71,7 @@ public class TestFullResourcePath {
     testUri.run("ESTwoKeyNav/com.sap.odata.test1.BFCESTwoKeyNavRTESTwoKeyNav(ParameterString='ABC')").goPath()
         .at(0)
         .isUriPathInfoKind(UriResourceKind.entitySet)
-        .isType(EdmTechProvider.nameETTwoKeyNav)
-        .isCollection(true)
+        .isType(EdmTechProvider.nameETTwoKeyNav, true)
         .at(1)
         .isUriPathInfoKind(UriResourceKind.function)
         .isType(EdmTechProvider.nameETTwoKeyNav);
@@ -88,8 +80,7 @@ public class TestFullResourcePath {
     testUri.run("ESTwoKeyNav/com.sap.odata.test1.BFCESTwoKeyNavRTESTwoKeyNav()").goPath()
         .at(0)
         .isUriPathInfoKind(UriResourceKind.entitySet)
-        .isType(EdmTechProvider.nameETTwoKeyNav)
-        .isCollection(true)
+        .isType(EdmTechProvider.nameETTwoKeyNav, true)
         .at(1)
         .isUriPathInfoKind(UriResourceKind.function)
         .isType(EdmTechProvider.nameETTwoKeyNav);
@@ -807,8 +798,7 @@ public class TestFullResourcePath {
         .goPath()
         .at(0)
         .isUriPathInfoKind(UriResourceKind.entitySet)
-        .isType(EdmTechProvider.nameETAllPrim)
-        .isCollection(false)
+        .isType(EdmTechProvider.nameETAllPrim, false)
         .at(1)
         .isUriPathInfoKind(UriResourceKind.primitiveProperty)
         .isType(EdmTechProvider.nameString);
@@ -818,8 +808,7 @@ public class TestFullResourcePath {
         .goPath()
         .at(0)
         .isUriPathInfoKind(UriResourceKind.entitySet)
-        .isType(EdmTechProvider.nameETCollAllPrim)
-        .isCollection(false)
+        .isType(EdmTechProvider.nameETCollAllPrim, false)
         .at(1)
         .isUriPathInfoKind(UriResourceKind.primitiveProperty)
         .isType(EdmTechProvider.nameString);
@@ -830,8 +819,7 @@ public class TestFullResourcePath {
         .goPath()
         .at(0)
         .isUriPathInfoKind(UriResourceKind.entitySet)
-        .isType(EdmTechProvider.nameETTwoKeyNav)
-        .isCollection(false)
+        .isType(EdmTechProvider.nameETTwoKeyNav, false)
         .at(1)
         .isUriPathInfoKind(UriResourceKind.complexProperty)
         .at(2)
@@ -843,8 +831,7 @@ public class TestFullResourcePath {
         .at(0)
         .isUriPathInfoKind(UriResourceKind.entitySet)
         .at(1)
-        .isType(EdmTechProvider.nameCTPrimComp)
-        .isCollection(true)
+        .isType(EdmTechProvider.nameCTPrimComp, true)
         .at(2)
         .isUriPathInfoKind(UriResourceKind.function)
         .isType(EdmTechProvider.nameETAllPrim);
@@ -855,8 +842,7 @@ public class TestFullResourcePath {
         .goPath()
         .at(0)
         .isUriPathInfoKind(UriResourceKind.entitySet)
-        .isType(EdmTechProvider.nameETTwoKeyNav)
-        .isCollection(false)
+        .isType(EdmTechProvider.nameETTwoKeyNav, false)
         .at(1)
         .isUriPathInfoKind(UriResourceKind.function)
         .isType(EdmTechProvider.nameETTwoKeyNav);
@@ -866,8 +852,7 @@ public class TestFullResourcePath {
         .goPath()
         .at(0)
         .isUriPathInfoKind(UriResourceKind.entitySet)
-        .isType(EdmTechProvider.nameETTwoKeyNav)
-        .isCollection(true)
+        .isType(EdmTechProvider.nameETTwoKeyNav, true)
         .at(1).isUriPathInfoKind(UriResourceKind.function)
         .isType(EdmTechProvider.nameETTwoKeyNav);
   }
@@ -1118,15 +1103,16 @@ public class TestFullResourcePath {
 
   @Test
   public void runEsNameKeyCast() {
-
-    testUri.runEx("xESTwoPrim(1)/com.sap.odata.test1.ETBase(1)")
-        .isExSemantic(0);
-
-    testUri.runEx("xESTwoPrim/com.sap.odata.test1.ETBase(1)/com.sap.odata.test1.ETTwoBase(1)")
-        .isExSemantic(0);
-
-    testUri.runEx("xESBase/com.sap.odata.test1.ETTwoPrim(1)")
-        .isExSemantic(0);
+    /*
+     * testUri.runEx("ESTwoPrim(1)/com.sap.odata.test1.ETBase(1)")
+     * .isExSemantic(0);
+     * 
+     * testUri.runEx("ESTwoPrim/com.sap.odata.test1.ETBase(1)/com.sap.odata.test1.ETTwoBase(1)")
+     * .isExSemantic(0);
+     * 
+     * testUri.runEx("ESBase/com.sap.odata.test1.ETTwoPrim(1)")
+     * .isExSemantic(0);
+     */
 
     testUri.run("ESTwoPrim(1)/com.sap.odata.test1.ETBase")
         .isKind(UriInfoKind.resource).goPath()
@@ -2365,9 +2351,9 @@ public class TestFullResourcePath {
         .goExpand().first()
         .isExpandStartType(EdmTechProvider.nameETBaseTwoKeyNav)
         .goPath().first()
-        //.isType(EdmTechProvider.nameETTwoKeyNav)
-        //.isTypeFilterOnEntry(EdmTechProvider.nameETBaseTwoKeyNav)
-        //.n()
+        // .isType(EdmTechProvider.nameETTwoKeyNav)
+        // .isTypeFilterOnEntry(EdmTechProvider.nameETBaseTwoKeyNav)
+        // .n()
         .isNavProperty("NavPropertyETKeyNavMany", EdmTechProvider.nameETKeyNav, true);
 
     testUri.run("ESTwoKeyNav(PropertyInt16=1,PropertyString='2')?"
@@ -2378,9 +2364,9 @@ public class TestFullResourcePath {
         .goExpand().first()
         .isExpandStartType(EdmTechProvider.nameETBaseTwoKeyNav)
         .goPath().first()
-        //.isType(EdmTechProvider.nameETTwoKeyNav)
-        //.isTypeFilterOnEntry(EdmTechProvider.nameETBaseTwoKeyNav)
-        //.n()
+        // .isType(EdmTechProvider.nameETTwoKeyNav)
+        // .isTypeFilterOnEntry(EdmTechProvider.nameETBaseTwoKeyNav)
+        // .n()
         .isNavProperty("NavPropertyETTwoKeyNavMany", EdmTechProvider.nameETTwoKeyNav, true);
 
     testUri.run("ESTwoKeyNav(PropertyInt16=1,PropertyString='2')?$expand=com.sap.odata.test1.ETBaseTwoKeyNav"
@@ -2391,9 +2377,9 @@ public class TestFullResourcePath {
         .goExpand().first()
         .isExpandStartType(EdmTechProvider.nameETBaseTwoKeyNav)
         .goPath().first()
-        //.isType(EdmTechProvider.nameETTwoKeyNav)
-        //.isTypeFilterOnEntry(EdmTechProvider.nameETBaseTwoKeyNav)
-        //.n()
+        // .isType(EdmTechProvider.nameETTwoKeyNav)
+        // .isTypeFilterOnEntry(EdmTechProvider.nameETBaseTwoKeyNav)
+        // .n()
         .isNavProperty("NavPropertyETTwoKeyNavMany", EdmTechProvider.nameETTwoKeyNav, true)
         .isTypeFilterOnCollection(EdmTechProvider.nameETTwoBaseTwoKeyNav);
 
@@ -2402,9 +2388,9 @@ public class TestFullResourcePath {
         .goExpand().first()
         .isExpandStartType(EdmTechProvider.nameETBaseTwoKeyNav)
         .goPath().first()
-        //.isType(EdmTechProvider.nameETTwoKeyNav)
-        //.isTypeFilterOnCollection(EdmTechProvider.nameETBaseTwoKeyNav)
-        //.n()
+        // .isType(EdmTechProvider.nameETTwoKeyNav)
+        // .isTypeFilterOnCollection(EdmTechProvider.nameETBaseTwoKeyNav)
+        // .n()
         .isComplex("PropertyComplexNav")
         .isType(EdmTechProvider.nameCTBasePrimCompNav)
         .n()
@@ -2416,9 +2402,9 @@ public class TestFullResourcePath {
         .goExpand().first()
         .isExpandStartType(EdmTechProvider.nameETBaseTwoKeyNav)
         .goPath().first()
-        //.isType(EdmTechProvider.nameETTwoKeyNav)
-        //.isTypeFilterOnCollection(EdmTechProvider.nameETBaseTwoKeyNav)
-        //.n()
+        // .isType(EdmTechProvider.nameETTwoKeyNav)
+        // .isTypeFilterOnCollection(EdmTechProvider.nameETBaseTwoKeyNav)
+        // .n()
         .isComplex("PropertyComplexNav")
         .isType(EdmTechProvider.nameCTBasePrimCompNav)
         .n()
@@ -2448,10 +2434,10 @@ public class TestFullResourcePath {
         .goExpand().first()
         .isExpandStartType(EdmTechProvider.nameETBaseTwoKeyNav)
         .goPath().first()
-        //.isUriPathInfoKind(UriResourceKind.startingTypeFilter)
-        //.isType(EdmTechProvider.nameETTwoKeyNav)
-        //.isTypeFilterOnEntry(EdmTechProvider.nameETBaseTwoKeyNav)
-        //.n().isNavProperty("NavPropertyETTwoKeyNavMany", EdmTechProvider.nameETTwoKeyNav, true)
+        // .isUriPathInfoKind(UriResourceKind.startingTypeFilter)
+        // .isType(EdmTechProvider.nameETTwoKeyNav)
+        // .isTypeFilterOnEntry(EdmTechProvider.nameETBaseTwoKeyNav)
+        // .n().isNavProperty("NavPropertyETTwoKeyNavMany", EdmTechProvider.nameETTwoKeyNav, true)
         .isType(EdmTechProvider.nameETTwoKeyNav)
         .isTypeFilterOnCollection(EdmTechProvider.nameETTwoBaseTwoKeyNav)
         .goUpExpandValidator()
@@ -2475,7 +2461,7 @@ public class TestFullResourcePath {
         .goPath().first()
         .isNavProperty("NavPropertyETKeyNavOne", EdmTechProvider.nameETKeyNav, false)
         .isType(EdmTechProvider.nameETKeyNav);
-    
+
     testUri.run("ESTwoKeyNav(PropertyInt16=1,PropertyString='2')?$select=com.sap.odata.test1.ETBaseTwoKeyNav"
         + "/PropertyInt16")
         .isKind(UriInfoKind.resource).goPath()
@@ -2485,7 +2471,7 @@ public class TestFullResourcePath {
         .isSelectStartType(0, EdmTechProvider.nameETBaseTwoKeyNav)
         .goSelectItem(0)
         .first()
-        .isPrimitiveProperty("PropertyInt16", EdmTechProvider.nameInt16, false);        
+        .isPrimitiveProperty("PropertyInt16", EdmTechProvider.nameInt16, false);
 
     testUri.run("ESKeyNav?$expand=NavPropertyETKeyNavOne($select=PropertyInt16)")
         .isKind(UriInfoKind.resource)
@@ -4170,7 +4156,6 @@ public class TestFullResourcePath {
         .n().isComplex("PropertyComplex")
         .n().isPrimitiveProperty("PropertyInt16", EdmTechProvider.nameInt16, false);
 
-    // TODO lambda does not check if the previous path segment is a collection
     testFilter.runOnETKeyNav("NavPropertyETTwoKeyNavMany/any(d:d/PropertyInt16 eq 1 or d/any"
         + "(e:e/CollPropertyString eq 'SomeString'))")
         .is("<NavPropertyETTwoKeyNavMany/<ANY;<<<d/PropertyInt16> eq <1>> or "
@@ -4381,7 +4366,6 @@ public class TestFullResourcePath {
         .goUpFilterValidator()
         .root().goParameter(1).isTypedLiteral(EdmTechProvider.nameString);
 
-    // TODO cross check with abap coding
     testFilter.runOnETTwoKeyNav("isof(PropertyComplex/PropertyComplex/PropertyString,Edm.Guid)")
         .is("<isof(<PropertyComplex/PropertyComplex/PropertyString>,<Edm.Guid>)>")
         .root()
@@ -5020,7 +5004,6 @@ public class TestFullResourcePath {
         .goOrder(0).left().goPath().isComplex("PropertyEnumString").goUpFilterValidator()
         .goOrder(0).right().isEnum(EdmTechProvider.nameENString, Arrays.asList("String1"));
 
-    // TODO
     testFilter.runOrderByOnETTwoKeyNavEx("PropertyInt16 1").isExSyntax(0);
     testFilter.runOrderByOnETTwoKeyNavEx("PropertyInt16, PropertyInt32 PropertyDuration").isExSyntax(0);
     testFilter.runOrderByOnETTwoKeyNavEx("PropertyInt16 PropertyInt32, PropertyDuration desc").isExSyntax(0);
@@ -5062,6 +5045,57 @@ public class TestFullResourcePath {
     testUri.run("ESTwoKeyNav?$search=  abc AND (def        ghi)");
   }
 
+  @Test
+  public void testErrors() {
+    testUri.runEx("FICRTString(wrong1='ABC')/com.sap.odata.test1.BFCStringRTESTwoKeyNav()").isExSemantic(0);
+    testUri.runEx("FICRTString(wrong1='ABC', wrong2=1)/com.sap.odata.test1.BFCStringRTESTwoKeyNav()").isExSemantic(0);
+
+    // type filter for entity incompatible
+    testUri.runEx("ESTwoKeyNav(PropertyInt16=1,PropertyString='2')/com.sap.odata.test1.ETBase").isExSemantic(0);
+
+    // type filter for entity double on entry
+    testUri.runEx("ESTwoKeyNav(PropertyInt16=1,PropertyString='2')"
+        + "/com.sap.odata.test1.ETBaseTwoKeyNav/com.sap.odata.test1.ETBaseTwoKeyNav").isExSemantic(0);
+    // type filter for entity double on collection
+    testUri.runEx("ESTwoKeyNav/com.sap.odata.test1.ETBaseTwoKeyNav/com.sap.odata.test1.ETBaseTwoKeyNav")
+        .isExSemantic(0);
+    // type filter for entity double on non key pred
+    testUri.runEx("SINav/com.sap.odata.test1.ETBaseTwoKeyNav/com.sap.odata.test1.ETBaseTwoKeyNav").isExSemantic(0);
+
+    // type filter for complex incompatible
+    testUri.runEx("ESTwoKeyNav(PropertyInt16=1,PropertyString='2')/PropertyComplexTwoPrim"
+        + "/com.sap.odata.test1.CTCollAllPrim").isExSemantic(0);
+
+    // type filter for complex double on entry
+    testUri.runEx("FICRTCTTwoPrimParam(ParameterInt16=1,ParameterString='2')"
+        + "/com.sap.odata.test1.CTBase/com.sap.odata.test1.CTBase").isExSemantic(0);
+
+    // type filter for complex double on collection
+    testUri.runEx("FICRTCollCTTwoPrimParam(ParameterInt16=1,ParameterString='2')"
+        + "/com.sap.odata.test1.CTBase/com.sap.odata.test1.CTBase").isExSemantic(0);
+
+    // type filter for complex double on non key pred
+    testUri.runEx("ESTwoKeyNav(PropertyInt16=1,PropertyString='2')/PropertyComplexTwoPrim"
+        + "/com.sap.odata.test1.CTBase/com.sap.odata.test1.CTBase").isExSemantic(0);
+
+    testUri.runEx("ESTwoKeyNav/com.sap.odata.test1.BFCESTwoKeyNavRTESTwoKeyNav").isExSemantic(0);
+    
+    // $ref
+    testUri.runEx("ESTwoKeyNav(PropertyInt16=1,PropertyString='2')/PropertyComplexTwoPrim/$ref").isExSemantic(0);
+    testUri.runEx("ESTwoKeyNav(PropertyInt16=1,PropertyString='2')/PropertyComplexTwoPrim/$count").isExSemantic(0);
+
+  }
+
+  @Test
+  public void testAlias() {
+    testUri.run("ESTwoKeyNav(PropertyInt16=1,PropertyString=@A)?@A='2'").goPath()
+        .isKeyPredicate(0, "PropertyInt16", "1")
+        .isKeyPredicateAlias(1, "PropertyString", "A")
+        .goUpUriValidator()
+        .isCustomParameter(0, "@A", "'2'");
+
+  }
+
   public static String encode(final String decoded) throws UnsupportedEncodingException {
     return URLEncoder.encode(decoded, "UTF-8");