You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@olingo.apache.org by ko...@apache.org on 2014/01/24 14:30:55 UTC

git commit: [OLINGO-63] Uri Parser: Add test cases for key predicates

Updated Branches:
  refs/heads/master c8d0b26ad -> a2ba493b8


[OLINGO-63] Uri Parser: Add test cases for key predicates


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/a2ba493b
Tree: http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/tree/a2ba493b
Diff: http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/diff/a2ba493b

Branch: refs/heads/master
Commit: a2ba493b806c72f271d1a7cba6443569dfec4b0e
Parents: c8d0b26
Author: Sven Kobler <sv...@sap.com>
Authored: Fri Jan 24 14:05:20 2014 +0100
Committer: Sven Kobler <sv...@sap.com>
Committed: Fri Jan 24 14:30:33 2014 +0100

----------------------------------------------------------------------
 .../core/testutil/UriResourceValidator.java     |  22 ++-
 .../core/uri/antlr/TestByAbapResourcePath.java  | 194 +++++++++++++++++--
 2 files changed, 200 insertions(+), 16 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/a2ba493b/odata4-lib/odata4-producer-core/src/test/java/org/apache/olingo/odata4/producer/core/testutil/UriResourceValidator.java
----------------------------------------------------------------------
diff --git a/odata4-lib/odata4-producer-core/src/test/java/org/apache/olingo/odata4/producer/core/testutil/UriResourceValidator.java b/odata4-lib/odata4-producer-core/src/test/java/org/apache/olingo/odata4/producer/core/testutil/UriResourceValidator.java
index a4c4d4a..ee25df4 100644
--- a/odata4-lib/odata4-producer-core/src/test/java/org/apache/olingo/odata4/producer/core/testutil/UriResourceValidator.java
+++ b/odata4-lib/odata4-producer-core/src/test/java/org/apache/olingo/odata4/producer/core/testutil/UriResourceValidator.java
@@ -280,16 +280,30 @@ public class UriResourceValidator implements Validator {
     return this;
   }
 
-  public UriResourceValidator isKeyPredicate(int index, String name, String value) {
-    if (!(uriPathInfo instanceof UriResourceEntitySetImpl)) {
+  public UriResourceValidator isKeyPredicate(int index, String name, String text) {
+    if (!(uriPathInfo instanceof UriResourceImplKeyPred)) {
       // TODO add and "or" for FunctionImports
       fail("isKeyPredicate: uriPathInfo is not instanceof UriPathInfoEntitySetImpl");
     }
 
-    UriResourceEntitySetImpl info = (UriResourceEntitySetImpl) uriPathInfo;
+    UriResourceImplKeyPred info = (UriResourceImplKeyPred) uriPathInfo;
     List<UriParameter> keyPredicates = info.getKeyPredicates();
     assertEquals(name, keyPredicates.get(index).getName());
-    assertEquals(value, keyPredicates.get(index).getText());
+    assertEquals(text, keyPredicates.get(index).getText());
+    return this;
+
+  }
+  
+  public UriResourceValidator isParameter(int index, String name, String text) {
+    if (!(uriPathInfo instanceof UriResourceFunctionImpl)) {
+      // TODO add and "or" for FunctionImports
+      fail("isKeyPredicate: uriPathInfo is not instanceof UriResourceFunctionImpl");
+    }
+
+    UriResourceFunctionImpl info = (UriResourceFunctionImpl) uriPathInfo;
+    List<UriParameter> keyPredicates = info.getParameters();
+    assertEquals(name, keyPredicates.get(index).getName());
+    assertEquals(text, keyPredicates.get(index).getText());
     return this;
 
   }

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/a2ba493b/odata4-lib/odata4-producer-core/src/test/java/org/apache/olingo/odata4/producer/core/uri/antlr/TestByAbapResourcePath.java
----------------------------------------------------------------------
diff --git a/odata4-lib/odata4-producer-core/src/test/java/org/apache/olingo/odata4/producer/core/uri/antlr/TestByAbapResourcePath.java b/odata4-lib/odata4-producer-core/src/test/java/org/apache/olingo/odata4/producer/core/uri/antlr/TestByAbapResourcePath.java
index d0234a5..35016b4 100644
--- a/odata4-lib/odata4-producer-core/src/test/java/org/apache/olingo/odata4/producer/core/uri/antlr/TestByAbapResourcePath.java
+++ b/odata4-lib/odata4-producer-core/src/test/java/org/apache/olingo/odata4/producer/core/uri/antlr/TestByAbapResourcePath.java
@@ -96,6 +96,8 @@ public class TestByAbapResourcePath {
         .first()
         .isEntitySet("ESTwoKeyNav")
         .isType(EdmTechProvider.nameETTwoKeyNav, false)
+        .isKeyPredicate(0, "PropertyInt16", "1")
+        .isKeyPredicate(1, "PropertyString", "'2'")
         .isTypeFilterOnEntry(EdmTechProvider.nameETBaseTwoKeyNav)
         .n()
         .isComplex("PropertyComplex")
@@ -109,6 +111,8 @@ public class TestByAbapResourcePath {
         .first()
         .isEntitySet("ESTwoKeyNav")
         .isType(EdmTechProvider.nameETTwoKeyNav, false)
+        .isKeyPredicate(0, "PropertyInt16", "1")
+        .isKeyPredicate(1, "PropertyString", "'2'")
         .isTypeFilterOnEntry(EdmTechProvider.nameETBaseTwoKeyNav)
         .n()
         .isComplex("PropertyComplex")
@@ -127,6 +131,7 @@ public class TestByAbapResourcePath {
         .isKind(UriInfoKind.resource).goPath()
         .first()
         .isEntitySet("ESKeyNav")
+        .isKeyPredicate(0, "PropertyInt16", "1")
         .n()
         .isUriPathInfoKind(UriResourceKind.complexProperty)
         .isComplex("CollPropertyComplex")
@@ -139,6 +144,7 @@ public class TestByAbapResourcePath {
         .isKind(UriInfoKind.resource).goPath()
         .first()
         .isEntitySet("ESKeyNav")
+        .isKeyPredicate(0, "PropertyInt16", "1")
         .n()
         .isUriPathInfoKind(UriResourceKind.complexProperty)
         .isComplex("CollPropertyComplex")
@@ -157,6 +163,8 @@ public class TestByAbapResourcePath {
         .isKind(UriInfoKind.resource).goPath()
         .first()
         .isEntitySet("ESTwoKeyNav")
+        .isKeyPredicate(0, "PropertyInt16", "1")
+        .isKeyPredicate(1, "PropertyString", "'2'")
         .n()
         .isUriPathInfoKind(UriResourceKind.complexProperty)
         .isComplex("PropertyComplex")
@@ -169,6 +177,8 @@ public class TestByAbapResourcePath {
         .isKind(UriInfoKind.resource).goPath()
         .first()
         .isEntitySet("ESTwoKeyNav")
+        .isKeyPredicate(0, "PropertyInt16", "1")
+        .isKeyPredicate(1, "PropertyString", "'2'")
         .n()
         .isUriPathInfoKind(UriResourceKind.complexProperty)
         .isComplex("PropertyComplex")
@@ -187,6 +197,8 @@ public class TestByAbapResourcePath {
         .isKind(UriInfoKind.resource).goPath()
         .first()
         .isEntitySet("ESTwoKeyNav")
+        .isKeyPredicate(0, "PropertyInt16", "1")
+        .isKeyPredicate(1, "PropertyString", "'2'")
         .n()
         .isFunction("BFCETTwoKeyNavRTESTwoKeyNav");
   }
@@ -200,6 +212,8 @@ public class TestByAbapResourcePath {
         .first()
         .isEntitySet("ESTwoKeyNav")
         .isType(EdmTechProvider.nameETTwoKeyNav, false)
+        .isKeyPredicate(0, "PropertyInt16", "1")
+        .isKeyPredicate(1, "PropertyString", "'2'")
         .isTypeFilterOnEntry(EdmTechProvider.nameETBaseTwoKeyNav)
         .n()
         .isFunction("BFCETBaseTwoKeyNavRTESTwoKeyNav");
@@ -212,6 +226,8 @@ public class TestByAbapResourcePath {
         .isEntitySet("ESTwoKeyNav")
         .isType(EdmTechProvider.nameETTwoKeyNav, false)
         .isTypeFilterOnCollection(EdmTechProvider.nameETBaseTwoKeyNav)
+        .isKeyPredicate(0, "PropertyInt16", "1")
+        .isKeyPredicate(1, "PropertyString", "'(''2'')'")
         .n()
         .isFunction("BFCETBaseTwoKeyNavRTESTwoKeyNav");
   }
@@ -252,6 +268,8 @@ public class TestByAbapResourcePath {
         .isFunction("BFCESTwoKeyNavRTESTwoKeyNav")
         .isType(EdmTechProvider.nameETTwoKeyNav)
         .isTypeFilterOnCollection(EdmTechProvider.nameETBaseTwoKeyNav)
+        .isKeyPredicate(0, "PropertyInt16", "1")
+        .isKeyPredicate(1, "PropertyString", "'2'")
         .isTypeFilterOnEntry(EdmTechProvider.nameETTwoBaseTwoKeyNav);
   }
 
@@ -339,6 +357,7 @@ public class TestByAbapResourcePath {
         .isEntitySet("ESKeyNav")
         .n()
         .isFunction("BFCESKeyNavRTETKeyNavParam")
+        .isParameter(0, "ParameterString", "'1'")
         .n()
         .isNav("NavPropertyETTwoKeyNavOne")
         .isType(EdmTechProvider.nameETTwoKeyNav);
@@ -350,6 +369,7 @@ public class TestByAbapResourcePath {
         .isEntitySet("ESKeyNav")
         .n()
         .isFunction("BFCESKeyNavRTETKeyNavParam")
+        .isParameter(0, "ParameterString", "'1'")
         .n()
         .isNav("NavPropertyETTwoKeyNavOne")
         .isType(EdmTechProvider.nameETTwoKeyNav)
@@ -364,6 +384,7 @@ public class TestByAbapResourcePath {
         .isEntitySet("ESKeyNav")
         .n()
         .isFunction("BFCESKeyNavRTETKeyNavParam")
+        .isParameter(0, "ParameterString", "'1'")
         .n()
         .isNav("NavPropertyETTwoKeyNavOne")
         .n()
@@ -380,6 +401,7 @@ public class TestByAbapResourcePath {
         .isEntitySet("ESKeyNav")
         .n()
         .isFunction("BFCESKeyNavRTETKeyNavParam")
+        .isParameter(0, "ParameterString", "'1'")
         .n()
         .isNav("NavPropertyETTwoKeyNavOne")
         .n()
@@ -393,8 +415,11 @@ public class TestByAbapResourcePath {
         .isEntitySet("ESKeyNav")
         .n()
         .isFunction("BFCESKeyNavRTETKeyNavParam")
+        .isParameter(0, "ParameterString", "'1'")
         .n()
         .isNav("NavPropertyETTwoKeyNavMany")
+        .isKeyPredicate(0, "PropertyInt16", "2")
+        .isKeyPredicate(1, "PropertyString", "'3'")
         .n()
         .isSimple("PropertyString")
         .isType(EdmTechProvider.nameString);
@@ -423,6 +448,8 @@ public class TestByAbapResourcePath {
         .n()
         .isFunction("BFCESTwoKeyNavRTESTwoKeyNav")
         .isType(EdmTechProvider.nameETTwoKeyNav, false)
+        .isKeyPredicate(0, "PropertyInt16", "1")
+        .isKeyPredicate(1, "PropertyString", "'2'")
         .n()
         .isNav("NavPropertyETTwoKeyNavOne")
         .isType(EdmTechProvider.nameETTwoKeyNav, false)
@@ -483,6 +510,7 @@ public class TestByAbapResourcePath {
         .isEntitySet("ESKeyNav")
         .n()
         .isFunction("BFCESKeyNavRTETKeyNavParam")
+        .isParameter(0, "ParameterString", "'1'")
         .n()
         .isComplex("PropertyComplexTwoPrim")
         .isType(EdmTechProvider.nameCTTwoPrim)
@@ -496,8 +524,11 @@ public class TestByAbapResourcePath {
         .isEntitySet("ESKeyNav")
         .n()
         .isFunction("BFCESKeyNavRTETKeyNavParam")
+        .isParameter(0, "ParameterString", "'1'")
         .n()
         .isNav("NavPropertyETTwoKeyNavMany")
+        .isKeyPredicate(0, "PropertyInt16", "2")
+        .isKeyPredicate(1, "PropertyString", "'3'")
         .n()
         .isComplex("PropertyComplexTwoPrim")
         .isType(EdmTechProvider.nameCTTwoPrim)
@@ -547,6 +578,7 @@ public class TestByAbapResourcePath {
         .isEntitySet("ESTwoKeyNav")
         .n()
         .isFunction("BFCESTwoKeyNavRTESTwoKeyNav")
+        .isParameter(0, "ParameterString", "'2'")
         .isType(EdmTechProvider.nameETTwoKeyNav);
 
     testUri.run("ESKeyNav/com.sap.odata.test1.BFCESTwoKeyNavRTESTwoKeyNav()")
@@ -563,6 +595,7 @@ public class TestByAbapResourcePath {
         .isEntitySet("ESKeyNav")
         .n()
         .isFunction("BFCESTwoKeyNavRTESTwoKeyNav")
+        .isParameter(0, "ParameterString", "'3'")
         .isType(EdmTechProvider.nameETTwoKeyNav);
 
     testUri.run("ESTwoKeyNav/com.sap.odata.test1.BFCESTwoKeyNavRTESTwoKeyNav()/$count")
@@ -580,7 +613,10 @@ public class TestByAbapResourcePath {
         .first()
         .isEntitySet("ESTwoKeyNav")
         .n()
-        .isFunction("BFCESTwoKeyNavRTESTwoKeyNav"); // check for properties
+        .isFunction("BFCESTwoKeyNavRTESTwoKeyNav")
+        .isKeyPredicate(0, "PropertyInt16", "1")
+        .isKeyPredicate(1, "PropertyString", "'2'");
+
   }
 
   @Test
@@ -591,6 +627,7 @@ public class TestByAbapResourcePath {
         .isKind(UriInfoKind.resource).goPath()
         .first()
         .isEntitySet("ESKeyNav")
+        .isKeyPredicate(0, "PropertyInt16", "1")
         .n()
         .isComplex("CollPropertyComplex")
         .isType(EdmTechProvider.nameCTPrimComp)
@@ -648,6 +685,7 @@ public class TestByAbapResourcePath {
         .isKind(UriInfoKind.resource).goPath()
         .first()
         .isEntitySet("ESKeyNav")
+        .isKeyPredicate(0, "PropertyInt16", "1")
         .n()
         .isSimple("CollPropertyString")
         .n()
@@ -658,6 +696,7 @@ public class TestByAbapResourcePath {
         .isKind(UriInfoKind.resource).goPath()
         .first()
         .isEntitySet("ESKeyNav")
+        .isKeyPredicate(0, "PropertyInt16", "1")
         .n()
         .isSimple("CollPropertyString")
         .n()
@@ -674,6 +713,7 @@ public class TestByAbapResourcePath {
         .isKind(UriInfoKind.resource).goPath()
         .first()
         .isEntitySet("ESKeyNav")
+        .isKeyPredicate(0, "PropertyInt16", "1")
         .n()
         .isSimple("PropertyString")
         .n()
@@ -684,6 +724,7 @@ public class TestByAbapResourcePath {
         .isKind(UriInfoKind.resource).goPath()
         .first()
         .isEntitySet("ESKeyNav")
+        .isKeyPredicate(0, "PropertyInt16", "1")
         .n()
         .isSimple("PropertyString")
         .n()
@@ -696,6 +737,7 @@ public class TestByAbapResourcePath {
         .isKind(UriInfoKind.resource).goPath()
         .first()
         .isEntitySet("ESKeyNav")
+        .isKeyPredicate(0, "PropertyInt16", "1")
         .n()
         .isSimple("PropertyString")
         .n()
@@ -735,6 +777,8 @@ public class TestByAbapResourcePath {
         .isKind(UriInfoKind.resource).goPath()
         .first()
         .isEntitySet("ESTwoKeyNav")
+        .isKeyPredicate(0, "PropertyInt16", "1")
+        .isKeyPredicate(1, "PropertyString", "'2'")
         .n()
         .isAction("BAETTwoKeyNavRTETTwoKeyNav");
 
@@ -742,6 +786,7 @@ public class TestByAbapResourcePath {
         .isKind(UriInfoKind.resource).goPath()
         .first()
         .isEntitySet("ESKeyNav")
+        .isKeyPredicate(0, "PropertyInt16", "1")
         .n()
         .isAction("BAETTwoKeyNavRTETTwoKeyNav");
   }
@@ -764,6 +809,8 @@ public class TestByAbapResourcePath {
         .isKind(UriInfoKind.resource).goPath()
         .first()
         .isEntitySet("ESTwoKeyNav")
+        .isKeyPredicate(0, "PropertyInt16", "1")
+        .isKeyPredicate(1, "PropertyString", "'2'")
         .isTypeFilterOnEntry(EdmTechProvider.nameETBaseTwoKeyNav)
         .n()
         .isAction("BAETBaseTwoKeyNavRTETBaseTwoKeyNav");
@@ -774,6 +821,8 @@ public class TestByAbapResourcePath {
         .first()
         .isEntitySet("ESTwoKeyNav")
         .isTypeFilterOnCollection(EdmTechProvider.nameETBaseTwoKeyNav)
+        .isKeyPredicate(0, "PropertyInt16", "1")
+        .isKeyPredicate(1, "PropertyString", "'2'")
         .isTypeFilterOnEntry(EdmTechProvider.nameETTwoBaseTwoKeyNav)
         .n()
         .isAction("BAETTwoBaseTwoKeyNavRTETBaseTwoKeyNav");
@@ -878,6 +927,7 @@ public class TestByAbapResourcePath {
         .isEntitySet("ESTwoPrim")
         .isType(EdmTechProvider.nameETTwoPrim, false)
         .isTypeFilterOnCollection(EdmTechProvider.nameETBase)
+        .isKeyPredicate(0, "PropertyInt16", "-32768")
         .isTypeFilterOnEntry(EdmTechProvider.nameETTwoBase);
 
     testUri.run("ESTwoPrim/com.sap.odata.test1.ETTwoBase(-32768)")
@@ -885,14 +935,17 @@ public class TestByAbapResourcePath {
         .first()
         .isEntitySet("ESTwoPrim")
         .isType(EdmTechProvider.nameETTwoPrim, false)
-        .isTypeFilterOnCollection(EdmTechProvider.nameETTwoBase);
+        .isTypeFilterOnCollection(EdmTechProvider.nameETTwoBase)
+        .isKeyPredicate(0, "PropertyInt16", "-32768");
 
     testUri.run("ESTwoPrim/Namespace1_Alias.ETTwoBase(-32768)")
         .isKind(UriInfoKind.resource).goPath()
         .first()
         .isEntitySet("ESTwoPrim")
         .isType(EdmTechProvider.nameETTwoPrim, false)
-        .isTypeFilterOnCollection(EdmTechProvider.nameETTwoBase);
+        .isTypeFilterOnCollection(EdmTechProvider.nameETTwoBase)
+        .isKeyPredicate(0, "PropertyInt16", "-32768");
+
   }
 
   @Test
@@ -903,6 +956,8 @@ public class TestByAbapResourcePath {
         .first()
         .isEntitySet("ESTwoKeyNav")
         .isType(EdmTechProvider.nameETTwoKeyNav, false)
+        .isKeyPredicate(0, "PropertyInt16", "1")
+        .isKeyPredicate(1, "PropertyString", "'2'")
         .isTypeFilterOnEntry(EdmTechProvider.nameETBaseTwoKeyNav)
         .n()
         .isSimple("PropertyDate");
@@ -913,6 +968,8 @@ public class TestByAbapResourcePath {
         .first()
         .isEntitySet("ESTwoKeyNav")
         .isType(EdmTechProvider.nameETTwoKeyNav, false)
+        .isKeyPredicate(0, "PropertyInt16", "1")
+        .isKeyPredicate(1, "PropertyString", "'2'")
         .isTypeFilterOnEntry(EdmTechProvider.nameETBaseTwoKeyNav)
         .n()
         .isComplex("PropertyComplex")
@@ -935,7 +992,11 @@ public class TestByAbapResourcePath {
     testUri.run("ESFourKeyAlias(PropertyInt16=1,KeyAlias1=2,KeyAlias2='3',KeyAlias3='4')")
         .isKind(UriInfoKind.resource).goPath()
         .first()
-        .isEntitySet("ESFourKeyAlias");
+        .isEntitySet("ESFourKeyAlias")
+        .isKeyPredicate(0, "PropertyInt16", "1")
+        .isKeyPredicate(1, "KeyAlias1", "2")
+        .isKeyPredicate(2, "KeyAlias2", "'3'")
+        .isKeyPredicate(3, "KeyAlias3", "'4'");
 
     testUri.run("ESCollAllPrim(null)")
         .isKind(UriInfoKind.resource).goPath()
@@ -954,7 +1015,20 @@ public class TestByAbapResourcePath {
         + "PropertyTimeOfDay=12:34:55.123456789012)")
         .isKind(UriInfoKind.resource).goPath()
         .first()
-        .isEntitySet("ESAllKey");
+        .isEntitySet("ESAllKey")
+        .isKeyPredicate(0, "PropertyString", "'O''Neil'")
+        .isKeyPredicate(1, "PropertyBoolean", "true")
+        .isKeyPredicate(2, "PropertyByte", "255")
+        .isKeyPredicate(3, "PropertySByte", "-128")
+        .isKeyPredicate(4, "PropertyInt16", "-32768")
+        .isKeyPredicate(5, "PropertyInt32", "-2147483648")
+        .isKeyPredicate(6, "PropertyInt64", "-9223372036854775808")
+        .isKeyPredicate(7, "PropertyDecimal", "0.1")
+        .isKeyPredicate(8, "PropertyDate", "2013-09-25")
+        .isKeyPredicate(9, "PropertyDateTimeOffset", "2002-10-10T12:00:00-05:00")
+        .isKeyPredicate(10, "PropertyDuration", "duration'P10DT5H34M21.123456789012S'")
+        .isKeyPredicate(11, "PropertyGuid", "12345678-1234-1234-1234-123456789012")
+        .isKeyPredicate(12, "PropertyTimeOfDay", "12:34:55.123456789012");
   }
 
   @Test
@@ -968,6 +1042,7 @@ public class TestByAbapResourcePath {
         .first()
         .isEntitySet("ESTwoPrim")
         .isType(EdmTechProvider.nameETTwoPrim)
+        .isKeyPredicate(0, "PropertyInt16", "1")
         .isTypeFilterOnEntry(EdmTechProvider.nameETBase);
 
     testUri.run("ESTwoPrim(1)/com.sap.odata.test1.ETTwoBase")
@@ -975,6 +1050,7 @@ public class TestByAbapResourcePath {
         .first()
         .isEntitySet("ESTwoPrim")
         .isType(EdmTechProvider.nameETTwoPrim)
+        .isKeyPredicate(0, "PropertyInt16", "1")
         .isTypeFilterOnEntry(EdmTechProvider.nameETTwoBase);
 
     testUri.run("ESTwoPrim/com.sap.odata.test1.ETBase(1)")
@@ -982,6 +1058,7 @@ public class TestByAbapResourcePath {
         .first()
         .isEntitySet("ESTwoPrim")
         .isType(EdmTechProvider.nameETTwoPrim)
+        .isKeyPredicate(0, "PropertyInt16", "1")
         .isTypeFilterOnCollection(EdmTechProvider.nameETBase);
 
     testUri.run("ESTwoPrim/com.sap.odata.test1.ETTwoBase(1)")
@@ -989,6 +1066,7 @@ public class TestByAbapResourcePath {
         .first()
         .isEntitySet("ESTwoPrim")
         .isType(EdmTechProvider.nameETTwoPrim)
+        .isKeyPredicate(0, "PropertyInt16", "1")
         .isTypeFilterOnCollection(EdmTechProvider.nameETTwoBase);
 
     testUri.run("ESTwoPrim/com.sap.odata.test1.ETBase(1)/com.sap.odata.test1.ETTwoBase")
@@ -996,6 +1074,7 @@ public class TestByAbapResourcePath {
         .first()
         .isEntitySet("ESTwoPrim")
         .isType(EdmTechProvider.nameETTwoPrim)
+        .isKeyPredicate(0, "PropertyInt16", "1")
         .isTypeFilterOnCollection(EdmTechProvider.nameETBase);
 
     testUri.run("ESTwoPrim/com.sap.odata.test1.ETTwoBase")
@@ -1013,6 +1092,8 @@ public class TestByAbapResourcePath {
         .first()
         .isEntitySet("ESTwoKeyNav")
         .isType(EdmTechProvider.nameETTwoKeyNav)
+        .isKeyPredicate(0, "PropertyInt16", "1")
+        .isKeyPredicate(1, "PropertyString", "'2'")
         .isTypeFilterOnEntry(EdmTechProvider.nameETBaseTwoKeyNav);
 
     testUri.run("ESTwoKeyNav/com.sap.odata.test1.ETBaseTwoKeyNav(PropertyInt16=1,PropertyString='2')")
@@ -1020,7 +1101,9 @@ public class TestByAbapResourcePath {
         .first()
         .isEntitySet("ESTwoKeyNav")
         .isType(EdmTechProvider.nameETTwoKeyNav)
-        .isTypeFilterOnCollection(EdmTechProvider.nameETBaseTwoKeyNav);
+        .isTypeFilterOnCollection(EdmTechProvider.nameETBaseTwoKeyNav)
+        .isKeyPredicate(0, "PropertyInt16", "1")
+        .isKeyPredicate(1, "PropertyString", "'2'");
   }
 
   @Test
@@ -1029,6 +1112,8 @@ public class TestByAbapResourcePath {
         .isKind(UriInfoKind.resource).goPath()
         .first()
         .isEntitySet("ESTwoKeyNav")
+        .isKeyPredicate(0, "PropertyInt16", "1")
+        .isKeyPredicate(1, "PropertyString", "'2'")
         .n()
         .isComplex("PropertyComplex");
 
@@ -1036,6 +1121,8 @@ public class TestByAbapResourcePath {
         .isKind(UriInfoKind.resource).goPath()
         .first()
         .isEntitySet("ESTwoKeyNav")
+        .isKeyPredicate(0, "PropertyInt16", "1")
+        .isKeyPredicate(1, "PropertyString", "'2'")
         .n()
         .isComplex("PropertyComplex")
         .n()
@@ -1048,6 +1135,7 @@ public class TestByAbapResourcePath {
         .isKind(UriInfoKind.resource).goPath()
         .first()
         .isEntitySet("ESMixPrimCollComp")
+        .isKeyPredicate(0, "PropertyInt16", "5")
         .n()
         .isComplex("CollPropertyComplex")
         .isType(EdmTechProvider.nameCTTwoPrim, true);
@@ -1081,6 +1169,8 @@ public class TestByAbapResourcePath {
         .isKind(UriInfoKind.resource).goPath()
         .first()
         .isEntitySet("ESTwoKeyNav")
+        .isKeyPredicate(0, "PropertyInt16", "1")
+        .isKeyPredicate(1, "PropertyString", "'2'")
         .isType(EdmTechProvider.nameETTwoKeyNav)
         .isTypeFilterOnEntry(EdmTechProvider.nameETBaseTwoKeyNav)
         .n()
@@ -1094,6 +1184,8 @@ public class TestByAbapResourcePath {
         .isEntitySet("ESTwoKeyNav")
         .isType(EdmTechProvider.nameETTwoKeyNav)
         .isTypeFilterOnEntry(EdmTechProvider.nameETBaseTwoKeyNav)
+        .isKeyPredicate(0, "PropertyInt16", "1")
+        .isKeyPredicate(1, "PropertyString", "'2'")
         .n()
         .isComplex("PropertyComplex")
         .n()
@@ -1106,6 +1198,9 @@ public class TestByAbapResourcePath {
         .first()
         .isEntitySet("ESTwoKeyNav")
         .isType(EdmTechProvider.nameETTwoKeyNav)
+        .isKeyPredicate(0, "PropertyInt16", "1")
+        .isKeyPredicate(1, "PropertyString", "'2'")
+
         .isTypeFilterOnEntry(EdmTechProvider.nameETBaseTwoKeyNav)
         .n()
         .isComplex("PropertyComplexTwoPrim")
@@ -1119,6 +1214,8 @@ public class TestByAbapResourcePath {
         .first()
         .isEntitySet("ESTwoKeyNav")
         .isType(EdmTechProvider.nameETTwoKeyNav)
+        .isKeyPredicate(0, "PropertyInt16", "1")
+        .isKeyPredicate(1, "PropertyString", "'2'")
         .isTypeFilterOnEntry(EdmTechProvider.nameETBaseTwoKeyNav)
         .n()
         .isComplex("PropertyComplexTwoPrim")
@@ -1132,6 +1229,7 @@ public class TestByAbapResourcePath {
         .isKind(UriInfoKind.resource).goPath()
         .first()
         .isEntitySet("ESKeyNav")
+        .isKeyPredicate(0, "PropertyInt16", "1")
         .n()
         .isNav("NavPropertyETTwoKeyNavMany");
 
@@ -1139,6 +1237,7 @@ public class TestByAbapResourcePath {
         .isKind(UriInfoKind.resource).goPath()
         .first()
         .isEntitySet("ESKeyNav")
+        .isKeyPredicate(0, "PropertyInt16", "1")
         .n()
         .isNav("NavPropertyETKeyNavMany");
 
@@ -1146,6 +1245,7 @@ public class TestByAbapResourcePath {
         .isKind(UriInfoKind.resource).goPath()
         .first()
         .isEntitySet("ESKeyNav")
+        .isKeyPredicate(0, "PropertyInt16", "1")
         .n()
         .isNav("NavPropertyETKeyNavMany");
 
@@ -1153,8 +1253,10 @@ public class TestByAbapResourcePath {
         .isKind(UriInfoKind.resource).goPath()
         .first()
         .isEntitySet("ESKeyNav")
+        .isKeyPredicate(0, "PropertyInt16", "1")
         .n()
         .isNav("NavPropertyETKeyNavMany")
+        .isKeyPredicate(0, "PropertyInt16", "2")
         .n()
         .isSimple("PropertyInt16");
 
@@ -1162,6 +1264,7 @@ public class TestByAbapResourcePath {
         .isKind(UriInfoKind.resource).goPath()
         .first()
         .isEntitySet("ESKeyNav")
+        .isKeyPredicate(0, "PropertyInt16", "1")
         .n()
         .isNav("NavPropertyETKeyNavMany")
         .n()
@@ -1171,18 +1274,23 @@ public class TestByAbapResourcePath {
         .isKind(UriInfoKind.resource).goPath()
         .first()
         .isEntitySet("ESKeyNav")
+        .isKeyPredicate(0, "PropertyInt16", "1")
         .n()
         .isNav("NavPropertyETKeyNavMany")
-        .isType(EdmTechProvider.nameETKeyNav, false);
+        .isType(EdmTechProvider.nameETKeyNav, false)
+        .isKeyPredicate(0, "PropertyInt16", "2");
 
     testUri.run("ESKeyNav(1)/NavPropertyETTwoKeyNavMany(PropertyInt16=2,PropertyString='3')"
         + "/NavPropertyETKeyNavMany(4)")
         .isKind(UriInfoKind.resource).goPath()
         .first()
         .isEntitySet("ESKeyNav")
+        .isKeyPredicate(0, "PropertyInt16", "1")
         .n()
         .isNav("NavPropertyETTwoKeyNavMany")
         .isType(EdmTechProvider.nameETTwoKeyNav, false)
+        .isKeyPredicate(0, "PropertyInt16", "2")
+        .isKeyPredicate(1, "PropertyString", "'3'")
         .n()
         .isNav("NavPropertyETKeyNavMany")
         .isType(EdmTechProvider.nameETKeyNav, false);
@@ -1191,6 +1299,7 @@ public class TestByAbapResourcePath {
         .isKind(UriInfoKind.resource).goPath()
         .first()
         .isEntitySet("ESKeyNav")
+        .isKeyPredicate(0, "PropertyInt16", "1")
         .n()
         .isComplex("PropertyComplex")
         .n()
@@ -1202,6 +1311,7 @@ public class TestByAbapResourcePath {
         .isKind(UriInfoKind.resource).goPath()
         .first()
         .isEntitySet("ESKeyNav")
+        .isKeyPredicate(0, "PropertyInt16", "1")
         .n()
         .isNav("NavPropertyETTwoKeyNavMany")
         .n()
@@ -1215,6 +1325,7 @@ public class TestByAbapResourcePath {
         .isKind(UriInfoKind.resource).goPath()
         .first()
         .isEntitySet("ESKeyNav")
+        .isKeyPredicate(0, "PropertyInt16", "1")
         .n()
         .isNav("NavPropertyETMediaMany")
         .isType(EdmTechProvider.nameETMedia, false)
@@ -1226,6 +1337,7 @@ public class TestByAbapResourcePath {
         .isKind(UriInfoKind.resource).goPath()
         .first()
         .isEntitySet("ESKeyNav")
+        .isKeyPredicate(0, "PropertyInt16", "1")
         .n()
         .isNav("NavPropertyETTwoKeyNavMany")
         .n()
@@ -1240,6 +1352,7 @@ public class TestByAbapResourcePath {
         .isKind(UriInfoKind.resource).goPath()
         .first()
         .isEntitySet("ESKeyNav")
+        .isKeyPredicate(0, "PropertyInt16", "1")
         .n()
         .isNav("NavPropertyETTwoKeyNavMany")
         .n()
@@ -1256,6 +1369,8 @@ public class TestByAbapResourcePath {
         .first()
         .isEntitySet("ESTwoKeyNav")
         .isType(EdmTechProvider.nameETTwoKeyNav)
+        .isKeyPredicate(0, "PropertyInt16", "1")
+        .isKeyPredicate(1, "PropertyString", "'2'")
         .isTypeFilterOnEntry(EdmTechProvider.nameETBaseTwoKeyNav)
         .n()
         .isNav("NavPropertyETKeyNavMany");
@@ -1266,6 +1381,8 @@ public class TestByAbapResourcePath {
         .first()
         .isEntitySet("ESTwoKeyNav")
         .isType(EdmTechProvider.nameETTwoKeyNav)
+        .isKeyPredicate(0, "PropertyInt16", "1")
+        .isKeyPredicate(1, "PropertyString", "'2'")
         .isTypeFilterOnEntry(EdmTechProvider.nameETBaseTwoKeyNav)
         .n()
         .isNav("NavPropertyETKeyNavMany");
@@ -1276,6 +1393,8 @@ public class TestByAbapResourcePath {
         .first()
         .isEntitySet("ESTwoKeyNav")
         .isType(EdmTechProvider.nameETTwoKeyNav)
+        .isKeyPredicate(0, "PropertyInt16", "1")
+        .isKeyPredicate(1, "PropertyString", "'2'")
         .isTypeFilterOnEntry(EdmTechProvider.nameETBaseTwoKeyNav)
         .n()
         .isNav("NavPropertyETTwoKeyNavMany")
@@ -1288,12 +1407,17 @@ public class TestByAbapResourcePath {
         .isKind(UriInfoKind.resource).goPath()
         .first()
         .isEntitySet("ESKeyNav")
+        .isKeyPredicate(0, "PropertyInt16", "1")
         .n()
         .isNav("NavPropertyETTwoKeyNavMany")
+        .isKeyPredicate(0, "PropertyInt16", "2")
+        .isKeyPredicate(1, "PropertyString", "'3'")
         .n()
         .isNav("NavPropertyETTwoKeyNavMany")
         .isType(EdmTechProvider.nameETTwoKeyNav)
         .isTypeFilterOnCollection(EdmTechProvider.nameETBaseTwoKeyNav)
+        .isKeyPredicate(0, "PropertyInt16", "4")
+        .isKeyPredicate(1, "PropertyString", "'5'")
         .isTypeFilterOnEntry(EdmTechProvider.nameETTwoBaseTwoKeyNav)
         .n()
         .isNav("NavPropertyETBaseTwoKeyNavMany");
@@ -1304,12 +1428,17 @@ public class TestByAbapResourcePath {
         .isKind(UriInfoKind.resource).goPath()
         .first()
         .isEntitySet("ESKeyNav")
+        .isKeyPredicate(0, "PropertyInt16", "1")
         .n()
         .isNav("NavPropertyETTwoKeyNavMany")
+        .isKeyPredicate(0, "PropertyInt16", "2")
+        .isKeyPredicate(1, "PropertyString", "'3'")
         .n()
         .isNav("NavPropertyETTwoKeyNavMany")
         .isType(EdmTechProvider.nameETTwoKeyNav)
         .isTypeFilterOnCollection(EdmTechProvider.nameETBaseTwoKeyNav)
+        .isKeyPredicate(0, "PropertyInt16", "4")
+        .isKeyPredicate(1, "PropertyString", "'5'")
         .n()
         .isNav("NavPropertyETKeyNavMany");
 
@@ -1328,6 +1457,7 @@ public class TestByAbapResourcePath {
         .isKind(UriInfoKind.resource).goPath()
         .first()
         .isEntitySet("ESAllPrim")
+        .isKeyPredicate(0, "PropertyInt16", "1")
         .n()
         .isSimple("PropertyByte");
 
@@ -1335,6 +1465,7 @@ public class TestByAbapResourcePath {
         .isKind(UriInfoKind.resource).goPath()
         .first()
         .isEntitySet("ESAllPrim")
+        .isKeyPredicate(0, "PropertyInt16", "1")
         .n()
         .isSimple("PropertyByte")
         .n()
@@ -1344,6 +1475,7 @@ public class TestByAbapResourcePath {
         .isKind(UriInfoKind.resource).goPath()
         .first()
         .isEntitySet("ESMixPrimCollComp")
+        .isKeyPredicate(0, "PropertyInt16", "1")
         .n()
         .isComplex("PropertyComplex")
         .n()
@@ -1356,6 +1488,7 @@ public class TestByAbapResourcePath {
         .isKind(UriInfoKind.resource).goPath()
         .first()
         .isEntitySet("ESCollAllPrim")
+        .isKeyPredicate(0, "PropertyInt16", "1")
         .n()
         .isSimple("CollPropertyString")
         .isType(EdmTechProvider.nameString, true);
@@ -1364,6 +1497,7 @@ public class TestByAbapResourcePath {
         .isKind(UriInfoKind.resource).goPath()
         .first()
         .isEntitySet("ESKeyNav")
+        .isKeyPredicate(0, "PropertyInt16", "1")
         .n()
         .isNav("NavPropertyETTwoKeyNavMany")
         .n()
@@ -1374,6 +1508,7 @@ public class TestByAbapResourcePath {
         .isKind(UriInfoKind.resource).goPath()
         .first()
         .isEntitySet("ESKeyNav")
+        .isKeyPredicate(0, "PropertyInt16", "1")
         .n()
         .isNav("NavPropertyETTwoKeyNavMany")
         .n()
@@ -1397,12 +1532,14 @@ public class TestByAbapResourcePath {
         .isKind(UriInfoKind.resource).goPath()
         .first()
         .isEntitySet("ESAllPrim")
+        .isKeyPredicate(0, "PropertyInt16", "-32768")
         .n()
         .isRef();
     testUri.run("ESKeyNav(1)/NavPropertyETTwoKeyNavMany/$ref")
         .isKind(UriInfoKind.resource).goPath()
         .first()
         .isEntitySet("ESKeyNav")
+        .isKeyPredicate(0, "PropertyInt16", "1")
         .n()
         .isNav("NavPropertyETTwoKeyNavMany")
         .n()
@@ -1411,6 +1548,7 @@ public class TestByAbapResourcePath {
         .isKind(UriInfoKind.resource).goPath()
         .first()
         .isEntitySet("ESKeyNav")
+        .isKeyPredicate(0, "PropertyInt16", "1")
         .n()
         .isNav("NavPropertyETTwoKeyNavMany")
         .n()
@@ -1432,6 +1570,7 @@ public class TestByAbapResourcePath {
         .first()
         .isFunctionImport("FICRTETTwoKeyNavParam")
         .isFunction("UFCRTETTwoKeyNavParam")
+        .isParameter(0, "ParameterInt16", "1")
         .isType(EdmTechProvider.nameETTwoKeyNav)
         .isTypeFilterOnEntry(EdmTechProvider.nameETBaseTwoKeyNav)
         .n()
@@ -1444,8 +1583,11 @@ public class TestByAbapResourcePath {
         .first()
         .isFunctionImport("FICRTESTwoKeyNavParam")
         .isFunction("UFCRTESTwoKeyNavParam")
+        .isParameter(0, "ParameterInt16", "1")
         .isType(EdmTechProvider.nameETTwoKeyNav)
         .isTypeFilterOnCollection(EdmTechProvider.nameETBaseTwoKeyNav)
+        .isKeyPredicate(0, "PropertyInt16", "2")
+        .isKeyPredicate(1, "PropertyString", "'3'")
         .n()
         .isFunction("BFCETBaseTwoKeyNavRTETTwoKeyNav");
   }
@@ -1463,7 +1605,10 @@ public class TestByAbapResourcePath {
     testUri.run("FICRTETTwoKeyNavParam(ParameterInt16=1)(PropertyInt16=2,PropertyString='3')")
         .isKind(UriInfoKind.resource).goPath()
         .first()
-        .isFunctionImport("FICRTETTwoKeyNavParam");
+        .isFunctionImport("FICRTETTwoKeyNavParam")
+        .isParameter(0, "ParameterInt16", "1")
+        .isKeyPredicate(0, "PropertyInt16", "2")
+        .isKeyPredicate(1, "PropertyString", "'3'");
 
     testUri.run("FICRTETMedia()/$value")
         .isKind(UriInfoKind.resource).goPath()
@@ -1493,6 +1638,7 @@ public class TestByAbapResourcePath {
         .first()
         .isFunctionImport("FICRTETTwoKeyNavParam")
         .isFunction("UFCRTETTwoKeyNavParam")
+        .isParameter(0, "ParameterInt16", "1")
         .isType(EdmTechProvider.nameETTwoKeyNav)
         .isTypeFilterOnEntry(EdmTechProvider.nameETBaseTwoKeyNav);
 
@@ -1502,6 +1648,9 @@ public class TestByAbapResourcePath {
         .first()
         .isFunctionImport("FICRTETTwoKeyNavParam")
         .isFunction("UFCRTETTwoKeyNavParam")
+        .isParameter(0, "ParameterInt16", "1")
+        .isKeyPredicate(0, "PropertyInt16", "2")
+        .isKeyPredicate(1, "PropertyString", "'3'")
         .isType(EdmTechProvider.nameETTwoKeyNav)
         .isTypeFilterOnEntry(EdmTechProvider.nameETBaseTwoKeyNav);
 
@@ -1511,8 +1660,11 @@ public class TestByAbapResourcePath {
         .first()
         .isFunctionImport("FICRTESTwoKeyNavParam")
         .isFunction("UFCRTESTwoKeyNavParam")
+        .isParameter(0, "ParameterInt16", "1")
         .isType(EdmTechProvider.nameETTwoKeyNav)
-        .isTypeFilterOnCollection(EdmTechProvider.nameETBaseTwoKeyNav);
+        .isTypeFilterOnCollection(EdmTechProvider.nameETBaseTwoKeyNav)
+        .isKeyPredicate(0, "PropertyInt16", "2")
+        .isKeyPredicate(1, "PropertyString", "'3'");
   }
 
   @Test
@@ -1523,6 +1675,8 @@ public class TestByAbapResourcePath {
         .first()
         .isFunctionImport("FICRTESMixPrimCollCompTwoParam")
         .isFunction("UFCRTESMixPrimCollCompTwoParam")
+        .isParameter(0, "ParameterInt16", "1")
+        .isParameter(1, "ParameterString", "'2'")
         .isType(EdmTechProvider.nameETMixPrimCollComp);
 
     testUri.run("FINRTESMixPrimCollCompTwoParam(ParameterInt16=1,ParameterString='2')")
@@ -1530,6 +1684,8 @@ public class TestByAbapResourcePath {
         .first()
         .isFunctionImport("FINRTESMixPrimCollCompTwoParam")
         .isFunction("UFNRTESMixPrimCollCompTwoParam")
+        .isParameter(0, "ParameterInt16", "1")
+        .isParameter(1, "ParameterString", "'2'")
         .isType(EdmTechProvider.nameETMixPrimCollComp);
 
     testUri.run("FICRTESMixPrimCollCompTwoParam(ParameterInt16=1,ParameterString='2')/$count")
@@ -1537,6 +1693,8 @@ public class TestByAbapResourcePath {
         .first()
         .isFunctionImport("FICRTESMixPrimCollCompTwoParam")
         .isFunction("UFCRTESMixPrimCollCompTwoParam")
+        .isParameter(0, "ParameterInt16", "1")
+        .isParameter(1, "ParameterString", "'2'")
         .isType(EdmTechProvider.nameETMixPrimCollComp)
         .n()
         .isCount();
@@ -1567,6 +1725,7 @@ public class TestByAbapResourcePath {
         .first()
         .isFunctionImport("FICRTESTwoKeyNavParam")
         .isFunction("UFCRTESTwoKeyNavParam")
+        .isParameter(0, "ParameterInt16", "1")
         .isType(EdmTechProvider.nameETTwoKeyNav)
         .isTypeFilterOnCollection(EdmTechProvider.nameETBaseTwoKeyNav);
 
@@ -1575,6 +1734,7 @@ public class TestByAbapResourcePath {
         .first()
         .isFunctionImport("FICRTESTwoKeyNavParam")
         .isFunction("UFCRTESTwoKeyNavParam")
+        .isParameter(0, "ParameterInt16", "1")
         .isType(EdmTechProvider.nameETTwoKeyNav)
         .isTypeFilterOnCollection(EdmTechProvider.nameETBaseTwoKeyNav)
         .n()
@@ -1586,8 +1746,11 @@ public class TestByAbapResourcePath {
         .first()
         .isFunctionImport("FICRTESTwoKeyNavParam")
         .isFunction("UFCRTESTwoKeyNavParam")
+        .isParameter(0, "ParameterInt16", "1")
         .isType(EdmTechProvider.nameETTwoKeyNav)
-        .isTypeFilterOnCollection(EdmTechProvider.nameETBaseTwoKeyNav);
+        .isTypeFilterOnCollection(EdmTechProvider.nameETBaseTwoKeyNav)
+        .isKeyPredicate(0, "PropertyInt16", "2")
+        .isKeyPredicate(1, "PropertyString", "'3'");
 
     testUri.run("FICRTESTwoKeyNavParam(ParameterInt16=1)"
         + "/com.sap.odata.test1.ETBaseTwoKeyNav(PropertyInt16=2,PropertyString='3')"
@@ -1596,8 +1759,11 @@ public class TestByAbapResourcePath {
         .first()
         .isFunctionImport("FICRTESTwoKeyNavParam")
         .isFunction("UFCRTESTwoKeyNavParam")
+        .isParameter(0, "ParameterInt16", "1")
         .isType(EdmTechProvider.nameETTwoKeyNav)
         .isTypeFilterOnCollection(EdmTechProvider.nameETBaseTwoKeyNav)
+        .isKeyPredicate(0, "PropertyInt16", "2")
+        .isKeyPredicate(1, "PropertyString", "'3'")
         .isTypeFilterOnEntry(EdmTechProvider.nameETTwoBaseTwoKeyNav);
 
   }
@@ -1629,7 +1795,8 @@ public class TestByAbapResourcePath {
         .isType(EdmTechProvider.nameETTwoKeyNav)
         .isTypeFilter(EdmTechProvider.nameETBaseTwoKeyNav)
         .n()
-        .isNav("NavPropertyETKeyNavMany");
+        .isNav("NavPropertyETKeyNavMany")
+        .isKeyPredicate(0, "PropertyInt16", "1");
 
   }
 
@@ -1705,7 +1872,10 @@ public class TestByAbapResourcePath {
         .first()
         .isSingleton("SINav")
         .n()
-        .isNav("NavPropertyETTwoKeyNavMany");
+        .isNav("NavPropertyETTwoKeyNavMany")
+        .isKeyPredicate(0, "PropertyInt16", "1")
+        .isKeyPredicate(1, "PropertyString", "'2'");
+
   }
 
   @Test