blob: 82335a3d7fed986c1dd2a89b305cf2aa4a23f592 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.olingo.server.core.uri.parser;
import java.util.Arrays;
import java.util.Collections;
import org.apache.olingo.commons.api.edm.Edm;
import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeKind;
import org.apache.olingo.commons.api.edm.FullQualifiedName;
import org.apache.olingo.commons.api.edmx.EdmxReference;
import org.apache.olingo.commons.api.format.ContentType;
import org.apache.olingo.server.api.OData;
import org.apache.olingo.server.api.uri.UriInfoKind;
import org.apache.olingo.server.api.uri.UriResourceKind;
import org.apache.olingo.server.api.uri.queryoption.expression.BinaryOperatorKind;
import org.apache.olingo.server.api.uri.queryoption.expression.MethodKind;
import org.apache.olingo.server.core.uri.parser.UriParserSemanticException.MessageKeys;
import org.apache.olingo.server.core.uri.parser.search.SearchParserException;
import org.apache.olingo.server.core.uri.testutil.FilterValidator;
import org.apache.olingo.server.core.uri.testutil.TestUriValidator;
import org.apache.olingo.server.core.uri.validator.UriValidationException;
import org.apache.olingo.server.tecsvc.provider.ActionProvider;
import org.apache.olingo.server.tecsvc.provider.ComplexTypeProvider;
import org.apache.olingo.server.tecsvc.provider.ContainerProvider;
import org.apache.olingo.server.tecsvc.provider.EdmTechProvider;
import org.apache.olingo.server.tecsvc.provider.EntityTypeProvider;
import org.apache.olingo.server.tecsvc.provider.EnumTypeProvider;
import org.apache.olingo.server.tecsvc.provider.FunctionProvider;
import org.apache.olingo.server.tecsvc.provider.PropertyProvider;
import org.apache.olingo.server.tecsvc.provider.TypeDefinitionProvider;
import org.junit.Test;
public class TestFullResourcePath {
private static final OData oData = OData.newInstance();
private static final Edm edm = oData.createServiceMetadata(
new EdmTechProvider(), Collections.<EdmxReference> emptyList()).getEdm();
private final TestUriValidator testUri = new TestUriValidator().setEdm(edm);
private final FilterValidator testFilter = new FilterValidator().setEdm(edm);
@Test
public void allowedSystemQueryOptionsOnAll() throws Exception {
testUri.run("$all", "$count=true&$format=json&$search=abc&$skip=5&$top=5&$skiptoken=abc")
.isKind(UriInfoKind.all)
.isInlineCountText("true")
.isFormatText("json")
.isSearchSerialized("'abc'")
.isSkipText("5")
.isTopText("5")
.isSkipTokenText("abc");
}
@Test
public void allowedSystemQueryOptionsOnCrossjoin() throws Exception {
testUri.run("$crossjoin(ESAllPrim,ESTwoPrim)", "$count=true&$expand=ESAllPrim"
+ "&$filter=ESAllPrim/PropertyInt16 eq 2&$format=json&$orderby=ESAllPrim/PropertyInt16"
+ "&$search=abc&$skip=5&$top=5&$skiptoken=abc")
.isKind(UriInfoKind.crossjoin)
.isInlineCountText("true")
.goExpand().goPath().isEntitySet("ESAllPrim")
.goUpExpandValidator().goUpToUriValidator()
.goFilter().left().goPath().first().isEntitySet("ESAllPrim")
.n().isPrimitiveProperty("PropertyInt16", PropertyProvider.nameInt16, false)
.goUpFilterValidator().goUpToUriValidator()
.isFormatText("json")
.isSearchSerialized("'abc'")
.isSkipText("5")
.isTopText("5")
.isSkipTokenText("abc");
}
@Test
public void trimQueryOptionsValue() throws Exception {
// OLINGO-846 trim query option value
testUri.run("ESAllPrim", "$filter= PropertyInt16 eq 12 ")
.isKind(UriInfoKind.resource).goPath()
.first().isEntitySet("ESAllPrim");
// OLINGO-846 trim query option value
testUri.run("ESAllPrim", "$filter= PropertyInt16 eq 12 ")
.isKind(UriInfoKind.resource).goFilter().isBinary(BinaryOperatorKind.EQ).is("<<PropertyInt16> eq <12>>");
}
@Test
public void valueOnNonMediaEntity() throws Exception {
testUri.runEx("ESAllPrim/$value").isExSemantic(UriParserSemanticException.MessageKeys.ONLY_FOR_TYPED_PARTS);
testUri.runEx("ESAllPrim(1)/NavPropertyETTwoPrimMany/$value").isExSemantic(
UriParserSemanticException.MessageKeys.ONLY_FOR_TYPED_PARTS);
testUri.runEx("FICRTCollESMedia()/$value")
.isExSemantic(UriParserSemanticException.MessageKeys.ONLY_FOR_TYPED_PARTS);
testUri.runEx("ESAllPrim(1)/$value").isExSemantic(UriParserSemanticException.MessageKeys.NOT_A_MEDIA_RESOURCE);
testUri.runEx("ESAllPrim(1)/NavPropertyETTwoPrimOne/$value").isExSemantic(
UriParserSemanticException.MessageKeys.NOT_A_MEDIA_RESOURCE);
testUri.runEx("FICRTETKeyNav()/$value").isExSemantic(UriParserSemanticException.MessageKeys.NOT_A_MEDIA_RESOURCE);
}
@Test
public void enumAndTypeDefAsKey() throws Exception {
testUri
.run("ESMixEnumDefCollComp(PropertyEnumString=olingo.odata.test1.ENString'String1',PropertyDefString='abc')")
.goPath()
.at(0)
.isEntitySet("ESMixEnumDefCollComp")
.isKeyPredicate(0, "PropertyEnumString", "olingo.odata.test1.ENString'String1'")
.isKeyPredicate(1, "PropertyDefString", "'abc'");
testFilter.runOnETMixEnumDefCollComp("PropertyEnumString has Namespace1_Alias.ENString'String1'")
.is("<<PropertyEnumString> has <olingo.odata.test1.ENString<String1>>>");
testUri
.run("ESMixEnumDefCollComp(PropertyEnumString=Namespace1_Alias.ENString'String1',PropertyDefString='abc')")
.goPath()
.at(0)
.isEntitySet("ESMixEnumDefCollComp")
.isKeyPredicate(0, "PropertyEnumString", "Namespace1_Alias.ENString'String1'")
.isKeyPredicate(1, "PropertyDefString", "'abc'");
}
@Test
public void functionBound_varOverloading() throws Exception {
// on ESTwoKeyNav
testUri.run("ESTwoKeyNav/olingo.odata.test1.BFCESTwoKeyNavRTESTwoKeyNav()").goPath()
.at(0)
.isUriPathInfoKind(UriResourceKind.entitySet)
.isType(EntityTypeProvider.nameETTwoKeyNav, true)
.at(1)
.isUriPathInfoKind(UriResourceKind.function)
.isType(EntityTypeProvider.nameETTwoKeyNav);
// with string parameter
testUri.run("ESTwoKeyNav/olingo.odata.test1.BFCESTwoKeyNavRTESTwoKeyNav(ParameterString='ABC')").goPath()
.at(0)
.isUriPathInfoKind(UriResourceKind.entitySet)
.isType(EntityTypeProvider.nameETTwoKeyNav, true)
.at(1)
.isUriPathInfoKind(UriResourceKind.function)
.isType(EntityTypeProvider.nameETTwoKeyNav);
// with string parameter
testUri.run("ESTwoKeyNav/olingo.odata.test1.BFCESTwoKeyNavRTESTwoKeyNav()").goPath()
.at(0)
.isUriPathInfoKind(UriResourceKind.entitySet)
.isType(EntityTypeProvider.nameETTwoKeyNav, true)
.at(1)
.isUriPathInfoKind(UriResourceKind.function)
.isType(EntityTypeProvider.nameETTwoKeyNav);
}
@Test
public void runBfuncBnCpropCastRtEs() throws Exception {
testUri.run("ESTwoKeyNav(PropertyInt16=1,PropertyString='2')/olingo.odata.test1.ETBaseTwoKeyNav"
+ "/PropertyComp/olingo.odata.test1.BFCCTPrimCompRTESBaseTwoKeyNav()")
.isKind(UriInfoKind.resource).goPath()
.first()
.isEntitySet("ESTwoKeyNav")
.isType(EntityTypeProvider.nameETTwoKeyNav, false)
.isKeyPredicate(0, "PropertyInt16", "1")
.isKeyPredicate(1, "PropertyString", "'2'")
.isTypeFilterOnEntry(EntityTypeProvider.nameETBaseTwoKeyNav)
.n()
.isComplex("PropertyComp")
.isType(ComplexTypeProvider.nameCTPrimComp, false)
.n()
.isFunction("BFCCTPrimCompRTESBaseTwoKeyNav");
testUri.run("ESTwoKeyNav(PropertyInt16=1,PropertyString='2')/olingo.odata.test1.ETBaseTwoKeyNav"
+ "/PropertyComp/olingo.odata.test1.BFCCTPrimCompRTESBaseTwoKeyNav()/$count")
.isKind(UriInfoKind.resource).goPath()
.first()
.isEntitySet("ESTwoKeyNav")
.isType(EntityTypeProvider.nameETTwoKeyNav, false)
.isKeyPredicate(0, "PropertyInt16", "1")
.isKeyPredicate(1, "PropertyString", "'2'")
.isTypeFilterOnEntry(EntityTypeProvider.nameETBaseTwoKeyNav)
.n()
.isComplex("PropertyComp")
.isType(ComplexTypeProvider.nameCTPrimComp, false)
.n()
.isFunction("BFCCTPrimCompRTESBaseTwoKeyNav")
.isType(EntityTypeProvider.nameETBaseTwoKeyNav)
.n()
.isUriPathInfoKind(UriResourceKind.count);
}
@Test
public void runBfuncBnCpropCollRtEs() throws Exception {
testUri.run("ESKeyNav(PropertyInt16=1)/CollPropertyComp/olingo.odata.test1.BFCCollCTPrimCompRTESAllPrim()")
.isKind(UriInfoKind.resource).goPath()
.first()
.isEntitySet("ESKeyNav")
.isKeyPredicate(0, "PropertyInt16", "1")
.n()
.isUriPathInfoKind(UriResourceKind.complexProperty)
.isComplex("CollPropertyComp")
.isType(ComplexTypeProvider.nameCTPrimComp, true)
.n()
.isFunction("BFCCollCTPrimCompRTESAllPrim");
testUri
.run("ESKeyNav(PropertyInt16=1)/CollPropertyComp/olingo.odata.test1.BFCCollCTPrimCompRTESAllPrim()/$count")
.isKind(UriInfoKind.resource).goPath()
.first()
.isEntitySet("ESKeyNav")
.isKeyPredicate(0, "PropertyInt16", "1")
.n()
.isUriPathInfoKind(UriResourceKind.complexProperty)
.isComplex("CollPropertyComp")
.isType(ComplexTypeProvider.nameCTPrimComp, true)
.n()
.isFunction("BFCCollCTPrimCompRTESAllPrim")
.isType(EntityTypeProvider.nameETAllPrim, true)
.n()
.isUriPathInfoKind(UriResourceKind.count);
}
@Test
public void runBfuncBnCpropRtEs() throws Exception {
testUri.run("ESTwoKeyNav(PropertyInt16=1,PropertyString='2')"
+ "/PropertyComp/olingo.odata.test1.BFCCTPrimCompRTESTwoKeyNav()")
.isKind(UriInfoKind.resource).goPath()
.first()
.isEntitySet("ESTwoKeyNav")
.isKeyPredicate(0, "PropertyInt16", "1")
.isKeyPredicate(1, "PropertyString", "'2'")
.n()
.isUriPathInfoKind(UriResourceKind.complexProperty)
.isComplex("PropertyComp")
.isType(ComplexTypeProvider.nameCTPrimComp, false)
.n()
.isFunction("BFCCTPrimCompRTESTwoKeyNav");
testUri.run("ESTwoKeyNav(PropertyInt16=1,PropertyString='2')"
+ "/PropertyComp/olingo.odata.test1.BFCCTPrimCompRTESTwoKeyNav()/$count")
.isKind(UriInfoKind.resource).goPath()
.first()
.isEntitySet("ESTwoKeyNav")
.isKeyPredicate(0, "PropertyInt16", "1")
.isKeyPredicate(1, "PropertyString", "'2'")
.n()
.isUriPathInfoKind(UriResourceKind.complexProperty)
.isComplex("PropertyComp")
.isType(ComplexTypeProvider.nameCTPrimComp, false)
.n()
.isFunction("BFCCTPrimCompRTESTwoKeyNav")
.isType(EntityTypeProvider.nameETTwoKeyNav)
.n()
.isUriPathInfoKind(UriResourceKind.count);
}
@Test
public void runBfuncBnEntityRtEs() throws Exception {
testUri.run("ESTwoKeyNav(PropertyInt16=1,PropertyString='2')/olingo.odata.test1.BFCETTwoKeyNavRTESTwoKeyNav()")
.isKind(UriInfoKind.resource).goPath()
.first()
.isEntitySet("ESTwoKeyNav")
.isKeyPredicate(0, "PropertyInt16", "1")
.isKeyPredicate(1, "PropertyString", "'2'")
.n()
.isFunction("BFCETTwoKeyNavRTESTwoKeyNav");
}
@Test
public void runBfuncBnEntityCastRtEs() throws Exception {
testUri
.run("ESTwoKeyNav(PropertyInt16=1,PropertyString='2')/olingo.odata.test1.ETBaseTwoKeyNav"
+ "/olingo.odata.test1.BFCETBaseTwoKeyNavRTESTwoKeyNav()")
.isKind(UriInfoKind.resource).goPath()
.first()
.isEntitySet("ESTwoKeyNav")
.isType(EntityTypeProvider.nameETTwoKeyNav, false)
.isKeyPredicate(0, "PropertyInt16", "1")
.isKeyPredicate(1, "PropertyString", "'2'")
.isTypeFilterOnEntry(EntityTypeProvider.nameETBaseTwoKeyNav)
.n()
.isFunction("BFCETBaseTwoKeyNavRTESTwoKeyNav");
testUri
.run("ESTwoKeyNav/olingo.odata.test1.ETBaseTwoKeyNav(PropertyInt16=1,PropertyString='(''2'')')"
+ "/olingo.odata.test1.BFCETBaseTwoKeyNavRTESTwoKeyNav()")
.isKind(UriInfoKind.resource).goPath()
.first()
.isEntitySet("ESTwoKeyNav")
.isType(EntityTypeProvider.nameETTwoKeyNav, false)
.isTypeFilterOnCollection(EntityTypeProvider.nameETBaseTwoKeyNav)
.isKeyPredicate(0, "PropertyInt16", "1")
.isKeyPredicate(1, "PropertyString", "'(''2'')'")
.n()
.isFunction("BFCETBaseTwoKeyNavRTESTwoKeyNav");
}
@Test
public void runBfuncBnEsCastRtEs() throws Exception {
testUri.run("ESTwoKeyNav/olingo.odata.test1.ETBaseTwoKeyNav"
+ "/olingo.odata.test1.BFCESBaseTwoKeyNavRTESBaseTwoKey()")
.isKind(UriInfoKind.resource).goPath()
.first()
.isEntitySet("ESTwoKeyNav")
.isType(EntityTypeProvider.nameETTwoKeyNav, true)
.isTypeFilterOnCollection(EntityTypeProvider.nameETBaseTwoKeyNav)
.n()
.isFunction("BFCESBaseTwoKeyNavRTESBaseTwoKey");
testUri.run("ESTwoKeyNav/olingo.odata.test1.ETBaseTwoKeyNav"
+ "/olingo.odata.test1.BFCESBaseTwoKeyNavRTESBaseTwoKey()"
+ "/olingo.odata.test1.ETTwoBaseTwoKeyNav")
.isKind(UriInfoKind.resource).goPath()
.first()
.isEntitySet("ESTwoKeyNav")
.isType(EntityTypeProvider.nameETTwoKeyNav, true)
.isTypeFilterOnCollection(EntityTypeProvider.nameETBaseTwoKeyNav)
.n()
.isFunction("BFCESBaseTwoKeyNavRTESBaseTwoKey")
.isType(EntityTypeProvider.nameETBaseTwoKeyNav)
.isTypeFilterOnCollection(EntityTypeProvider.nameETTwoBaseTwoKeyNav);
testUri.run("ESTwoKeyNav"
+ "/olingo.odata.test1.BFCESTwoKeyNavRTESTwoKeyNav()"
+ "/olingo.odata.test1.ETBaseTwoKeyNav(PropertyInt16=1,PropertyString='2')"
+ "/olingo.odata.test1.ETTwoBaseTwoKeyNav")
.isKind(UriInfoKind.resource).goPath()
.first()
.isEntitySet("ESTwoKeyNav")
.n()
.isFunction("BFCESTwoKeyNavRTESTwoKeyNav")
.isType(EntityTypeProvider.nameETTwoKeyNav)
.isTypeFilterOnCollection(EntityTypeProvider.nameETBaseTwoKeyNav)
.isKeyPredicate(0, "PropertyInt16", "1")
.isKeyPredicate(1, "PropertyString", "'2'")
.isTypeFilterOnEntry(EntityTypeProvider.nameETTwoBaseTwoKeyNav);
}
@Test
public void runBfuncBnEsRtCprop() throws Exception {
testUri.run("ESAllPrim/olingo.odata.test1.BFNESAllPrimRTCTAllPrim()")
.isKind(UriInfoKind.resource).goPath()
.first()
.isEntitySet("ESAllPrim")
.n()
.isFunction("BFNESAllPrimRTCTAllPrim")
.isType(ComplexTypeProvider.nameCTAllPrim);
testUri.run("ESTwoKeyNav/olingo.odata.test1.BFCESTwoKeyNavRTCTTwoPrim()/olingo.odata.test1.CTBase")
.isKind(UriInfoKind.resource).goPath()
.first()
.isEntitySet("ESTwoKeyNav")
.n()
.isFunction("BFCESTwoKeyNavRTCTTwoPrim")
.isType(ComplexTypeProvider.nameCTTwoPrim, false)
.isTypeFilterOnEntry(ComplexTypeProvider.nameCTBase);
}
@Test
public void runBfuncBnEsRtCpropColl() throws Exception {
testUri.run("ESTwoKeyNav/olingo.odata.test1.BFCESTwoKeyNavRTCollCTTwoPrim()")
.isKind(UriInfoKind.resource).goPath()
.first()
.isEntitySet("ESTwoKeyNav")
.n()
.isFunction("BFCESTwoKeyNavRTCollCTTwoPrim")
.isType(ComplexTypeProvider.nameCTTwoPrim, true);
testUri.run("ESTwoKeyNav/olingo.odata.test1.BFCESTwoKeyNavRTCollCTTwoPrim()/$count")
.isKind(UriInfoKind.resource).goPath()
.first()
.isEntitySet("ESTwoKeyNav")
.n()
.isFunction("BFCESTwoKeyNavRTCollCTTwoPrim")
.isType(ComplexTypeProvider.nameCTTwoPrim, true)
.n()
.isUriPathInfoKind(UriResourceKind.count);
}
@Test
public void runBfuncBnEsRtEntityPpNp() throws Exception {
testUri.run("ESTwoKeyNav/olingo.odata.test1.BFCESTwoKeyNavRTTwoKeyNav()/NavPropertyETKeyNavOne")
.isKind(UriInfoKind.resource).goPath()
.first()
.isEntitySet("ESTwoKeyNav")
.n()
.isFunction("BFCESTwoKeyNavRTTwoKeyNav")
.n()
.isNavProperty("NavPropertyETKeyNavOne", EntityTypeProvider.nameETKeyNav, false);
testUri.run("ESTwoKeyNav/olingo.odata.test1.BFCESTwoKeyNavRTTwoKeyNav()/NavPropertyETKeyNavOne/$ref")
.isKind(UriInfoKind.resource).goPath()
.first()
.isEntitySet("ESTwoKeyNav")
.n()
.isFunction("BFCESTwoKeyNavRTTwoKeyNav")
.n()
.isNavProperty("NavPropertyETKeyNavOne", EntityTypeProvider.nameETKeyNav, false)
.n()
.isUriPathInfoKind(UriResourceKind.ref);
testUri.run("ESKeyNav/olingo.odata.test1.BFCESKeyNavRTETKeyNav()/NavPropertyETMediaOne/$value")
.isKind(UriInfoKind.resource).goPath()
.first()
.isEntitySet("ESKeyNav")
.n()
.isFunction("BFCESKeyNavRTETKeyNav")
.n()
.isNavProperty("NavPropertyETMediaOne", EntityTypeProvider.nameETMedia, false)
.n()
.isValue();
testUri.run("ESKeyNav/olingo.odata.test1.BFCESKeyNavRTETKeyNavParam(ParameterString='1')"
+ "/NavPropertyETTwoKeyNavOne")
.isKind(UriInfoKind.resource).goPath()
.first()
.isEntitySet("ESKeyNav")
.n()
.isFunction("BFCESKeyNavRTETKeyNavParam")
.isParameter(0, "ParameterString", "'1'")
.n()
.isNavProperty("NavPropertyETTwoKeyNavOne", EntityTypeProvider.nameETTwoKeyNav, false);
testUri.run("ESKeyNav/olingo.odata.test1.BFCESKeyNavRTETKeyNavParam(ParameterString='1')"
+ "/NavPropertyETTwoKeyNavOne/PropertyComp")
.isKind(UriInfoKind.resource).goPath()
.first()
.isEntitySet("ESKeyNav")
.n()
.isFunction("BFCESKeyNavRTETKeyNavParam")
.isParameter(0, "ParameterString", "'1'")
.n()
.isNavProperty("NavPropertyETTwoKeyNavOne", EntityTypeProvider.nameETTwoKeyNav, false)
.n()
.isComplex("PropertyComp")
.isType(ComplexTypeProvider.nameCTPrimComp);
testUri.run("ESKeyNav/olingo.odata.test1.BFCESKeyNavRTETKeyNavParam(ParameterString='1')"
+ "/NavPropertyETTwoKeyNavOne/PropertyComp/PropertyComp")
.isKind(UriInfoKind.resource).goPath()
.first()
.isEntitySet("ESKeyNav")
.n()
.isFunction("BFCESKeyNavRTETKeyNavParam")
.isParameter(0, "ParameterString", "'1'")
.n()
.isNavProperty("NavPropertyETTwoKeyNavOne", EntityTypeProvider.nameETTwoKeyNav, false)
.n()
.isComplex("PropertyComp")
.isType(ComplexTypeProvider.nameCTPrimComp)
.n()
.isComplex("PropertyComp")
.isType(ComplexTypeProvider.nameCTAllPrim);
testUri.run("ESKeyNav/olingo.odata.test1.BFCESKeyNavRTETKeyNavParam(ParameterString='1')"
+ "/NavPropertyETTwoKeyNavOne/PropertyString")
.isKind(UriInfoKind.resource).goPath()
.first()
.isEntitySet("ESKeyNav")
.n()
.isFunction("BFCESKeyNavRTETKeyNavParam")
.isParameter(0, "ParameterString", "'1'")
.n()
.isNavProperty("NavPropertyETTwoKeyNavOne", EntityTypeProvider.nameETTwoKeyNav, false)
.n()
.isPrimitiveProperty("PropertyString", PropertyProvider.nameString, false);
testUri.run("ESKeyNav/olingo.odata.test1.BFCESKeyNavRTETKeyNavParam(ParameterString='1')"
+ "/NavPropertyETTwoKeyNavMany(PropertyInt16=2,PropertyString='3')/PropertyString")
.isKind(UriInfoKind.resource).goPath()
.first()
.isEntitySet("ESKeyNav")
.n()
.isFunction("BFCESKeyNavRTETKeyNavParam")
.isParameter(0, "ParameterString", "'1'")
.n()
.isNavProperty("NavPropertyETTwoKeyNavMany", EntityTypeProvider.nameETTwoKeyNav, false)
.isKeyPredicate(0, "PropertyInt16", "2")
.isKeyPredicate(1, "PropertyString", "'3'")
.n()
.isPrimitiveProperty("PropertyString", PropertyProvider.nameString, false);
testUri.runEx("ESKeyNav/olingo.odata.test1.BFCESKeyNavRTETKeyNavParam(WrongParameter='1')")
.isExSemantic(MessageKeys.UNKNOWN_PART);
testUri.runEx("ESKeyNav/olingo.odata.test1.BFCESKeyNavRTETKeyNavParam(ParameterString=wrong)")
.isExSemantic(MessageKeys.INVALID_KEY_VALUE);
}
@Test
public void runBfuncBnEsRtEntyPpNpCast() throws Exception {
testUri.run("ESTwoKeyNav/olingo.odata.test1.BFCESTwoKeyNavRTTwoKeyNav()"
+ "/NavPropertyETTwoKeyNavOne/olingo.odata.test1.ETBaseTwoKeyNav")
.isKind(UriInfoKind.resource).goPath()
.first()
.isEntitySet("ESTwoKeyNav")
.n()
.isFunction("BFCESTwoKeyNavRTTwoKeyNav")
.n()
.isNavProperty("NavPropertyETTwoKeyNavOne", EntityTypeProvider.nameETTwoKeyNav, false)
.isType(EntityTypeProvider.nameETTwoKeyNav, false)
.isTypeFilterOnEntry(EntityTypeProvider.nameETBaseTwoKeyNav);
testUri
.run("ESTwoKeyNav/olingo.odata.test1.BFCESTwoKeyNavRTESTwoKeyNav()(PropertyInt16=1,PropertyString='2')"
+ "/NavPropertyETTwoKeyNavOne/olingo.odata.test1.ETTwoBaseTwoKeyNav")
.isKind(UriInfoKind.resource).goPath()
.first()
.isEntitySet("ESTwoKeyNav")
.n()
.isFunction("BFCESTwoKeyNavRTESTwoKeyNav")
.isType(EntityTypeProvider.nameETTwoKeyNav, false)
.isKeyPredicate(0, "PropertyInt16", "1")
.isKeyPredicate(1, "PropertyString", "'2'")
.n()
.isNavProperty("NavPropertyETTwoKeyNavOne", EntityTypeProvider.nameETTwoKeyNav, false)
.isType(EntityTypeProvider.nameETTwoKeyNav, false)
.isTypeFilterOnEntry(EntityTypeProvider.nameETTwoBaseTwoKeyNav);
}
@Test
public void runBfuncBnEsRtEntityPpCp() throws Exception {
testUri.run("ESKeyNav/olingo.odata.test1.BFCESKeyNavRTETKeyNav()/PropertyCompNav")
.isKind(UriInfoKind.resource).goPath()
.first()
.isEntitySet("ESKeyNav")
.n()
.isFunction("BFCESKeyNavRTETKeyNav")
.n()
.isComplex("PropertyCompNav")
.isType(ComplexTypeProvider.nameCTNavFiveProp);
testUri.run("ESKeyNav/olingo.odata.test1.BFCESKeyNavRTETKeyNav()/PropertyCompNav/PropertyInt16")
.isKind(UriInfoKind.resource).goPath()
.first()
.isEntitySet("ESKeyNav")
.n()
.isFunction("BFCESKeyNavRTETKeyNav")
.n()
.isComplex("PropertyCompNav")
.isType(ComplexTypeProvider.nameCTNavFiveProp)
.n()
.isPrimitiveProperty("PropertyInt16", PropertyProvider.nameInt16, false);
testUri.run("ESKeyNav/olingo.odata.test1.BFCESKeyNavRTETKeyNav()/PropertyCompNav/PropertyInt16/$value")
.isKind(UriInfoKind.resource).goPath()
.first()
.isEntitySet("ESKeyNav")
.n()
.isFunction("BFCESKeyNavRTETKeyNav")
.n()
.isComplex("PropertyCompNav")
.isType(ComplexTypeProvider.nameCTNavFiveProp)
.n()
.isPrimitiveProperty("PropertyInt16", PropertyProvider.nameInt16, false)
.n()
.isValue();
}
@Test
public void runBfuncBnEsRtEntyPpCpCast() throws Exception {
testUri.run("ESKeyNav/olingo.odata.test1.BFCESKeyNavRTETKeyNavParam(ParameterString='1')"
+ "/PropertyCompTwoPrim/olingo.odata.test1.CTTwoBase")
.isKind(UriInfoKind.resource).goPath()
.first()
.isEntitySet("ESKeyNav")
.n()
.isFunction("BFCESKeyNavRTETKeyNavParam")
.isParameter(0, "ParameterString", "'1'")
.n()
.isComplex("PropertyCompTwoPrim")
.isType(ComplexTypeProvider.nameCTTwoPrim)
.isTypeFilter(ComplexTypeProvider.nameCTTwoBase);
testUri.run("ESKeyNav/olingo.odata.test1.BFCESKeyNavRTETKeyNavParam(ParameterString='1')"
+ "/NavPropertyETTwoKeyNavMany(PropertyInt16=2,PropertyString='3')"
+ "/PropertyCompTwoPrim/olingo.odata.test1.CTTwoBase")
.isKind(UriInfoKind.resource).goPath()
.first()
.isEntitySet("ESKeyNav")
.n()
.isFunction("BFCESKeyNavRTETKeyNavParam")
.isParameter(0, "ParameterString", "'1'")
.n()
.isNavProperty("NavPropertyETTwoKeyNavMany", EntityTypeProvider.nameETTwoKeyNav, false)
.isKeyPredicate(0, "PropertyInt16", "2")
.isKeyPredicate(1, "PropertyString", "'3'")
.n()
.isComplex("PropertyCompTwoPrim")
.isType(ComplexTypeProvider.nameCTTwoPrim)
.isTypeFilter(ComplexTypeProvider.nameCTTwoBase);
}
@Test
public void runBfuncBnEsRtEntityPpSp() throws Exception {
testUri.run("ESKeyNav/olingo.odata.test1.BFCESKeyNavRTETKeyNav()/PropertyInt16")
.isKind(UriInfoKind.resource).goPath()
.first()
.isEntitySet("ESKeyNav")
.n()
.isFunction("BFCESKeyNavRTETKeyNav")
.n()
.isPrimitiveProperty("PropertyInt16", PropertyProvider.nameInt16, false);
testUri.run("ESKeyNav/olingo.odata.test1.BFCESKeyNavRTETKeyNav()/PropertyInt16/$value")
.isKind(UriInfoKind.resource).goPath()
.first()
.isEntitySet("ESKeyNav")
.n()
.isFunction("BFCESKeyNavRTETKeyNav")
.n()
.isPrimitiveProperty("PropertyInt16", PropertyProvider.nameInt16, false)
.n()
.isValue();
}
@Test
public void runBfuncBnEsRtEs() throws Exception {
testUri.run("ESTwoKeyNav/olingo.odata.test1.BFCESTwoKeyNavRTESTwoKeyNav()")
.isKind(UriInfoKind.resource).goPath()
.first()
.isEntitySet("ESTwoKeyNav")
.n()
.isFunction("BFCESTwoKeyNavRTESTwoKeyNav")
.isType(EntityTypeProvider.nameETTwoKeyNav);
testUri.run("ESTwoKeyNav/olingo.odata.test1.BFCESTwoKeyNavRTESTwoKeyNav(ParameterString='2')")
.isKind(UriInfoKind.resource).goPath()
.first()
.isEntitySet("ESTwoKeyNav")
.n()
.isFunction("BFCESTwoKeyNavRTESTwoKeyNav")
.isParameter(0, "ParameterString", "'2'")
.isType(EntityTypeProvider.nameETTwoKeyNav);
testUri.run("ESKeyNav/olingo.odata.test1.BFCESTwoKeyNavRTESTwoKeyNav()")
.isKind(UriInfoKind.resource).goPath()
.first()
.isEntitySet("ESKeyNav")
.n()
.isFunction("BFCESTwoKeyNavRTESTwoKeyNav")
.isType(EntityTypeProvider.nameETTwoKeyNav);
testUri.run("ESTwoKeyNav/olingo.odata.test1.BFCESTwoKeyNavRTESTwoKeyNav(ParameterString='3')")
.isKind(UriInfoKind.resource).goPath()
.first()
.isEntitySet("ESTwoKeyNav")
.n()
.isFunction("BFCESTwoKeyNavRTESTwoKeyNav")
.isParameter(0, "ParameterString", "'3'")
.isType(EntityTypeProvider.nameETTwoKeyNav);
testUri.run("ESTwoKeyNav/olingo.odata.test1.BFCESTwoKeyNavRTESTwoKeyNav()/$count")
.isKind(UriInfoKind.resource).goPath()
.first()
.isEntitySet("ESTwoKeyNav")
.n()
.isFunction("BFCESTwoKeyNavRTESTwoKeyNav")
.isType(EntityTypeProvider.nameETTwoKeyNav)
.n()
.isCount();
testUri.run("ESTwoKeyNav/olingo.odata.test1.BFCESTwoKeyNavRTESTwoKeyNav()(PropertyInt16=1,PropertyString='2')")
.isKind(UriInfoKind.resource).goPath()
.first()
.isEntitySet("ESTwoKeyNav")
.n()
.isFunction("BFCESTwoKeyNavRTESTwoKeyNav")
.isKeyPredicate(0, "PropertyInt16", "1")
.isKeyPredicate(1, "PropertyString", "'2'");
}
@Test
public void runBfuncBnEsRtEsBa() throws Exception {
testUri.run("ESKeyNav(PropertyInt16=1)/CollPropertyComp"
+ "/olingo.odata.test1.BFCCollCTPrimCompRTESAllPrim()/olingo.odata.test1.BAESAllPrimRTETAllPrim")
.isKind(UriInfoKind.resource).goPath()
.first()
.isEntitySet("ESKeyNav")
.isKeyPredicate(0, "PropertyInt16", "1")
.n()
.isComplex("CollPropertyComp")
.isType(ComplexTypeProvider.nameCTPrimComp)
.n()
.isFunction("BFCCollCTPrimCompRTESAllPrim")
.n()
.isAction("BAESAllPrimRTETAllPrim");
}
@Test
public void runBfuncBnEsRtPrim() throws Exception {
testUri.run("ESTwoKeyNav/olingo.odata.test1.BFCESTwoKeyNavRTString()")
.isKind(UriInfoKind.resource).goPath()
.first()
.isEntitySet("ESTwoKeyNav")
.n()
.isFunction("BFCESTwoKeyNavRTString");
testUri.run("ESTwoKeyNav/olingo.odata.test1.BFCESTwoKeyNavRTString()/$value")
.isKind(UriInfoKind.resource).goPath()
.first()
.isEntitySet("ESTwoKeyNav")
.n()
.isFunction("BFCESTwoKeyNavRTString")
.isType(PropertyProvider.nameString)
.n()
.isValue();
}
@Test
public void runbfuncBnEsRtPrimColl() throws Exception {
testUri.run("ESTwoKeyNav/olingo.odata.test1.BFCESTwoKeyNavRTCollString()")
.isKind(UriInfoKind.resource).goPath()
.first()
.isEntitySet("ESTwoKeyNav")
.n()
.isFunction("BFCESTwoKeyNavRTCollString")
.isType(PropertyProvider.nameString, true);
testUri.run("ESTwoKeyNav/olingo.odata.test1.BFCESTwoKeyNavRTCollString()/$count")
.isKind(UriInfoKind.resource).goPath()
.first()
.isEntitySet("ESTwoKeyNav")
.n()
.isFunction("BFCESTwoKeyNavRTCollString")
.isType(PropertyProvider.nameString, true)
.n()
.isCount();
}
@Test
public void runBfuncBnPpropCollRtEs() throws Exception {
testUri.run("ESKeyNav(1)/CollPropertyString/olingo.odata.test1.BFCCollStringRTESTwoKeyNav()")
.isKind(UriInfoKind.resource).goPath()
.first()
.isEntitySet("ESKeyNav")
.isKeyPredicate(0, "PropertyInt16", "1")
.n()
.isPrimitiveProperty("CollPropertyString", PropertyProvider.nameString, true)
.n()
.isFunction("BFCCollStringRTESTwoKeyNav")
.isType(EntityTypeProvider.nameETTwoKeyNav, true);
testUri.run("ESKeyNav(1)/CollPropertyString/olingo.odata.test1.BFCCollStringRTESTwoKeyNav()/$count")
.isKind(UriInfoKind.resource).goPath()
.first()
.isEntitySet("ESKeyNav")
.isKeyPredicate(0, "PropertyInt16", "1")
.n()
.isPrimitiveProperty("CollPropertyString", PropertyProvider.nameString, true)
.n()
.isFunction("BFCCollStringRTESTwoKeyNav")
.isType(EntityTypeProvider.nameETTwoKeyNav, true)
.n()
.isCount();
}
@Test
public void runBfuncBnPpropRtEs() throws Exception {
testUri.run("ESKeyNav(1)/PropertyString/olingo.odata.test1.BFCStringRTESTwoKeyNav()")
.isKind(UriInfoKind.resource).goPath()
.first()
.isEntitySet("ESKeyNav")
.isKeyPredicate(0, "PropertyInt16", "1")
.n()
.isPrimitiveProperty("PropertyString", PropertyProvider.nameString, false)
.n()
.isFunction("BFCStringRTESTwoKeyNav")
.isType(EntityTypeProvider.nameETTwoKeyNav, true);
testUri.run("ESKeyNav(1)/PropertyString/olingo.odata.test1.BFCStringRTESTwoKeyNav()/$count")
.isKind(UriInfoKind.resource).goPath()
.first()
.isEntitySet("ESKeyNav")
.isKeyPredicate(0, "PropertyInt16", "1")
.n()
.isPrimitiveProperty("PropertyString", PropertyProvider.nameString, false)
.n()
.isFunction("BFCStringRTESTwoKeyNav")
.isType(EntityTypeProvider.nameETTwoKeyNav, true)
.n()
.isCount();
testUri.run("ESKeyNav(1)/PropertyString/olingo.odata.test1.BFCStringRTESTwoKeyNav()/$ref")
.isKind(UriInfoKind.resource).goPath()
.first()
.isEntitySet("ESKeyNav")
.isKeyPredicate(0, "PropertyInt16", "1")
.n()
.isPrimitiveProperty("PropertyString", PropertyProvider.nameString, false)
.n()
.isFunction("BFCStringRTESTwoKeyNav")
.isType(EntityTypeProvider.nameETTwoKeyNav, true)
.n()
.isRef();
}
@Test
public void runBfuncBnSingleRtEs() throws Exception {
testUri.run("SINav/olingo.odata.test1.BFCSINavRTESTwoKeyNav()")
.isKind(UriInfoKind.resource).goPath()
.first()
.isSingleton("SINav")
.isType(EntityTypeProvider.nameETTwoKeyNav, false)
.n()
.isFunction("BFCSINavRTESTwoKeyNav");
}
@Test
public void runBfuncBnSingleCastRtEs() throws Exception {
testUri.run("SINav/olingo.odata.test1.ETBaseTwoKeyNav/olingo.odata.test1.BFCETBaseTwoKeyNavRTESBaseTwoKey()")
.isKind(UriInfoKind.resource).goPath()
.first()
.isSingleton("SINav")
.isType(EntityTypeProvider.nameETTwoKeyNav, false)
.isTypeFilter(EntityTypeProvider.nameETBaseTwoKeyNav)
.n()
.isFunction("BFCETBaseTwoKeyNavRTESBaseTwoKey");
}
@Test
public void runActionBound_on_EntityEntry() throws Exception {
testUri.run("ESTwoKeyNav(PropertyInt16=1,PropertyString='2')/olingo.odata.test1.BAETTwoKeyNavRTETTwoKeyNav")
.isKind(UriInfoKind.resource).goPath()
.first()
.isEntitySet("ESTwoKeyNav")
.isKeyPredicate(0, "PropertyInt16", "1")
.isKeyPredicate(1, "PropertyString", "'2'")
.n()
.isAction("BAETTwoKeyNavRTETTwoKeyNav");
testUri.run("ESKeyNav(PropertyInt16=1)/olingo.odata.test1.BAETTwoKeyNavRTETTwoKeyNav")
.isKind(UriInfoKind.resource).goPath()
.first()
.isEntitySet("ESKeyNav")
.isKeyPredicate(0, "PropertyInt16", "1")
.n()
.isAction("BAETTwoKeyNavRTETTwoKeyNav");
}
@Test
public void runActionBound_on_EntityCollection() throws Exception {
testUri.run("ESTwoKeyNav/olingo.odata.test1.BAESTwoKeyNavRTESTwoKeyNav")
.isKind(UriInfoKind.resource).goPath()
.first()
.isEntitySet("ESTwoKeyNav")
.n()
.isAction("BAESTwoKeyNavRTESTwoKeyNav");
}
@Test
public void runFunctionBound_on_var_Types() throws Exception {
// on primitive
testUri.run("ESAllPrim(1)/PropertyString/olingo.odata.test1.BFCStringRTESTwoKeyNav()")
.goPath()
.at(0)
.isUriPathInfoKind(UriResourceKind.entitySet)
.isType(EntityTypeProvider.nameETAllPrim, false)
.at(1)
.isUriPathInfoKind(UriResourceKind.primitiveProperty)
.isType(PropertyProvider.nameString);
// on collection of primitive
testUri.run("ESCollAllPrim(1)/CollPropertyString/olingo.odata.test1.BFCCollStringRTESTwoKeyNav()")
.goPath()
.at(0)
.isUriPathInfoKind(UriResourceKind.entitySet)
.isType(EntityTypeProvider.nameETCollAllPrim, false)
.at(1)
.isUriPathInfoKind(UriResourceKind.primitiveProperty)
.isType(PropertyProvider.nameString);
// on complex
testUri.run("ESTwoKeyNav(PropertyInt16=1,PropertyString='ABC')"
+ "/PropertyComp/olingo.odata.test1.BFCCTPrimCompRTESTwoKeyNav()")
.goPath()
.at(0)
.isUriPathInfoKind(UriResourceKind.entitySet)
.isType(EntityTypeProvider.nameETTwoKeyNav, false)
.at(1)
.isUriPathInfoKind(UriResourceKind.complexProperty)
.at(2)
.isType(EntityTypeProvider.nameETTwoKeyNav);
// on collection of complex
testUri.run("ESKeyNav(1)/CollPropertyComp/olingo.odata.test1.BFCCollCTPrimCompRTESAllPrim()")
.goPath()
.at(0)
.isUriPathInfoKind(UriResourceKind.entitySet)
.at(1)
.isType(ComplexTypeProvider.nameCTPrimComp, true)
.at(2)
.isUriPathInfoKind(UriResourceKind.function)
.isType(EntityTypeProvider.nameETAllPrim);
// on entity
testUri.run("ESTwoKeyNav(PropertyInt16=1,PropertyString='ABC')"
+ "/olingo.odata.test1.BFCETTwoKeyNavRTESTwoKeyNav()")
.goPath()
.at(0)
.isUriPathInfoKind(UriResourceKind.entitySet)
.isType(EntityTypeProvider.nameETTwoKeyNav, false)
.at(1)
.isUriPathInfoKind(UriResourceKind.function)
.isType(EntityTypeProvider.nameETTwoKeyNav);
// on collection of entity
testUri.run("ESTwoKeyNav/olingo.odata.test1.BFCESTwoKeyNavRTESTwoKeyNav()")
.goPath()
.at(0)
.isUriPathInfoKind(UriResourceKind.entitySet)
.isType(EntityTypeProvider.nameETTwoKeyNav, true)
.at(1).isUriPathInfoKind(UriResourceKind.function)
.isType(EntityTypeProvider.nameETTwoKeyNav);
}
@Test
public void runActionBound_on_EntityCast() throws Exception {
testUri.run("ESTwoKeyNav(PropertyInt16=1,PropertyString='2')/olingo.odata.test1.ETBaseTwoKeyNav"
+ "/olingo.odata.test1.BAETBaseTwoKeyNavRTETBaseTwoKeyNav")
.isKind(UriInfoKind.resource).goPath()
.first()
.isEntitySet("ESTwoKeyNav")
.isKeyPredicate(0, "PropertyInt16", "1")
.isKeyPredicate(1, "PropertyString", "'2'")
.isTypeFilterOnEntry(EntityTypeProvider.nameETBaseTwoKeyNav)
.n()
.isAction("BAETBaseTwoKeyNavRTETBaseTwoKeyNav");
testUri.run("ESTwoKeyNav/olingo.odata.test1.ETBaseTwoKeyNav(PropertyInt16=1,PropertyString='2')"
+ "/olingo.odata.test1.ETTwoBaseTwoKeyNav/olingo.odata.test1.BAETTwoBaseTwoKeyNavRTETBaseTwoKeyNav")
.isKind(UriInfoKind.resource).goPath()
.first()
.isEntitySet("ESTwoKeyNav")
.isTypeFilterOnCollection(EntityTypeProvider.nameETBaseTwoKeyNav)
.isKeyPredicate(0, "PropertyInt16", "1")
.isKeyPredicate(1, "PropertyString", "'2'")
.isTypeFilterOnEntry(EntityTypeProvider.nameETTwoBaseTwoKeyNav)
.n()
.isAction("BAETTwoBaseTwoKeyNavRTETBaseTwoKeyNav");
}
@Test
public void crossjoin() throws Exception {
testUri.run("$crossjoin(ESKeyNav)")
.isKind(UriInfoKind.crossjoin)
.isCrossJoinEntityList(Arrays.asList("ESKeyNav"));
testUri.run("$crossjoin(ESKeyNav,ESTwoKeyNav)")
.isKind(UriInfoKind.crossjoin)
.isCrossJoinEntityList(Arrays.asList("ESKeyNav", "ESTwoKeyNav"));
}
@Test
public void crossjoinFilter() throws Exception {
testUri.run("$crossjoin(ESTwoPrim,ESMixPrimCollComp)",
"$filter=ESTwoPrim/PropertyString eq ESMixPrimCollComp/PropertyComp/PropertyString")
.goFilter()
.isBinary(BinaryOperatorKind.EQ)
.is("<<ESTwoPrim/PropertyString> eq <ESMixPrimCollComp/PropertyComp/PropertyString>>");
}
@Test
public void crossjoinExpand() throws Exception {
testUri.run("$crossjoin(ESTwoPrim,ESAllPrim)",
"$expand=ESTwoPrim")
.goExpand()
.first().goPath().first().isEntitySet("ESTwoPrim");
testUri.run("$crossjoin(ESTwoPrim,ESAllPrim)",
"$expand=ESTwoPrim,ESAllPrim")
.goExpand()
.first().goPath().first().isEntitySet("ESTwoPrim")
.goUpExpandValidator().next().goPath().first().isEntitySet("ESAllPrim");
// TODO: Once crossjoin is implemented these tests should no longer result in errors
// testUri.run("$crossjoin(ESTwoPrim,ESAllPrim)",
// "$expand=ESAllPrim/NavPropertyETTwoPrimOne")
// .goExpand()
// .first().goPath().at(0).isEntitySet("ESAllPrim")
// .at(1).isNavProperty("NavPropertyETTwoPrimOne", new FullQualifiedName("Namespace1_Alias.ETTwoPrim"), false);
}
@Test
public void crossjoinError() throws Exception {
testUri.runEx("$crossjoin").isExSyntax(UriParserSyntaxException.MessageKeys.SYNTAX);
testUri.runEx("$crossjoin/error").isExSyntax(UriParserSyntaxException.MessageKeys.MUST_BE_LAST_SEGMENT);
testUri.runEx("$crossjoin()").isExSyntax(UriParserSyntaxException.MessageKeys.SYNTAX);
testUri.runEx("$crossjoin(ESKeyNav, ESTwoKeyNav)/invalid")
.isExSyntax(UriParserSyntaxException.MessageKeys.MUST_BE_LAST_SEGMENT);
testUri.runEx("$crossjoin(ESKeyNav)/$ref")
.isExSyntax(UriParserSyntaxException.MessageKeys.MUST_BE_LAST_SEGMENT);
}
@Test
public void runEntityId() throws Exception {
testUri.run("$entity", "$id=ESKeyNav(1)")
.isKind(UriInfoKind.entityId)
.isIdText("ESKeyNav(1)");
testUri.run("$entity/olingo.odata.test1.ETKeyNav", "$id=ESKeyNav(1)")
.isKind(UriInfoKind.entityId)
.isEntityType(EntityTypeProvider.nameETKeyNav)
.isIdText("ESKeyNav(1)");
}
@Test
public void runEsName() throws Exception {
testUri.run("ESAllPrim")
.isKind(UriInfoKind.resource).goPath()
.first()
.isEntitySet("ESAllPrim")
.isType(EntityTypeProvider.nameETAllPrim, true);
testUri.run("ESAllPrim/$count")
.isKind(UriInfoKind.resource).goPath()
.first()
.isEntitySet("ESAllPrim")
.isType(EntityTypeProvider.nameETAllPrim, true)
.n()
.isCount();
}
@Test
public void esNameError() {
testUri.runEx("ESAllPrim/$count/$ref").isExSyntax(UriParserSyntaxException.MessageKeys.MUST_BE_LAST_SEGMENT);
testUri.runEx("ESAllPrim/$ref/$count").isExSyntax(UriParserSyntaxException.MessageKeys.MUST_BE_LAST_SEGMENT);
testUri.runEx("ESAllPrim/$ref/invalid").isExSyntax(UriParserSyntaxException.MessageKeys.MUST_BE_LAST_SEGMENT);
testUri.runEx("ESAllPrim/$count/invalid").isExSyntax(UriParserSyntaxException.MessageKeys.MUST_BE_LAST_SEGMENT);
testUri.runEx("ESAllPrim/PropertyString").isExSemantic(MessageKeys.PROPERTY_AFTER_COLLECTION);
testUri.runEx("ESAllPrim(1)/whatever").isExSemantic(MessageKeys.PROPERTY_NOT_IN_TYPE);
testUri.runEx("ESAllPrim('1')").isExSemantic(MessageKeys.INVALID_KEY_VALUE);
testUri.runEx("ESAllPrim(PropertyInt16)").isExSyntax(UriParserSyntaxException.MessageKeys.SYNTAX);
testUri.runEx("ESAllPrim(PropertyInt16=)").isExSyntax(UriParserSyntaxException.MessageKeys.SYNTAX);
testUri.runEx("ESAllPrim(PropertyInt16=1,Invalid='1')").isExSemantic(MessageKeys.WRONG_NUMBER_OF_KEY_PROPERTIES);
testUri.runEx("ESBase/olingo.odata.test1.ETBase/PropertyInt16")
.isExSemantic(MessageKeys.PROPERTY_AFTER_COLLECTION);
testUri.runEx("ETBaseTwoKeyTwoPrim/olingo.odata.test1.ETBaseTwoKeyTwoPrim"
+ "/olingo.odata.test1.ETTwoBaseTwoKeyTwoPrim")
.isExSemantic(MessageKeys.RESOURCE_NOT_FOUND);
testUri.runEx("ETBaseTwoKeyTwoPrim/olingo.odata.test1.ETBaseTwoKeyTwoPrim(1)/olingo.odata.test1.ETAllKey")
.isExSemantic(MessageKeys.RESOURCE_NOT_FOUND);
testUri.runEx("ETBaseTwoKeyTwoPrim(1)/olingo.odata.test1.ETBaseTwoKeyTwoPrim('1')/olingo.odata.test1.ETAllKey")
.isExSemantic(MessageKeys.RESOURCE_NOT_FOUND);
testUri.runEx("ETBaseTwoKeyTwoPrim(1)/olingo.odata.test1.ETBaseTwoKeyTwoPrim"
+ "/olingo.odata.test1.ETTwoBaseTwoKeyTwoPrim")
.isExSemantic(MessageKeys.RESOURCE_NOT_FOUND);
testUri.runEx("ETBaseTwoKeyTwoPrim/olingo.odata.test1.ETBaseTwoKeyTwoPrim"
+ "/olingo.odata.test1.ETTwoBaseTwoKeyTwoPrim(1)")
.isExSemantic(MessageKeys.RESOURCE_NOT_FOUND);
testUri.runEx("ETBaseTwoKeyTwoPrim/olingo.odata.test1.ETAllKey").isExSemantic(MessageKeys.RESOURCE_NOT_FOUND);
testUri.runEx("ETBaseTwoKeyTwoPrim()").isExSemantic(MessageKeys.RESOURCE_NOT_FOUND);
testUri.runEx("ESAllNullable(1)/CollPropertyString/$value").isExSemantic(MessageKeys.ONLY_FOR_TYPED_PARTS);
testUri.runEx("ETMixPrimCollComp(1)/ComplexProperty/$value").isExSemantic(MessageKeys.RESOURCE_NOT_FOUND);
}
@Test
public void resourcePathWithApostrophe() throws Exception {
testUri.runEx("ESAllPrim'").isExSyntax(UriParserSyntaxException.MessageKeys.SYNTAX);
testUri.runEx("ESAllPrim'InvalidStuff").isExSyntax(UriParserSyntaxException.MessageKeys.SYNTAX);
testFilter.runOnETKeyNavEx("PropertyInt16' eq 0").isExSemantic(MessageKeys.TYPES_NOT_COMPATIBLE);
testFilter.runOnETKeyNavEx("PropertyInt16 eq' 0").isExSemantic(MessageKeys.TYPES_NOT_COMPATIBLE);
testFilter.runOnETKeyNavEx("PropertyInt16 eq 0'")
.isExSyntax(UriParserSyntaxException.MessageKeys.WRONG_VALUE_FOR_SYSTEM_QUERY_OPTION);
testFilter.runOnETKeyNavEx("PropertyInt16 eq 'dsd''")
.isExSyntax(UriParserSyntaxException.MessageKeys.SYNTAX);
}
@Test
public void runFunctionsWithKeyPredicates() throws Exception {
testUri.run("FICRTCollETMixPrimCollCompTwoParam(ParameterString='1',ParameterInt16=1)")
.isKind(UriInfoKind.resource)
.goPath().first()
.isFunctionImport("FICRTCollETMixPrimCollCompTwoParam")
.isFunction("UFCRTCollETMixPrimCollCompTwoParam")
.isParameter(0, "ParameterString", "'1'")
.isParameter(1, "ParameterInt16", "1");
testUri.run("FICRTCollETMixPrimCollCompTwoParam(ParameterString='1',ParameterInt16=1)(PropertyInt16=0)")
.isKind(UriInfoKind.resource)
.goPath().first()
.isFunctionImport("FICRTCollETMixPrimCollCompTwoParam")
.isFunction("UFCRTCollETMixPrimCollCompTwoParam")
.isParameter(0, "ParameterString", "'1'")
.isParameter(1, "ParameterInt16", "1")
.isKeyPredicate(0, "PropertyInt16", "0");
testUri.run("FICRTCollETMixPrimCollCompTwoParam(ParameterString='1',ParameterInt16=1)(0)")
.isKind(UriInfoKind.resource)
.goPath().first()
.isFunctionImport("FICRTCollETMixPrimCollCompTwoParam")
.isFunction("UFCRTCollETMixPrimCollCompTwoParam")
.isParameter(0, "ParameterString", "'1'")
.isParameter(1, "ParameterInt16", "1")
.isKeyPredicate(0, "PropertyInt16", "0");
testUri.runEx("FICRTCollETMixPrimCollCompTwoParam(ParameterString='1',ParameterInt16=1)(PropertyInt16 eq 0)")
.isExSyntax(UriParserSyntaxException.MessageKeys.SYNTAX);
// PropertyInt32 does not exist
testUri.runEx("FICRTCollETMixPrimCollCompTwoParam(ParameterString='1',ParameterInt16=1)(PropertyInt32=0)")
.isExValidation(UriValidationException.MessageKeys.INVALID_KEY_PROPERTY);
testUri.runEx("FICRTCollETMixPrimCollCompTwoParam(ParameterString='1',ParameterInt16=1)"
+ "(PropertyInt16=0,PropertyInt16=1)")
.isExValidation(UriValidationException.MessageKeys.DOUBLE_KEY_PROPERTY);
testUri.run("FICRTCollCTTwoPrimTwoParam(ParameterString='1',ParameterInt16=1)")
.isKind(UriInfoKind.resource)
.goPath().first()
.isFunctionImport("FICRTCollCTTwoPrimTwoParam")
.isFunction("UFCRTCollCTTwoPrimTwoParam")
.isParameter(0, "ParameterString", "'1'")
.isParameter(1, "ParameterInt16", "1");
testUri.runEx("FICRTCollCTTwoPrimTwoParam(ParameterString='1',ParameterInt16=1)(PropertyInt16=1)")
.isExSemantic(MessageKeys.KEY_NOT_ALLOWED);
testUri.runEx("FICRTCollCTTwoPrimTwoParam(ParameterString='1',ParameterInt16=1)(1)")
.isExSemantic(MessageKeys.KEY_NOT_ALLOWED);
testUri.runEx("FICRTCollCTTwoPrimTwoParam(ParameterString='1',ParameterInt16=1)(PropertyInt32=1)")
.isExSemantic(MessageKeys.KEY_NOT_ALLOWED);
testUri.runEx("FICRTCollCTTwoPrimTwoParam(ParameterString='1',ParameterInt16=1)(PropertyInt32=1,PropertyInt16=2)")
.isExSemantic(MessageKeys.KEY_NOT_ALLOWED);
testUri.run("FICRTCollESTwoKeyNavParam(ParameterInt16=1)")
.isKind(UriInfoKind.resource)
.goPath().first()
.isFunctionImport("FICRTCollESTwoKeyNavParam")
.isFunction("UFCRTCollETTwoKeyNavParam")
.isParameter(0, "ParameterInt16", "1");
testUri.run("FICRTCollESTwoKeyNavParam(ParameterInt16=1)(PropertyInt16=1,PropertyString='1')")
.isKind(UriInfoKind.resource)
.goPath().first()
.isFunctionImport("FICRTCollESTwoKeyNavParam")
.isFunction("UFCRTCollETTwoKeyNavParam")
.isParameter(0, "ParameterInt16", "1")
.isKeyPredicate(0, "PropertyInt16", "1")
.isKeyPredicate(1, "PropertyString", "'1'");
testUri.runEx("FICRTCollESTwoKeyNavParam(ParameterInt16=1)(PropertyInt16 eq 1)")
.isExSyntax(UriParserSyntaxException.MessageKeys.SYNTAX);
testUri.runEx("FICRTCollESTwoKeyNavParam(ParameterInt16=1)(PropertyInt16=1)")
.isExSemantic(MessageKeys.WRONG_NUMBER_OF_KEY_PROPERTIES);
testUri.runEx("FICRTCollESTwoKeyNavParam(ParameterInt16=1)(PropertyInt16=1,PropertyInt32=1,PropertyString='1')")
.isExValidation(UriValidationException.MessageKeys.INVALID_KEY_PROPERTY);
testUri.runEx("FICRTCollESTwoKeyNavParam(ParameterInt16=1)()")
.isExSemantic(MessageKeys.WRONG_NUMBER_OF_KEY_PROPERTIES);
testUri.runEx("FICRTCollESTwoKeyNavParam(ParameterInt16=1)(PropertyInt16=1,PropertyInt32=1)")
.isExValidation(UriValidationException.MessageKeys.INVALID_KEY_PROPERTY);
testUri.runEx("FICRTCollESTwoKeyNavParam(ParameterInt16=1)(PropertyInt16=1,Unkown=1)")
.isExValidation(UriValidationException.MessageKeys.INVALID_KEY_PROPERTY);
testUri.run("FICRTCollString()")
.isKind(UriInfoKind.resource)
.goPath().first()
.isFunctionImport("FICRTCollString")
.isFunction("UFCRTCollString");
testUri.run("FICRTString()")
.isKind(UriInfoKind.resource)
.goPath().first()
.isFunctionImport("FICRTString")
.isFunction("UFCRTString");
testUri.runEx("FICRTCollString()(0)")
.isExSemantic(MessageKeys.KEY_NOT_ALLOWED);
testUri.runEx("FICRTString()(0)")
.isExSemantic(MessageKeys.KEY_NOT_ALLOWED);
}
@Test
public void runNonComposableFunctions() throws Exception {
testUri.run("FICRTCollETMixPrimCollCompTwoParam(ParameterInt16=1,ParameterString='1')")
.isKind(UriInfoKind.resource)
.goPath().first()
.isFunctionImport("FICRTCollETMixPrimCollCompTwoParam")
.isFunction("UFCRTCollETMixPrimCollCompTwoParam")
.isParameter(0, "ParameterInt16", "1")
.isParameter(1, "ParameterString", "'1'");
testUri.run("FICRTCollETMixPrimCollCompTwoParam(ParameterInt16=1,ParameterString='1')(0)")
.isKind(UriInfoKind.resource)
.goPath().first()
.isFunctionImport("FICRTCollETMixPrimCollCompTwoParam")
.isFunction("UFCRTCollETMixPrimCollCompTwoParam")
.isParameter(0, "ParameterInt16", "1")
.isParameter(1, "ParameterString", "'1'");
testUri.runEx("FICRTCollETMixPrimCollCompTwoParam(ParameterInt16=1,ParameterString='1')(0)/PropertyInt16")
.isExValidation(UriValidationException.MessageKeys.UNALLOWED_RESOURCE_PATH);
testUri.run("FICRTCollETMixPrimCollCompTwoParam(ParameterInt16=1,ParameterString='1')", "$skip=1");
testUri.run("FICRTCollETMixPrimCollCompTwoParam(ParameterInt16=1,ParameterString='1')", "$top=1");
testUri.run("FICRTCollETMixPrimCollCompTwoParam(ParameterInt16=1,ParameterString='1')",
"$filter=PropertyInt16 eq 1");
testUri.run("FICRTCollETMixPrimCollCompTwoParam(ParameterInt16=1,ParameterString='1')", "$skip=1");
testUri.run("FICRTCollETMixPrimCollCompTwoParam(ParameterInt16=1,ParameterString='1')", "$count=true");
testUri.run("FICRTCollETMixPrimCollCompTwoParam(ParameterInt16=1,ParameterString='1')", "$skiptoken=5");
testUri.run("FICRTCollETMixPrimCollCompTwoParam(ParameterInt16=1,ParameterString='1')", "$search=test");
testUri.run("ESAllPrim/olingo.odata.test1.BFNESAllPrimRTCTAllPrim()")
.isKind(UriInfoKind.resource)
.goPath().first()
.isEntitySet("ESAllPrim")
.at(1)
.isFunction("BFNESAllPrimRTCTAllPrim");
testUri.runEx("ESAllPrim/olingo.odata.test1.BFNESAllPrimRTCTAllPrim()"
+ "/PropertyString")
.isExValidation(UriValidationException.MessageKeys.UNALLOWED_RESOURCE_PATH);
}
@Test
public void runEsNameCast() throws Exception {
testUri.run("ESTwoPrim/olingo.odata.test1.ETBase")
.isKind(UriInfoKind.resource).goPath()
.first()
.isEntitySet("ESTwoPrim")
.isType(EntityTypeProvider.nameETTwoPrim, true)
.isTypeFilterOnCollection(EntityTypeProvider.nameETBase);
testUri.run("ESTwoPrim/olingo.odata.test1.ETBase(-32768)/olingo.odata.test1.ETTwoBase")
.isKind(UriInfoKind.resource).goPath()
.first()
.isEntitySet("ESTwoPrim")
.isType(EntityTypeProvider.nameETTwoPrim, false)
.isTypeFilterOnCollection(EntityTypeProvider.nameETBase)
.isKeyPredicate(0, "PropertyInt16", "-32768")
.isTypeFilterOnEntry(EntityTypeProvider.nameETTwoBase);
testUri.run("ESTwoPrim/olingo.odata.test1.ETTwoBase(-32768)")
.isKind(UriInfoKind.resource).goPath()
.first()
.isEntitySet("ESTwoPrim")
.isType(EntityTypeProvider.nameETTwoPrim, false)
.isTypeFilterOnCollection(EntityTypeProvider.nameETTwoBase)
.isKeyPredicate(0, "PropertyInt16", "-32768");
testUri.run("ESTwoPrim/Namespace1_Alias.ETTwoBase(-32768)")
.isKind(UriInfoKind.resource).goPath()
.first()
.isEntitySet("ESTwoPrim")
.isType(EntityTypeProvider.nameETTwoPrim, false)
.isTypeFilterOnCollection(EntityTypeProvider.nameETTwoBase)
.isKeyPredicate(0, "PropertyInt16", "-32768");
}
@Test
public void runEsNamePpSpCast() throws Exception {
testUri.run("ESTwoKeyNav(PropertyInt16=1,PropertyString='2')/olingo.odata.test1.ETBaseTwoKeyNav/PropertyDate")
.isKind(UriInfoKind.resource).goPath()
.first()
.isEntitySet("ESTwoKeyNav")
.isType(EntityTypeProvider.nameETTwoKeyNav, false)
.isKeyPredicate(0, "PropertyInt16", "1")
.isKeyPredicate(1, "PropertyString", "'2'")
.isTypeFilterOnEntry(EntityTypeProvider.nameETBaseTwoKeyNav)
.n()
.isPrimitiveProperty("PropertyDate", PropertyProvider.nameDate, false);
testUri.run("ESTwoKeyNav(PropertyInt16=1,PropertyString='2')/olingo.odata.test1.ETBaseTwoKeyNav"
+ "/PropertyComp/PropertyInt16")
.isKind(UriInfoKind.resource).goPath()
.first()
.isEntitySet("ESTwoKeyNav")
.isType(EntityTypeProvider.nameETTwoKeyNav, false)
.isKeyPredicate(0, "PropertyInt16", "1")
.isKeyPredicate(1, "PropertyString", "'2'")
.isTypeFilterOnEntry(EntityTypeProvider.nameETBaseTwoKeyNav)
.n()
.isComplex("PropertyComp")
.n()
.isPrimitiveProperty("PropertyInt16", PropertyProvider.nameInt16, false);
}
@Test
public void runEsNameKey() throws Exception {
testUri.run("ESCollAllPrim(1)")
.isKind(UriInfoKind.resource).goPath()
.first()
.isEntitySet("ESCollAllPrim");
testUri.run("ESCollAllPrim(PropertyInt16=1)")
.isKind(UriInfoKind.resource).goPath()
.first()
.isEntitySet("ESCollAllPrim");
testUri.run("ESFourKeyAlias(PropertyInt16=1,KeyAlias1=2,KeyAlias2='3',KeyAlias3='4')")
.isKind(UriInfoKind.resource).goPath()
.first()
.isEntitySet("ESFourKeyAlias")
.isKeyPredicate(0, "PropertyInt16", "1")
.isKeyPredicate(1, "KeyAlias1", "2")
.isKeyPredicate(2, "KeyAlias2", "'3'")
.isKeyPredicate(3, "KeyAlias3", "'4'");
testUri.runEx("ESTwoPrim('wrong')").isExSemantic(MessageKeys.INVALID_KEY_VALUE);
testUri.runEx("ESTwoPrim(PropertyInt16='wrong')").isExSemantic(MessageKeys.INVALID_KEY_VALUE);
}
@Test
public void runEsNameParaKeys() throws Exception {
testUri.run("ESAllKey(PropertyString='O''Neil',PropertyBoolean=true,PropertyByte=255,"
+ "PropertySByte=-128,PropertyInt16=-32768,PropertyInt32=-2147483648,"
+ "PropertyInt64=-9223372036854775808,PropertyDecimal=1,PropertyDate=2013-09-25,"
+ "PropertyDateTimeOffset=2002-10-10T12:00:00-05:00,"
+ "PropertyDuration=duration'P50903316DT2H25M4S',"
+ "PropertyGuid=12345678-1234-1234-1234-123456789012,"
+ "PropertyTimeOfDay=12:34:55)")
.isKind(UriInfoKind.resource).goPath()
.first()
.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", "1")
.isKeyPredicate(8, "PropertyDate", "2013-09-25")
.isKeyPredicate(9, "PropertyDateTimeOffset", "2002-10-10T12:00:00-05:00")
.isKeyPredicate(10, "PropertyDuration", "duration'P50903316DT2H25M4S'")
.isKeyPredicate(11, "PropertyGuid", "12345678-1234-1234-1234-123456789012")
.isKeyPredicate(12, "PropertyTimeOfDay", "12:34:55");
}
@Test
public void runEsNameKeyCast() throws Exception {
testUri.run("ESTwoPrim(1)/olingo.odata.test1.ETBase")
.isKind(UriInfoKind.resource).goPath()
.first()
.isEntitySet("ESTwoPrim")
.isType(EntityTypeProvider.nameETTwoPrim)
.isKeyPredicate(0, "PropertyInt16", "1")
.isTypeFilterOnEntry(EntityTypeProvider.nameETBase);
testUri.run("ESTwoPrim(1)/olingo.odata.test1.ETTwoBase")
.isKind(UriInfoKind.resource).goPath()
.first()
.isEntitySet("ESTwoPrim")
.isType(EntityTypeProvider.nameETTwoPrim)
.isKeyPredicate(0, "PropertyInt16", "1")
.isTypeFilterOnEntry(EntityTypeProvider.nameETTwoBase);
testUri.run("ESTwoPrim/olingo.odata.test1.ETBase(1)")
.isKind(UriInfoKind.resource).goPath()
.first()
.isEntitySet("ESTwoPrim")
.isType(EntityTypeProvider.nameETTwoPrim)
.isKeyPredicate(0, "PropertyInt16", "1")
.isTypeFilterOnCollection(EntityTypeProvider.nameETBase);
testUri.run("ESTwoPrim/olingo.odata.test1.ETTwoBase(1)")
.isKind(UriInfoKind.resource).goPath()
.first()
.isEntitySet("ESTwoPrim")
.isType(EntityTypeProvider.nameETTwoPrim)
.isKeyPredicate(0, "PropertyInt16", "1")
.isTypeFilterOnCollection(EntityTypeProvider.nameETTwoBase);
testUri.run("ESTwoPrim/olingo.odata.test1.ETBase(1)/olingo.odata.test1.ETTwoBase")
.isKind(UriInfoKind.resource).goPath()
.first()
.isEntitySet("ESTwoPrim")
.isType(EntityTypeProvider.nameETTwoPrim)
.isKeyPredicate(0, "PropertyInt16", "1")
.isTypeFilterOnCollection(EntityTypeProvider.nameETBase);
testUri.run("ESTwoPrim/olingo.odata.test1.ETTwoBase")
.isKind(UriInfoKind.resource).goPath()
.first()
.isEntitySet("ESTwoPrim")
.isType(EntityTypeProvider.nameETTwoPrim)
.isTypeFilterOnCollection(EntityTypeProvider.nameETTwoBase);
// Keys cannot be specified twice.
testUri.runEx("ESTwoPrim(1)/olingo.odata.test1.ETBase(1)")
.isExSemantic(MessageKeys.KEY_NOT_ALLOWED);
testUri.runEx("ESTwoPrim/olingo.odata.test1.ETBase(1)/olingo.odata.test1.ETTwoBase(1)")
.isExSemantic(MessageKeys.KEY_NOT_ALLOWED);
testUri.runEx("ESBase/olingo.odata.test1.ETTwoPrim(1)").isExSemantic(MessageKeys.INCOMPATIBLE_TYPE_FILTER);
}
@Test
public void runEsNameParaKeysCast() throws Exception {
testUri.run("ESTwoKeyNav(PropertyInt16=1,PropertyString='2')/olingo.odata.test1.ETBaseTwoKeyNav")
.isKind(UriInfoKind.resource).goPath()
.first()
.isEntitySet("ESTwoKeyNav")
.isType(EntityTypeProvider.nameETTwoKeyNav)
.isKeyPredicate(0, "PropertyInt16", "1")
.isKeyPredicate(1, "PropertyString", "'2'")
.isTypeFilterOnEntry(EntityTypeProvider.nameETBaseTwoKeyNav);
testUri.run("ESTwoKeyNav/olingo.odata.test1.ETBaseTwoKeyNav(PropertyInt16=1,PropertyString='2')")
.isKind(UriInfoKind.resource).goPath()
.first()
.isEntitySet("ESTwoKeyNav")
.isType(EntityTypeProvider.nameETTwoKeyNav)
.isTypeFilterOnCollection(EntityTypeProvider.nameETBaseTwoKeyNav)
.isKeyPredicate(0, "PropertyInt16", "1")
.isKeyPredicate(1, "PropertyString", "'2'");
}
@Test
public void run_EsNamePpCp() throws Exception {
testUri.run("ESTwoKeyNav(PropertyInt16=1,PropertyString='2')/PropertyComp")
.isKind(UriInfoKind.resource).goPath()
.first()
.isEntitySet("ESTwoKeyNav")
.isKeyPredicate(0, "PropertyInt16", "1")
.isKeyPredicate(1, "PropertyString", "'2'")
.n()
.isComplex("PropertyComp");
testUri.run("ESTwoKeyNav(PropertyInt16=1,PropertyString='2')/PropertyComp/PropertyComp")
.isKind(UriInfoKind.resource).goPath()
.first()
.isEntitySet("ESTwoKeyNav")
.isKeyPredicate(0, "PropertyInt16", "1")
.isKeyPredicate(1, "PropertyString", "'2'")
.n()
.isComplex("PropertyComp")
.n()
.isComplex("PropertyComp");
testUri.run("ESMixEnumDefCollComp(PropertyEnumString=olingo.odata.test1.ENString'String1',"
+ "PropertyDefString='key1')/PropertyEnumString")
.isKind(UriInfoKind.resource).goPath()
.first()
.isEntitySet("ESMixEnumDefCollComp")
.isKeyPredicate(0, "PropertyEnumString", "olingo.odata.test1.ENString'String1'")
.isKeyPredicate(1, "PropertyDefString", "'key1'")
.n()
.isPrimitiveProperty("PropertyEnumString", EnumTypeProvider.nameENString, false);
testUri.run("ESMixEnumDefCollComp(PropertyEnumString=olingo.odata.test1.ENString'String1',"
+ "PropertyDefString='key1')/PropertyDefString")
.isKind(UriInfoKind.resource).goPath()
.first()
.isEntitySet("ESMixEnumDefCollComp")
.isKeyPredicate(0, "PropertyEnumString", "olingo.odata.test1.ENString'String1'")
.isKeyPredicate(1, "PropertyDefString", "'key1'")
.n()
.isPrimitiveProperty("PropertyDefString", TypeDefinitionProvider.nameTDString, false);
}
@Test
public void runEsNamePpCpColl() throws Exception {
testUri.run("ESMixPrimCollComp(5)/CollPropertyComp")
.isKind(UriInfoKind.resource).goPath()
.first()
.isEntitySet("ESMixPrimCollComp")
.isKeyPredicate(0, "PropertyInt16", "5")
.n()
.isComplex("CollPropertyComp")
.isType(ComplexTypeProvider.nameCTTwoPrim, true);
testUri.run("ESKeyNav(1)/NavPropertyETTwoKeyNavOne/CollPropertyComp")
.isKind(UriInfoKind.resource).goPath()
.first()
.isEntitySet("ESKeyNav")
.n()
.isNavProperty("NavPropertyETTwoKeyNavOne", EntityTypeProvider.nameETTwoKeyNav, false)
.n()
.isComplex("CollPropertyComp")
.isType(ComplexTypeProvider.nameCTPrimComp, true);
testUri.run("ESKeyNav(1)/NavPropertyETTwoKeyNavOne/CollPropertyComp/$count")
.isKind(UriInfoKind.resource).goPath()
.first()
.isEntitySet("ESKeyNav")
.n()
.isNavProperty("NavPropertyETTwoKeyNavOne", EntityTypeProvider.nameETTwoKeyNav, false)
.n()
.isComplex("CollPropertyComp")
.isType(ComplexTypeProvider.nameCTPrimComp, true)
.n()
.isCount();
testUri.run("ESMixEnumDefCollComp(PropertyEnumString=olingo.odata.test1.ENString'String1',"
+ "PropertyDefString='key1')/CollPropertyEnumString")
.isKind(UriInfoKind.resource).goPath()
.first()
.isEntitySet("ESMixEnumDefCollComp")
.isKeyPredicate(0, "PropertyEnumString", "olingo.odata.test1.ENString'String1'")
.isKeyPredicate(1, "PropertyDefString", "'key1'")
.n()
.isPrimitiveProperty("CollPropertyEnumString", EnumTypeProvider.nameENString, true);
testUri.run("ESMixEnumDefCollComp(PropertyEnumString=olingo.odata.test1.ENString'String1',"
+ "PropertyDefString='key1')/CollPropertyDefString")
.isKind(UriInfoKind.resource).goPath()
.first()
.isEntitySet("ESMixEnumDefCollComp")
.isKeyPredicate(0, "PropertyEnumString", "olingo.odata.test1.ENString'String1'")
.isKeyPredicate(1, "PropertyDefString", "'key1'")
.n()
.isPrimitiveProperty("CollPropertyDefString", TypeDefinitionProvider.nameTDString, true);
}
@Test
public void runEsNamePpCpCast() throws Exception {
testUri.run("ESTwoKeyNav(PropertyInt16=1,PropertyString='2')/olingo.odata.test1.ETBaseTwoKeyNav/PropertyComp")
.isKind(UriInfoKind.resource).goPath()
.first()
.isEntitySet("ESTwoKeyNav")
.isKeyPredicate(0, "PropertyInt16", "1")
.isKeyPredicate(1, "PropertyString", "'2'")
.isType(EntityTypeProvider.nameETTwoKeyNav)
.isTypeFilterOnEntry(EntityTypeProvider.nameETBaseTwoKeyNav)
.n()
.isComplex("PropertyComp");
testUri
.run("ESTwoKeyNav(PropertyInt16=1,PropertyString='2')/olingo.odata.test1.ETBaseTwoKeyNav"
+ "/PropertyComp/PropertyComp")
.isKind(UriInfoKind.resource).goPath()
.first()
.isEntitySet("ESTwoKeyNav")
.isType(EntityTypeProvider.nameETTwoKeyNav)
.isTypeFilterOnEntry(EntityTypeProvider.nameETBaseTwoKeyNav)
.isKeyPredicate(0, "PropertyInt16", "1")
.isKeyPredicate(1, "PropertyString", "'2'")
.n()
.isComplex("PropertyComp")
.n()
.isComplex("PropertyComp");
testUri
.run("ESTwoKeyNav(PropertyInt16=1,PropertyString='2')/olingo.odata.test1.ETBaseTwoKeyNav"
+ "/PropertyCompTwoPrim/olingo.odata.test1.CTBase")
.isKind(UriInfoKind.resource).goPath()
.first()
.isEntitySet("ESTwoKeyNav")
.isType(EntityTypeProvider.nameETTwoKeyNav)
.isKeyPredicate(0, "PropertyInt16", "1")
.isKeyPredicate(1, "PropertyString", "'2'")
.isTypeFilterOnEntry(EntityTypeProvider.nameETBaseTwoKeyNav)
.n()
.isComplex("PropertyCompTwoPrim")
.isType(ComplexTypeProvider.nameCTTwoPrim)
.isTypeFilter(ComplexTypeProvider.nameCTBase);
testUri
.run("ESTwoKeyNav(PropertyInt16=1,PropertyString='2')/olingo.odata.test1.ETBaseTwoKeyNav"
+ "/PropertyCompTwoPrim/olingo.odata.test1.CTTwoBase")
.isKind(UriInfoKind.resource).goPath()
.first()
.isEntitySet("ESTwoKeyNav")
.isType(EntityTypeProvider.nameETTwoKeyNav)
.isKeyPredicate(0, "PropertyInt16", "1")
.isKeyPredicate(1, "PropertyString", "'2'")
.isTypeFilterOnEntry(EntityTypeProvider.nameETBaseTwoKeyNav)
.n()
.isComplex("PropertyCompTwoPrim")
.isType(ComplexTypeProvider.nameCTTwoPrim)
.isTypeFilter(ComplexTypeProvider.nameCTTwoBase);
}
@Test
public void runNsNamePpNp() throws Exception {
testUri.run("ESKeyNav(1)/NavPropertyETTwoKeyNavMany")
.isKind(UriInfoKind.resource).goPath()
.first()
.isEntitySet("ESKeyNav")
.isKeyPredicate(0, "PropertyInt16", "1")
.n()
.isNavProperty("NavPropertyETTwoKeyNavMany", EntityTypeProvider.nameETTwoKeyNav, true);
testUri.run("ESKeyNav(1)/NavPropertyETKeyNavMany(2)")
.isKind(UriInfoKind.resource).goPath()
.first()
.isEntitySet("ESKeyNav")
.isKeyPredicate(0, "PropertyInt16", "1")
.n()
.isNavProperty("NavPropertyETKeyNavMany", EntityTypeProvider.nameETKeyNav, false)
.isKeyPredicate(0, "PropertyInt16", "2");
testUri.run("ESKeyNav(PropertyInt16=1)/NavPropertyETKeyNavMany(PropertyInt16=2)")
.isKind(UriInfoKind.resource).goPath()
.first()
.isEntitySet("ESKeyNav")
.isKeyPredicate(0, "PropertyInt16", "1")
.n()
.isNavProperty("NavPropertyETKeyNavMany", EntityTypeProvider.nameETKeyNav, false)
.isKeyPredicate(0, "PropertyInt16", "2");
testUri.run("ESKeyNav(1)/NavPropertyETKeyNavMany(2)/PropertyInt16")
.isKind(UriInfoKind.resource).goPath()
.first()
.isEntitySet("ESKeyNav")
.isKeyPredicate(0, "PropertyInt16", "1")
.n()
.isNavProperty("NavPropertyETKeyNavMany", EntityTypeProvider.nameETKeyNav, false)
.isKeyPredicate(0, "PropertyInt16", "2")
.n()
.isPrimitiveProperty("PropertyInt16", PropertyProvider.nameInt16, false);
testUri.run("ESKeyNav(1)/NavPropertyETKeyNavMany(2)/PropertyCompNav")
.isKind(UriInfoKind.resource).goPath()
.first()
.isEntitySet("ESKeyNav")
.isKeyPredicate(0, "PropertyInt16", "1")
.n()
.isNavProperty("NavPropertyETKeyNavMany", EntityTypeProvider.nameETKeyNav, false)
.isKeyPredicate(0, "PropertyInt16", "2")
.n()
.isComplex("PropertyCompNav");
testUri.run("ESKeyNav(1)/NavPropertyETKeyNavMany(2)/NavPropertyETKeyNavOne")
.isKind(UriInfoKind.resource).goPath()
.first()
.isEntitySet("ESKeyNav")
.isKeyPredicate(0, "PropertyInt16", "1")
.n()
.isNavProperty("NavPropertyETKeyNavMany", EntityTypeProvider.nameETKeyNav, false)
.isKeyPredicate(0, "PropertyInt16", "2")
.n()
.isNavProperty("NavPropertyETKeyNavOne", EntityTypeProvider.nameETKeyNav, false);
testUri.run("ESKeyNav(1)/NavPropertyETTwoKeyNavMany(PropertyInt16=2,PropertyString='3')"
+ "/NavPropertyETKeyNavMany(4)")
.isKind(UriInfoKind.resource).goPath()
.first()
.isEntitySet("ESKeyNav")
.isKeyPredicate(0, "PropertyInt16", "1")
.n()
.isNavProperty("NavPropertyETTwoKeyNavMany", EntityTypeProvider.nameETTwoKeyNav, false)
.isKeyPredicate(0, "PropertyInt16", "2")
.isKeyPredicate(1, "PropertyString", "'3'")
.n()
.isNavProperty("NavPropertyETKeyNavMany", EntityTypeProvider.nameETKeyNav, false)
.isKeyPredicate(0, "PropertyInt16", "4");
testUri.run("ESKeyNav(1)/PropertyCompNav/NavPropertyETTwoKeyNavOne")
.isKind(UriInfoKind.resource).goPath()
.first()
.isEntitySet("ESKeyNav")
.isKeyPredicate(0, "PropertyInt16", "1")
.n()
.isComplex("PropertyCompNav")
.n()
.isNavProperty("NavPropertyETTwoKeyNavOne", EntityTypeProvider.nameETTwoKeyNav, false);
testUri.run("ESKeyNav(1)/NavPropertyETTwoKeyNavMany(PropertyInt16=2,PropertyString='(3)')"
+ "/PropertyComp/PropertyComp/PropertyInt16")
.isKind(UriInfoKind.resource).goPath()
.first()
.isEntitySet("ESKeyNav")
.isKeyPredicate(0, "PropertyInt16", "1")
.n()
.isNavProperty("NavPropertyETTwoKeyNavMany", EntityTypeProvider.nameETTwoKeyNav, false)
.isKeyPredicate(0, "PropertyInt16", "2")
.isKeyPredicate(1, "PropertyString", "'(3)'")
.n()
.isComplex("PropertyComp")
.n()
.isComplex("PropertyComp")
.n()
.isPrimitiveProperty("PropertyInt16", PropertyProvider.nameInt16, false);
testUri.run("ESKeyNav(1)/NavPropertyETMediaMany(2)/$value")
.isKind(UriInfoKind.resource).goPath()
.first()
.isEntitySet("ESKeyNav")
.isKeyPredicate(0, "PropertyInt16", "1")
.n()
.isNavProperty("NavPropertyETMediaMany", EntityTypeProvider.nameETMedia, false)
.isKeyPredicate(0, "PropertyInt16", "2")
.n()
.isValue();
testUri.run("ESKeyNav(1)/NavPropertyETTwoKeyNavMany(PropertyInt16=2,PropertyString='3')"
+ "/NavPropertyETKeyNavOne/NavPropertyETMediaOne/$value")
.isKind(UriInfoKind.resource).goPath()
.first()
.isEntitySet("ESKeyNav")
.isKeyPredicate(0, "PropertyInt16", "1")
.n()
.isNavProperty("NavPropertyETTwoKeyNavMany", EntityTypeProvider.nameETTwoKeyNav, false)
.isKeyPredicate(0, "PropertyInt16", "2")
.isKeyPredicate(1, "PropertyString", "'3'")
.n()
.isNavProperty("NavPropertyETKeyNavOne", EntityTypeProvider.nameETKeyNav, false)
.n()
.isNavProperty("NavPropertyETMediaOne", EntityTypeProvider.nameETMedia, false)
.n()
.isValue();
testUri.run("ESKeyNav(1)/NavPropertyETTwoKeyNavMany(PropertyInt16=2,PropertyString='3')"
+ "/NavPropertyETKeyNavOne/$ref")
.isKind(UriInfoKind.resource).goPath()
.first()
.isEntitySet("ESKeyNav")
.isKeyPredicate(0, "PropertyInt16", "1")
.n()
.isNavProperty("NavPropertyETTwoKeyNavMany", EntityTypeProvider.nameETTwoKeyNav, false)
.isKeyPredicate(0, "PropertyInt16", "2")
.isKeyPredicate(1, "PropertyString", "'3'")
.n()
.isNavProperty("NavPropertyETKeyNavOne", EntityTypeProvider.nameETKeyNav, false)
.n()
.isRef();
}
@Test
public void runEsNamePpNpCast() throws Exception {
testUri.run("ESTwoKeyNav(PropertyInt16=1,PropertyString='2')/olingo.odata.test1.ETBaseTwoKeyNav"
+ "/NavPropertyETKeyNavMany")
.isKind(UriInfoKind.resource).goPath()
.first()
.isEntitySet("ESTwoKeyNav")
.isType(EntityTypeProvider.nameETTwoKeyNav)
.isKeyPredicate(0, "PropertyInt16", "1")
.isKeyPredicate(1, "PropertyString", "'2'")
.isTypeFilterOnEntry(EntityTypeProvider.nameETBaseTwoKeyNav)
.n()
.isNavProperty("NavPropertyETKeyNavMany", EntityTypeProvider.nameETKeyNav, true);
testUri.run("ESTwoKeyNav(PropertyInt16=1,PropertyString='2')/olingo.odata.test1.ETBaseTwoKeyNav"
+ "/NavPropertyETKeyNavMany(3)")
.isKind(UriInfoKind.resource).goPath()
.first()
.isEntitySet("ESTwoKeyNav")
.isType(EntityTypeProvider.nameETTwoKeyNav)
.isKeyPredicate(0, "PropertyInt16", "1")
.isKeyPredicate(1, "PropertyString", "'2'")
.isTypeFilterOnEntry(EntityTypeProvider.nameETBaseTwoKeyNav)
.n()
.isNavProperty("NavPropertyETKeyNavMany", EntityTypeProvider.nameETKeyNav, false)
.isKeyPredicate(0, "PropertyInt16", "3");
testUri.run("ESTwoKeyNav(PropertyInt16=1,PropertyString='2')/olingo.odata.test1.ETBaseTwoKeyNav"
+ "/NavPropertyETTwoKeyNavMany/olingo.odata.test1.ETTwoBaseTwoKeyNav(PropertyInt16=3,PropertyString='4')")
.isKind(UriInfoKind.resource).goPath()
.first()
.isEntitySet("ESTwoKeyNav")
.isType(EntityTypeProvider.nameETTwoKeyNav)
.isKeyPredicate(0, "PropertyInt16", "1")
.isKeyPredicate(1, "PropertyString", "'2'")
.isTypeFilterOnEntry(EntityTypeProvider.nameETBaseTwoKeyNav)
.n()
.isNavProperty("NavPropertyETTwoKeyNavMany", EntityTypeProvider.nameETTwoKeyNav, false)
.isKeyPredicate(0, "PropertyInt16", "3")
.isKeyPredicate(1, "PropertyString", "'4'")
.isTypeFilterOnCollection(EntityTypeProvider.nameETTwoBaseTwoKeyNav);
testUri.run("ESKeyNav(1)/NavPropertyETTwoKeyNavMany(PropertyInt16=2,PropertyString='3')"
+ "/NavPropertyETTwoKeyNavMany/olingo.odata.test1.ETBaseTwoKeyNav(PropertyInt16=4,PropertyString='5')"
+ "/olingo.odata.test1.ETTwoBaseTwoKeyNav/NavPropertyETBaseTwoKeyNavMany")
.isKind(UriInfoKind.resource).goPath()
.first()
.isEntitySet("ESKeyNav")
.isKeyPredicate(0, "PropertyInt16", "1")
.n()
.isNavProperty("NavPropertyETTwoKeyNavMany", EntityTypeProvider.nameETTwoKeyNav, false)
.isKeyPredicate(0, "PropertyInt16", "2")
.isKeyPredicate(1, "PropertyString", "'3'")
.n()
.isNavProperty("NavPropertyETTwoKeyNavMany", EntityTypeProvider.nameETTwoKeyNav, false)
.isType(EntityTypeProvider.nameETTwoKeyNav)
.isTypeFilterOnCollection(EntityTypeProvider.nameETBaseTwoKeyNav)
.isKeyPredicate(0, "PropertyInt16", "4")
.isKeyPredicate(1, "PropertyString", "'5'")
.isTypeFilterOnEntry(EntityTypeProvider.nameETTwoBaseTwoKeyNav)
.n()
.isNavProperty("NavPropertyETBaseTwoKeyNavMany", EntityTypeProvider.nameETBaseTwoKeyNav, true);
testUri.run("ESKeyNav(1)/NavPropertyETTwoKeyNavMany(PropertyInt16=2,PropertyString='3')/"
+ "NavPropertyETTwoKeyNavMany/olingo.odata.test1.ETBaseTwoKeyNav(PropertyInt16=4,PropertyString='5')/"
+ "NavPropertyETKeyNavMany")
.isKind(UriInfoKind.resource).goPath()
.first()
.isEntitySet("ESKeyNav")
.isKeyPredicate(0, "PropertyInt16", "1")
.n()
.isNavProperty("NavPropertyETTwoKeyNavMany", EntityTypeProvider.nameETTwoKeyNav, false)
.isKeyPredicate(0, "PropertyInt16", "2")
.isKeyPredicate(1, "PropertyString", "'3'")
.n()
.isNavProperty("NavPropertyETTwoKeyNavMany", EntityTypeProvider.nameETTwoKeyNav, false)
.isTypeFilterOnCollection(EntityTypeProvider.nameETBaseTwoKeyNav)
.isKeyPredicate(0, "PropertyInt16", "4")
.isKeyPredicate(1, "PropertyString", "'5'")
.n()
.isNavProperty("NavPropertyETKeyNavMany", EntityTypeProvider.nameETKeyNav, true);
}
@Test
public void runEsNamePpNpRc() throws Exception {
// checks for using referential constraints to fill missing keys
testUri.run("ESKeyNav(1)/NavPropertyETTwoKeyNavMany('2')").goPath()
.first()
.isEntitySet("ESKeyNav")
.isKeyPredicate(0, "PropertyInt16", "1")
.n()
.isNavProperty("NavPropertyETTwoKeyNavMany", EntityTypeProvider.nameETTwoKeyNav, false)
.isKeyPredicateRef(0, "PropertyInt16", "PropertyInt16")
.isKeyPredicate(1, "PropertyString", "'2'");
testUri.run("ESKeyNav(PropertyInt16=1)/NavPropertyETTwoKeyNavMany(PropertyString='2')").goPath()
.first()
.isEntitySet("ESKeyNav")
.isKeyPredicate(0, "PropertyInt16", "1")
.n()
.isNavProperty("NavPropertyETTwoKeyNavMany", EntityTypeProvider.nameETTwoKeyNav, false)
.isKeyPredicateRef(0, "PropertyInt16", "PropertyInt16")
.isKeyPredicate(1, "PropertyString", "'2'");
}
@Test
public void runEsNamePpSp() throws Exception {
testUri.run("ESAllPrim(1)/PropertyByte")
.isKind(UriInfoKind.resource).goPath()
.first()
.isEntitySet("ESAllPrim")
.isKeyPredicate(0, "PropertyInt16", "1")
.n()
.isPrimitiveProperty("PropertyByte", PropertyProvider.nameByte, false);
testUri.run("ESAllPrim(1)/PropertyByte/$value")
.isKind(UriInfoKind.resource).goPath()
.first()
.isEntitySet("ESAllPrim")
.isKeyPredicate(0, "PropertyInt16", "1")
.n()
.isPrimitiveProperty("PropertyByte", PropertyProvider.nameByte, false)
.n()
.isValue();
testUri.run("ESMixPrimCollComp(1)/PropertyComp/PropertyString")
.isKind(UriInfoKind.resource).goPath()
.first()
.isEntitySet("ESMixPrimCollComp")
.isKeyPredicate(0, "PropertyInt16", "1")
.n()
.isComplex("PropertyComp")
.n()
.isPrimitiveProperty("PropertyString", PropertyProvider.nameString, false);
}
@Test
public void runEsNamePpSpColl() throws Exception {
testUri.run("ESCollAllPrim(1)/CollPropertyString")
.isKind(UriInfoKind.resource).goPath()
.first()
.isEntitySet("ESCollAllPrim")
.isKeyPredicate(0, "PropertyInt16", "1")
.n()
.isPrimitiveProperty("CollPropertyString", PropertyProvider.nameString, true);
testUri.run("ESKeyNav(1)/NavPropertyETTwoKeyNavMany(PropertyInt16=2,PropertyString='3')/CollPropertyString")
.isKind(UriInfoKind.resource).goPath()
.first()
.isEntitySet("ESKeyNav")
.isKeyPredicate(0, "PropertyInt16", "1")
.n()
.isNavProperty("NavPropertyETTwoKeyNavMany", EntityTypeProvider.nameETTwoKeyNav, false)
.n()
.isPrimitiveProperty("CollPropertyString", PropertyProvider.nameString, true);
testUri.run("ESKeyNav(1)/NavPropertyETTwoKeyNavMany(PropertyInt16=2,PropertyString='3')/CollPropertyString/$count")
.isKind(UriInfoKind.resource).goPath()
.first()
.isEntitySet("ESKeyNav")
.isKeyPredicate(0, "PropertyInt16", "1")
.n()
.isNavProperty("NavPropertyETTwoKeyNavMany", EntityTypeProvider.nameETTwoKeyNav, false)
.isKeyPredicate(0, "PropertyInt16", "2")
.isKeyPredicate(1, "PropertyString", "'3'")
.n()
.isPrimitiveProperty("CollPropertyString", PropertyProvider.nameString, true)
.n()
.isCount();
}
@Test
public void runEsNameRef() throws Exception {
testUri.run("ESAllPrim/$ref")
.isKind(UriInfoKind.resource).goPath()
.first()
.isEntitySet("ESAllPrim")
.n()
.isRef();
testUri.run("ESAllPrim(-32768)/$ref")
.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()
.isNavProperty("NavPropertyETTwoKeyNavMany", EntityTypeProvider.nameETTwoKeyNav, true)
.n()
.isRef();
testUri.run("ESKeyNav(1)/NavPropertyETTwoKeyNavMany(PropertyInt16=1,PropertyString='2')/$ref")
.isKind(UriInfoKind.resource).goPath()
.first()
.isEntitySet("ESKeyNav")
.isKeyPredicate(0, "PropertyInt16", "1")
.n()
.isNavProperty("NavPropertyETTwoKeyNavMany", EntityTypeProvider.nameETTwoKeyNav, false)
.isKeyPredicate(0, "PropertyInt16", "1")
.isKeyPredicate(1, "PropertyString", "'2'")
.n()
.isRef();
}
@Test
public void runFunctionImpBf() throws Exception {
testUri.run("FICRTString()/olingo.odata.test1.BFCStringRTESTwoKeyNav()");
}
@Test
public void runFunctionImpCastBf() throws Exception {
testUri.run("FICRTETTwoKeyNavParam(ParameterInt16=1)/olingo.odata.test1.ETBaseTwoKeyNav"
+ "/olingo.odata.test1.BFCETBaseTwoKeyNavRTETTwoKeyNav()")
.isKind(UriInfoKind.resource).goPath()
.first()
.isFunctionImport("FICRTETTwoKeyNavParam")
.isFunction("UFCRTETTwoKeyNavParam")
.isParameter(0, "ParameterInt16", "1")
.isType(EntityTypeProvider.nameETTwoKeyNav)
.isTypeFilterOnEntry(EntityTypeProvider.nameETBaseTwoKeyNav)
.n()
.isFunction("BFCETBaseTwoKeyNavRTETTwoKeyNav");
testUri.run("FICRTCollESTwoKeyNavParam(ParameterInt16=1)"
+ "/olingo.odata.test1.ETBaseTwoKeyNav(PropertyInt16=2,PropertyString='3')"
+ "/olingo.odata.test1.BFCETBaseTwoKeyNavRTETTwoKeyNav()")
.isKind(UriInfoKind.resource).goPath()
.first()
.isFunctionImport("FICRTCollESTwoKeyNavParam")
.isFunction("UFCRTCollETTwoKeyNavParam")
.isParameter(0, "ParameterInt16", "1")
.isType(EntityTypeProvider.nameETTwoKeyNav)
.isTypeFilterOnCollection(EntityTypeProvider.nameETBaseTwoKeyNav)
.isKeyPredicate(0, "PropertyInt16", "2")
.isKeyPredicate(1, "PropertyString", "'3'")
.n()
.isFunction("BFCETBaseTwoKeyNavRTETTwoKeyNav");
testUri.run("FICRTCollCTTwoPrimTwoParam(ParameterInt16=1,ParameterString=null)")
.isKind(UriInfoKind.resource).goPath()
.first()
.isFunctionImport("FICRTCollCTTwoPrimTwoParam")
.isFunction("UFCRTCollCTTwoPrimTwoParam")
.isParameter(0, "ParameterInt16", "1")
.isParameter(1, "ParameterString", null);
}
@Test
public void runFunctionImpEntity() throws Exception {
testUri.run("FICRTETKeyNav()")
.isKind(UriInfoKind.resource).goPath()
.first()
.isFunctionImport("FICRTETKeyNav")
.isFunction("UFCRTETKeyNav")
.isType(EntityTypeProvider.nameETKeyNav);
testUri.run("FICRTETTwoKeyNavParam(ParameterInt16=1)")
.isKind(UriInfoKind.resource).goPath()
.first()
.isFunctionImport("FICRTETTwoKeyNavParam")
.isParameter(0, "ParameterInt16", "1");
testUri.run("FICRTESMedia(ParameterInt16=1)/$value")
.isKind(UriInfoKind.resource).goPath()
.first()
.isFunctionImport("FICRTESMedia")
.isFunction("UFCRTETMedia")
.n()
.isValue();
testUri.run("FICRTETKeyNav()/$ref")
.isKind(UriInfoKind.resource).goPath()
.first()
.isFunctionImport("FICRTETKeyNav")
.isFunction("UFCRTETKeyNav")
.n()
.isRef();
testUri.run("FICRTETTwoKeyNavParam(ParameterInt16=1)/$ref")
.isKind(UriInfoKind.resource).goPath()
.first()
.isFunctionImport("FICRTETTwoKeyNavParam")
.isFunction("UFCRTETTwoKeyNavParam")
.n()
.isRef();
testUri.run("FICRTETTwoKeyNavParam(ParameterInt16=1)/olingo.odata.test1.ETBaseTwoKeyNav")
.isKind(UriInfoKind.resource).goPath()
.first()
.isFunctionImport("FICRTETTwoKeyNavParam")
.isFunction("UFCRTETTwoKeyNavParam")
.isParameter(0, "ParameterInt16", "1")
.isType(EntityTypeProvider.nameETTwoKeyNav)
.isTypeFilterOnEntry(EntityTypeProvider.nameETBaseTwoKeyNav);
testUri.run("FICRTETTwoKeyNavParam(ParameterInt16=1)/olingo.odata.test1.ETBaseTwoKeyNav")
.isKind(UriInfoKind.resource).goPath()
.first()
.isFunctionImport("FICRTETTwoKeyNavParam")
.isFunction("UFCRTETTwoKeyNavParam")
.isParameter(0, "ParameterInt16", "1")
.isType(EntityTypeProvider.nameETTwoKeyNav)
.isTypeFilterOnEntry(EntityTypeProvider.nameETBaseTwoKeyNav);
testUri.run("FICRTCollESTwoKeyNavParam(ParameterInt16=1)"
+ "/olingo.odata.test1.ETBaseTwoKeyNav(PropertyInt16=2,PropertyString='3')")
.isKind(UriInfoKind.resource).goPath()
.first()
.isFunctionImport("FICRTCollESTwoKeyNavParam")
.isFunction("UFCRTCollETTwoKeyNavParam")
.isParameter(0, "ParameterInt16", "1")
.isType(EntityTypeProvider.nameETTwoKeyNav)
.isTypeFilterOnCollection(EntityTypeProvider.nameETBaseTwoKeyNav)
.isKeyPredicate(0, "PropertyInt16", "2")
.isKeyPredicate(1, "PropertyString", "'3'");
}
@Test
public void runFunctionImpEs() throws Exception {
testUri.run("FICRTESMixPrimCollCompTwoParam(ParameterInt16=1,ParameterString='2')")
.isKind(UriInfoKind.resource).goPath()
.first()
.isFunctionImport("FICRTESMixPrimCollCompTwoParam")
.isFunction("UFCRTESMixPrimCollCompTwoParam")
.isParameter(0, "ParameterInt16", "1")
.isParameter(1, "ParameterString", "'2'")
.isType(EntityTypeProvider.nameETMixPrimCollComp);
testUri.run("FICRTESMixPrimCollCompTwoParam(ParameterInt16=1,ParameterString='2')")
.isKind(UriInfoKind.resource).goPath()
.first()
.isFunctionImport("FICRTESMixPrimCollCompTwoParam")
.isFunction("UFCRTESMixPrimCollCompTwoParam")
.isParameter(0, "ParameterInt16", "1")
.isParameter(1, "ParameterString", "'2'")
.isType(EntityTypeProvider.nameETMixPrimCollComp);
testUri.run("FICRTESMixPrimCollCompTwoParam(ParameterInt16=1,ParameterString='2')/$count")
.isKind(UriInfoKind.resource).goPath()
.first()
.isFunctionImport("FICRTESMixPrimCollCompTwoParam")
.isFunction("UFCRTESMixPrimCollCompTwoParam")
.isParameter(0, "ParameterInt16", "1")
.isParameter(1, "ParameterString", "'2'")
.isType(EntityTypeProvider.nameETMixPrimCollComp)
.n()
.isCount();
}
@Test
public void runFunctionImpError() {
testUri.runEx("FICRTCollCTTwoPrimTwoParam")
.isExSyntax(UriParserSyntaxException.MessageKeys.SYNTAX);
testUri.runEx("FICRTCollCTTwoPrimTwoParam()").isExSemantic(MessageKeys.FUNCTION_NOT_FOUND);
testUri.runEx("FICRTCollCTTwoPrimTwoParam(invalidParam=2)").isExSemantic(MessageKeys.FUNCTION_NOT_FOUND);
}
@Test
public void runFunctionImpEsCast() throws Exception {
testUri.run("FICRTCollESTwoKeyNavParam(ParameterInt16=1)/olingo.odata.test1.ETBaseTwoKeyNav")
.isKind(UriInfoKind.resource).goPath()
.first()
.isFunctionImport("FICRTCollESTwoKeyNavParam")
.isFunction("UFCRTCollETTwoKeyNavParam")
.isParameter(0, "ParameterInt16", "1")
.isType(EntityTypeProvider.nameETTwoKeyNav)
.isTypeFilterOnCollection(EntityTypeProvider.nameETBaseTwoKeyNav);
testUri.run("FICRTCollESTwoKeyNavParam(ParameterInt16=1)/olingo.odata.test1.ETBaseTwoKeyNav/$count")
.isKind(UriInfoKind.resource).goPath()
.first()
.isFunctionImport("FICRTCollESTwoKeyNavParam")
.isFunction("UFCRTCollETTwoKeyNavParam")
.isParameter(0, "ParameterInt16", "1")
.isType(EntityTypeProvider.nameETTwoKeyNav)
.isTypeFilterOnCollection(EntityTypeProvider.nameETBaseTwoKeyNav)
.n()
.isCount();
testUri.run("FICRTCollESTwoKeyNavParam(ParameterInt16=1)"
+ "/olingo.odata.test1.ETBaseTwoKeyNav(PropertyInt16=2,PropertyString='3')")
.isKind(UriInfoKind.resource).goPath()
.first()
.isFunctionImport("FICRTCollESTwoKeyNavParam")
.isFunction("UFCRTCollETTwoKeyNavParam")
.isParameter(0, "ParameterInt16", "1")
.isType(EntityTypeProvider.nameETTwoKeyNav)
.isTypeFilterOnCollection(EntityTypeProvider.nameETBaseTwoKeyNav)
.isKeyPredicate(0, "PropertyInt16", "2")
.isKeyPredicate(1, "PropertyString", "'3'");
testUri.run("FICRTCollESTwoKeyNavParam(ParameterInt16=1)"
+ "/olingo.odata.test1.ETBaseTwoKeyNav(PropertyInt16=2,PropertyString='3')"
+ "/olingo.odata.test1.ETTwoBaseTwoKeyNav")
.isKind(UriInfoKind.resource).goPath()
.first()
.isFunctionImport("FICRTCollESTwoKeyNavParam")
.isFunction("UFCRTCollETTwoKeyNavParam")
.isParameter(0, "ParameterInt16", "1")
.isType(EntityTypeProvider.nameETTwoKeyNav)
.isTypeFilterOnCollection(EntityTypeProvider.nameETBaseTwoKeyNav)
.isKeyPredicate(0, "PropertyInt16", "2")
.isKeyPredicate(1, "PropertyString", "'3'")
.isTypeFilterOnEntry(EntityTypeProvider.nameETTwoBaseTwoKeyNav);
}
@Test
public void runSingletonEntityValue() throws Exception {
testUri.run("SIMedia/$value")
.isKind(UriInfoKind.resource).goPath()
.first()
.isSingleton("SIMedia")
.n().isValue();
}
@Test
public void runSingletonPpNpCast() throws Exception {
testUri.run("SINav/olingo.odata.test1.ETBaseTwoKeyNav/NavPropertyETKeyNavMany")
.isKind(UriInfoKind.resource).goPath()
.first()
.isSingleton("SINav")
.isType(EntityTypeProvider.nameETTwoKeyNav)
.isTypeFilter(EntityTypeProvider.nameETBaseTwoKeyNav)
.n()
.isNavProperty("NavPropertyETKeyNavMany", EntityTypeProvider.nameETKeyNav, true);
testUri.run("SINav/olingo.odata.test1.ETBaseTwoKeyNav/NavPropertyETKeyNavMany(1)")
.isKind(UriInfoKind.resource).goPath()
.first()
.isSingleton("SINav")
.isType(EntityTypeProvider.nameETTwoKeyNav)
.isTypeFilter(EntityTypeProvider.nameETBaseTwoKeyNav)
.n()
.isNavProperty("NavPropertyETKeyNavMany", EntityTypeProvider.nameETKeyNav, false)
.isKeyPredicate(0, "PropertyInt16", "1");
}
@Test
public void runSingletonPpCpCast() throws Exception {
testUri.run("SINav/olingo.odata.test1.ETBaseTwoKeyNav/PropertyComp")
.isKind(UriInfoKind.resource).goPath()
.first()
.isSingleton("SINav")
.isType(EntityTypeProvider.nameETTwoKeyNav)
.isTypeFilter(EntityTypeProvider.nameETBaseTwoKeyNav)
.n()
.isComplex("PropertyComp");
testUri.run("SINav/olingo.odata.test1.ETBaseTwoKeyNav/PropertyComp/PropertyComp")
.isKind(UriInfoKind.resource).goPath()
.first()
.isSingleton("SINav")
.isType(EntityTypeProvider.nameETTwoKeyNav)
.isTypeFilter(EntityTypeProvider.nameETBaseTwoKeyNav)
.n()
.isComplex("PropertyComp")
.n()
.isComplex("PropertyComp");
testUri.run("SINav/olingo.odata.test1.ETBaseTwoKeyNav/PropertyCompTwoPrim/olingo.odata.test1.CTBase")
.isKind(UriInfoKind.resource).goPath()
.first()
.isSingleton("SINav")
.isType(EntityTypeProvider.nameETTwoKeyNav)
.isTypeFilter(EntityTypeProvider.nameETBaseTwoKeyNav)
.n()
.isComplex("PropertyCompTwoPrim")
.isType(ComplexTypeProvider.nameCTTwoPrim)
.isTypeFilter(ComplexTypeProvider.nameCTBase);
}
@Test
public void runSingletonPpSpCast() throws Exception {
testUri.run("SINav/olingo.odata.test1.ETBaseTwoKeyNav/PropertyInt16")
.isKind(UriInfoKind.resource).goPath()
.first()
.isSingleton("SINav")
.isType(EntityTypeProvider.nameETTwoKeyNav)
.isTypeFilter(EntityTypeProvider.nameETBaseTwoKeyNav)
.n()
.isPrimitiveProperty("PropertyInt16", PropertyProvider.nameInt16, false);
testUri.run("SINav/olingo.odata.test1.ETBaseTwoKeyNav/CollPropertyString")
.isKind(UriInfoKind.resource).goPath()
.first()
.isSingleton("SINav")
.isType(EntityTypeProvider.nameETTwoKeyNav)
.isTypeFilter(EntityTypeProvider.nameETBaseTwoKeyNav)
.n()
.isPrimitiveProperty("CollPropertyString", PropertyProvider.nameString, true)
.isType(PropertyProvider.nameString, true);
}
@Test
public void runSingletonEntityPpNp() throws Exception {
testUri.run("SINav/NavPropertyETKeyNavMany")
.isKind(UriInfoKind.resource).goPath()
.first()
.isSingleton("SINav")
.n()
.isNavProperty("NavPropertyETKeyNavMany", EntityTypeProvider.nameETKeyNav, true);
testUri.run("SINav/NavPropertyETTwoKeyNavMany(PropertyInt16=1,PropertyString='2')")
.isKind(UriInfoKind.resource).goPath()
.first()
.isSingleton("SINav")
.n()
.isNavProperty("NavPropertyETTwoKeyNavMany", EntityTypeProvider.nameETTwoKeyNav, false)
.isKeyPredicate(0, "PropertyInt16", "1")
.isKeyPredicate(1, "PropertyString", "'2'");
}
@Test
public void runSingletonEntityPpCp() throws Exception {
testUri.run("SINav/PropertyComp")
.isKind(UriInfoKind.resource).goPath()
.first()
.isSingleton("SINav")
.n()
.isComplex("PropertyComp");
testUri.run("SINav/PropertyComp/PropertyComp")
.isKind(UriInfoKind.resource).goPath()
.first()
.isSingleton("SINav")
.n()
.isComplex("PropertyComp")
.n()
.isComplex("PropertyComp");
}
@Test
public void runSingletonEntityPpCpColl() throws Exception {
testUri.run("SINav/CollPropertyComp")
.isKind(UriInfoKind.resource).goPath()
.first()
.isSingleton("SINav")
.n()
.isComplex("CollPropertyComp")
.isType(ComplexTypeProvider.nameCTPrimComp, true);
testUri.run("SINav/CollPropertyComp/$count")
.isKind(UriInfoKind.resource).goPath()
.first()
.isSingleton("SINav")
.n()
.isComplex("CollPropertyComp")
.isType(ComplexTypeProvider.nameCTPrimComp, true)
.n()
.isCount();
}
@Test
public void runSingletonEntityPpSp() throws Exception {
testUri.run("SINav/PropertyString")
.isKind(UriInfoKind.resource).goPath()
.first()
.isSingleton("SINav")
.n()
.isPrimitiveProperty("PropertyString", PropertyProvider.nameString, false);
}
@Test
public void runSingletonEntityPpSpColl() throws Exception {
testUri.run("SINav/CollPropertyString")
.isKind(UriInfoKind.resource).goPath()
.first()
.isSingleton("SINav")
.n()
.isPrimitiveProperty("CollPropertyString", PropertyProvider.nameString, true);
testUri.run("SINav/CollPropertyString/$count")
.isKind(UriInfoKind.resource).goPath()
.first()
.isSingleton("SINav")
.n()
.isPrimitiveProperty("CollPropertyString", PropertyProvider.nameString, true)
.n()
.isCount();
}
@Test
public void expandStar() throws Exception {
testUri.run("ESKeyNav(1)", "$expand=*")
.isKind(UriInfoKind.resource).goExpand()
.first()
.isSegmentStar();
testUri.run("ESKeyNav(1)", "$expand=*/$ref")
.isKind(UriInfoKind.resource).goExpand()
.first()
.isSegmentStar()
.isSegmentRef();
testUri.run("ESKeyNav(1)", "$expand=*/$ref,NavPropertyETKeyNavMany")
.isKind(UriInfoKind.resource).goExpand()
.first()
.isSegmentStar().isSegmentRef()
.next()
.goPath().first()
.isNavProperty("NavPropertyETKeyNavMany", EntityTypeProvider.nameETKeyNav, true);
testUri.run("ESKeyNav(1)", "$expand=*($levels=3)")
.isKind(UriInfoKind.resource).goExpand()
.first()
.isSegmentStar()
.isLevelText("3");
testUri.run("ESKeyNav(1)", "$expand=*($levels=max)")
.isKind(UriInfoKind.resource).goExpand()
.first()
.isSegmentStar()
.isLevelText("max");
}
@Test
public void expandNavigationRef() throws Exception {
testUri.run("ESKeyNav(1)", "$expand=NavPropertyETKeyNavMany/$ref")
.isKind(UriInfoKind.resource).goExpand()
.first()
.goPath().first()
.isNavProperty("NavPropertyETKeyNavMany", EntityTypeProvider.nameETKeyNav, true)
.isType(EntityTypeProvider.nameETKeyNav, true)
.n().isRef();
testUri.run("ESKeyNav(1)", "$expand=NavPropertyETKeyNavOne/$ref")
.isKind(UriInfoKind.resource).goExpand()
.first()
.goPath().first()
.isNavProperty("NavPropertyETKeyNavOne", EntityTypeProvider.nameETKeyNav, false)
.isType(EntityTypeProvider.nameETKeyNav, false)
.n().isRef();
testUri.run("ESKeyNav(1)", "$expand=NavPropertyETKeyNavMany/$ref($filter=PropertyInt16 eq 1)")
.isKind(UriInfoKind.resource).goExpand()
.first()
.goPath().first()
.isNavProperty("NavPropertyETKeyNavMany", EntityTypeProvider.nameETKeyNav, true)
.isType(EntityTypeProvider.nameETKeyNav, true)
.n().isRef()
.goUpExpandValidator().goFilter().is("<<PropertyInt16> eq <1>>");
testUri.run("ESKeyNav(1)", "$expand=NavPropertyETKeyNavMany/$ref($orderby=PropertyInt16)")
.isKind(UriInfoKind.resource).goExpand()
.first()
.goPath().first()
.isNavProperty("NavPropertyETKeyNavMany", EntityTypeProvider.nameETKeyNav, true)
.isType(EntityTypeProvider.nameETKeyNav, true)
.n().isRef()
.goUpExpandValidator()
.isSortOrder(0, false)
.goOrder(0).goPath().isPrimitiveProperty("PropertyInt16", PropertyProvider.nameInt16, false);
testUri.run("ESKeyNav(1)", "$expand=NavPropertyETKeyNavMany/$ref($skip=1)")
.isKind(UriInfoKind.resource).goExpand()
.first()
.goPath().first()
.isNavProperty("NavPropertyETKeyNavMany", EntityTypeProvider.nameETKeyNav, true)
.isType(EntityTypeProvider.nameETKeyNav, true)
.n().isRef()
.goUpExpandValidator()
.isSkipText("1");
testUri.run("ESKeyNav(1)", "$expand=NavPropertyETKeyNavMany/$ref($top=2)")
.isKind(UriInfoKind.resource).goExpand()
.first()
.goPath().first()
.isNavProperty("NavPropertyETKeyNavMany", EntityTypeProvider.nameETKeyNav, true)
.isType(EntityTypeProvider.nameETKeyNav, true)
.n().isRef()
.goUpExpandValidator()
.isTopText("2");
testUri.run("ESKeyNav(1)", "$expand=NavPropertyETKeyNavMany/$ref($count=true)")
.isKind(UriInfoKind.resource).goExpand()
.first()
.goPath().first()
.isNavProperty("NavPropertyETKeyNavMany", EntityTypeProvider.nameETKeyNav, true)
.isType(EntityTypeProvider.nameETKeyNav, true)
.n().isRef()
.goUpExpandValidator()
.isInlineCountText("true");
testUri.run("ESKeyNav(1)", "$expand=NavPropertyETKeyNavMany/$ref($skip=1;$top=3)")
.isKind(UriInfoKind.resource).goExpand()
.first()
.goPath().first()
.isNavProperty("NavPropertyETKeyNavMany", EntityTypeProvider.nameETKeyNav, true)
.isType(EntityTypeProvider.nameETKeyNav, true)
.n().isRef()
.goUpExpandValidator()
.isSkipText("1")
.isTopText("3");
testUri.run("ESKeyNav(1)", "$expand=NavPropertyETKeyNavMany/$ref($skip=1%3b$top=3)")
.isKind(UriInfoKind.resource).goExpand()
.first()
.goPath().first()
.isNavProperty("NavPropertyETKeyNavMany", EntityTypeProvider.nameETKeyNav, true)
.isType(EntityTypeProvider.nameETKeyNav, true)
.n().isRef()
.goUpExpandValidator()
.isSkipText("1")
.isTopText("3");
}
@Test
public void expandNavigationCount() throws Exception {
testUri.run("ESKeyNav(1)", "$expand=NavPropertyETKeyNavMany/$count")
.isKind(UriInfoKind.resource).goExpand()
.first()
.goPath().first()
.isNavProperty("NavPropertyETKeyNavMany", EntityTypeProvider.nameETKeyNav, true)
.isType(EntityTypeProvider.nameETKeyNav, true)
.n().isCount();
testUri.run("ESKeyNav(1)", "$expand=NavPropertyETKeyNavOne/$count")
.isKind(UriInfoKind.resource).goExpand()
.first()
.goPath().first()
.isNavProperty("NavPropertyETKeyNavOne", EntityTypeProvider.nameETKeyNav, false)
.isType(EntityTypeProvider.nameETKeyNav, false)
.n().isCount();
testUri.run("ESKeyNav(1)", "$expand=NavPropertyETKeyNavMany/$count($filter=PropertyInt16 gt 1)")
.isKind(UriInfoKind.resource).goExpand()
.first()
.goPath().first()
.isNavProperty("NavPropertyETKeyNavMany", EntityTypeProvider.nameETKeyNav, true)
.isType(EntityTypeProvider.nameETKeyNav, true)
.n().isCount()
.goUpExpandValidator()
.goFilter().is("<<PropertyInt16> gt <1>>");
}
@Test
public void expandNavigationOptions() throws Exception {
testUri.run("ESKeyNav(1)", "$expand=NavPropertyETKeyNavMany($filter=PropertyInt16 eq 1)")
.isKind(UriInfoKind.resource).goExpand()
.first()
.goPath().first()
.isNavProperty("NavPropertyETKeyNavMany", EntityTypeProvider.nameETKeyNav, true)
.isType(EntityTypeProvider.nameETKeyNav, true)
.goUpExpandValidator().goFilter().is("<<PropertyInt16> eq <1>>");
testUri.run("ESKeyNav(1)", "$expand=NavPropertyETKeyNavMany($orderby=PropertyInt16)")
.isKind(UriInfoKind.resource).goExpand()
.first()
.goPath().first()
.isNavProperty("NavPropertyETKeyNavMany", EntityTypeProvider.nameETKeyNav, true)
.isType(EntityTypeProvider.nameETKeyNav, true)
.goUpExpandValidator()
.isSortOrder(0, false)
.goOrder(0).goPath().isPrimitiveProperty("PropertyInt16", PropertyProvider.nameInt16, false);
testUri.run("ESKeyNav(1)", "$expand=NavPropertyETKeyNavMany($skip=1)")
.isKind(UriInfoKind.resource).goExpand()
.first()
.goPath().first()
.isNavProperty("NavPropertyETKeyNavMany", EntityTypeProvider.nameETKeyNav, true)
.isType(EntityTypeProvider.nameETKeyNav, true)
.goUpExpandValidator()
.isSkipText("1");
testUri.run("ESKeyNav(1)", "$expand=NavPropertyETKeyNavMany($top=2)")
.isKind(UriInfoKind.resource).goExpand()
.first()
.goPath().first()
.isNavProperty("NavPropertyETKeyNavMany", EntityTypeProvider.nameETKeyNav, true)
.isType(EntityTypeProvider.nameETKeyNav, true)
.goUpExpandValidator()
.isTopText("2");
testUri.run("ESKeyNav(1)", "$expand=NavPropertyETKeyNavMany($count=true)")
.isKind(UriInfoKind.resource).goExpand()
.first()
.goPath().first()
.isNavProperty("NavPropertyETKeyNavMany", EntityTypeProvider.nameETKeyNav, true)
.isType(EntityTypeProvider.nameETKeyNav, true)
.goUpExpandValidator()
.isInlineCountText("true");
testUri.run("ESKeyNav(1)", "$expand=NavPropertyETKeyNavMany($select=PropertyString)")
.isKind(UriInfoKind.resource).goExpand()
.first()
.goPath().first()
.isNavProperty("NavPropertyETKeyNavMany", EntityTypeProvider.nameETKeyNav, true)
.isType(EntityTypeProvider.nameETKeyNav, true)
.goUpExpandValidator()
.goSelectItem(0).isPrimitiveProperty("PropertyString", PropertyProvider.nameString, false);
testUri.run("ESKeyNav(1)", "$expand=NavPropertyETKeyNavMany($expand=NavPropertyETTwoKeyNavOne)")
.isKind(UriInfoKind.resource).goExpand()
.first()
.goPath().first()
.isNavProperty("NavPropertyETKeyNavMany", EntityTypeProvider.nameETKeyNav, true)
.isType(EntityTypeProvider.nameETKeyNav, true)
.goUpExpandValidator()
.goExpand()
.goPath().first()
.isNavProperty("NavPropertyETTwoKeyNavOne", EntityTypeProvider.nameETTwoKeyNav, false);
testUri.run("ESKeyNav(1)", "$expand=NavPropertyETKeyNavMany($expand=NavPropertyETKeyNavMany)")
.isKind(UriInfoKind.resource).goExpand()
.first()
.goPath().first()
.isNavProperty("NavPropertyETKeyNavMany", EntityTypeProvider.nameETKeyNav, true)
.isType(EntityTypeProvider.nameETKeyNav, true)
.goUpExpandValidator()
.goExpand()
.goPath().first()
.isNavProperty("NavPropertyETKeyNavMany", EntityTypeProvider.nameETKeyNav, true);
testUri.run("ESKeyNav(1)", "$expand=NavPropertyETKeyNavOne($levels=5)")
.isKind(UriInfoKind.resource).goExpand()
.first()
.goPath().first()
.isNavProperty("NavPropertyETKeyNavOne", EntityTypeProvider.nameETKeyNav, false)
.isType(EntityTypeProvider.nameETKeyNav, false)
.goUpExpandValidator()
.isLevelText("5");
testUri.run("ESKeyNav(1)", "$expand=NavPropertyETKeyNavMany($select=PropertyString)")
.isKind(UriInfoKind.resource).goExpand()
.first()
.goPath().first()
.isNavProperty("NavPropertyETKeyNavMany", EntityTypeProvider.nameETKeyNav, true)
.isType(EntityTypeProvider.nameETKeyNav, true)
.goUpExpandValidator()
.goSelectItem(0).isPrimitiveProperty("PropertyString", PropertyProvider.nameString, false);
testUri.run("ESKeyNav(1)", "$expand=NavPropertyETKeyNavOne($levels=max)")
.isKind(UriInfoKind.resource).goExpand()
.first()
.goPath().first()
.isNavProperty("NavPropertyETKeyNavOne", EntityTypeProvider.nameETKeyNav, false)
.isType(EntityTypeProvider.nameETKeyNav, false)
.goUpExpandValidator()
.isLevelText("max");
testUri.run("ESKeyNav(1)", "$expand=NavPropertyETKeyNavMany($skip=1;$top=2)")
.isKind(UriInfoKind.resource).goExpand()
.first()
.goPath().first()
.isNavProperty("NavPropertyETKeyNavMany", EntityTypeProvider.nameETKeyNav, true)
.isType(EntityTypeProvider.nameETKeyNav, true)
.goUpExpandValidator()
.isSkipText("1")
.isTopText("2");
testUri.run("ESKeyNav(1)", "$expand=NavPropertyETKeyNavMany($skip=1%3b$top=2)")
.isKind(UriInfoKind.resource).goExpand()
.first()
.goPath().first()
.isNavProperty("NavPropertyETKeyNavMany", EntityTypeProvider.nameETKeyNav, true)
.isType(EntityTypeProvider.nameETKeyNav, true)
.goUpExpandValidator()
.isSkipText("1")
.isTopText("2");
testUri.run("ESKeyNav(1)", "$expand=NavPropertyETKeyNavMany($search=Country AND Western)")
.isKind(UriInfoKind.resource).goExpand()
.first().goPath().first().isNavProperty("NavPropertyETKeyNavMany", EntityTypeProvider.nameETKeyNav, true)
.goUpExpandValidator()
.isSearchSerialized("{'Country' AND 'Western'}");
testUri.run("ESTwoKeyNav(PropertyInt16=1,PropertyString='Hugo')", "$expand=NavPropertyETKeyNavMany")
.isKind(UriInfoKind.resource).goPath()
.first()
.isKeyPredicate(0, "PropertyInt16", "1")
.isKeyPredicate(1, "PropertyString", "'Hugo'")
.goUpUriValidator().goExpand()
.first()
.goPath().first()
.isNavProperty("NavPropertyETKeyNavMany", EntityTypeProvider.nameETKeyNav, true)
.isType(EntityTypeProvider.nameETKeyNav, true);
}
@Test
public void expandTypeCasts() throws Exception {
testUri.run("ESTwoKeyNav", "$expand=olingo.odata.test1.ETBaseTwoKeyNav/NavPropertyETKeyNavMany")
.isKind(UriInfoKind.resource)
.goExpand().first()
.isExpandStartType(EntityTypeProvider.nameETBaseTwoKeyNav)
.goPath().first()
.isNavProperty("NavPropertyETKeyNavMany", EntityTypeProvider.nameETKeyNav, true);
testUri.run("ESTwoKeyNav(PropertyInt16=1,PropertyString='Hugo')",
"$expand=olingo.odata.test1.ETBaseTwoKeyNav/NavPropertyETKeyNavMany")
.isKind(UriInfoKind.resource).goPath().first()
.isKeyPredicate(0, "PropertyInt16", "1")
.isKeyPredicate(1, "PropertyString", "'Hugo'")
.goUpUriValidator().goExpand().first()
.isExpandStartType(EntityTypeProvider.nameETBaseTwoKeyNav)
.goPath().first()
.isType(EntityTypeProvider.nameETKeyNav)
.isNavProperty("NavPropertyETKeyNavMany", EntityTypeProvider.nameETKeyNav, true);
testUri.run("ESTwoKeyNav(PropertyInt16=1,PropertyString='2')",
"$expand=olingo.odata.test1.ETBaseTwoKeyNav/NavPropertyETTwoKeyNavMany")
.isKind(UriInfoKind.resource).goPath().first()
.isKeyPredicate(0, "PropertyInt16", "1")
.isKeyPredicate(1, "PropertyString", "'2'")
.goUpUriValidator().goExpand().first()
.isExpandStartType(EntityTypeProvider.nameETBaseTwoKeyNav)
.goPath().first()
.isType(EntityTypeProvider.nameETTwoKeyNav)
.isNavProperty("NavPropertyETTwoKeyNavMany", EntityTypeProvider.nameETTwoKeyNav, true);
testUri.run("ESTwoKeyNav(PropertyInt16=1,PropertyString='2')",
"$expand=olingo.odata.test1.ETBaseTwoKeyNav/NavPropertyETTwoKeyNavMany/olingo.odata.test1.ETTwoBaseTwoKeyNav")
.isKind(UriInfoKind.resource).goPath().first()
.isKeyPredicate(0, "PropertyInt16", "1")
.isKeyPredicate(1, "PropertyString", "'2'")
.goUpUriValidator().goExpand().first()
.isExpandStartType(EntityTypeProvider.nameETBaseTwoKeyNav)
.goPath().first()
.isNavProperty("NavPropertyETTwoKeyNavMany", EntityTypeProvider.nameETTwoKeyNav, true)
.isTypeFilterOnCollection(EntityTypeProvider.nameETTwoBaseTwoKeyNav);
testUri.run("ESTwoKeyNav", "$expand=olingo.odata.test1.ETBaseTwoKeyNav/PropertyCompNav/NavPropertyETTwoKeyNavOne")
.isKind(UriInfoKind.resource)
.goExpand().first()
.isExpandStartType(EntityTypeProvider.nameETBaseTwoKeyNav)
.goPath().first()
.isComplexProperty("PropertyCompNav", ComplexTypeProvider.nameCTBasePrimCompNav, false)
.n()
.isNavProperty("NavPropertyETTwoKeyNavOne", EntityTypeProvider.nameETTwoKeyNav, false);
testUri.run("ESTwoKeyNav", "$expand=olingo.odata.test1.ETBaseTwoKeyNav/PropertyCompNav/*")
.isKind(UriInfoKind.resource)
.goExpand().first()
.isExpandStartType(EntityTypeProvider.nameETBaseTwoKeyNav)
.isSegmentStar()
.goPath().last().isComplexProperty("PropertyCompNav", ComplexTypeProvider.nameCTBasePrimCompNav, false);
testUri.run("ESTwoKeyNav", "$expand=olingo.odata.test1.ETBaseTwoKeyNav/PropertyCompNav"
+ "/olingo.odata.test1.CTTwoBasePrimCompNav/NavPropertyETTwoKeyNavOne")
.isKind(UriInfoKind.resource)
.goExpand().first()
.isExpandStartType(EntityTypeProvider.nameETBaseTwoKeyNav)
.goPath().first()
.isComplexProperty("PropertyCompNav", ComplexTypeProvider.nameCTBasePrimCompNav, false)
.isTypeFilter(ComplexTypeProvider.nameCTTwoBasePrimCompNav)
.n()
.isNavProperty("NavPropertyETTwoKeyNavOne", EntityTypeProvider.nameETTwoKeyNav, false);
testUri.run("ESKeyNav", "$expand=NavPropertyETTwoKeyNavMany/Namespace1_Alias.ETBaseTwoKeyNav"
+ "($expand=NavPropertyETBaseTwoKeyNavOne)")
.isKind(UriInfoKind.resource)
.goExpand().goPath().first()
.isNavProperty("NavPropertyETTwoKeyNavMany", EntityTypeProvider.nameETTwoKeyNav, true)
.isType(EntityTypeProvider.nameETTwoKeyNav, true)
.isTypeFilterOnCollection(EntityTypeProvider.nameETBaseTwoKeyNav)
.goUpExpandValidator()
// go to the expand options of the current expand
.goExpand()
.goPath().first()
.isNavProperty("NavPropertyETBaseTwoKeyNavOne", EntityTypeProvider.nameETBaseTwoKeyNav, false);
testUri.run("ESKeyNav(1)", "$expand=NavPropertyETKeyNavMany/$ref,NavPropertyETTwoKeyNavMany($skip=2;$top=1)")
.isKind(UriInfoKind.resource)
.goExpand().first()
.goPath()
.first()
.isNavProperty("NavPropertyETKeyNavMany", EntityTypeProvider.nameETKeyNav, true)
.n().isRef()
.goUpExpandValidator()
.next()
.goPath()
.first().isNavProperty("NavPropertyETTwoKeyNavMany", EntityTypeProvider.nameETTwoKeyNav, true)
.goUpExpandValidator()
.isSkipText("2")
.isTopText("1");
testUri.run("ESTwoKeyNav(PropertyInt16=1,PropertyString='2')", "$expand=olingo.odata.test1.ETBaseTwoKeyNav"
+ "/NavPropertyETTwoKeyNavMany/olingo.odata.test1.ETTwoBaseTwoKeyNav($select=PropertyString)")
.isKind(UriInfoKind.resource).goPath()
.first()
.isKeyPredicate(0, "PropertyInt16", "1")
.isKeyPredicate(1, "PropertyString", "'2'")
.goUpUriValidator().goExpand().first()
.isExpandStartType(EntityTypeProvider.nameETBaseTwoKeyNav)
.goPath().first()
.isNavProperty("NavPropertyETTwoKeyNavMany", EntityTypeProvider.nameETTwoKeyNav, true)
.isType(EntityTypeProvider.nameETTwoKeyNav)
.isTypeFilterOnCollection(EntityTypeProvider.nameETTwoBaseTwoKeyNav)
.goUpExpandValidator()
.goSelectItem(0).isPrimitiveProperty("PropertyString", PropertyProvider.nameString, false);
testUri.run("ESKeyNav", "$expand=NavPropertyETKeyNavOne($expand=NavPropertyETKeyNavMany("
+ "$expand=NavPropertyETKeyNavOne))")
.isKind(UriInfoKind.resource)
.goExpand().first()
.goPath().first()
.isNavProperty("NavPropertyETKeyNavOne", EntityTypeProvider.nameETKeyNav, false)
.isType(EntityTypeProvider.nameETKeyNav)
.goUpExpandValidator()
.goExpand().first()
.goPath().first()
.isNavProperty("NavPropertyETKeyNavMany", EntityTypeProvider.nameETKeyNav, true)
.isType(EntityTypeProvider.nameETKeyNav)
.goUpExpandValidator()
.goExpand().first()
.goPath().first()
.isNavProperty("NavPropertyETKeyNavOne", EntityTypeProvider.nameETKeyNav, false)
.isType(EntityTypeProvider.nameETKeyNav);
testUri.run("ESKeyNav", "$expand=NavPropertyETKeyNavOne($select=PropertyInt16)")
.isKind(UriInfoKind.resource)
.goExpand().first()
.goPath().first()
.isNavProperty("NavPropertyETKeyNavOne", EntityTypeProvider.nameETKeyNav, false)
.isType(EntityTypeProvider.nameETKeyNav)
.goUpExpandValidator()
.goSelectItem(0).isPrimitiveProperty("PropertyInt16", PropertyProvider.nameInt16, false);
testUri.run("ESKeyNav", "$expand=NavPropertyETKeyNavOne($select=PropertyCompNav/PropertyInt16)")
.isKind(UriInfoKind.resource)
.goExpand().first()
.goPath().first()
.isNavProperty("NavPropertyETKeyNavOne", EntityTypeProvider.nameETKeyNav, false)
.isType(EntityTypeProvider.nameETKeyNav)
.goUpExpandValidator()
.goSelectItem(0)
.first().isComplexProperty("PropertyCompNav", ComplexTypeProvider.nameCTNavFiveProp, false)
.n().isPrimitiveProperty("PropertyInt16", PropertyProvider.nameInt16, false);
testUri.runEx("ESKeyNav", "$expand=undefined")
.isExSemantic(MessageKeys.EXPRESSION_PROPERTY_NOT_IN_TYPE);
testUri.runEx("ESTwoKeyNav", "$expand=PropertyCompNav/undefined")
.isExSemantic(MessageKeys.EXPRESSION_PROPERTY_NOT_IN_TYPE);
testUri.runEx("ESTwoKeyNav", "$expand=PropertyCompNav/*+")
.isExSyntax(UriParserSyntaxException.MessageKeys.WRONG_VALUE_FOR_SYSTEM_QUERY_OPTION);
}
@Test
public void duplicatedSystemQueryOptionsInExpand() throws Exception {
testUri.runEx("ESKeyNav", "$expand=NavPropertyETKeyNavOne($select=PropertyInt16;$select=PropertyInt16)")
.isExSyntax(UriParserSyntaxException.MessageKeys.DOUBLE_SYSTEM_QUERY_OPTION);
testUri.runEx("ESKeyNav", "$expand=NavPropertyETKeyNavOne($filter=true;$filter=true)")
.isExSyntax(UriParserSyntaxException.MessageKeys.DOUBLE_SYSTEM_QUERY_OPTION);
testUri.runEx("ESKeyNav", "$expand=NavPropertyETKeyNavOne($orderby=PropertyInt16;$orderby=PropertyInt16)")
.isExSyntax(UriParserSyntaxException.MessageKeys.DOUBLE_SYSTEM_QUERY_OPTION);
testUri.runEx("ESKeyNav", "$expand=NavPropertyETKeyNavOne($levels=2;$levels=3)")
.isExSyntax(UriParserSyntaxException.MessageKeys.DOUBLE_SYSTEM_QUERY_OPTION);
testUri.runEx("ESKeyNav", "$expand=NavPropertyETKeyNavOne($expand=*;$expand=*)")
.isExSyntax(UriParserSyntaxException.MessageKeys.DOUBLE_SYSTEM_QUERY_OPTION);
testUri.runEx("ESKeyNav", "$expand=NavPropertyETKeyNavOne($count=true;$count=true)")
.isExSyntax(UriParserSyntaxException.MessageKeys.DOUBLE_SYSTEM_QUERY_OPTION);
testUri.runEx("ESKeyNav", "$expand=NavPropertyETKeyNavOne($top=1;$top=1)")
.isExSyntax(UriParserSyntaxException.MessageKeys.DOUBLE_SYSTEM_QUERY_OPTION);
testUri.runEx("ESKeyNav", "$expand=NavPropertyETKeyNavOne($skip=2;$skip=2)")
.isExSyntax(UriParserSyntaxException.MessageKeys.DOUBLE_SYSTEM_QUERY_OPTION);
testUri.runEx("ESKeyNav", "$expand=NavPropertyETKeyNavOne($search=Test;$search=Test)")
.isExSyntax(UriParserSyntaxException.MessageKeys.DOUBLE_SYSTEM_QUERY_OPTION);
}
@Test
public void select() throws Exception {
testUri.run("ESTwoKeyNav", "$select=*")
.isSelectItemStar(0);
testUri.run("ESTwoKeyNav", "$select=olingo.odata.test1.*")
.isSelectItemAllOp(0, new FullQualifiedName("olingo.odata.test1", "*"));
testUri.run("ESTwoKeyNav", "$select=Namespace1_Alias.*")
.isSelectItemAllOp(0, new FullQualifiedName("Namespace1_Alias", "*"));
testUri.run("ESTwoKeyNav", "$select=PropertyString")
.goSelectItemPath(0).isPrimitiveProperty("PropertyString", PropertyProvider.nameString, false);
testUri.run("ESTwoKeyNav", "$select=PropertyComp")
.goSelectItemPath(0).isComplexProperty("PropertyComp", ComplexTypeProvider.nameCTPrimComp, false);
testUri.run("ESAllPrim", "$select=PropertyTimeOfDay,PropertyDate,NavPropertyETTwoPrimOne")
.isKind(UriInfoKind.resource)
.goSelectItemPath(0).first().isPrimitiveProperty("PropertyTimeOfDay", PropertyProvider.nameTimeOfDay, false)
.goUpUriValidator()
.goSelectItemPath(1).first().isPrimitiveProperty("PropertyDate", PropertyProvider.nameDate, false)
.goUpUriValidator()
.goSelectItemPath(2).first().isNavProperty("NavPropertyETTwoPrimOne", EntityTypeProvider.nameETTwoPrim, false);
testUri.run("ESMixEnumDefCollComp",
"$select=PropertyEnumString,PropertyDefString,CollPropertyEnumString,CollPropertyDefString")
.isKind(UriInfoKind.resource)
.goSelectItemPath(0).isPrimitiveProperty("PropertyEnumString", EnumTypeProvider.nameENString, false)
.goUpUriValidator()
.goSelectItemPath(1).isPrimitiveProperty("PropertyDefString", TypeDefinitionProvider.nameTDString, false)
.goUpUriValidator()
.goSelectItemPath(2).isPrimitiveProperty("CollPropertyEnumString", EnumTypeProvider.nameENString, true)
.goUpUriValidator()
.goSelectItemPath(3).isPrimitiveProperty("CollPropertyDefString", TypeDefinitionProvider.nameTDString, true);
testUri.run("ESTwoKeyNav", "$select=PropertyComp/PropertyInt16")
.goSelectItemPath(0)
.first()
.isComplexProperty("PropertyComp", ComplexTypeProvider.nameCTPrimComp, false)
.n()
.isPrimitiveProperty("PropertyInt16", PropertyProvider.nameInt16, false);
testUri.run("ESTwoKeyNav", "$select=PropertyComp/PropertyComp")
.goSelectItemPath(0)
.first()
.isComplexProperty("PropertyComp", ComplexTypeProvider.nameCTPrimComp, false)
.n()
.isComplexProperty("PropertyComp", ComplexTypeProvider.nameCTAllPrim, false);
testUri.run("ESTwoKeyNav", "$select=olingo.odata.test1.ETBaseTwoKeyNav")
.isSelectStartType(0, EntityTypeProvider.nameETBaseTwoKeyNav);
testUri.run("ESTwoKeyNav(PropertyInt16=1,PropertyString='2')",
"$select=olingo.odata.test1.ETBaseTwoKeyNav/PropertyInt16")
.isKind(UriInfoKind.resource).goPath()
.first()
.isKeyPredicate(0, "PropertyInt16", "1")
.isKeyPredicate(1, "PropertyString", "'2'")
.goUpUriValidator()
.isSelectStartType(0, EntityTypeProvider.nameETBaseTwoKeyNav)
.goSelectItemPath(0)
.first()
.isPrimitiveProperty("PropertyInt16", PropertyProvider.nameInt16, false);
testUri.run("ESTwoKeyNav(PropertyInt16=1,PropertyString='1')/PropertyCompNav",
"$select=olingo.odata.test1.CTTwoBasePrimCompNav")
.isSelectStartType(0, ComplexTypeProvider.nameCTTwoBasePrimCompNav);
testUri.run("ESTwoKeyNav", "$select=PropertyCompNav/olingo.odata.test1.CTTwoBasePrimCompNav")
.goSelectItemPath(0)
.first()
.isComplexProperty("PropertyCompNav", ComplexTypeProvider.nameCTBasePrimCompNav, false)
.isTypeFilter(ComplexTypeProvider.nameCTTwoBasePrimCompNav);
testUri.run("ESTwoKeyNav", "$select=PropertyCompNav/Namespace1_Alias.CTTwoBasePrimCompNav/PropertyInt16")
.goSelectItemPath(0)
.first()
.isComplexProperty("PropertyCompNav", ComplexTypeProvider.nameCTBasePrimCompNav, false)
.isTypeFilter(ComplexTypeProvider.nameCTTwoBasePrimCompNav)
.n()
.isPrimitiveProperty("PropertyInt16", PropertyProvider.nameInt16, false);
testUri.run("ESAllPrim", "$select=olingo.odata.test1.BAESAllPrimRTETAllPrim")
.goSelectItemPath(0)
.first()
.isAction(ActionProvider.nameBAESAllPrimRTETAllPrim.getName());
testUri.run("ESTwoKeyNav", "$select=Namespace1_Alias.BFCESTwoKeyNavRTString")
.goSelectItemPath(0)
.first()
.isFunction(FunctionProvider.nameBFCESTwoKeyNavRTString.getName());
testUri.run("ESTwoKeyNav", "$select=olingo.odata.test1.BFCESTwoKeyNavRTStringParam(ParameterComp)")
.goSelectItemPath(0)
.first()
.isFunction(FunctionProvider.nameBFCESTwoKeyNavRTStringParam.getName());
testUri.runEx("ESMixPrimCollComp", "$select=wrong")
.isExSemantic(MessageKeys.EXPRESSION_PROPERTY_NOT_IN_TYPE);
testUri.runEx("ESMixPrimCollComp", "$select=PropertyComp/wrong")
.isExSemantic(MessageKeys.EXPRESSION_PROPERTY_NOT_IN_TYPE);
testUri.runEx("ESMixPrimCollComp", "$select=PropertyComp///PropertyInt16")
.isExSyntax(UriParserSyntaxException.MessageKeys.SYNTAX);
testUri.runEx("ESMixPrimCollComp", "$select=/PropertyInt16")
.isExSyntax(UriParserSyntaxException.MessageKeys.SYNTAX);
testUri.runEx("ESMixPrimCollComp", "$select=PropertyInt16+")
.isExSyntax(UriParserSyntaxException.MessageKeys.WRONG_VALUE_FOR_SYSTEM_QUERY_OPTION);
testUri.runEx("ESTwoKeyNav", "$select=olingo.odata.test1.1")
.isExSemantic(MessageKeys.UNKNOWN_PART);
testUri.runEx("ESTwoKeyNav", "$select=unknown_namespace.*").isExSemantic(MessageKeys.UNKNOWN_PART);
testUri.runEx("ESTwoKeyNav", "$select=olingo.odata.test1.ETKeyNav")
.isExSemantic(MessageKeys.INCOMPATIBLE_TYPE_FILTER);
testUri.runEx("ESTwoKeyNav", "$select=PropertyCompNav/olingo.odata.test1.CTTwoPrim")
.isExSemantic(MessageKeys.INCOMPATIBLE_TYPE_FILTER);
testUri.runEx("ESTwoKeyNav", "$select=PropertyCompNav/olingo.odata.test1.CTwrong")
.isExSemantic(MessageKeys.UNKNOWN_TYPE);
testUri.runEx("ESTwoKeyNav", "$select=PropertyCompNav/.")
.isExSemantic(MessageKeys.UNKNOWN_PART);
testUri.runEx("ESTwoKeyNav", "$select=PropertyCompNav/olingo.odata.test1.CTTwoBasePrimCompNav/.")
.isExSemantic(MessageKeys.UNKNOWN_PART);
testUri.runEx("AIRT", "$select=wrong")
.isExSemantic(MessageKeys.ONLY_FOR_TYPED_PARTS);
testUri.runEx("AIRT", "$select=olingo.odata.test1.BAESAllPrimRT")
.isExSemantic(MessageKeys.ONLY_FOR_TYPED_PARTS);
testUri.runEx("ESTwoKeyNav", "$select=olingo.odata.test1.BFwrong")
.isExSemantic(MessageKeys.UNKNOWN_PART);
testUri.runEx("ESTwoKeyNav", "$select=olingo.odata.test1.BFCESTwoKeyNavRTStringParam()")
.isExSyntax(UriParserSyntaxException.MessageKeys.SYNTAX);
testUri.runEx("ESTwoKeyNav", "$select=Namespace1_Alias.BFCESTwoKeyNavRTStringParam(ParameterComp,...)")
.isExSyntax(UriParserSyntaxException.MessageKeys.SYNTAX);
}
@Test
public void top() throws Exception {
testUri.run("ESKeyNav", "$top=1")
.isKind(UriInfoKind.resource)
.goPath().isEntitySet("ESKeyNav")
.goUpUriValidator().isTopText("1");
testUri.run("ESKeyNav", "$top=0")
.isKind(UriInfoKind.resource)
.goPath().isEntitySet("ESKeyNav")
.goUpUriValidator().isTopText("0");
testUri.runEx("ESKeyNav", "$top=undefined")
.isExSyntax(UriParserSyntaxException.MessageKeys.WRONG_VALUE_FOR_SYSTEM_QUERY_OPTION);
testUri.runEx("ESKeyNav", "$top=")
.isExSyntax(UriParserSyntaxException.MessageKeys.WRONG_VALUE_FOR_SYSTEM_QUERY_OPTION);
testUri.runEx("ESKeyNav", "$top=-3")
.isExSyntax(UriParserSyntaxException.MessageKeys.WRONG_VALUE_FOR_SYSTEM_QUERY_OPTION);
}
@Test
public void format() throws Exception {
testUri.run("ESKeyNav(1)", "$format=atom")
.isKind(UriInfoKind.resource)
.isFormatText("atom");
testUri.run("ESKeyNav(1)", "$format=json")
.isKind(UriInfoKind.resource)
.isFormatText("json");
testUri.run("ESKeyNav(1)", "$format=xml")
.isKind(UriInfoKind.resource)
.isFormatText("xml");
testUri.run("ESKeyNav(1)", "$format=IANA_content_type/must_contain_a_slash")
.isKind(UriInfoKind.resource)
.isFormatText("IANA_content_type/must_contain_a_slash");
testUri.run("ESKeyNav(1)", "$format=Test_all_valid_signsSpecified_for_format_signs%26-._~$@%27/Aa123%26-._~$@%27")
.isKind(UriInfoKind.resource)
.isFormatText("Test_all_valid_signsSpecified_for_format_signs&-._~$@'/Aa123&-._~$@'");
testUri.run("ESKeyNav(1)", "$format=" + ContentType.APPLICATION_ATOM_XML_ENTRY_UTF8)
.isKind(UriInfoKind.resource)
.isFormatText(ContentType.APPLICATION_ATOM_XML_ENTRY_UTF8.toContentTypeString());
testUri.runEx("ESKeyNav(1)", "$format=noSlash")
.isExSyntax(UriParserSyntaxException.MessageKeys.WRONG_VALUE_FOR_SYSTEM_QUERY_OPTION_FORMAT);
testUri.runEx("ESKeyNav(1)", "$format=slashAtEnd/")
.isExSyntax(UriParserSyntaxException.MessageKeys.WRONG_VALUE_FOR_SYSTEM_QUERY_OPTION_FORMAT);
testUri.runEx("ESKeyNav(1)", "$format=/startsWithSlash")
.isExSyntax(UriParserSyntaxException.MessageKeys.WRONG_VALUE_FOR_SYSTEM_QUERY_OPTION_FORMAT);
testUri.runEx("ESKeyNav(1)", "$format=two/Slashes/tooMuch")
.isExSyntax(UriParserSyntaxException.MessageKeys.WRONG_VALUE_FOR_SYSTEM_QUERY_OPTION_FORMAT);
testUri.runEx("ESKeyNav(1)", "$format=")
.isExSyntax(UriParserSyntaxException.MessageKeys.WRONG_VALUE_FOR_SYSTEM_QUERY_OPTION_FORMAT);
}
@Test
public void count() throws Exception {
testUri.run("ESAllPrim", "$count=true")
.isKind(UriInfoKind.resource)
.isInlineCountText("true");
testUri.run("ESAllPrim", "$count=false")
.isKind(UriInfoKind.resource)
.isInlineCountText("false");
testUri.runEx("ESAllPrim", "$count=undefined")
.isExSyntax(UriParserSyntaxException.MessageKeys.WRONG_VALUE_FOR_SYSTEM_QUERY_OPTION);
testUri.runEx("ESAllPrim", "$count=")
.isExSyntax(UriParserSyntaxException.MessageKeys.WRONG_VALUE_FOR_SYSTEM_QUERY_OPTION);
}
@Test
public void skip() throws Exception {
testUri.run("ESAllPrim", "$skip=3")
.isKind(UriInfoKind.resource)
.isSkipText("3");
testUri.run("ESAllPrim", "$skip=0")
.isKind(UriInfoKind.resource)
.isSkipText("0");
testUri.runEx("ESAllPrim", "$skip=F")
.isExSyntax(UriParserSyntaxException.MessageKeys.WRONG_VALUE_FOR_SYSTEM_QUERY_OPTION);
testUri.runEx("ESAllPrim", "$skip=")
.isExSyntax(UriParserSyntaxException.MessageKeys.WRONG_VALUE_FOR_SYSTEM_QUERY_OPTION);
testUri.runEx("ESAllPrim", "$skip=-3")
.isExSyntax(UriParserSyntaxException.MessageKeys.WRONG_VALUE_FOR_SYSTEM_QUERY_OPTION);
}
@Test
public void skiptoken() throws Exception {
testUri.run("ESAllPrim", "$skiptoken=foo")
.isKind(UriInfoKind.resource)
.isSkipTokenText("foo");
testUri.runEx("ESAllPrim", "$skiptoken=")
.isExSyntax(UriParserSyntaxException.MessageKeys.WRONG_VALUE_FOR_SYSTEM_QUERY_OPTION);
}
@Test
public void notExistingSystemQueryOption() throws Exception {
testUri.runEx("ESAllPrim", "$wrong=error")
.isExSyntax(UriParserSyntaxException.MessageKeys.UNKNOWN_SYSTEM_QUERY_OPTION);
}
@Test
public void misc() throws Exception {
testUri.run("")
.isKind(UriInfoKind.service);
testUri.run("/")
.isKind(UriInfoKind.service);
testUri.run("$all")
.isKind(UriInfoKind.all);
testUri.run("$metadata")
.isKind(UriInfoKind.metadata);
testUri.run("$batch")
.isKind(UriInfoKind.batch);
testUri.runEx("//").isExSyntax(UriParserSyntaxException.MessageKeys.MUST_BE_LAST_SEGMENT);
testUri.runEx("$metadata/").isExSyntax(UriParserSyntaxException.MessageKeys.MUST_BE_LAST_SEGMENT);
testUri.runEx("//$metadata").isExSyntax(UriParserSyntaxException.MessageKeys.MUST_BE_LAST_SEGMENT);
testUri.runEx("ESKeyNav//$count").isExSyntax(UriParserSyntaxException.MessageKeys.SYNTAX);
testUri.runEx("$metadata/$ref").isExSyntax(UriParserSyntaxException.MessageKeys.MUST_BE_LAST_SEGMENT);
testUri.runEx("$batch/$ref").isExSyntax(UriParserSyntaxException.MessageKeys.MUST_BE_LAST_SEGMENT);
testUri.runEx("$all/$ref").isExSyntax(UriParserSyntaxException.MessageKeys.MUST_BE_LAST_SEGMENT);
testUri.runEx("$entity/olingo.odata.test1.ETKeyNav/$ref")
.isExSyntax(UriParserSyntaxException.MessageKeys.MUST_BE_LAST_SEGMENT);
testUri.runEx("$wrong").isExSyntax(UriParserSyntaxException.MessageKeys.SYNTAX);
testUri.runEx("", "$wrong").isExSyntax(UriParserSyntaxException.MessageKeys.UNKNOWN_SYSTEM_QUERY_OPTION);
testUri.run("ESKeyNav")
.isKind(UriInfoKind.resource)
.goPath().first()
.isEntitySet("ESKeyNav");
testUri.run("ESKeyNav(1)")
.isKind(UriInfoKind.resource)
.goPath().first()
.isEntitySet("ESKeyNav")
.isKeyPredicate(0, "PropertyInt16", "1");
testUri.runEx("ESKeyNav()").isExSemantic(MessageKeys.WRONG_NUMBER_OF_KEY_PROPERTIES);
testUri.run("SINav")
.isKind(UriInfoKind.resource)
.goPath().first()
.isSingleton("SINav");
testUri.run("FICRTESMixPrimCollCompTwoParam(ParameterInt16=1,ParameterString='2')")
.isKind(UriInfoKind.resource)
.goPath()
.isFunctionImport("FICRTESMixPrimCollCompTwoParam")
.isType(EntityTypeProvider.nameETMixPrimCollComp)
.isParameter(0, "ParameterInt16", "1")
.isParameter(1, "ParameterString", "'2'");
testUri.run("FICRTETKeyNav()")
.isKind(UriInfoKind.resource)
.goPath().first()
.isFunctionImport("FICRTETKeyNav")
.isType(EntityTypeProvider.nameETKeyNav);
testUri.run("FICRTCollCTTwoPrim()")
.isKind(UriInfoKind.resource)
.goPath().first()
.isFunctionImport("FICRTCollCTTwoPrim")
.isType(ComplexTypeProvider.nameCTTwoPrim);
testUri.run("FICRTCTAllPrimTwoParam(ParameterInt16=1,ParameterString='2')")
.isKind(UriInfoKind.resource)
.goPath().first()
.isFunctionImport("FICRTCTAllPrimTwoParam")
.isType(ComplexTypeProvider.nameCTAllPrim)
.isParameter(0, "ParameterInt16", "1")
.isParameter(1, "ParameterString", "'2'");
testUri.run("FICRTCollStringTwoParam(ParameterInt16=1,ParameterString='2')")
.isKind(UriInfoKind.resource)
.goPath().first()
.isFunctionImport("FICRTCollStringTwoParam")
.isType(PropertyProvider.nameString)
.isParameter(0, "ParameterInt16", "1")
.isParameter(1, "ParameterString", "'2'");
testUri.run("FICRTStringTwoParam(ParameterInt16=1)")
.isKind(UriInfoKind.resource)
.goPath().first()
.isFunctionImport("FICRTStringTwoParam")
.isFunction("UFCRTStringTwoParam")
.isType(PropertyProvider.nameString)
.isParameter(0, "ParameterInt16", "1");
testUri.run("FICRTStringTwoParam(ParameterInt16=1,ParameterString='2')")
.isKind(UriInfoKind.resource)
.goPath().first()
.isFunctionImport("FICRTStringTwoParam")
.isFunction("UFCRTStringTwoParam")
.isType(PropertyProvider.nameString)
.isParameter(0, "ParameterInt16", "1");
testUri.run(ContainerProvider.AIRT_STRING)
.isKind(UriInfoKind.resource)
.goPath().first()
.isActionImport(ContainerProvider.AIRT_STRING);
testUri.run(ContainerProvider.AIRT_COLL_ES_ALL_PRIM_PARAM)
.isKind(UriInfoKind.resource)
.goPath().first()
.isActionImport(ContainerProvider.AIRT_COLL_ES_ALL_PRIM_PARAM);
testUri.run(ContainerProvider.AIRT)
.isKind(UriInfoKind.resource)
.goPath().first()
.isActionImport(ContainerProvider.AIRT);
testUri.run("ESKeyNav/$count")
.isKind(UriInfoKind.resource)
.goPath().first()
.isEntitySet("ESKeyNav")
.n().isCount();
testUri.run("ESKeyNav/$ref")
.isKind(UriInfoKind.resource)
.goPath().first()
.isEntitySet("ESKeyNav")
.n().isRef();
testUri.run("ESTwoKeyNav/olingo.odata.test1.BFCESTwoKeyNavRTESTwoKeyNav()")
.isKind(UriInfoKind.resource)
.goPath().first()
.isEntitySet("ESTwoKeyNav")
.n().isFunction("BFCESTwoKeyNavRTESTwoKeyNav");
testUri.run("ESAllPrim/olingo.odata.test1.BAESAllPrimRTETAllPrim")
.isKind(UriInfoKind.resource)
.goPath().first()
.isEntitySet("ESAllPrim")
.n().isAction("BAESAllPrimRTETAllPrim");
testUri.run("ESTwoKeyNav/olingo.odata.test1.BFCESTwoKeyNavRTESTwoKeyNav()")
.isKind(UriInfoKind.resource)
.goPath().first()
.isEntitySet("ESTwoKeyNav")
.n().isFunction("BFCESTwoKeyNavRTESTwoKeyNav");
testUri.run("ESTwoKeyNav/olingo.odata.test1.ETBaseTwoKeyNav")
.isKind(UriInfoKind.resource)
.goPath().first()
.isEntitySet("ESTwoKeyNav")
.isTypeFilterOnCollection(EntityTypeProvider.nameETBaseTwoKeyNav);
testUri.run("ESTwoKeyNav/$count")
.isKind(UriInfoKind.resource)
.goPath().first()
.isEntitySet("ESTwoKeyNav")
.n()
.isCount();
testUri.run("ESTwoKeyNav/$ref")
.isKind(UriInfoKind.resource)
.goPath().first()
.isEntitySet("ESTwoKeyNav")
.n()
.isRef();
testUri.run("ESKeyNav(1)")
.isKind(UriInfoKind.resource)
.goPath().first()
.isEntitySet("ESKeyNav")
.isKeyPredicate(0, "PropertyInt16", "1");
testUri.run("ESKeyNav(1)/$ref")
.isKind(UriInfoKind.resource)
.goPath().first()
.isEntitySet("ESKeyNav")
.isKeyPredicate(0, "PropertyInt16", "1")
.n()
.isRef();
testUri.run("ESMedia(1)/$value")
.isKind(UriInfoKind.resource)
.goPath().first()
.isEntitySet("ESMedia")
.n()
.isValue();
testUri.run("ESAllPrim/olingo.odata.test1.BAESAllPrimRTETAllPrim")
.isKind(UriInfoKind.resource)
.goPath().first()
.isEntitySet("ESAllPrim")
.n().isAction("BAESAllPrimRTETAllPrim");
testUri.run("ESTwoKeyNav/olingo.odata.test1.BFCESTwoKeyNavRTESTwoKeyNav()")
.isKind(UriInfoKind.resource)
.goPath().first()
.isEntitySet("ESTwoKeyNav")
.n().isFunction("BFCESTwoKeyNavRTESTwoKeyNav");
testUri.run("ESTwoKeyNav(PropertyInt16=1,PropertyString='2')/olingo.odata.test1.ETBaseTwoKeyNav")
.isKind(UriInfoKind.resource)
.goPath().first()
.isEntitySet("ESTwoKeyNav")
.isKeyPredicate(0, "PropertyInt16", "1")
.isKeyPredicate(1, "PropertyString", "'2'")
.isType(EntityTypeProvider.nameETTwoKeyNav)
.isTypeFilterOnEntry(EntityTypeProvider.nameETBaseTwoKeyNav);
testUri.run("ESTwoKeyNav(PropertyInt16=1,PropertyString='2')/olingo.odata.test1.ETBaseTwoKeyNav/$ref")
.isKind(UriInfoKind.resource)
.goPath().first()
.isEntitySet("ESTwoKeyNav")
.isKeyPredicate(0, "PropertyInt16", "1")
.isKeyPredicate(1, "PropertyString", "'2'")
.isType(EntityTypeProvider.nameETTwoKeyNav)
.isTypeFilterOnEntry(EntityTypeProvider.nameETBaseTwoKeyNav)
.n().isRef();
}
@Test
public void filter() throws Exception {
testFilter.runOnETAllPrim("PropertyBoolean")
.is("<PropertyBoolean>")
.isType(PropertyProvider.nameBoolean);
testFilter.runOnETTwoKeyNav("PropertyComp/PropertyInt16 gt 0")
.is("<<PropertyComp/PropertyInt16> gt <0>>")
.left().isType(PropertyProvider.nameInt16);
testFilter.runOnETTwoKeyNav("PropertyComp/PropertyComp/PropertyDate ne null")
.is("<<PropertyComp/PropertyComp/PropertyDate> ne <null>>")
.left().isType(PropertyProvider.nameDate);
testFilter.runOnETTwoKeyNav("NavPropertyETTwoKeyNavOne eq null")
.is("<<NavPropertyETTwoKeyNavOne> eq <null>>")
.left().isType(EntityTypeProvider.nameETTwoKeyNav);
testFilter.runOnETTwoKeyNav("NavPropertyETTwoKeyNavOne/PropertyString eq ''")
.is("<<NavPropertyETTwoKeyNavOne/PropertyString> eq <''>>")
.left().isType(PropertyProvider.nameString);
testFilter.runOnETTwoKeyNav("NavPropertyETTwoKeyNavOne/PropertyComp eq null")
.is("<<NavPropertyETTwoKeyNavOne/PropertyComp> eq <null>>")
.left().isType(ComplexTypeProvider.nameCTPrimComp);
testFilter.runOnETTwoKeyNav("NavPropertyETTwoKeyNavOne/PropertyComp/PropertyComp eq null")
.is("<<NavPropertyETTwoKeyNavOne/PropertyComp/PropertyComp> eq <null>>")
.left().isType(ComplexTypeProvider.nameCTAllPrim);
testFilter.runOnETTwoKeyNav("NavPropertyETTwoKeyNavOne/PropertyComp/PropertyInt16 eq 1")
.is("<<NavPropertyETTwoKeyNavOne/PropertyComp/PropertyInt16> eq <1>>")
.left().isType(PropertyProvider.nameInt16)
.root().right().isLiteral("1");
testFilter.runOnETTwoKeyNav("NavPropertyETKeyNavMany(1)/NavPropertyETTwoKeyNavMany(PropertyString='2')/"
+ "PropertyString eq 'SomeString'")
.is("<<NavPropertyETKeyNavMany/NavPropertyETTwoKeyNavMany/PropertyString> eq <'SomeString'>>")
.left()
.isType(PropertyProvider.nameString)
.isMember().goPath()
.first()
.isNavProperty("NavPropertyETKeyNavMany", EntityTypeProvider.nameETKeyNav, false)
.isKeyPredicate(0, "PropertyInt16", "1")
.n()
.isNavProperty("NavPropertyETTwoKeyNavMany", EntityTypeProvider.nameETTwoKeyNav, false)
.isKeyPredicateRef(0, "PropertyInt16", "PropertyInt16")
.isKeyPredicate(1, "PropertyString", "'2'")
.n()
.isPrimitiveProperty("PropertyString", PropertyProvider.nameString, false)
.goUpFilterValidator()
.root().right();
testFilter.runOnETTwoKeyNav("olingo.odata.test1.ETBaseTwoKeyNav/PropertyDate eq 2013-11-12")
.is("<<PropertyDate> eq <2013-11-12>>")
.left()
.isType(PropertyProvider.nameDate)
.isMember().isMemberStartType(EntityTypeProvider.nameETBaseTwoKeyNav).goPath()
.first().isPrimitiveProperty("PropertyDate", PropertyProvider.nameDate, false)
.goUpFilterValidator()
.root().right()
.isLiteral("2013-11-12");
testFilter.runOnCTTwoPrim("olingo.odata.test1.CTBase/AdditionalPropString eq 'SomeString'")
.is("<<AdditionalPropString> eq <'SomeString'>>")
.left()
.isType(PropertyProvider.nameString)
.isMember().isMemberStartType(ComplexTypeProvider.nameCTBase).goPath()
.first().isPrimitiveProperty("AdditionalPropString", PropertyProvider.nameString, false)
.goUpFilterValidator()
.root().right()
.isLiteral("'SomeString'");
testFilter
.runOnETTwoKeyNav("NavPropertyETTwoKeyNavOne/olingo.odata.test1.ETBaseTwoKeyNav/PropertyDate eq 2013-11-12")
.is("<<NavPropertyETTwoKeyNavOne/olingo.odata.test1.ETBaseTwoKeyNav/PropertyDate> eq <2013-11-12>>")
.left()
.isType(PropertyProvider.nameDate)
.root().right()
.isLiteral("2013-11-12");
testFilter
.runOnETTwoKeyNav("PropertyCompTwoPrim/olingo.odata.test1.CTTwoBase/AdditionalPropString eq 'SomeString'")
.is("<<PropertyCompTwoPrim/olingo.odata.test1.CTTwoBase/AdditionalPropString> eq <'SomeString'>>")
.left()
.isType(PropertyProvider.nameString)
.root().right()
.isLiteral("'SomeString'");
testFilter.runOnETTwoKeyNavEx("invalid").isExSemantic(MessageKeys.EXPRESSION_PROPERTY_NOT_IN_TYPE);
testFilter.runOnETTwoKeyNavEx("PropertyComp").isExSemantic(MessageKeys.TYPES_NOT_COMPATIBLE);
testFilter.runOnETTwoKeyNavEx("PropertyComp/invalid").isExSemantic(MessageKeys.EXPRESSION_PROPERTY_NOT_IN_TYPE);
testFilter.runOnETTwoKeyNavEx("concat('a','b')/invalid").isExSemantic(MessageKeys.TYPES_NOT_COMPATIBLE);
testFilter.runOnETTwoKeyNavEx("PropertyComp/concat('a','b')")
.isExSemantic(MessageKeys.EXPRESSION_PROPERTY_NOT_IN_TYPE);
testFilter.runOnETTwoKeyNavEx("PropertyComp/PropertyInt16 eq '1'")
.isExSemantic(MessageKeys.TYPES_NOT_COMPATIBLE);
testFilter.runOnETTwoKeyNavEx("PropertyComp/PropertyComp/PropertyDate eq 1")
.isExSemantic(MessageKeys.TYPES_NOT_COMPATIBLE);
testFilter.runOnETTwoKeyNavEx("PropertyComp/PropertyComp/PropertyString eq 1")
.isExSemantic(MessageKeys.TYPES_NOT_COMPATIBLE);
testFilter.runOnETTwoKeyNavEx("PropertyComp/PropertyInt64 eq 1")
.isExSemantic(MessageKeys.EXPRESSION_PROPERTY_NOT_IN_TYPE);
testFilter.runOnETTwoKeyNavEx("NavPropertyETKeyNavMany/PropertyInt16 gt 42")
.isExSemantic(MessageKeys.TYPES_NOT_COMPATIBLE);
testFilter.runOnETTwoKeyNavEx("NavPropertyETKeyNavMany/NavPropertyETTwoKeyNavOne eq null")
.isExSemantic(MessageKeys.TYPES_NOT_COMPATIBLE);
}
@Test
public void filterBinaryOperators() throws Exception {
testFilter.runOnETAllPrim("PropertySByte eq PropertySByte")
.is("<<PropertySByte> eq <PropertySByte>>")
.isBinary(BinaryOperatorKind.EQ)
.left().isType(PropertyProvider.nameSByte)
.root().right().isType(PropertyProvider.nameSByte);
testFilter.runOnETAllPrim("PropertySByte ne PropertySByte")
.is("<<PropertySByte> ne <PropertySByte>>")
.isBinary(BinaryOperatorKind.NE)
.left().isType(PropertyProvider.nameSByte)
.root().right().isType(PropertyProvider.nameSByte);
testFilter.runOnETAllPrim("PropertySByte add PropertySByte gt 0")
.is("<<<PropertySByte> add <PropertySByte>> gt <0>>")
.left().left().isType(PropertyProvider.nameSByte)
.root().left().right().isType(PropertyProvider.nameSByte);
testFilter.runOnETAllPrim("PropertyByte add PropertyByte gt 0")
.is("<<<PropertyByte> add <PropertyByte>> gt <0>>")
.left().left().isType(PropertyProvider.nameByte)
.root().left().right().isType(PropertyProvider.nameByte);
testFilter.runOnETAllPrim("PropertyInt16 add PropertyInt16 gt 0")
.is("<<<PropertyInt16> add <PropertyInt16>> gt <0>>")
.left().left().isType(PropertyProvider.nameInt16)
.root().left().right().isType(PropertyProvider.nameInt16);
testFilter.runOnETAllPrim("PropertyInt32 add PropertyInt32 gt 0")
.is("<<<PropertyInt32> add <PropertyInt32>> gt <0>>")
.left().left().isType(PropertyProvider.nameInt32)
.root().left().right().isType(PropertyProvider.nameInt32);
testFilter.runOnETAllPrim("PropertyInt64 add PropertyInt64 gt 0")
.is("<<<PropertyInt64> add <PropertyInt64>> gt <0>>")
.left().left().isType(PropertyProvider.nameInt64)
.root().left().right().isType(PropertyProvider.nameInt64);
testFilter.runOnETAllPrim("PropertySingle add PropertySingle gt 0")
.is("<<<PropertySingle> add <PropertySingle>> gt <0>>")
.left().left().isType(PropertyProvider.nameSingle)
.root().left().right().isType(PropertyProvider.nameSingle);
testFilter.runOnETAllPrim("PropertyDouble add PropertyDouble gt 0")
.is("<<<PropertyDouble> add <PropertyDouble>> gt <0>>")
.left().left().isType(PropertyProvider.nameDouble)
.root().left().right().isType(PropertyProvider.nameDouble);
testFilter.runOnETAllPrim("PropertyDecimal add PropertyDecimal gt 0")
.is("<<<PropertyDecimal> add <PropertyDecimal>> gt <0>>")
.left().left().isType(PropertyProvider.nameDecimal)
.root().left().right().isType(PropertyProvider.nameDecimal);
testFilter.runOnETAllPrim("PropertySByte add PropertyDecimal gt 0")
.is("<<<PropertySByte> add <PropertyDecimal>> gt <0>>")
.left().left().isType(PropertyProvider.nameSByte)
.root().left().right().isType(PropertyProvider.nameDecimal);
testFilter.runOnETAllPrim("PropertySByte add PropertyInt32 gt 0")
.is("<<<PropertySByte> add <PropertyInt32>> gt <0>>")
.left().left().isType(PropertyProvider.nameSByte)
.root().left().right().isType(PropertyProvider.nameInt32);
testFilter.runOnETAllPrim("PropertySByte add PropertyInt64 gt 0")
.is("<<<PropertySByte> add <PropertyInt64>> gt <0>>")
.left().left().isType(PropertyProvider.nameSByte)
.root().left().right().isType(PropertyProvider.nameInt64);
testFilter.runOnETAllPrim("PropertyDateTimeOffset add PropertyDuration ne null")
.is("<<<PropertyDateTimeOffset> add <PropertyDuration>> ne <null>>")
.left().left().isType(PropertyProvider.nameDateTimeOffset)
.root().left().right().isType(PropertyProvider.nameDuration);
testFilter.runOnETAllPrim("PropertyDuration add PropertyDuration ne null")
.is("<<<PropertyDuration> add <PropertyDuration>> ne <null>>")
.left().left().isType(PropertyProvider.nameDuration)
.root().left().right().isType(PropertyProvider.nameDuration);
testFilter.runOnETAllPrim("PropertyDate add PropertyDuration ne null")
.is("<<<PropertyDate> add <PropertyDuration>> ne <null>>")
.left().left().isType(PropertyProvider.nameDate)
.root().left().right().isType(PropertyProvider.nameDuration);
testFilter.runOnETAllPrim("PropertySByte sub PropertySByte gt 0")
.is("<<<PropertySByte> sub <PropertySByte>> gt <0>>")
.left().left().isType(PropertyProvider.nameSByte)
.root().left().right().isType(PropertyProvider.nameSByte);
testFilter.runOnETAllPrim("PropertyByte sub PropertyByte gt 0")
.is("<<<PropertyByte> sub <PropertyByte>> gt <0>>")
.left().left().isType(PropertyProvider.nameByte)
.root().left().right().isType(PropertyProvider.nameByte);
testFilter.runOnETAllPrim("PropertyInt16 sub PropertyInt16 gt 0")
.is("<<<PropertyInt16> sub <PropertyInt16>> gt <0>>")
.left().left().isType(PropertyProvider.nameInt16)
.root().left().right().isType(PropertyProvider.nameInt16);
testFilter.runOnETAllPrim("PropertyInt32 sub PropertyInt32 gt 0")
.is("<<<PropertyInt32> sub <PropertyInt32>> gt <0>>")
.left().left().isType(PropertyProvider.nameInt32)
.root().left().right().isType(PropertyProvider.nameInt32);
testFilter.runOnETAllPrim("PropertyInt64 sub PropertyInt64 gt 0")
.is("<<<PropertyInt64> sub <PropertyInt64>> gt <0>>")
.left().left().isType(PropertyProvider.nameInt64)
.root().left().right().isType(PropertyProvider.nameInt64);
testFilter.runOnETAllPrim("PropertySingle sub PropertySingle gt 0")
.is("<<<PropertySingle> sub <PropertySingle>> gt <0>>")
.left().left().isType(PropertyProvider.nameSingle)
.root().left().right().isType(PropertyProvider.nameSingle);
testFilter.runOnETAllPrim("PropertyDouble sub PropertyDouble gt 0")
.is("<<<PropertyDouble> sub <PropertyDouble>> gt <0>>")
.left().left().isType(PropertyProvider.nameDouble)
.root().left().right().isType(PropertyProvider.nameDouble);
testFilter.runOnETAllPrim("PropertyDecimal sub PropertyDecimal gt 0")
.is("<<<PropertyDecimal> sub <PropertyDecimal>> gt <0>>")
.left().left().isType(PropertyProvider.nameDecimal)
.root().left().right().isType(PropertyProvider.nameDecimal);
testFilter.runOnETAllPrim("PropertyDecimal sub PropertyInt32 gt 0")
.is("<<<PropertyDecimal> sub <PropertyInt32>> gt <0>>")
.left().left().isType(PropertyProvider.nameDecimal)
.root().left().right().isType(PropertyProvider.nameInt32);
testFilter.runOnETAllPrim("PropertyDecimal sub PropertyInt64 gt 0")
.is("<<<PropertyDecimal> sub <PropertyInt64>> gt <0>>")
.left().left().isType(PropertyProvider.nameDecimal)
.root().left().right().isType(PropertyProvider.nameInt64);
testFilter.runOnETAllPrim("PropertyDecimal sub PropertyByte gt 0")
.is("<<<PropertyDecimal> sub <PropertyByte>> gt <0>>")
.left().left().isType(PropertyProvider.nameDecimal)
.root().left().right().isType(PropertyProvider.nameByte);
testFilter.runOnETAllPrim("PropertyDateTimeOffset sub PropertyDuration ne null")
.is("<<<PropertyDateTimeOffset> sub <PropertyDuration>> ne <null>>")
.left().left().isType(PropertyProvider.nameDateTimeOffset)
.root().left().right().isType(PropertyProvider.nameDuration);
testFilter.runOnETAllPrim("PropertyDuration sub PropertyDuration ne null")
.is("<<<PropertyDuration> sub <PropertyDuration>> ne <null>>")
.left().left().isType(PropertyProvider.nameDuration)
.root().left().right().isType(PropertyProvider.nameDuration);
testFilter.runOnETAllPrim("PropertyDateTimeOffset sub PropertyDateTimeOffset ne null")
.is("<<<PropertyDateTimeOffset> sub <PropertyDateTimeOffset>> ne <null>>")
.left().left().isType(PropertyProvider.nameDateTimeOffset)
.root().left().right().isType(PropertyProvider.nameDateTimeOffset);
testFilter.runOnETAllPrim("PropertyDate sub PropertyDuration ne null")
.is("<<<PropertyDate> sub <PropertyDuration>> ne <null>>")
.left().left().isType(PropertyProvider.nameDate)
.root().left().right().isType(PropertyProvider.nameDuration);
testFilter.runOnETAllPrim("PropertyDate sub PropertyDate ne null")
.is("<<<PropertyDate> sub <PropertyDate>> ne <null>>")
.left().left().isType(PropertyProvider.nameDate)
.root().left().right().isType(PropertyProvider.nameDate);
testFilter.runOnETAllPrim("PropertySByte mul PropertySByte gt 0")
.is("<<<PropertySByte> mul <PropertySByte>> gt <0>>")
.left().left().isType(PropertyProvider.nameSByte)
.root().left().right().isType(PropertyProvider.nameSByte);
testFilter.runOnETAllPrim("PropertyByte mul PropertyByte gt 0")
.is("<<<PropertyByte> mul <PropertyByte>> gt <0>>")
.left().left().isType(PropertyProvider.nameByte)
.root().left().right().isType(PropertyProvider.nameByte);
testFilter.runOnETAllPrim("PropertyInt16 mul PropertyInt16 gt 0")
.is("<<<PropertyInt16> mul <PropertyInt16>> gt <0>>")
.left().left().isType(PropertyProvider.nameInt16)
.root().left().right().isType(PropertyProvider.nameInt16);
testFilter.runOnETAllPrim("PropertyInt32 mul PropertyInt32 gt 0")
.is("<<<PropertyInt32> mul <PropertyInt32>> gt <0>>")
.left().left().isType(PropertyProvider.nameInt32)
.root().left().right().isType(PropertyProvider.nameInt32);
testFilter.runOnETAllPrim("PropertyInt64 mul PropertyInt64 gt 0")
.is("<<<PropertyInt64> mul <PropertyInt64>> gt <0>>")
.left().left().isType(PropertyProvider.nameInt64)
.root().left().right().isType(PropertyProvider.nameInt64);
testFilter.runOnETAllPrim("PropertySingle mul PropertySingle gt 0")
.is("<<<PropertySingle> mul <PropertySingle>> gt <0>>")
.left().left().isType(PropertyProvider.nameSingle)
.root().left().right().isType(PropertyProvider.nameSingle);
testFilter.runOnETAllPrim("PropertyDouble mul PropertyDouble gt 0")
.is("<<<PropertyDouble> mul <PropertyDouble>> gt <0>>")
.left().left().isType(PropertyProvider.nameDouble)
.root().left().right().isType(PropertyProvider.nameDouble);
testFilter.runOnETAllPrim("PropertyDecimal mul PropertyDecimal gt 0")
.is("<<<PropertyDecimal> mul <PropertyDecimal>> gt <0>>")
.left().left().isType(PropertyProvider.nameDecimal)
.root().left().right().isType(PropertyProvider.nameDecimal);
testFilter.runOnETAllPrim("PropertyInt64 mul PropertyInt32 gt 0")
.is("<<<PropertyInt64> mul <PropertyInt32>> gt <0>>")
.left().left().isType(PropertyProvider.nameInt64)
.root().left().right().isType(PropertyProvider.nameInt32);
testFilter.runOnETAllPrim("PropertyInt64 mul PropertySByte gt 0")
.is("<<<PropertyInt64> mul <PropertySByte>> gt <0>>")
.left().left().isType(PropertyProvider.nameInt64)
.root().left().right().isType(PropertyProvider.nameSByte);
testFilter.runOnETAllPrim("PropertyInt64 mul PropertyDecimal gt 0")
.is("<<<PropertyInt64> mul <PropertyDecimal>> gt <0>>")
.left().left().isType(PropertyProvider.nameInt64)
.root().left().right().isType(PropertyProvider.nameDecimal);
testFilter.runOnETAllPrim("PropertySByte div PropertySByte gt 0")
.is("<<<PropertySByte> div <PropertySByte>> gt <0>>")
.left().left().isType(PropertyProvider.nameSByte)
.root().left().right().isType(PropertyProvider.nameSByte);
testFilter.runOnETAllPrim("PropertyByte div PropertyByte gt 0")
.is("<<<PropertyByte> div <PropertyByte>> gt <0>>")
.left().left().isType(PropertyProvider.nameByte)
.root().left().right().isType(PropertyProvider.nameByte);
testFilter.runOnETAllPrim("PropertyInt16 div PropertyInt16 gt 0")
.is("<<<PropertyInt16> div <PropertyInt16>> gt <0>>")
.left().left().isType(PropertyProvider.nameInt16)
.root().left().right().isType(PropertyProvider.nameInt16);
testFilter.runOnETAllPrim("PropertyInt32 div PropertyInt32 gt 0")
.is("<<<PropertyInt32> div <PropertyInt32>> gt <0>>")
.left().left().isType(PropertyProvider.nameInt32)
.root().left().right().isType(PropertyProvider.nameInt32);
testFilter.runOnETAllPrim("PropertyInt64 div PropertyInt64 gt 0")
.is("<<<PropertyInt64> div <PropertyInt64>> gt <0>>")
.left().left().isType(PropertyProvider.nameInt64)
.root().left().right().isType(PropertyProvider.nameInt64);
testFilter.runOnETAllPrim("PropertySingle div PropertySingle gt 0")
.is("<<<PropertySingle> div <PropertySingle>> gt <0>>")
.left().left().isType(PropertyProvider.nameSingle)
.root().left().right().isType(PropertyProvider.nameSingle);
testFilter.runOnETAllPrim("PropertyDouble div PropertyDouble gt 0")
.is("<<<PropertyDouble> div <PropertyDouble>> gt <0>>")
.left().left().isType(PropertyProvider.nameDouble)
.root().left().right().isType(PropertyProvider.nameDouble);
testFilter.runOnETAllPrim("PropertyDecimal div PropertyDecimal gt 0")
.is("<<<PropertyDecimal> div <PropertyDecimal>> gt <0>>")
.left().left().isType(PropertyProvider.nameDecimal)
.root().left().right().isType(PropertyProvider.nameDecimal);
testFilter.runOnETAllPrim("PropertyByte div PropertyInt32 gt 0")
.is("<<<PropertyByte> div <PropertyInt32>> gt <0>>")
.left().left().isType(PropertyProvider.nameByte)
.root().left().right().isType(PropertyProvider.nameInt32);
testFilter.runOnETAllPrim("PropertyByte div PropertyDecimal gt 0")
.is("<<<PropertyByte> div <PropertyDecimal>> gt <0>>")
.left().left().isType(PropertyProvider.nameByte)
.root().left().right().isType(PropertyProvider.nameDecimal);
testFilter.runOnETAllPrim("PropertyByte div PropertySByte gt 0")
.is("<<<PropertyByte> div <PropertySByte>> gt <0>>")
.left().left().isType(PropertyProvider.nameByte)
.root().left().right().isType(PropertyProvider.nameSByte);
testFilter.runOnETAllPrim("PropertyByte div 0 gt 0")
.is("<<<PropertyByte> div <0>> gt <0>>");
testFilter.runOnETAllPrim("0 div 0 gt 0")
.is("<<<0> div <0>> gt <0>>");
testFilter.runOnETAllPrim("PropertySByte mod PropertySByte gt 0")
.is("<<<PropertySByte> mod <PropertySByte>> gt <0>>")
.left().left().isType(PropertyProvider.nameSByte)
.root().left().right().isType(PropertyProvider.nameSByte);
testFilter.runOnETAllPrim("PropertyByte mod PropertyByte gt 0")
.is("<<<PropertyByte> mod <PropertyByte>> gt <0>>")
.left().left().isType(PropertyProvider.nameByte)
.root().left().right().isType(PropertyProvider.nameByte);
testFilter.runOnETAllPrim("PropertyInt16 mod PropertyInt16 gt 0")
.is("<<<PropertyInt16> mod <PropertyInt16>> gt <0>>")
.left().left().isType(PropertyProvider.nameInt16)
.root().left().right().isType(PropertyProvider.nameInt16);
testFilter.runOnETAllPrim("PropertyInt32 mod PropertyInt32 gt 0")
.is("<<<PropertyInt32> mod <PropertyInt32>> gt <0>>")
.left().left().isType(PropertyProvider.nameInt32)
.root().left().right().isType(PropertyProvider.nameInt32);
testFilter.runOnETAllPrim("PropertyInt64 mod PropertyInt64 gt 0")
.is("<<<PropertyInt64> mod <PropertyInt64>> gt <0>>")
.left().left().isType(PropertyProvider.nameInt64)
.root().left().right().isType(PropertyProvider.nameInt64);
testFilter.runOnETAllPrim("PropertySingle mod PropertySingle gt 0")
.is("<<<PropertySingle> mod <PropertySingle>> gt <0>>")
.left().left().isType(PropertyProvider.nameSingle)
.root().left().right().isType(PropertyProvider.nameSingle);
testFilter.runOnETAllPrim("PropertyDouble mod PropertyDouble gt 0")
.is("<<<PropertyDouble> mod <PropertyDouble>> gt <0>>")
.left().left().isType(PropertyProvider.nameDouble)
.root().left().right().isType(PropertyProvider.nameDouble);
testFilter.runOnETAllPrim("PropertyDecimal mod PropertyDecimal gt 0")
.is("<<<PropertyDecimal> mod <PropertyDecimal>> gt <0>>")
.left().left().isType(PropertyProvider.nameDecimal)
.root().left().right().isType(PropertyProvider.nameDecimal);
testFilter.runOnETAllPrim("PropertyDecimal ge PropertyDecimal")
.is("<<PropertyDecimal> ge <PropertyDecimal>>")
.isBinary(BinaryOperatorKind.GE)
.left().isType(PropertyProvider.nameDecimal)
.root().right().isType(PropertyProvider.nameDecimal);
testFilter.runOnETAllPrim("PropertyDecimal lt PropertyDecimal")
.is("<<PropertyDecimal> lt <PropertyDecimal>>")
.isBinary(BinaryOperatorKind.LT)
.left().isType(PropertyProvider.nameDecimal)
.root().right().isType(PropertyProvider.nameDecimal);
testFilter.runOnETAllPrim("PropertyDecimal le PropertyDecimal")
.is("<<PropertyDecimal> le <PropertyDecimal>>")
.isBinary(BinaryOperatorKind.LE)
.left().isType(PropertyProvider.nameDecimal)
.root().right().isType(PropertyProvider.nameDecimal);
// Numeric promotion: Double is considered the widest type.
testFilter.runOnETAllPrim("PropertyDecimal ne NaN")
.right().isLiteral("NaN").isType(PropertyProvider.nameDouble);
testFilter.runOnETAllPrim("PropertyDecimal gt -INF")
.right().isLiteral("-INF").isType(PropertyProvider.nameDouble);
testFilter.runOnETAllPrim("PropertyDecimal lt INF")
.right().isLiteral("INF").isType(PropertyProvider.nameDouble);
}
@Test
public void filterProperties() throws Exception {
testFilter.runOnETAllPrim("PropertyBoolean eq true")
.is("<<PropertyBoolean> eq <true>>")
.isBinary(BinaryOperatorKind.EQ)
.root().left().goPath().isPrimitiveProperty("PropertyBoolean", PropertyProvider.nameBoolean, false)
.goUpFilterValidator()
.root().right().isLiteral("true");
testFilter.runOnETAllPrim("PropertyDecimal eq 1.25")
.is("<<PropertyDecimal> eq <1.25>>")
.isBinary(BinaryOperatorKind.EQ)
.root().left().goPath().isPrimitiveProperty("PropertyDecimal", PropertyProvider.nameDecimal, false)
.goUpFilterValidator()
.root().right().isLiteral("1.25");
testFilter.runOnETAllPrim("PropertyDouble eq 1.5")
.is("<<PropertyDouble> eq <1.5>>")
.isBinary(BinaryOperatorKind.EQ)
.root().left().goPath().isPrimitiveProperty("PropertyDouble", PropertyProvider.nameDouble, false)
.goUpFilterValidator()
.root().right().isLiteral("1.5");
testFilter.runOnETAllPrim("PropertySingle eq 1.5")
.is("<<PropertySingle> eq <1.5>>")
.isBinary(BinaryOperatorKind.EQ)
.root().left().goPath().isPrimitiveProperty("PropertySingle", PropertyProvider.nameSingle, false)
.goUpFilterValidator()
.root().right().isLiteral("1.5");
testFilter.runOnETAllPrim("PropertySByte eq -128")
.is("<<PropertySByte> eq <-128>>")
.isBinary(BinaryOperatorKind.EQ)
.root().left().goPath().isPrimitiveProperty("PropertySByte", PropertyProvider.nameSByte, false)
.goUpFilterValidator()
.root().right().isLiteral("-128");
testFilter.runOnETAllPrim("PropertyByte eq 255")
.is("<<PropertyByte> eq <255>>")
.isBinary(BinaryOperatorKind.EQ)
.root().left().goPath().isPrimitiveProperty("PropertyByte",
PropertyProvider.nameByte, false).goUpFilterValidator()
.root().right().isLiteral("255");
testFilter.runOnETAllPrim("PropertyInt16 eq 32767")
.is("<<PropertyInt16> eq <32767>>")
.isBinary(BinaryOperatorKind.EQ)
.root().left().goPath().isPrimitiveProperty("PropertyInt16", PropertyProvider.nameInt16, false)
.goUpFilterValidator()
.root().right().isLiteral("32767");
testFilter.runOnETAllPrim("PropertyInt32 eq 2147483647")
.is("<<PropertyInt32> eq <2147483647>>")
.isBinary(BinaryOperatorKind.EQ)
.root().left().goPath().isPrimitiveProperty("PropertyInt32", PropertyProvider.nameInt32, false)
.goUpFilterValidator()
.root().right().isLiteral("2147483647");
testFilter.runOnETAllPrim("PropertyInt64 eq 9223372036854775807")
.is("<<PropertyInt64> eq <9223372036854775807>>")
.isBinary(BinaryOperatorKind.EQ)
.root().left().goPath().isPrimitiveProperty("PropertyInt64", PropertyProvider.nameInt64, false)
.goUpFilterValidator()
.root().right().isLiteral("9223372036854775807");
testFilter.runOnETAllPrim("PropertyDate eq 2013-09-25")
.is("<<PropertyDate> eq <2013-09-25>>")
.isBinary(BinaryOperatorKind.EQ)
.root().left().goPath().isPrimitiveProperty("PropertyDate", PropertyProvider.nameDate, false)
.goUpFilterValidator()
.root().right().isLiteral("2013-09-25");
testFilter.runOnETAllPrim("PropertyDateTimeOffset eq 2013-09-25T12:34:56.123456789012-10:24")
.is("<<PropertyDateTimeOffset> eq <2013-09-25T12:34:56.123456789012-10:24>>")
.isBinary(BinaryOperatorKind.EQ)
.root().left().goPath()
.isPrimitiveProperty("PropertyDateTimeOffset", PropertyProvider.nameDateTimeOffset, false)
.goUpFilterValidator()
.root().right().isLiteral("2013-09-25T12:34:56.123456789012-10:24");
testFilter.runOnETAllPrim("PropertyDuration eq duration'P10DT5H34M21.123456789012S'")
.is("<<PropertyDuration> eq <duration'P10DT5H34M21.123456789012S'>>")
.isBinary(BinaryOperatorKind.EQ)
.root().left().goPath().isPrimitiveProperty("PropertyDuration", PropertyProvider.nameDuration, false)
.goUpFilterValidator()
.root().right().isLiteral("duration'P10DT5H34M21.123456789012S'");
testFilter.runOnETAllPrim("PropertyGuid eq 005056A5-09B1-1ED3-89BD-FB81372CCB33")
.is("<<PropertyGuid> eq <005056A5-09B1-1ED3-89BD-FB81372CCB33>>")
.isBinary(BinaryOperatorKind.EQ)
.root().left().goPath().isPrimitiveProperty("PropertyGuid", PropertyProvider.nameGuid, false)
.goUpFilterValidator()
.root().right().isLiteral("005056A5-09B1-1ED3-89BD-FB81372CCB33");
testFilter.runOnETAllPrim("PropertyString eq 'somestring'")
.is("<<PropertyString> eq <'somestring'>>")
.isBinary(BinaryOperatorKind.EQ)
.root().left().goPath().isPrimitiveProperty("PropertyString", PropertyProvider.nameString, false)
.goUpFilterValidator()
.root().right().isLiteral("'somestring'");
testFilter.runOnETAllPrim("PropertyTimeOfDay eq 12:34:55.12345678901")
.is("<<PropertyTimeOfDay> eq <12:34:55.12345678901>>")
.isBinary(BinaryOperatorKind.EQ)
.root().left().goPath().isPrimitiveProperty("PropertyTimeOfDay", PropertyProvider.nameTimeOfDay, false)
.goUpFilterValidator()
.root().right().isLiteral("12:34:55.12345678901");
testFilter.runOnETMixEnumDefCollComp("PropertyEnumString eq olingo.odata.test1.ENString'String1'")
.is("<<PropertyEnumString> eq <olingo.odata.test1.ENString<String1>>>")
.isBinary(BinaryOperatorKind.EQ)
.root().left().goPath().isPrimitiveProperty("PropertyEnumString", EnumTypeProvider.nameENString, false)
.goUpFilterValidator()
.root().right().isEnum(EnumTypeProvider.nameENString, Arrays.asList("String1"));
testFilter.runOnETMixEnumDefCollComp("PropertyEnumString eq olingo.odata.test1.ENString'String2'")
.is("<<PropertyEnumString> eq <olingo.odata.test1.ENString<String2>>>")
.isBinary(BinaryOperatorKind.EQ)
.root().left().goPath().isPrimitiveProperty("PropertyEnumString", EnumTypeProvider.nameENString, false)
.goUpFilterValidator()
.root().right().isEnum(EnumTypeProvider.nameENString, Arrays.asList("String2"));
testFilter.runOnETMixEnumDefCollComp(
"PropertyCompMixedEnumDef/PropertyEnumString eq olingo.odata.test1.ENString'String3'")
.is("<<PropertyCompMixedEnumDef/PropertyEnumString> eq <olingo.odata.test1.ENString<String3>>>")
.isBinary(BinaryOperatorKind.EQ)
.root().left().goPath()
.first().isComplex("PropertyCompMixedEnumDef")
.n().isPrimitiveProperty("PropertyEnumString", EnumTypeProvider.nameENString, false)
.goUpFilterValidator()
.root().right().isEnum(EnumTypeProvider.nameENString, Arrays.asList("String3"));
testFilter
.runOnETMixEnumDefCollComp(
"PropertyCompMixedEnumDef/PropertyEnumString eq " +
"PropertyCompMixedEnumDef/PropertyEnumString")
.is("<<PropertyCompMixedEnumDef/PropertyEnumString> eq " +
"<PropertyCompMixedEnumDef/PropertyEnumString>>")
.isBinary(BinaryOperatorKind.EQ)
.root().left().goPath()
.first().isComplex("PropertyCompMixedEnumDef")
.n().isPrimitiveProperty("PropertyEnumString", EnumTypeProvider.nameENString, false)
.goUpFilterValidator()
.root().right().goPath()
.first().isComplex("PropertyCompMixedEnumDef")
.n().isPrimitiveProperty("PropertyEnumString", EnumTypeProvider.nameENString, false);
testFilter.runOnETAllPrim("PropertyByte mod 0 gt 0")
.is("<<<PropertyByte> mod <0>> gt <0>>");
}
@Test
public void filterFunctions() throws Exception {
testFilter.runOnETAllPrim(
"olingo.odata.test1.UFCRTETTwoKeyNavParamCTTwoPrim(ParameterCTTwoPrim=@ParamAlias) eq null"
+ "&@ParamAlias={}")
.is("<<UFCRTETTwoKeyNavParamCTTwoPrim> eq <null>>")
.left().goPath()
.first()
.isFunction("UFCRTETTwoKeyNavParamCTTwoPrim")
.isParameterAlias(0, "ParameterCTTwoPrim", "@ParamAlias");
testFilter.runOnETTwoKeyNav("PropertyComp/olingo.odata.test1.BFCCTPrimCompRTETTwoKeyNavParam"
+ "(ParameterString=PropertyComp/PropertyComp/PropertyString)/PropertyString eq 'SomeString'")
.is("<<PropertyComp/BFCCTPrimCompRTETTwoKeyNavParam/PropertyString> eq <'SomeString'>>")
.root().left().goPath()
.first().isComplexProperty("PropertyComp", ComplexTypeProvider.nameCTPrimComp, false)
.n().isFunction("BFCCTPrimCompRTETTwoKeyNavParam")
.goParameter(0).isMember()
.goPath()
.first().isComplexProperty("PropertyComp", ComplexTypeProvider.nameCTPrimComp, false)
.n().isComplexProperty("PropertyComp", ComplexTypeProvider.nameCTAllPrim, false)
.n().isPrimitiveProperty("PropertyString", PropertyProvider.nameString, false)
.goUpFilterValidator().goUpToResourceValidator()
.n().isPrimitiveProperty("PropertyString", PropertyProvider.nameString, false);
testFilter.runOnETTwoKeyNav("PropertyComp/olingo.odata.test1.BFCCTPrimCompRTESTwoKeyNav()"
+ "(PropertyInt16=1,PropertyString='2')/PropertyString eq 'SomeString'")
.is("<<PropertyComp/BFCCTPrimCompRTESTwoKeyNav/PropertyString> eq <'SomeString'>>")
.root().left().goPath()
.first().isComplexProperty("PropertyComp", ComplexTypeProvider.nameCTPrimComp, false)
.n().isFunction("BFCCTPrimCompRTESTwoKeyNav")
.isKeyPredicate(0, "PropertyInt16", "1")
.isKeyPredicate(1, "PropertyString", "'2'")
.n().isPrimitiveProperty("PropertyString", PropertyProvider.nameString, false);
testFilter.runOnETTwoKeyNav("PropertyComp/olingo.odata.test1.BFCCTPrimCompRTETTwoKeyNavParam"
+ "(ParameterString='1')/PropertyString eq 'SomeString'")
.is("<<PropertyComp/BFCCTPrimCompRTETTwoKeyNavParam/PropertyString> eq <'SomeString'>>")
.root().left().goPath()
.first()
.isComplexProperty("PropertyComp", ComplexTypeProvider.nameCTPrimComp, false)
.n()
.isFunction("BFCCTPrimCompRTETTwoKeyNavParam")
.isParameter(0, "ParameterString", "'1'")
.n()
.isPrimitiveProperty("PropertyString", PropertyProvider.nameString, false);
testFilter.runOnETTwoKeyNav("NavPropertyETTwoKeyNavMany/olingo.odata.test1.BFCESTwoKeyNavRTString()"
+ " eq 'SomeString'")
.is("<<NavPropertyETTwoKeyNavMany/BFCESTwoKeyNavRTString> eq <'SomeString'>>")
.root().left().goPath()
.first()
.isNavProperty("NavPropertyETTwoKeyNavMany", EntityTypeProvider.nameETTwoKeyNav, true)
.n().isFunction("BFCESTwoKeyNavRTString");
testFilter.runOnETKeyNav("$it/olingo.odata.test1.BFCETKeyNavRTETKeyNav()/PropertyString eq 'SomeString'")
.is("<<$it/BFCETKeyNavRTETKeyNav/PropertyString> eq <'SomeString'>>")
.root().left().goPath()
.first().isIt()
.n().isFunction("BFCETKeyNavRTETKeyNav")
.n().isPrimitiveProperty("PropertyString", PropertyProvider.nameString, false);
testFilter.runOnETTwoKeyNav("olingo.odata.test1.BFCESTwoKeyNavRTCTTwoPrim()/PropertyString eq 'SomeString'")
.is("<<BFCESTwoKeyNavRTCTTwoPrim/PropertyString> eq <'SomeString'>>")
.root().left().goPath()
.first().isFunction("BFCESTwoKeyNavRTCTTwoPrim")
.n().isPrimitiveProperty("PropertyString", PropertyProvider.nameString, false);
testFilter.runOnETTwoKeyNav("NavPropertyETTwoKeyNavOne/olingo.odata.test1.BFCETTwoKeyNavRTETTwoKeyNav()"
+ "/PropertyComp/PropertyComp/PropertyString eq 'Walldorf'")
.is("<<NavPropertyETTwoKeyNavOne/BFCETTwoKeyNavRTETTwoKeyNav/PropertyComp/PropertyComp/PropertyString> "
+ "eq <'Walldorf'>>")
.root().left().goPath()
.first().isNavProperty("NavPropertyETTwoKeyNavOne", EntityTypeProvider.nameETTwoKeyNav, false)
.n().isFunction("BFCETTwoKeyNavRTETTwoKeyNav")
.n().isComplexProperty("PropertyComp", ComplexTypeProvider.nameCTPrimComp, false)
.n().isComplexProperty("PropertyComp", ComplexTypeProvider.nameCTAllPrim, false)
.n().isPrimitiveProperty("PropertyString", PropertyProvider.nameString, false);
testFilter.runOnETTwoKeyNav("PropertyComp/olingo.odata.test1.BFCCTPrimCompRTESTwoKeyNav()"
+ "/olingo.odata.test1.ETBaseTwoKeyNav(PropertyInt16=2,PropertyString='3')/PropertyString eq 'SomeString'")
.is("<<PropertyComp/BFCCTPrimCompRTESTwoKeyNav/olingo.odata.test1.ETBaseTwoKeyNav/PropertyString> "
+ "eq <'SomeString'>>")
.root().left().goPath()
.first().isComplexProperty("PropertyComp", ComplexTypeProvider.nameCTPrimComp, false)
.n().isFunction("BFCCTPrimCompRTESTwoKeyNav")
.isTypeFilterOnEntry(EntityTypeProvider.nameETBaseTwoKeyNav)
.isKeyPredicate(0, "PropertyInt16", "2")
.isKeyPredicate(1, "PropertyString", "'3'")
.n().isPrimitiveProperty("PropertyString", PropertyProvider.nameString, false);
testFilter.runOnETTwoKeyNavSingle("$it/olingo.odata.test1.BFCETTwoKeyNavRTCTTwoPrim()/olingo.odata.test1.CTBase"
+ "/PropertyString eq 'SomeString'")
.is("<<$it/BFCETTwoKeyNavRTCTTwoPrim/olingo.odata.test1.CTBase/PropertyString> eq <'SomeString'>>")
.root().left().goPath()
.first()
.isIt()
.n()
.isFunction("BFCETTwoKeyNavRTCTTwoPrim")
.isTypeFilterOnEntry(ComplexTypeProvider.nameCTBase)
.n()
.isPrimitiveProperty("PropertyString", PropertyProvider.nameString, false);
testFilter.runOnETTwoKeyNav("olingo.odata.test1.UFCRTETTwoKeyNavParam(ParameterInt16=1)/PropertyInt16 eq 2")
.is("<<UFCRTETTwoKeyNavParam/PropertyInt16> eq <2>>")
.root().left().goPath()
.first()
.isFunction("UFCRTETTwoKeyNavParam")
.isParameter(0, "ParameterInt16", "1")
.n()
.isPrimitiveProperty("PropertyInt16", PropertyProvider.nameInt16, false);
testFilter.runOnETTwoKeyNav("olingo.odata.test1.UFCRTETTwoKeyNavParam(ParameterInt16=@Param1Alias)"
+ "/PropertyInt16 eq 2"
+ "&@Param1Alias=1")
.root().left().goPath()
.first()
.isFunction("UFCRTETTwoKeyNavParam")
.isParameterAlias(0, "ParameterInt16", "@Param1Alias")
.n()
.isPrimitiveProperty("PropertyInt16", PropertyProvider.nameInt16, false);
testFilter.runOnETTwoKeyNav("olingo.odata.test1.UFCRTETTwoKeyNavParam(ParameterInt16=1)"
+ "/PropertyComp/PropertyComp/PropertyString eq 'SomeString'")
.root().left().goPath()
.first()
.isFunction("UFCRTETTwoKeyNavParam")
.isParameter(0, "ParameterInt16", "1")
.n()
.isComplexProperty("PropertyComp", ComplexTypeProvider.nameCTPrimComp, false)
.n()
.isComplexProperty("PropertyComp", ComplexTypeProvider.nameCTAllPrim, false)
.n()
.isPrimitiveProperty("PropertyString", PropertyProvider.nameString, false);
testFilter.runOnETTwoKeyNav("olingo.odata.test1.UFCRTETTwoKeyNavParam(ParameterInt16=PropertyInt16)"
+ "/PropertyComp/PropertyComp/PropertyString eq 'SomeString'")
.root().left().goPath()
.first()
.isFunction("UFCRTETTwoKeyNavParam")
.goParameter(0)
.isMember().goPath().first().isPrimitiveProperty("PropertyInt16", PropertyProvider.nameInt16, false)
.goUpFilterValidator().goUpToResourceValidator()
.n().isComplexProperty("PropertyComp", ComplexTypeProvider.nameCTPrimComp, false)
.n().isComplexProperty("PropertyComp", ComplexTypeProvider.nameCTAllPrim, false)
.n().isPrimitiveProperty("PropertyString", PropertyProvider.nameString, false);
testFilter.runOnETTwoKeyNavEx("olingo.odata.test1.UFCRTETTwoKeyNavParam(ParameterInt16=@alias)")
.isExValidation(UriValidationException.MessageKeys.MISSING_ALIAS);
}
@Test
public void methods() throws Exception {
testFilter.runOnETKeyNav("indexof(PropertyString,'47') eq 5")
.is("<<indexof(<PropertyString>,<'47'>)> eq <5>>")
.left()
.isMethod(MethodKind.INDEXOF, 2)
.isParameterText(0, "<PropertyString>")
.isParameterText(1, "<'47'>");
testFilter.runOnETKeyNav("tolower(PropertyString) eq 'foo'")
.is("<<tolower(<PropertyString>)> eq <'foo'>>")
.left()
.isMethod(MethodKind.TOLOWER, 1)
.isParameterText(0, "<PropertyString>");
testFilter.runOnETKeyNav("toupper(PropertyString) eq 'FOO'")
.is("<<toupper(<PropertyString>)> eq <'FOO'>>")
.left()
.isMethod(MethodKind.TOUPPER, 1)
.isParameterText(0, "<PropertyString>");
testFilter.runOnETKeyNav("trim(PropertyString) eq 'fooba'")
.is("<<trim(<PropertyString>)> eq <'fooba'>>")
.left()
.isMethod(MethodKind.TRIM, 1)
.isParameterText(0, "<PropertyString>");
testFilter.runOnETKeyNav("substring(PropertyString,4) eq 'foo'")
.is("<<substring(<PropertyString>,<4>)> eq <'foo'>>")
.left()
.isMethod(MethodKind.SUBSTRING, 2)
.isParameterText(0, "<PropertyString>")
.isParameterText(1, "<4>");
testFilter.runOnETKeyNav("substring(PropertyString,4) eq 'foo'")
.is("<<substring(<PropertyString>,<4>)> eq <'foo'>>")
.left()
.isMethod(MethodKind.SUBSTRING, 2)
.isParameterText(0, "<PropertyString>")
.isParameterText(1, "<4>");
testFilter.runOnETKeyNav("substring(PropertyString,2,4) eq 'foo'")
.is("<<substring(<PropertyString>,<2>,<4>)> eq <'foo'>>")
.left()
.isMethod(MethodKind.SUBSTRING, 3)
.isParameterText(0, "<PropertyString>")
.isParameterText(1, "<2>")
.isParameterText(2, "<4>");
testFilter.runOnETKeyNav("concat(PropertyString,PropertyCompTwoPrim/PropertyString) eq 'foo'")
.is("<<concat(<PropertyString>,<PropertyCompTwoPrim/PropertyString>)> eq <'foo'>>")
.left()
.isMethod(MethodKind.CONCAT, 2)
.isParameterText(0, "<PropertyString>")
.isParameterText(1, "<PropertyCompTwoPrim/PropertyString>");
testFilter.runOnETKeyNav("concat(PropertyString,'bar') eq 'foobar'")
.is("<<concat(<PropertyString>,<'bar'>)> eq <'foobar'>>")
.left()
.isMethod(MethodKind.CONCAT, 2)
.isParameterText(0, "<PropertyString>")
.isParameterText(1, "<'bar'>");
testFilter.runOnETKeyNav("concat(PropertyString,'bar') eq 'foobar'")
.is("<<concat(<PropertyString>,<'bar'>)> eq <'foobar'>>")
.left()
.isMethod(MethodKind.CONCAT, 2)
.isParameterText(0, "<PropertyString>")
.isParameterText(1, "<'bar'>");
testFilter.runOnETKeyNav("length(PropertyString) eq 32")
.is("<<length(<PropertyString>)> eq <32>>")
.left()
.isMethod(MethodKind.LENGTH, 1)
.isParameterText(0, "<PropertyString>");
testFilter.runOnETAllPrim("year(PropertyDate) eq 2013")
.is("<<year(<PropertyDate>)> eq <2013>>")
.left()
.isMethod(MethodKind.YEAR, 1)
.isParameterText(0, "<PropertyDate>");
testFilter.runOnETAllPrim("year(2013-09-25) eq 2013")
.is("<<year(<2013-09-25>)> eq <2013>>")
.left()
.isMethod(MethodKind.YEAR, 1)
.isParameterText(0, "<2013-09-25>");
testFilter.runOnETAllPrim("year(PropertyDateTimeOffset) eq 2013")
.is("<<year(<PropertyDateTimeOffset>)> eq <2013>>")
.left()
.isMethod(MethodKind.YEAR, 1)
.isParameterText(0, "<PropertyDateTimeOffset>");
testFilter.runOnETAllPrim("year(2013-09-25T12:34:56.123456789012-10:24) eq 2013")
.is("<<year(<2013-09-25T12:34:56.123456789012-10:24>)> eq <2013>>")
.left()
.isMethod(MethodKind.YEAR, 1)
.isParameterText(0, "<2013-09-25T12:34:56.123456789012-10:24>");
testFilter.runOnETAllPrim("month(PropertyDate) eq 9")
.is("<<month(<PropertyDate>)> eq <9>>")
.left()
.isMethod(MethodKind.MONTH, 1)
.isParameterText(0, "<PropertyDate>");
testFilter.runOnETAllPrim("month(2013-09-25) eq 9")
.is("<<month(<2013-09-25>)> eq <9>>")
.left()
.isMethod(MethodKind.MONTH, 1)
.isParameterText(0, "<2013-09-25>");
testFilter.runOnETAllPrim("month(PropertyDateTimeOffset) eq 9")
.is("<<month(<PropertyDateTimeOffset>)> eq <9>>")
.left()
.isMethod(MethodKind.MONTH, 1)
.isParameterText(0, "<PropertyDateTimeOffset>");
testFilter.runOnETAllPrim("month(2013-09-25T12:34:56.123456789012-10:24) eq 9")
.is("<<month(<2013-09-25T12:34:56.123456789012-10:24>)> eq <9>>")
.left()
.isMethod(MethodKind.MONTH, 1)
.isParameterText(0, "<2013-09-25T12:34:56.123456789012-10:24>");
testFilter.runOnETAllPrim("day(PropertyDate) eq 25")
.is("<<day(<PropertyDate>)> eq <25>>")
.left()
.isMethod(MethodKind.DAY, 1)
.isParameterText(0, "<PropertyDate>");
testFilter.runOnETAllPrim("day(2013-09-25) eq 25")
.is("<<day(<2013-09-25>)> eq <25>>")
.left()
.isMethod(MethodKind.DAY, 1)
.isParameterText(0, "<2013-09-25>");
testFilter.runOnETAllPrim("day(PropertyDateTimeOffset) eq 25")
.is("<<day(<PropertyDateTimeOffset>)> eq <25>>")
.left()
.isMethod(MethodKind.DAY, 1)
.isParameterText(0, "<PropertyDateTimeOffset>");
testFilter.runOnETAllPrim("day(2013-09-25T12:34:56.123456789012-10:24) eq 25")
.is("<<day(<2013-09-25T12:34:56.123456789012-10:24>)> eq <25>>")
.left()
.isMethod(MethodKind.DAY, 1)
.isParameterText(0, "<2013-09-25T12:34:56.123456789012-10:24>");
testFilter.runOnETAllPrim("hour(PropertyDateTimeOffset) eq 2")
.is("<<hour(<PropertyDateTimeOffset>)> eq <2>>")
.left()
.isMethod(MethodKind.HOUR, 1)
.isParameterText(0, "<PropertyDateTimeOffset>");
testFilter.runOnETAllPrim("hour(PropertyDateTimeOffset) eq 2")
.is("<<hour(<PropertyDateTimeOffset>)> eq <2>>")
.left()
.isMethod(MethodKind.HOUR, 1)
.isParameterText(0, "<PropertyDateTimeOffset>");
testFilter.runOnETAllPrim("hour(2013-09-25T12:34:56.123456789012-10:24) eq 2")
.is("<<hour(<2013-09-25T12:34:56.123456789012-10:24>)> eq <2>>")
.left()
.isMethod(MethodKind.HOUR, 1)
.isParameterText(0, "<2013-09-25T12:34:56.123456789012-10:24>");
testFilter.runOnETAllPrim("hour(PropertyTimeOfDay) eq 2")
.is("<<hour(<PropertyTimeOfDay>)> eq <2>>")
.left()
.isMethod(MethodKind.HOUR, 1)
.isParameterText(0, "<PropertyTimeOfDay>");
testFilter.runOnETAllPrim("hour(12:34:55.123456789012) eq 12")
.is("<<hour(<12:34:55.123456789012>)> eq <12>>")
.left()
.isMethod(MethodKind.HOUR, 1)
.isParameterText(0, "<12:34:55.123456789012>");
testFilter.runOnETAllPrim("minute(PropertyDateTimeOffset) eq 34")
.is("<<minute(<PropertyDateTimeOffset>)> eq <34>>")
.left()
.isMethod(MethodKind.MINUTE, 1)
.isParameterText(0, "<PropertyDateTimeOffset>");
testFilter.runOnETAllPrim("minute(2013-09-25T12:34:56.123456789012-10:24) eq 34")
.is("<<minute(<2013-09-25T12:34:56.123456789012-10:24>)> eq <34>>")
.left()
.isMethod(MethodKind.MINUTE, 1)
.isParameterText(0, "<2013-09-25T12:34:56.123456789012-10:24>");
testFilter.runOnETAllPrim("minute(PropertyTimeOfDay) eq 34")
.is("<<minute(<PropertyTimeOfDay>)> eq <34>>")
.left()
.isMethod(MethodKind.MINUTE, 1)
.isParameterText(0, "<PropertyTimeOfDay>");
testFilter.runOnETAllPrim("minute(12:34:55.123456789012) eq 34")
.is("<<minute(<12:34:55.123456789012>)> eq <34>>")
.left()
.isMethod(MethodKind.MINUTE, 1)
.isParameterText(0, "<12:34:55.123456789012>");
testFilter.runOnETAllPrim("second(PropertyDateTimeOffset) eq 56")
.is("<<second(<PropertyDateTimeOffset>)> eq <56>>")
.left()
.isMethod(MethodKind.SECOND, 1)
.isParameterText(0, "<PropertyDateTimeOffset>");
testFilter.runOnETAllPrim("second(2013-09-25T12:34:56.123456789012-10:24) eq 56")
.is("<<second(<2013-09-25T12:34:56.123456789012-10:24>)> eq <56>>")
.left()
.isMethod(MethodKind.SECOND, 1)
.isParameterText(0, "<2013-09-25T12:34:56.123456789012-10:24>");
testFilter.runOnETAllPrim("second(PropertyTimeOfDay) eq 56")
.is("<<second(<PropertyTimeOfDay>)> eq <56>>")
.left()
.isMethod(MethodKind.SECOND, 1)
.isParameterText(0, "<PropertyTimeOfDay>");
testFilter.runOnETAllPrim("second(12:34:55.123456789012) eq 56")
.is("<<second(<12:34:55.123456789012>)> eq <56>>")
.left()
.isMethod(MethodKind.SECOND, 1)
.isParameterText(0, "<12:34:55.123456789012>");
testFilter.runOnETAllPrim("fractionalseconds(PropertyDateTimeOffset) eq 123456789012")
.is("<<fractionalseconds(<PropertyDateTimeOffset>)> eq <123456789012>>")
.left()
.isMethod(MethodKind.FRACTIONALSECONDS, 1)
.isParameterText(0, "<PropertyDateTimeOffset>");
testFilter.runOnETAllPrim("fractionalseconds(2013-09-25T12:34:56.123456789012-10:24) eq 123456789012")
.is("<<fractionalseconds(<2013-09-25T12:34:56.123456789012-10:24>)> eq <123456789012>>")
.left()
.isMethod(MethodKind.FRACTIONALSECONDS, 1)
.isParameterText(0, "<2013-09-25T12:34:56.123456789012-10:24>");
testFilter.runOnETAllPrim("fractionalseconds(PropertyTimeOfDay) eq 123456789012")
.is("<<fractionalseconds(<PropertyTimeOfDay>)> eq <123456789012>>")
.left()
.isMethod(MethodKind.FRACTIONALSECONDS, 1)
.isParameterText(0, "<PropertyTimeOfDay>");
testFilter.runOnETAllPrim("fractionalseconds(12:34:55.123456789012) eq 123456789012")
.is("<<fractionalseconds(<12:34:55.123456789012>)> eq <123456789012>>")
.left()
.isMethod(MethodKind.FRACTIONALSECONDS, 1)
.isParameterText(0, "<12:34:55.123456789012>");
testFilter.runOnETAllPrim("totalseconds(PropertyDuration) eq 4711")
.is("<<totalseconds(<PropertyDuration>)> eq <4711>>")
.left()
.isMethod(MethodKind.TOTALSECONDS, 1)
.isParameterText(0, "<PropertyDuration>");
testFilter.runOnETAllPrim("totalseconds(duration'P10DT5H34M21.123456789012S') eq 4711")
.is("<<totalseconds(<duration'P10DT5H34M21.123456789012S'>)> eq <4711>>")
.left()
.isMethod(MethodKind.TOTALSECONDS, 1)
.isParameterText(0, "<duration'P10DT5H34M21.123456789012S'>");
testFilter.runOnETAllPrim("date(PropertyDateTimeOffset) eq 2013-09-25")
.is("<<date(<PropertyDateTimeOffset>)> eq <2013-09-25>>")
.left()
.isMethod(MethodKind.DATE, 1)
.isParameterText(0, "<PropertyDateTimeOffset>");
testFilter.runOnETAllPrim("date(2013-09-25T12:34:56.123456789012-10:24) eq 2013-09-25")
.is("<<date(<2013-09-25T12:34:56.123456789012-10:24>)> eq <2013-09-25>>")
.left()
.isMethod(MethodKind.DATE, 1)
.isParameterText(0, "<2013-09-25T12:34:56.123456789012-10:24>");
testFilter.runOnETAllPrim("time(PropertyDateTimeOffset) eq 12:34:55.123456789012")
.is("<<time(<PropertyDateTimeOffset>)> eq <12:34:55.123456789012>>")
.left()
.isMethod(MethodKind.TIME, 1)
.isParameterText(0, "<PropertyDateTimeOffset>");
testFilter.runOnETAllPrim("time(2013-09-25T12:34:56.123456789012-10:24) eq 12:34:55.123456789012")
.is("<<time(<2013-09-25T12:34:56.123456789012-10:24>)> eq <12:34:55.123456789012>>")
.left()
.isMethod(MethodKind.TIME, 1)
.isParameterText(0, "<2013-09-25T12:34:56.123456789012-10:24>");
testFilter.runOnETAllPrim("round(PropertyDouble) eq 17")
.is("<<round(<PropertyDouble>)> eq <17>>")
.left()
.isMethod(MethodKind.ROUND, 1)
.isParameterText(0, "<PropertyDouble>");
testFilter.runOnETAllPrim("round(17.45e1) eq 17")
.is("<<round(<17.45e1>)> eq <17>>")
.left()
.isMethod(MethodKind.ROUND, 1)
.isParameterText(0, "<17.45e1>");
testFilter.runOnETAllPrim("round(PropertyDecimal) eq 17")
.is("<<round(<PropertyDecimal>)> eq <17>>")
.left()
.isMethod(MethodKind.ROUND, 1)
.isParameterText(0, "<PropertyDecimal>");
testFilter.runOnETAllPrim("round(17.45) eq 17")
.is("<<round(<17.45>)> eq <17>>")
.left()
.isMethod(MethodKind.ROUND, 1)
.isParameterText(0, "<17.45>");
testFilter.runOnETAllPrim("floor(PropertyDouble) eq 17")
.is("<<floor(<PropertyDouble>)> eq <17>>")
.left()
.isMethod(MethodKind.FLOOR, 1)
.isParameterText(0, "<PropertyDouble>");
testFilter.runOnETAllPrim("floor(17.45e1) eq 17")
.is("<<floor(<17.45e1>)> eq <17>>")
.left()
.isMethod(MethodKind.FLOOR, 1)
.isParameterText(0, "<17.45e1>");
testFilter.runOnETAllPrim("floor(PropertyDecimal) eq 17")
.is("<<floor(<PropertyDecimal>)> eq <17>>")
.left()
.isMethod(MethodKind.FLOOR, 1)
.isParameterText(0, "<PropertyDecimal>");
testFilter.runOnETAllPrim("floor(17.45) eq 17")
.is("<<floor(<17.45>)> eq <17>>")
.left()
.isMethod(MethodKind.FLOOR, 1)
.isParameterText(0, "<17.45>");
testFilter.runOnETAllPrim("ceiling(PropertyDouble) eq 18")
.is("<<ceiling(<PropertyDouble>)> eq <18>>")
.left()
.isMethod(MethodKind.CEILING, 1)
.isParameterText(0, "<PropertyDouble>");
testFilter.runOnETAllPrim("ceiling(17.55e1) eq 18")
.is("<<ceiling(<17.55e1>)> eq <18>>")
.left()
.isMethod(MethodKind.CEILING, 1)
.isParameterText(0, "<17.55e1>");
testFilter.runOnETAllPrim("ceiling(PropertyDecimal) eq 18")
.is("<<ceiling(<PropertyDecimal>)> eq <18>>")
.left()
.isMethod(MethodKind.CEILING, 1)
.isParameterText(0, "<PropertyDecimal>");
testFilter.runOnETAllPrim("ceiling(17.55) eq 18")
.is("<<ceiling(<17.55>)> eq <18>>")
.left()
.isMethod(MethodKind.CEILING, 1)
.isParameterText(0, "<17.55>");
testFilter.runOnETAllPrim("totaloffsetminutes(PropertyDateTimeOffset) eq 4711")
.is("<<totaloffsetminutes(<PropertyDateTimeOffset>)> eq <4711>>")
.left()
.isMethod(MethodKind.TOTALOFFSETMINUTES, 1)
.isParameterText(0, "<PropertyDateTimeOffset>");
testFilter.runOnETAllPrim("totaloffsetminutes(2013-09-25T12:34:56.123456789012-10:24) eq 4711")
.is("<<totaloffsetminutes(<2013-09-25T12:34:56.123456789012-10:24>)> eq <4711>>")
.left()
.isMethod(MethodKind.TOTALOFFSETMINUTES, 1)
.isParameterText(0, "<2013-09-25T12:34:56.123456789012-10:24>");
testFilter.runOnETAllPrim("mindatetime() ne null")
.is("<<mindatetime()> ne <null>>")
.left().isMethod(MethodKind.MINDATETIME, 0);
testFilter.runOnETAllPrim("mindatetime() eq 2013-09-25T12:34:56.123456789012-10:24")
.is("<<mindatetime()> eq <2013-09-25T12:34:56.123456789012-10:24>>")
.left()
.isMethod(MethodKind.MINDATETIME, 0);
testFilter.runOnETAllPrim("maxdatetime() ne null")
.is("<<maxdatetime()> ne <null>>")
.left().isMethod(MethodKind.MAXDATETIME, 0);
testFilter.runOnETAllPrim("maxdatetime() eq 2013-09-25T12:34:56.123456789012-10:24")
.is("<<maxdatetime()> eq <2013-09-25T12:34:56.123456789012-10:24>>")
.left()
.isMethod(MethodKind.MAXDATETIME, 0);
testFilter.runOnETAllPrim("now() ne null")
.is("<<now()> ne <null>>")
.left().isMethod(MethodKind.NOW, 0);
testFilter.runOnETAllPrim("now() eq 2013-09-25T12:34:56.123456789012-10:24")
.is("<<now()> eq <2013-09-25T12:34:56.123456789012-10:24>>")
.left()
.isMethod(MethodKind.NOW, 0);
testFilter.runOnETTwoKeyNav("$it/PropertyString eq 'SomeString'")
.is("<<$it/PropertyString> eq <'SomeString'>>")
.left()
.goPath()
.first().isUriPathInfoKind(UriResourceKind.it)
.isType(EntityTypeProvider.nameETTwoKeyNav, false)
.n().isPrimitiveProperty("PropertyString", PropertyProvider.nameString, false);
testFilter.runOnCTTwoPrim("$it/PropertyString eq 'SomeString'")
.is("<<$it/PropertyString> eq <'SomeString'>>")
.left()
.goPath()
.first().isUriPathInfoKind(UriResourceKind.it)
.isType(ComplexTypeProvider.nameCTTwoPrim, false)
.n().isPrimitiveProperty("PropertyString", PropertyProvider.nameString, false);
testFilter.runOnString("$it eq 'Walldorf'")
.is("<<$it> eq <'Walldorf'>>")
.left()
.goPath()
.first().isUriPathInfoKind(UriResourceKind.it)
.isType(PropertyProvider.nameString, false);
testFilter.runOnString("endswith($it,'sap.com')")
.is("<endswith(<$it>,<'sap.com'>)>")
.isMethod(MethodKind.ENDSWITH, 2)
.isParameterText(0, "<$it>")
.isParameterText(1, "<'sap.com'>")
.goParameter(0)
.goPath()
.first().isUriPathInfoKind(UriResourceKind.it)
.isType(PropertyProvider.nameString, false);
testFilter.runOnString("endswith($it,'sap.com') eq false")
.is("<<endswith(<$it>,<'sap.com'>)> eq <false>>")
.left()
.isMethod(MethodKind.ENDSWITH, 2)
.isParameterText(0, "<$it>")
.isParameterText(1, "<'sap.com'>")
.goParameter(0)
.goPath()
.first().isUriPathInfoKind(UriResourceKind.it)
.isType(PropertyProvider.nameString, false);
testFilter.runOnETTwoKeyNav("endswith($it/CollPropertyString,'sap.com')")
.is("<endswith(<$it/CollPropertyString>,<'sap.com'>)>")
.isMethod(MethodKind.ENDSWITH, 2)
.isParameterText(0, "<$it/CollPropertyString>")
.isParameterText(1, "<'sap.com'>")
.goParameter(0)
.goPath()
.first().isUriPathInfoKind(UriResourceKind.it)
.isType(EntityTypeProvider.nameETTwoKeyNav, false)
.n().isPrimitiveProperty("CollPropertyString", PropertyProvider.nameString, true);
testFilter.runOnETTwoKeyNav("endswith(PropertyComp/PropertyComp/PropertyString,'dorf')")
.is("<endswith(<PropertyComp/PropertyComp/PropertyString>,<'dorf'>)>")
.isMethod(MethodKind.ENDSWITH, 2)
.goParameter(0).goPath()
.first().isComplex("PropertyComp")
.n().isComplex("PropertyComp")
.n().isPrimitiveProperty("PropertyString", PropertyProvider.nameString, false).goUpFilterValidator()
.root().goParameter(1).isLiteral("'dorf'");
testFilter.runOnETTwoKeyNav("endswith(PropertyComp/PropertyComp/PropertyString,'dorf') eq true")
.is("<<endswith(<PropertyComp/PropertyComp/PropertyString>,<'dorf'>)> eq <true>>")
.isBinary(BinaryOperatorKind.EQ)
.left().isMethod(MethodKind.ENDSWITH, 2)
.goParameter(0).goPath()
.first().isComplex("PropertyComp")
.n().isComplex("PropertyComp")
.n().isPrimitiveProperty("PropertyString", PropertyProvider.nameString, false).goUpFilterValidator()
.root().left().goParameter(1).isLiteral("'dorf'");
testFilter.runOnETTwoKeyNav("endswith('Walldorf','dorf')")
.is("<endswith(<'Walldorf'>,<'dorf'>)>")
.isMethod(MethodKind.ENDSWITH, 2)
.goParameter(0).isLiteral("'Walldorf'")
.root().goParameter(1).isLiteral("'dorf'");
testFilter.runOnETTwoKeyNav("endswith('Walldorf','dorf') eq true")
.is("<<endswith(<'Walldorf'>,<'dorf'>)> eq <true>>")
.isBinary(BinaryOperatorKind.EQ)
.left().isMethod(MethodKind.ENDSWITH, 2)
.goParameter(0).isLiteral("'Walldorf'")
.root().left().goParameter(1).isLiteral("'dorf'");
testFilter.runOnETKeyNav("startswith(PropertyCompAllPrim/PropertyString,'Wall')")
.is("<startswith(<PropertyCompAllPrim/PropertyString>,<'Wall'>)>")
.isMethod(MethodKind.STARTSWITH, 2)
.goParameter(0).goPath()
.first().isComplex("PropertyCompAllPrim")
.n().isPrimitiveProperty("PropertyString", PropertyProvider.nameString, false).goUpFilterValidator()
.root().goParameter(1).isLiteral("'Wall'");
testFilter.runOnETKeyNav("startswith(PropertyCompAllPrim/PropertyString,'Wall') eq true")
.is("<<startswith(<PropertyCompAllPrim/PropertyString>,<'Wall'>)> eq <true>>")
.isBinary(BinaryOperatorKind.EQ)
.left().isMethod(MethodKind.STARTSWITH, 2)
.goParameter(0).goPath()
.first().isComplex("PropertyCompAllPrim")
.n().isPrimitiveProperty("PropertyString", PropertyProvider.nameString, false).goUpFilterValidator()
.root().left().goParameter(1).isLiteral("'Wall'");
testFilter.runOnETKeyNav("startswith('Walldorf','Wall')")
.is("<startswith(<'Walldorf'>,<'Wall'>)>")
.isMethod(MethodKind.STARTSWITH, 2)
.goParameter(0).isLiteral("'Walldorf'")
.root().goParameter(1).isLiteral("'Wall'");
testFilter.runOnETKeyNav("startswith('Walldorf','Wall') eq true")
.is("<<startswith(<'Walldorf'>,<'Wall'>)> eq <true>>")
.isBinary(BinaryOperatorKind.EQ)
.left().isMethod(MethodKind.STARTSWITH, 2)
.goParameter(0).isLiteral("'Walldorf'")
.root().left().goParameter(1).isLiteral("'Wall'");
testFilter.runOnETTwoKeyNav("contains(PropertyComp/PropertyComp/PropertyString,'Wall')")
.is("<contains(<PropertyComp/PropertyComp/PropertyString>,<'Wall'>)>")
.isMethod(MethodKind.CONTAINS, 2)
.goParameter(0).goPath()
.first().isComplex("PropertyComp")
.n().isComplex("PropertyComp")
.n().isPrimitiveProperty("PropertyString", PropertyProvider.nameString, false).goUpFilterValidator()
.root().goParameter(1).isLiteral("'Wall'");
testFilter.runOnETTwoKeyNav("contains(PropertyComp/PropertyComp/PropertyString,'Wall') eq true")
.is("<<contains(<PropertyComp/PropertyComp/PropertyString>,<'Wall'>)> eq <true>>")
.isBinary(BinaryOperatorKind.EQ)
.left().isMethod(MethodKind.CONTAINS, 2)
.goParameter(0).goPath()
.first().isComplex("PropertyComp")
.n().isComplex("PropertyComp")
.n().isPrimitiveProperty("PropertyString", PropertyProvider.nameString, false).goUpFilterValidator()
.root().left().goParameter(1).isLiteral("'Wall'");
testFilter.runOnETTwoKeyNav("contains('Walldorf','Wall')")
.is("<contains(<'Walldorf'>,<'Wall'>)>")
.isMethod(MethodKind.CONTAINS, 2)
.goParameter(0).isLiteral("'Walldorf'")
.root().goParameter(1).isLiteral("'Wall'");
testFilter.runOnETTwoKeyNav("contains('Walldorf','Wall') eq true")
.is("<<contains(<'Walldorf'>,<'Wall'>)> eq <true>>")
.isBinary(BinaryOperatorKind.EQ)
.left().isMethod(MethodKind.CONTAINS, 2)
.goParameter(0).isLiteral("'Walldorf'")
.root().left().goParameter(1).isLiteral("'Wall'");
testFilter.runOnETTwoKeyNav("PropertyComp/PropertyComp/PropertyInt16 eq "
+ "$root/ESTwoKeyNav(PropertyInt16=1,PropertyString='2')/PropertyInt16")
.is("<<PropertyComp/PropertyComp/PropertyInt16> eq <$root/ESTwoKeyNav/PropertyInt16>>")
.root().left()
.goPath()
.first().isComplex("PropertyComp").isType(ComplexTypeProvider.nameCTPrimComp, false)
.n().isComplex("PropertyComp").isType(ComplexTypeProvider.nameCTAllPrim, false)
.n().isPrimitiveProperty("PropertyInt16", PropertyProvider.nameInt16, false)
.goUpFilterValidator()
.root().right()
.goPath()
.first().isUriPathInfoKind(UriResourceKind.root)
.n().isEntitySet("ESTwoKeyNav")
.isKeyPredicate(0, "PropertyInt16", "1")
.isKeyPredicate(1, "PropertyString", "'2'")
.n().isPrimitiveProperty("PropertyInt16", PropertyProvider.nameInt16, false);
}
@Test
public void castMethod() throws Exception {
testFilter.runOnETKeyNav("cast(olingo.odata.test1.ETBaseTwoKeyNav) ne null")
.is("<<cast(<olingo.odata.test1.ETBaseTwoKeyNav>)> ne <null>>")
.left()
.isMethod(MethodKind.CAST, 1)
.isParameterText(0, "<olingo.odata.test1.ETBaseTwoKeyNav>")
.goParameter(0).isTypedLiteral(EntityTypeProvider.nameETBaseTwoKeyNav);
testFilter.runOnETKeyNav("cast(PropertyCompTwoPrim,olingo.odata.test1.CTBase) ne null")
.is("<<cast(<PropertyCompTwoPrim>,<olingo.odata.test1.CTBase>)> ne <null>>")
.left()
.isMethod(MethodKind.CAST, 2)
.isParameterText(0, "<PropertyCompTwoPrim>")
.isParameterText(1, "<olingo.odata.test1.CTBase>")
.goParameter(0).goPath().first()
.isComplexProperty("PropertyCompTwoPrim", ComplexTypeProvider.nameCTTwoPrim, false)
.goUpFilterValidator()
.root().left()
.goParameter(1).isTypedLiteral(ComplexTypeProvider.nameCTBase);
testFilter.runOnETKeyNav("cast($it,olingo.odata.test1.CTBase) ne null")
.is("<<cast(<$it>,<olingo.odata.test1.CTBase>)> ne <null>>")
.left()
.isMethod(MethodKind.CAST, 2)
.isParameterText(0, "<$it>")
.isParameterText(1, "<olingo.odata.test1.CTBase>")
.goParameter(0).goPath().first()
.isIt().isType(EntityTypeProvider.nameETKeyNav, false)
.goUpFilterValidator()
.root().left()
.goParameter(1).isTypedLiteral(ComplexTypeProvider.nameCTBase);
testFilter.runOnETKeyNav("concat(PropertyString,cast(PropertyCompAllPrim/PropertyInt16,Edm.String)) ne ''")
.is("<<concat(<PropertyString>,<cast(<PropertyCompAllPrim/PropertyInt16>,<Edm.String>)>)> ne <''>>")
.left()
.isMethod(MethodKind.CONCAT, 2)
.isParameterText(0, "<PropertyString>")
.isParameterText(1, "<cast(<PropertyCompAllPrim/PropertyInt16>,<Edm.String>)>")
.goParameter(1)
.isMethod(MethodKind.CAST, 2)
.isParameterText(0, "<PropertyCompAllPrim/PropertyInt16>")
.isParameterText(1, "<Edm.String>");
testFilter.runOnETKeyNav("cast($it,olingo.odata.test1.CTBase) eq cast($it,olingo.odata.test1.CTBase)")
.is("<<cast(<$it>,<olingo.odata.test1.CTBase>)> eq <cast(<$it>,<olingo.odata.test1.CTBase>)>>")
.left()
.isMethod(MethodKind.CAST, 2)
.isParameterText(0, "<$it>")
.isParameterText(1, "<olingo.odata.test1.CTBase>")
.goParameter(0).goPath().first()
.isIt().isType(EntityTypeProvider.nameETKeyNav, false)
.goUpFilterValidator()
.root().left()
.goParameter(1).isTypedLiteral(ComplexTypeProvider.nameCTBase)
.root().right()
.isMethod(MethodKind.CAST, 2)
.isParameterText(0, "<$it>")
.isParameterText(1, "<olingo.odata.test1.CTBase>")
.goParameter(0).goPath().first()
.isIt().isType(EntityTypeProvider.nameETKeyNav, false)
.goUpFilterValidator()
.root().right()
.goParameter(1).isTypedLiteral(ComplexTypeProvider.nameCTBase);
testFilter.runOnInt32("cast(Edm.Int32) gt 0")
.is("<<cast(<Edm.Int32>)> gt <0>>")
.left()
.isMethod(MethodKind.CAST, 1)
.goParameter(0).isTypedLiteral(PropertyProvider.nameInt32);
testFilter.runOnDateTimeOffset("cast(Edm.DateTimeOffset) ne null")
.is("<<cast(<Edm.DateTimeOffset>)> ne <null>>")
.left()
.isMethod(MethodKind.CAST, 1)
.goParameter(0).isTypedLiteral(PropertyProvider.nameDateTimeOffset);
testFilter.runOnDuration("cast(Edm.Duration) ne null")
.is("<<cast(<Edm.Duration>)> ne <null>>")
.left()
.isMethod(MethodKind.CAST, 1)
.goParameter(0).isTypedLiteral(PropertyProvider.nameDuration);
testFilter.runOnTimeOfDay("cast(Edm.TimeOfDay) ne null")
.is("<<cast(<Edm.TimeOfDay>)> ne <null>>")
.left()
.isMethod(MethodKind.CAST, 1)
.goParameter(0).isTypedLiteral(PropertyProvider.nameTimeOfDay);
testFilter.runOnETKeyNav("cast(CollPropertyInt16,Edm.Int32) ne null")
.is("<<cast(<CollPropertyInt16>,<Edm.Int32>)> ne <null>>")
.left()
.isMethod(MethodKind.CAST, 2)
.goParameter(0).goPath().first()
.isPrimitiveProperty("CollPropertyInt16", PropertyProvider.nameInt16, true)
.goUpFilterValidator().root().left()
.goParameter(1).isTypedLiteral(PropertyProvider.nameInt32);
testFilter.runOnETTwoKeyNav(
"cast(PropertyComp/PropertyComp/PropertyDateTimeOffset,Edm.DateTimeOffset) ne null")
.is("<<cast(<PropertyComp/PropertyComp/PropertyDateTimeOffset>,<Edm.DateTimeOffset>)> ne <null>>")
.left()
.isMethod(MethodKind.CAST, 2)
.goParameter(0).goPath()
.first().isComplexProperty("PropertyComp", ComplexTypeProvider.nameCTPrimComp, false)
.n().isComplexProperty("PropertyComp", ComplexTypeProvider.nameCTAllPrim, false)
.n().isPrimitiveProperty("PropertyDateTimeOffset", PropertyProvider.nameDateTimeOffset, false)
.goUpFilterValidator().root().left()
.goParameter(1).isTypedLiteral(PropertyProvider.nameDateTimeOffset);
testFilter.runOnETTwoKeyNav("cast(PropertyComp/PropertyComp/PropertyDuration,Edm.Duration) ne null")
.is("<<cast(<PropertyComp/PropertyComp/PropertyDuration>,<Edm.Duration>)> ne <null>>")
.left()
.isMethod(MethodKind.CAST, 2)
.goParameter(0).goPath()
.first().isComplexProperty("PropertyComp", ComplexTypeProvider.nameCTPrimComp, false)
.n().isComplexProperty("PropertyComp", ComplexTypeProvider.nameCTAllPrim, false)
.n().isPrimitiveProperty("PropertyDuration", PropertyProvider.nameDuration, false)
.goUpFilterValidator().root().left()
.goParameter(1).isTypedLiteral(PropertyProvider.nameDuration);
testFilter.runOnETTwoKeyNav("cast(PropertyComp/PropertyComp/PropertyTimeOfDay,Edm.TimeOfDay) ne null")
.is("<<cast(<PropertyComp/PropertyComp/PropertyTimeOfDay>,<Edm.TimeOfDay>)> ne <null>>")
.left()
.isMethod(MethodKind.CAST, 2)
.goParameter(0).goPath()
.first().isComplexProperty("PropertyComp", ComplexTypeProvider.nameCTPrimComp, false)
.n().isComplexProperty("PropertyComp", ComplexTypeProvider.nameCTAllPrim, false)
.n().isPrimitiveProperty("PropertyTimeOfDay", PropertyProvider.nameTimeOfDay, false)
.goUpFilterValidator().root().left()
.goParameter(1).isTypedLiteral(PropertyProvider.nameTimeOfDay);
testFilter.runOnETKeyNav("cast(PropertyCompAllPrim,olingo.odata.test1.CTTwoPrim) ne null")
.is("<<cast(<PropertyCompAllPrim>,<olingo.odata.test1.CTTwoPrim>)> ne <null>>")
.left()
.isMethod(MethodKind.CAST, 2)
.goParameter(0).goPath()
.first().isComplexProperty("PropertyCompAllPrim", ComplexTypeProvider.nameCTAllPrim, false)
.goUpFilterValidator().root().left()
.goParameter(1).isTypedLiteral(ComplexTypeProvider.nameCTTwoPrim);
testFilter.runOnETKeyNav("cast(NavPropertyETKeyNavOne,olingo.odata.test1.ETKeyPrimNav) ne null")
.is("<<cast(<NavPropertyETKeyNavOne>,<olingo.odata.test1.ETKeyPrimNav>)> ne <null>>")
.left()
.isMethod(MethodKind.CAST, 2)
.goParameter(0).goPath()
.first().isNavProperty("NavPropertyETKeyNavOne", EntityTypeProvider.nameETKeyNav, false)
.goUpFilterValidator().root().left()
.goParameter(1).isTypedLiteral(EntityTypeProvider.nameETKeyPrimNav);
testFilter.runOnETAllPrim(
"olingo.odata.test1.UFCRTCTTwoPrimTwoParam(ParameterInt16=1,ParameterString='1') ne null")
.left()
.goPath()
.isFunction("UFCRTCTTwoPrimTwoParam")
.isParameter(0, "ParameterInt16", "1")
.isParameter(1, "ParameterString", "'1'");
testFilter.runOnETKeyNavEx("cast(NavPropertyETKeyPrimNavOne,olingo.odata.test1.ETKeyNav)")
.isExSemantic(MessageKeys.EXPRESSION_PROPERTY_NOT_IN_TYPE);
}
@Test
public void lambdaFunctions() throws Exception {
testFilter.runOnETKeyNav("NavPropertyETTwoKeyNavMany/any(d:d/PropertyString eq 'SomeString')")
.is("<NavPropertyETTwoKeyNavMany/<ANY;<<d/PropertyString> eq <'SomeString'>>>>")
.root().goPath()
.first().isNavProperty("NavPropertyETTwoKeyNavMany", EntityTypeProvider.nameETTwoKeyNav, true)
.n().isUriPathInfoKind(UriResourceKind.lambdaAny)
.goLambdaExpression()
.isBinary(BinaryOperatorKind.EQ)
.left().goPath()
.first().isUriPathInfoKind(UriResourceKind.lambdaVariable)
.isType(EntityTypeProvider.nameETTwoKeyNav, false)
.n().isPrimitiveProperty("PropertyString", PropertyProvider.nameString, false);
testFilter.runOnETKeyNav("NavPropertyETTwoKeyNavMany/any()")
.is("<NavPropertyETTwoKeyNavMany/<ANY;>>");
testFilter.runOnETKeyNav("NavPropertyETTwoKeyNavOne/CollPropertyString/any(d:d eq 'SomeString')")
.is("<NavPropertyETTwoKeyNavOne/CollPropertyString/<ANY;<<d> eq <'SomeString'>>>>")
.root().goPath()
.first().isNavProperty("NavPropertyETTwoKeyNavOne", EntityTypeProvider.nameETTwoKeyNav, false)
.n().isPrimitiveProperty("CollPropertyString", PropertyProvider.nameString, true)
.n().isUriPathInfoKind(UriResourceKind.lambdaAny)
.goLambdaExpression()
.isBinary(BinaryOperatorKind.EQ)
.left().goPath()
.first().isUriPathInfoKind(UriResourceKind.lambdaVariable)
.isType(PropertyProvider.nameString, false);
testFilter.runOnETKeyNav("NavPropertyETTwoKeyNavOne/olingo.odata.test1.BFCETTwoKeyNavRTESTwoKeyNav()"
+ "/any(d:d/PropertyComp/PropertyInt16 eq 6)")
.is("<NavPropertyETTwoKeyNavOne/BFCETTwoKeyNavRTESTwoKeyNav/<ANY;<<d/PropertyComp/PropertyInt16> eq <6>>>>")
.root().goPath()
.first().isNavProperty("NavPropertyETTwoKeyNavOne", EntityTypeProvider.nameETTwoKeyNav, false)
.n().isFunction("BFCETTwoKeyNavRTESTwoKeyNav")
.n().isUriPathInfoKind(UriResourceKind.lambdaAny)
.goLambdaExpression()
.isBinary(BinaryOperatorKind.EQ)
.left().goPath()
.first().isUriPathInfoKind(UriResourceKind.lambdaVariable)
.isType(EntityTypeProvider.nameETTwoKeyNav, false)
.n().isComplex("PropertyComp")
.n().isPrimitiveProperty("PropertyInt16", PropertyProvider.nameInt16, false);
testFilter.runOnETKeyNav("NavPropertyETTwoKeyNavMany/any(d:d/PropertyInt16 eq 1 or "
+ "d/CollPropertyString/any(e:e eq 'SomeString'))")
.is("<NavPropertyETTwoKeyNavMany/<ANY;<<<d/PropertyInt16> eq <1>>"
+ " or <d/CollPropertyString/<ANY;<<e> eq <'SomeString'>>>>>>>")
.root().goPath()
.first().isNavProperty("NavPropertyETTwoKeyNavMany", EntityTypeProvider.nameETTwoKeyNav, true)
.n().isUriPathInfoKind(UriResourceKind.lambdaAny)
.goLambdaExpression()
.root().isBinary(BinaryOperatorKind.OR)
.root().left()
.isBinary(BinaryOperatorKind.EQ)
.left()
.goPath()
.first().isUriPathInfoKind(UriResourceKind.lambdaVariable)
.isType(EntityTypeProvider.nameETTwoKeyNav, false)
.n().isPrimitiveProperty("PropertyInt16", PropertyProvider.nameInt16, false)
.goUpFilterValidator()
.root().right()
.goPath()
.first().isUriPathInfoKind(UriResourceKind.lambdaVariable)
.isType(EntityTypeProvider.nameETTwoKeyNav, false)
.n().isUriPathInfoKind(UriResourceKind.primitiveProperty)
.isPrimitiveProperty("CollPropertyString", PropertyProvider.nameString, true)
.at(2).isUriPathInfoKind(UriResourceKind.lambdaAny)
.goLambdaExpression()
.root().left().goPath()
.first().isUriPathInfoKind(UriResourceKind.lambdaVariable)
.isType(PropertyProvider.nameString, false);
testFilter.runOnETKeyNav("NavPropertyETTwoKeyNavMany/any(d:d/PropertyInt16 eq 1 or "
+ "d/CollPropertyString/any(e:e eq 'SomeString'))")
.is("<NavPropertyETTwoKeyNavMany/<ANY;<<<d/PropertyInt16> eq <1>> or "
+ "<d/CollPropertyString/<ANY;<<e> eq <'SomeString'>>>>>>>")
.root().goPath()
.first().isNavProperty("NavPropertyETTwoKeyNavMany", EntityTypeProvider.nameETTwoKeyNav, true)
.n().isUriPathInfoKind(UriResourceKind.lambdaAny)
.goLambdaExpression()
.root().isBinary(BinaryOperatorKind.OR)
.root().left()
.isBinary(BinaryOperatorKind.EQ)
.left()
.goPath()
.first().isUriPathInfoKind(UriResourceKind.lambdaVariable)
.isType(EntityTypeProvider.nameETTwoKeyNav, false)
.n().isPrimitiveProperty("PropertyInt16", PropertyProvider.nameInt16, false)
.goUpFilterValidator()
.root().right()
.goPath()
.first().isUriPathInfoKind(UriResourceKind.lambdaVariable)
.isType(EntityTypeProvider.nameETTwoKeyNav, false)
.n().isType(PropertyProvider.nameString, true)
.n().isUriPathInfoKind(UriResourceKind.lambdaAny)
.goLambdaExpression()
.root().left().goPath()
.first().isUriPathInfoKind(UriResourceKind.lambdaVariable)
.isType(PropertyProvider.nameString, false);
testFilter.runOnETKeyNav("NavPropertyETTwoKeyNavMany/any(d:d/PropertyString eq 'SomeString' and "
+ "d/CollPropertyString/any(e:e eq d/PropertyString))")
.is("<NavPropertyETTwoKeyNavMany/<ANY;<<<d/PropertyString> eq <'SomeString'>> and "
+ "<d/CollPropertyString/<ANY;<<e> eq <d/PropertyString>>>>>>>")
.root().goPath()
.first().isNavProperty("NavPropertyETTwoKeyNavMany", EntityTypeProvider.nameETTwoKeyNav, true)
.n().isUriPathInfoKind(UriResourceKind.lambdaAny)
.goLambdaExpression()
.root().isBinary(BinaryOperatorKind.AND)
.root().left()
.isBinary(BinaryOperatorKind.EQ)
.left()
.goPath()
.first().isUriPathInfoKind(UriResourceKind.lambdaVariable)
.isType(EntityTypeProvider.nameETTwoKeyNav, false)
.n().isPrimitiveProperty("PropertyString", PropertyProvider.nameString, false)
.goUpFilterValidator()
.root().right()
.goPath()
.first().isUriPathInfoKind(UriResourceKind.lambdaVariable)
.isType(EntityTypeProvider.nameETTwoKeyNav, false)
.n().isType(PropertyProvider.nameString, true)
.n().isUriPathInfoKind(UriResourceKind.lambdaAny)
.goLambdaExpression()
.root().left().goPath()
.first().isUriPathInfoKind(UriResourceKind.lambdaVariable)
.isType(PropertyProvider.nameString, false)
.goUpFilterValidator()
.root().right().goPath()
.first().isUriPathInfoKind(UriResourceKind.lambdaVariable)
.n().isPrimitiveProperty("PropertyString", PropertyProvider.nameString, false);
testFilter.runOnETKeyNavEx("any()")
.isExSemantic(MessageKeys.EXPRESSION_PROPERTY_NOT_IN_TYPE);
testFilter.runOnETKeyNavEx("any(d:d/PropertyInt16 eq 1)")
.isExSemantic(MessageKeys.EXPRESSION_PROPERTY_NOT_IN_TYPE);
}
@Test
public void isOfMethod() throws Exception {
testFilter.runOnETKeyNav("isof(olingo.odata.test1.ETTwoKeyNav)")
.is("<isof(<olingo.odata.test1.ETTwoKeyNav>)>")
.root()
.isMethod(MethodKind.ISOF, 1)
.goParameter(0).isTypedLiteral(EntityTypeProvider.nameETTwoKeyNav);
testFilter.runOnETKeyNav("isof(olingo.odata.test1.ETBaseTwoKeyNav) eq true")
.is("<<isof(<olingo.odata.test1.ETBaseTwoKeyNav>)> eq <true>>")
.root().isBinary(BinaryOperatorKind.EQ)
.left()
.isMethod(MethodKind.ISOF, 1)
.goParameter(0).isTypedLiteral(EntityTypeProvider.nameETBaseTwoKeyNav);
testFilter
.runOnETKeyNav("isof(olingo.odata.test1.ETBaseTwoKeyNav) eq true and PropertyCompNav/PropertyInt16 eq 1")
.is("<<<isof(<olingo.odata.test1.ETBaseTwoKeyNav>)> eq <true>> and <<PropertyCompNav/PropertyInt16> eq <1>>>")
.root().isBinary(BinaryOperatorKind.AND)
.left().isBinary(BinaryOperatorKind.EQ)
.left().isMethod(MethodKind.ISOF, 1)
.goParameter(0).isTypedLiteral(EntityTypeProvider.nameETBaseTwoKeyNav);
testFilter.runOnETKeyNav("isof(NavPropertyETKeyNavOne,olingo.odata.test1.ETKeyNav) eq true")
.is("<<isof(<NavPropertyETKeyNavOne>,<olingo.odata.test1.ETKeyNav>)> eq <true>>")
.root().isBinary(BinaryOperatorKind.EQ)
.left().isMethod(MethodKind.ISOF, 2)
.goParameter(0).goPath().isNavProperty("NavPropertyETKeyNavOne", EntityTypeProvider.nameETKeyNav, false)
.goUpFilterValidator()
.root().left().goParameter(1).isTypedLiteral(EntityTypeProvider.nameETKeyNav);
testFilter.runOnETKeyNav("isof(PropertyCompTwoPrim,olingo.odata.test1.CTTwoPrim)")
.is("<isof(<PropertyCompTwoPrim>,<olingo.odata.test1.CTTwoPrim>)>")
.root().isMethod(MethodKind.ISOF, 2)
.goParameter(0).goPath().isComplex("PropertyCompTwoPrim").goUpFilterValidator()
.root().goParameter(1).isTypedLiteral(ComplexTypeProvider.nameCTTwoPrim);
testFilter.runOnETKeyNav("isof(PropertyCompTwoPrim,olingo.odata.test1.CTTwoBase)")
.is("<isof(<PropertyCompTwoPrim>,<olingo.odata.test1.CTTwoBase>)>")
.root().isMethod(MethodKind.ISOF, 2)
.goParameter(0).goPath().isComplex("PropertyCompTwoPrim").goUpFilterValidator()
.root().goParameter(1).isTypedLiteral(ComplexTypeProvider.nameCTTwoBase);
testFilter.runOnETKeyNav("isof(PropertyCompTwoPrim,olingo.odata.test1.CTTwoPrim) eq true")
.is("<<isof(<PropertyCompTwoPrim>,<olingo.odata.test1.CTTwoPrim>)> eq <true>>")
.root().left().isMethod(MethodKind.ISOF, 2)
.goParameter(0).goPath().isComplex("PropertyCompTwoPrim").goUpFilterValidator()
.root().left().goParameter(1).isTypedLiteral(ComplexTypeProvider.nameCTTwoPrim);
testFilter.runOnETKeyNav("isof($it,olingo.odata.test1.CTTwoPrim)")
.is("<isof(<$it>,<olingo.odata.test1.CTTwoPrim>)>")
.root()
.isMethod(MethodKind.ISOF, 2)
.goParameter(0).goPath().isIt().goUpFilterValidator()
.root().goParameter(1).isTypedLiteral(ComplexTypeProvider.nameCTTwoPrim);
testFilter.runOnETKeyNav("isof($it,olingo.odata.test1.CTTwoBase) eq false")
.is("<<isof(<$it>,<olingo.odata.test1.CTTwoBase>)> eq <false>>")
.isBinary(BinaryOperatorKind.EQ)
.root().left()
.isMethod(MethodKind.ISOF, 2)
.goParameter(0).goPath().isIt().goUpFilterValidator()
.root().left().goParameter(1).isTypedLiteral(ComplexTypeProvider.nameCTTwoBase);
testFilter.runOnETKeyNav("isof(PropertyCompNav/PropertyInt16,Edm.Int32)")
.is("<isof(<PropertyCompNav/PropertyInt16>,<Edm.Int32>)>")
.root()
.isMethod(MethodKind.ISOF, 2)
.goParameter(0).goPath()
.first().isComplex("PropertyCompNav")
.n().isPrimitiveProperty("PropertyInt16", PropertyProvider.nameInt16, false)
.goUpFilterValidator()
.root().goParameter(1).isTypedLiteral(PropertyProvider.nameInt32);
testFilter.runOnETTwoKeyNav("isof(PropertyComp/PropertyComp/PropertyDateTimeOffset,Edm.DateTimeOffset)")
.is("<isof(<PropertyComp/PropertyComp/PropertyDateTimeOffset>,<Edm.DateTimeOffset>)>")
.root()
.isMethod(MethodKind.ISOF, 2)
.goParameter(0).goPath()
.first().isComplex("PropertyComp")
.n().isComplex("PropertyComp")
.n().isPrimitiveProperty("PropertyDateTimeOffset", PropertyProvider.nameDateTimeOffset, false)
.goUpFilterValidator()
.root().goParameter(1).isTypedLiteral(PropertyProvider.nameDateTimeOffset);
testFilter.runOnETTwoKeyNav("isof(PropertyComp/PropertyComp/PropertyTimeOfDay,Edm.TimeOfDay)")
.is("<isof(<PropertyComp/PropertyComp/PropertyTimeOfDay>,<Edm.TimeOfDay>)>")
.root()
.isMethod(MethodKind.ISOF, 2)
.goParameter(0).goPath()
.first().isComplex("PropertyComp")
.n().isComplex("PropertyComp")
.n().isPrimitiveProperty("PropertyTimeOfDay", PropertyProvider.nameTimeOfDay, false)
.goUpFilterValidator()
.root().goParameter(1).isTypedLiteral(PropertyProvider.nameTimeOfDay);
testFilter.runOnETTwoKeyNav("isof(PropertyComp/PropertyComp/PropertyDuration,Edm.Duration)")
.is("<isof(<PropertyComp/PropertyComp/PropertyDuration>,<Edm.Duration>)>")
.root()
.isMethod(MethodKind.ISOF, 2)
.goParameter(0).goPath()
.first().isComplex("PropertyComp")
.n().isComplex("PropertyComp")
.n().isPrimitiveProperty("PropertyDuration", PropertyProvider.nameDuration, false)
.goUpFilterValidator()
.root().goParameter(1).isTypedLiteral(PropertyProvider.nameDuration);
testFilter.runOnETTwoKeyNav("isof(PropertyComp/PropertyComp/PropertyString,Edm.String)")
.is("<isof(<PropertyComp/PropertyComp/PropertyString>,<Edm.String>)>")
.root()
.isMethod(MethodKind.ISOF, 2)
.goParameter(0).goPath()
.first().isComplex("PropertyComp")
.n().isComplex("PropertyComp")
.n().isPrimitiveProperty("PropertyString", PropertyProvider.nameString, false)
.goUpFilterValidator()
.root().goParameter(1).isTypedLiteral(PropertyProvider.nameString);
testFilter.runOnETTwoKeyNav("isof(PropertyComp/PropertyComp/PropertyString,Edm.Guid)")
.is("<isof(<PropertyComp/PropertyComp/PropertyString>,<Edm.Guid>)>")
.root()
.isMethod(MethodKind.ISOF, 2)
.goParameter(0).goPath()
.first().isComplex("PropertyComp")
.n().isComplex("PropertyComp")
.n().isPrimitiveProperty("PropertyString", PropertyProvider.nameString, false)
.goUpFilterValidator()
.root().goParameter(1).isTypedLiteral(PropertyProvider.nameGuid);
testFilter.runOnETMixEnumDefCollComp("isof(PropertyEnumString,Namespace1_Alias.ENString)")
.isMethod(MethodKind.ISOF, 2)
.goParameter(0).goPath()
.first().isPrimitiveProperty("PropertyEnumString", EnumTypeProvider.nameENString, false)
.goUpFilterValidator()
.root().goParameter(1).isTypedLiteral(EnumTypeProvider.nameENString);
testFilter.runOnETMixEnumDefCollComp("isof(PropertyDefString,Namespace1_Alias.TDString)")
.isMethod(MethodKind.ISOF, 2)
.goParameter(0).goPath()
.first().isPrimitiveProperty("PropertyDefString", TypeDefinitionProvider.nameTDString, false)
.goUpFilterValidator()
.root().goParameter(1).isTypedLiteral(TypeDefinitionProvider.nameTDString);
}
@Test
public void has() throws Exception {
testFilter.runOnETMixEnumDefCollComp("PropertyEnumString has olingo.odata.test1.ENString'String1'")
.is("<<PropertyEnumString> has <olingo.odata.test1.ENString<String1>>>")
.isBinary(BinaryOperatorKind.HAS)
.root().left().goPath().isPrimitiveProperty("PropertyEnumString", EnumTypeProvider.nameENString, false)
.goUpFilterValidator()
.root().right().isEnum(EnumTypeProvider.nameENString, Arrays.asList("String1"));
testFilter.runOnETMixEnumDefCollComp(
"PropertyCompMixedEnumDef/PropertyEnumString has olingo.odata.test1.ENString'String2'")
.is("<<PropertyCompMixedEnumDef/PropertyEnumString> has <olingo.odata.test1.ENString<String2>>>")
.isBinary(BinaryOperatorKind.HAS)
.root().left().goPath()
.first().isComplex("PropertyCompMixedEnumDef")
.n().isPrimitiveProperty("PropertyEnumString", EnumTypeProvider.nameENString, false)
.goUpFilterValidator()
.root().right().isEnum(EnumTypeProvider.nameENString, Arrays.asList("String2"));
testFilter
.runOnETMixEnumDefCollComp(
"PropertyCompMixedEnumDef/PropertyEnumString has olingo.odata.test1.ENString'String2' eq true")
.is("<<<PropertyCompMixedEnumDef/PropertyEnumString> has " +
"<olingo.odata.test1.ENString<String2>>> eq <true>>")
.isBinary(BinaryOperatorKind.EQ)
.root().left()
.isBinary(BinaryOperatorKind.HAS)
.root().left().left().goPath()
.first().isComplex("PropertyCompMixedEnumDef")
.n().isPrimitiveProperty("PropertyEnumString", EnumTypeProvider.nameENString, false)
.goUpFilterValidator()
.root().left().right().isEnum(EnumTypeProvider.nameENString, Arrays.asList("String2"));
testFilter.runOnETMixEnumDefCollComp("PropertyEnumString has olingo.odata.test1.ENString'String3'")
.is("<<PropertyEnumString> has <olingo.odata.test1.ENString<String3>>>")
.isBinary(BinaryOperatorKind.HAS)
.root().left().goPath()
.first().isPrimitiveProperty("PropertyEnumString", EnumTypeProvider.nameENString, false)
.goUpFilterValidator()
.root().right().isEnum(EnumTypeProvider.nameENString, Arrays.asList("String3"));
testFilter.runOnETMixEnumDefCollComp("PropertyEnumString has olingo.odata.test1.ENString'String1,String3'")
.is("<<PropertyEnumString> has <olingo.odata.test1.ENString<String1,String3>>>")
.isBinary(BinaryOperatorKind.HAS)
.root().left().goPath()
.first().isPrimitiveProperty("PropertyEnumString", EnumTypeProvider.nameENString, false)
.goUpFilterValidator()
.root().right().isEnum(EnumTypeProvider.nameENString, Arrays.asList("String1", "String3"));
testFilter.runUriEx("ESMixEnumDefCollComp", "$filter=PropertyEnumString has null")
.isExSyntax(UriParserSyntaxException.MessageKeys.SYNTAX);
testFilter.runUriEx("ESMixEnumDefCollComp", "$filter=PropertyEnumString has ENString'String1'")
.isExSyntax(UriParserSyntaxException.MessageKeys.SYNTAX);
testFilter.runUriEx("ESMixEnumDefCollComp", "$filter=PropertyEnumString has wrongNamespace.ENString'String1'")
.isExSemantic(MessageKeys.UNKNOWN_TYPE);
testFilter.runUriEx("ESMixEnumDefCollComp", "$filter=PropertyEnumString has olingo.odata.test1.Wrong'String1'")
.isExSemantic(MessageKeys.UNKNOWN_TYPE);
}
@Test
public void filterOnCountAndRef() throws Exception {
testUri.run("ESKeyNav/$count", "$filter=PropertyInt16 ge 0")
.goPath().isCount()
.goUpUriValidator().goFilter().isBinary(BinaryOperatorKind.GE)
.left().goPath().first().isPrimitiveProperty("PropertyInt16", PropertyProvider.nameInt16, false)
.goUpFilterValidator().root().right().isLiteral("0");
testUri.run("ESKeyNav/$ref", "$filter=PropertyInt16 ge 0")
.goPath().isRef()
.goUpUriValidator().goFilter().isBinary(BinaryOperatorKind.GE)
.left().goPath().first().isPrimitiveProperty("PropertyInt16", PropertyProvider.nameInt16, false)
.goUpFilterValidator().root().right().isLiteral("0");
}
@Test
public void orderby() throws Exception {
testFilter.runOrderByOnETTwoKeyNav("PropertyString")
.isSortOrder(0, false)
.goOrder(0).goPath()
.first().isPrimitiveProperty("PropertyString", PropertyProvider.nameString, false);
testFilter.runOrderByOnETTwoKeyNav("PropertyComp")
.isSortOrder(0, false)
.goOrder(0).goPath()
.first().isComplex("PropertyComp");
testFilter.runOrderByOnETTwoKeyNav("PropertyComp/PropertyComp")
.isSortOrder(0, false)
.goOrder(0).goPath()
.first().isComplex("PropertyComp")
.n().isComplex("PropertyComp");
testFilter.runOrderByOnETTwoKeyNav("PropertyComp/PropertyComp/PropertyDate")
.isSortOrder(0, false)
.goOrder(0).goPath()
.first().isComplex("PropertyComp")
.n().isComplex("PropertyComp")
.n().isPrimitiveProperty("PropertyDate", PropertyProvider.nameDate, false);
testFilter.runOrderByOnETTwoKeyNav("olingo.odata.test1.UFCRTETAllPrimTwoParam("
+ "ParameterString=@ParamStringAlias,ParameterInt16=@ParamInt16Alias)/PropertyString eq 'SomeString'"
+ "&@ParamStringAlias='1'&@ParamInt16Alias=1")
.isSortOrder(0, false)
.goOrder(0).isBinary(BinaryOperatorKind.EQ).left().goPath()
.first().isFunction("UFCRTETAllPrimTwoParam").goUpFilterValidator()
.goOrder(0).right().isLiteral("'SomeString'");
testFilter.runOrderByOnETTwoKeyNav("olingo.odata.test1.UFCRTETAllPrimTwoParam("
+ "ParameterString=@ParamStringAlias,ParameterInt16=@ParamInt16Alias)/PropertyString eq 'SomeString' asc"
+ "&@ParamStringAlias='1'&@ParamInt16Alias=1")
.isSortOrder(0, false)
.goOrder(0).isBinary(BinaryOperatorKind.EQ).left().goPath()
.first().isFunction("UFCRTETAllPrimTwoParam").goUpFilterValidator()
.goOrder(0).right().isLiteral("'SomeString'");
testFilter.runOrderByOnETTwoKeyNav("olingo.odata.test1.UFCRTETAllPrimTwoParam("
+ "ParameterString=@ParamStringAlias,ParameterInt16=@ParamInt16Alias)/PropertyString eq 'SomeString' desc"
+ "&@ParamStringAlias='1'&@ParamInt16Alias=1")
.isSortOrder(0, true)
.goOrder(0).isBinary(BinaryOperatorKind.EQ).left().goPath()
.first().isFunction("UFCRTETAllPrimTwoParam").goUpFilterValidator()
.goOrder(0).right().isLiteral("'SomeString'");
testFilter.runOrderByOnETTwoKeyNav("olingo.odata.test1.UFCRTETAllPrimTwoParam("
+ "ParameterString=@ParamStringAlias,ParameterInt16=@ParamInt16Alias)/PropertyString eq 'SomeString' desc,"
+ "PropertyString eq '1'"
+ "&@ParamStringAlias='1'&@ParamInt16Alias=1")
.isSortOrder(0, true)
.goOrder(0).isBinary(BinaryOperatorKind.EQ).left().goPath()
.first().isFunction("UFCRTETAllPrimTwoParam").goUpFilterValidator()
.goOrder(0).right().isLiteral("'SomeString'")
.isSortOrder(1, false)
.goOrder(1).isBinary(BinaryOperatorKind.EQ).left().goPath()
.first().isPrimitiveProperty("PropertyString", PropertyProvider.nameString, false).goUpFilterValidator()
.goOrder(1).right().isLiteral("'1'");
testFilter.runOrderByOnETTwoKeyNav("PropertyComp/PropertyComp/PropertyDate eq "
+ "$root/ESTwoKeyNav(PropertyInt16=1,PropertyString='2')/PropertyComp/PropertyComp/PropertyDate")
.isSortOrder(0, false)
.goOrder(0).isBinary(BinaryOperatorKind.EQ).left().goPath()
.first().isComplex("PropertyComp")
.n().isComplex("PropertyComp")
.n().isPrimitiveProperty("PropertyDate", PropertyProvider.nameDate, false)
.goUpFilterValidator()
.goOrder(0).right().goPath()
.first().isUriPathInfoKind(UriResourceKind.root)
.n().isEntitySet("ESTwoKeyNav")
.n().isComplex("PropertyComp")
.n().isComplex("PropertyComp")
.n().isPrimitiveProperty("PropertyDate", PropertyProvider.nameDate, false);
testFilter.runOrderByOnETTwoKeyNav("PropertyComp/PropertyComp/PropertyDate eq 2013-11-12 desc,"
+ "PropertyString eq 'SomeString' desc")
.isSortOrder(0, true)
.goOrder(0).isBinary(BinaryOperatorKind.EQ)
.left().goPath()
.first().isComplex("PropertyComp")
.n().isComplex("PropertyComp")
.n().isPrimitiveProperty("PropertyDate", PropertyProvider.nameDate, false).goUpFilterValidator()
.goOrder(0).right().isLiteral("2013-11-12")
.isSortOrder(1, true)
.goOrder(1).left().goPath().first().isPrimitiveProperty("PropertyString", PropertyProvider.nameString, false)
.goUpFilterValidator()
.goOrder(1).right().isLiteral("'SomeString'");
testFilter.runOrderByOnETTwoKeyNav("PropertyComp desc,PropertyComp/PropertyInt16 eq 1")
.isSortOrder(0, true)
.goOrder(0).goPath()
.first().isComplex("PropertyComp").goUpFilterValidator()
.isSortOrder(1, false)
.goOrder(1).isBinary(BinaryOperatorKind.EQ)
.left().goPath()
.first().isComplex("PropertyComp")
.n().isPrimitiveProperty("PropertyInt16", PropertyProvider.nameInt16, false).goUpFilterValidator()
.goOrder(1).right().isLiteral("1");
testFilter.runOrderByOnETTwoKeyNav("NavPropertyETKeyNavOne")
.isSortOrder(0, false).goOrder(0).goPath()
.first().isNavProperty("NavPropertyETKeyNavOne", EntityTypeProvider.nameETKeyNav, false);
testFilter.runOrderByOnETTwoKeyNav("NavPropertyETKeyNavOne/PropertyString")
.isSortOrder(0, false).goOrder(0).goPath()
.first().isNavProperty("NavPropertyETKeyNavOne", EntityTypeProvider.nameETKeyNav, false)
.n().isPrimitiveProperty("PropertyString", PropertyProvider.nameString, false);
testFilter.runOrderByOnETTwoKeyNav("NavPropertyETKeyNavOne/PropertyCompNav")
.isSortOrder(0, false).goOrder(0).goPath()
.first().isNavProperty("NavPropertyETKeyNavOne", EntityTypeProvider.nameETKeyNav, false)
.n().isComplex("PropertyCompNav");
testFilter.runOrderByOnETTwoKeyNav("PropertyComp/PropertyComp/PropertyInt16 eq 1")
.isSortOrder(0, false).goOrder(0).left().goPath()
.first().isComplex("PropertyComp")
.n().isComplex("PropertyComp")
.n().isPrimitiveProperty("PropertyInt16", PropertyProvider.nameInt16, false);
testFilter.runOrderByOnETTwoKeyNav("NavPropertyETKeyNavMany(1)/NavPropertyETTwoKeyNavMany(PropertyString='2')"
+ "/PropertyString eq 'SomeString'")
.isSortOrder(0, false).goOrder(0).left().goPath()
.first().isNavProperty("NavPropertyETKeyNavMany", EntityTypeProvider.nameETKeyNav, false)
.n().isNavProperty("NavPropertyETTwoKeyNavMany", EntityTypeProvider.nameETTwoKeyNav, false)
.n().isPrimitiveProperty("PropertyString", PropertyProvider.nameString, false);
testFilter.runOrderByOnETTwoKeyNav("NavPropertyETKeyNavMany(1)/NavPropertyETTwoKeyNavMany(PropertyString='2')"
+ "/PropertyString eq 'SomeString1' desc,PropertyString eq 'SomeString2' asc")
.isSortOrder(0, true).goOrder(0).left().goPath()
.first().isNavProperty("NavPropertyETKeyNavMany", EntityTypeProvider.nameETKeyNav, false)
.n().isNavProperty("NavPropertyETTwoKeyNavMany", EntityTypeProvider.nameETTwoKeyNav, false)
.n().isPrimitiveProperty("PropertyString", PropertyProvider.nameString, false).goUpFilterValidator()
.isSortOrder(1, false).goOrder(1).left().goPath()
.first().isPrimitiveProperty("PropertyString", PropertyProvider.nameString, false);
testFilter.runOrderByOnETAllPrim("PropertyBoolean eq true")
.isSortOrder(0, false)
.goOrder(0).left().goPath().isPrimitiveProperty("PropertyBoolean", PropertyProvider.nameBoolean, false)
.goUpFilterValidator()
.goOrder(0).right().isLiteral("true");
testFilter.runOrderByOnETAllPrim("PropertyBoolean eq true desc")
.isSortOrder(0, true)
.goOrder(0).left().goPath().isPrimitiveProperty("PropertyBoolean", PropertyProvider.nameBoolean, false)
.goUpFilterValidator()
.goOrder(0).right().isLiteral("true");
testFilter.runOrderByOnETAllPrim("PropertyDouble eq 3.5E+38")
.isSortOrder(0, false)
.goOrder(0).left().goPath().isPrimitiveProperty("PropertyDouble", PropertyProvider.nameDouble, false)
.goUpFilterValidator()
.goOrder(0).right().isLiteral("3.5E+38");
testFilter.runOrderByOnETAllPrim("PropertyDouble eq 3.5E+38 desc").isSortOrder(0, true)
.goOrder(0).left().goPath().isPrimitiveProperty("PropertyDouble", PropertyProvider.nameDouble, false)
.goUpFilterValidator()
.goOrder(0).right().isLiteral("3.5E+38");
testFilter.runOrderByOnETAllPrim("PropertySingle eq 1.5")
.isSortOrder(0, false)
.goOrder(0).left().goPath().isPrimitiveProperty("PropertySingle", PropertyProvider.nameSingle, false)
.goUpFilterValidator()
.goOrder(0).right().isLiteral("1.5");
testFilter.runOrderByOnETAllPrim("PropertySingle eq 1.5 desc")
.isSortOrder(0, true)
.goOrder(0).left().goPath().isPrimitiveProperty("PropertySingle", PropertyProvider.nameSingle, false)
.goUpFilterValidator()
.goOrder(0).right().isLiteral("1.5");
testFilter.runOrderByOnETAllPrim("PropertySByte eq -128")
.isSortOrder(0, false)
.goOrder(0).left().goPath().isPrimitiveProperty("PropertySByte", PropertyProvider.nameSByte, false)
.goUpFilterValidator()
.goOrder(0).right().isLiteral("-128");
testFilter.runOrderByOnETAllPrim("PropertySByte eq -128 desc")
.isSortOrder(0, true)
.goOrder(0).left().goPath().isPrimitiveProperty("PropertySByte", PropertyProvider.nameSByte, false)
.goUpFilterValidator()
.goOrder(0).right().isLiteral("-128");
testFilter.runOrderByOnETAllPrim("PropertyByte eq 255")
.isSortOrder(0, false)
.goOrder(0).left().goPath().isPrimitiveProperty("PropertyByte", PropertyProvider.nameByte, false)
.goUpFilterValidator()
.goOrder(0).right().isLiteral("255");
testFilter.runOrderByOnETAllPrim("PropertyByte eq 255 desc")
.isSortOrder(0, true)
.goOrder(0).left().goPath().isPrimitiveProperty("PropertyByte", PropertyProvider.nameByte, false)
.goUpFilterValidator()
.goOrder(0).right().isLiteral("255");
testFilter.runOrderByOnETAllPrim("PropertyInt16 eq 32767")
.isSortOrder(0, false)
.goOrder(0).left().goPath().isPrimitiveProperty("PropertyInt16", PropertyProvider.nameInt16, false)
.goUpFilterValidator()
.goOrder(0).right().isLiteral("32767");
testFilter.runOrderByOnETAllPrim("PropertyInt16 eq 32767 desc")
.isSortOrder(0, true)
.goOrder(0).left().goPath().isPrimitiveProperty("PropertyInt16", PropertyProvider.nameInt16, false)
.goUpFilterValidator()
.goOrder(0).right().isLiteral("32767");
testFilter.runOrderByOnETAllPrim("PropertyInt32 eq 2147483647")
.isSortOrder(0, false)
.goOrder(0).left().goPath().isPrimitiveProperty("PropertyInt32", PropertyProvider.nameInt32, false)
.goUpFilterValidator()
.goOrder(0).right().isLiteral("2147483647");
testFilter.runOrderByOnETAllPrim("PropertyInt32 eq 2147483647 desc")
.isSortOrder(0, true)
.goOrder(0).left().goPath().isPrimitiveProperty("PropertyInt32", PropertyProvider.nameInt32, false)
.goUpFilterValidator()
.goOrder(0).right().isLiteral("2147483647");
testFilter.runOrderByOnETAllPrim("PropertyInt64 eq 9223372036854775807")
.isSortOrder(0, false)
.goOrder(0).left().goPath().isPrimitiveProperty("PropertyInt64", PropertyProvider.nameInt64, false)
.goUpFilterValidator()
.goOrder(0).right().isLiteral("9223372036854775807");
testFilter.runOrderByOnETAllPrim("PropertyInt64 eq 9223372036854775807 desc")
.isSortOrder(0, true)
.goOrder(0).left().goPath().isPrimitiveProperty("PropertyInt64", PropertyProvider.nameInt64, false)
.goUpFilterValidator()
.goOrder(0).right().isLiteral("9223372036854775807");
testFilter.runOrderByOnETAllPrim("PropertyBinary eq binary'VGVzdA=='")
.isSortOrder(0, false)
.goOrder(0).left().goPath().isPrimitiveProperty("PropertyBinary", PropertyProvider.nameBinary, false)
.goUpFilterValidator()
.goOrder(0).right().isLiteral("binary'VGVzdA=='");
testFilter.runOrderByOnETAllPrim("PropertyBinary eq binary'VGVzdA==' desc")
.isSortOrder(0, true)
.goOrder(0).left().goPath().isPrimitiveProperty("PropertyBinary", PropertyProvider.nameBinary, false)
.goUpFilterValidator()
.goOrder(0).right().isLiteral("binary'VGVzdA=='");
testFilter.runOrderByOnETAllPrim("PropertyDate eq 2013-09-25")
.isSortOrder(0, false)
.goOrder(0).left().goPath().isPrimitiveProperty("PropertyDate", PropertyProvider.nameDate, false)
.goUpFilterValidator()
.goOrder(0).right().isLiteral("2013-09-25");
testFilter.runOrderByOnETAllPrim("PropertyDate eq 2013-09-25 desc")
.isSortOrder(0, true)
.goOrder(0).left().goPath().isPrimitiveProperty("PropertyDate", PropertyProvider.nameDate, false)
.goUpFilterValidator()
.goOrder(0).right().isLiteral("2013-09-25");
testFilter.runOrderByOnETAllPrim("PropertyDateTimeOffset eq 2013-09-25T12:34:56.123456789012-10:24")
.isSortOrder(0, false)
.goOrder(0).left().goPath().isPrimitiveProperty("PropertyDateTimeOffset", PropertyProvider.nameDateTimeOffset,
false)
.goUpFilterValidator()
.goOrder(0).right().isLiteral("2013-09-25T12:34:56.123456789012-10:24");
testFilter.runOrderByOnETAllPrim("PropertyDateTimeOffset eq 2013-09-25T12:34:56.123456789012-10:24 desc")
.isSortOrder(0, true)
.goOrder(0).left().goPath().isPrimitiveProperty("PropertyDateTimeOffset", PropertyProvider.nameDateTimeOffset,
false)
.goUpFilterValidator()
.goOrder(0).right().isLiteral("2013-09-25T12:34:56.123456789012-10:24");
testFilter.runOrderByOnETAllPrim("PropertyDuration eq duration'P10DT5H34M21.123456789012S'")
.isSortOrder(0, false)
.goOrder(0).left().goPath().isPrimitiveProperty("PropertyDuration", PropertyProvider.nameDuration, false)
.goUpFilterValidator()
.goOrder(0).right().isLiteral("duration'P10DT5H34M21.123456789012S'");
testFilter.runOrderByOnETAllPrim("PropertyDuration eq duration'P10DT5H34M21.123456789012S' desc")
.isSortOrder(0, true)
.goOrder(0).left().goPath().isPrimitiveProperty("PropertyDuration", PropertyProvider.nameDuration, false)
.goUpFilterValidator()
.goOrder(0).right().isLiteral("duration'P10DT5H34M21.123456789012S'");
testFilter.runOrderByOnETAllPrim("PropertyGuid eq 005056A5-09B1-1ED3-89BD-FB81372CCB33")
.isSortOrder(0, false)
.goOrder(0).left().goPath().isPrimitiveProperty("PropertyGuid", PropertyProvider.nameGuid, false)
.goUpFilterValidator()
.goOrder(0).right().isLiteral("005056A5-09B1-1ED3-89BD-FB81372CCB33");
testFilter.runOrderByOnETAllPrim("PropertyGuid eq 005056A5-09B1-1ED3-89BD-FB81372CCB33 desc")
.isSortOrder(0, true)
.goOrder(0).left().goPath().isPrimitiveProperty("PropertyGuid", PropertyProvider.nameGuid, false)
.goUpFilterValidator()
.goOrder(0).right().isLiteral("005056A5-09B1-1ED3-89BD-FB81372CCB33");
testFilter.runOrderByOnETAllPrim("PropertyString eq 'somestring'")
.isSortOrder(0, false)
.goOrder(0).left().goPath().isPrimitiveProperty("PropertyString", PropertyProvider.nameString, false)
.goUpFilterValidator()
.goOrder(0).right().isLiteral("'somestring'");
testFilter.runOrderByOnETAllPrim("PropertyString eq 'somestring' desc")
.isSortOrder(0, true)
.goOrder(0).left().goPath().isPrimitiveProperty("PropertyString", PropertyProvider.nameString, false)
.goUpFilterValidator()
.goOrder(0).right().isLiteral("'somestring'");
testFilter.runOrderByOnETAllPrim("PropertyTimeOfDay eq 12:34:55.123456789012")
.isSortOrder(0, false)
.goOrder(0).left().goPath().isPrimitiveProperty("PropertyTimeOfDay", PropertyProvider.nameTimeOfDay, false)
.goUpFilterValidator()
.goOrder(0).right().isLiteral("12:34:55.123456789012");
testFilter.runOrderByOnETAllPrim("PropertyTimeOfDay eq 12:34:55.123456789012 desc")
.isSortOrder(0, true)
.goOrder(0).left().goPath().isPrimitiveProperty("PropertyTimeOfDay", PropertyProvider.nameTimeOfDay, false)
.goUpFilterValidator()
.goOrder(0).right().isLiteral("12:34:55.123456789012");
testFilter.runOrderByOnETMixEnumDefCollComp("PropertyEnumString eq olingo.odata.test1.ENString'String1'")
.isSortOrder(0, false)
.goOrder(0).left().goPath().isPrimitiveProperty("PropertyEnumString", EnumTypeProvider.nameENString, false)
.goUpFilterValidator()
.goOrder(0).right().isEnum(EnumTypeProvider.nameENString, Arrays.asList("String1"));
testFilter.runOrderByOnETMixEnumDefCollComp("PropertyEnumString eq olingo.odata.test1.ENString'String1' desc")
.isSortOrder(0, true)
.goOrder(0).left().goPath().isPrimitiveProperty("PropertyEnumString", EnumTypeProvider.nameENString, false)
.goUpFilterValidator()
.goOrder(0).right().isEnum(EnumTypeProvider.nameENString, Arrays.asList("String1"));
testFilter.runOrderByOnETTwoKeyNavEx("PropertyInt16 1")
.isExSyntax(UriParserSyntaxException.MessageKeys.WRONG_VALUE_FOR_SYSTEM_QUERY_OPTION);
testFilter.runOrderByOnETTwoKeyNavEx("PropertyInt16, PropertyInt32 PropertyDuration")
.isExSyntax(UriParserSyntaxException.MessageKeys.SYNTAX);
testFilter.runOrderByOnETTwoKeyNavEx("PropertyInt16 PropertyInt32, PropertyDuration desc")
.isExSyntax(UriParserSyntaxException.MessageKeys.WRONG_VALUE_FOR_SYSTEM_QUERY_OPTION);
testFilter.runOrderByOnETTwoKeyNavEx("PropertyInt16 asc, PropertyInt32 PropertyDuration desc")
.isExSyntax(UriParserSyntaxException.MessageKeys.SYNTAX);
testFilter.runOrderByOnETTwoKeyNavEx("PropertyInt16 asc desc")
.isExSyntax(UriParserSyntaxException.MessageKeys.WRONG_VALUE_FOR_SYSTEM_QUERY_OPTION);
testFilter.runOrderByOnETTwoKeyNavEx("undefined")
.isExSemantic(MessageKeys.EXPRESSION_PROPERTY_NOT_IN_TYPE);
testFilter.runOrderByOnETTwoKeyNavEx("PropertyComp/undefined")
.isExSemantic(MessageKeys.EXPRESSION_PROPERTY_NOT_IN_TYPE);
}
@Test
public void search() throws Exception {
testUri.run("ESTwoKeyNav", "$search=abc");
testUri.run("ESTwoKeyNav", "$search=NOT abc");
testUri.run("ESTwoKeyNav", "$search=abc AND def");
testUri.run("ESTwoKeyNav", "$search=abc OR def");
testUri.run("ESTwoKeyNav", "$search=abc def");
testUri.run("ESTwoKeyNav", "$search=abc AND def AND ghi");
testUri.run("ESTwoKeyNav", "$search=abc AND def OR ghi");
testUri.run("ESTwoKeyNav", "$search=abc AND def ghi");
testUri.run("ESTwoKeyNav", "$search=abc OR def AND ghi");
testUri.run("ESTwoKeyNav", "$search=abc OR def OR ghi");
testUri.run("ESTwoKeyNav", "$search=abc OR def ghi");
testUri.run("ESTwoKeyNav", "$search=abc def AND ghi");
testUri.run("ESTwoKeyNav", "$search=abc def OR ghi");
testUri.run("ESTwoKeyNav", "$search=abc def ghi");
// mixed not
testUri.run("ESTwoKeyNav", "$search= abc def AND ghi");
testUri.run("ESTwoKeyNav", "$search=NOT abc NOT def OR NOT ghi");
testUri.run("ESTwoKeyNav", "$search= abc def NOT ghi");
// parenthesis
testUri.run("ESTwoKeyNav", "$search=(abc)");
testUri.run("ESTwoKeyNav", "$search=(abc AND def)");
testUri.run("ESTwoKeyNav", "$search=(abc AND def) OR ghi ");
testUri.run("ESTwoKeyNav", "$search=(abc AND def) ghi ");
testUri.run("ESTwoKeyNav", "$search=abc AND (def OR ghi)");
testUri.run("ESTwoKeyNav", "$search=abc AND (def ghi)");
// search in function-import return value
testUri.run("FICRTCollESTwoKeyNavParam(ParameterInt16=1)", "$search=test");
// percent encoded characters
testUri.run("ESTwoKeyNav", "$search=%41%42%43");
testUri.run("ESTwoKeyNav", "$search=\"100%25\"");
// escaped characters
testUri.run("ESTwoKeyNav", "$search=\"abc\"");
testUri.run("ESTwoKeyNav", "$search=\"a\\\"bc\"");
testUri.run("ESTwoKeyNav", "$search=%22abc%22");
testUri.run("ESTwoKeyNav", "$search=%22a%5C%22bc%22");
testUri.run("ESTwoKeyNav", "$search=%22a%5C%5Cbc%22");
// wrong escaped characters
testUri.runEx("ESTwoKeyNav", "$search=%22a%22bc%22")
.isExceptionMessage(SearchParserException.MessageKeys.TOKENIZER_EXCEPTION);
testUri.runEx("ESTwoKeyNav", "$search=%22a%5Cbc%22")
.isExceptionMessage(SearchParserException.MessageKeys.TOKENIZER_EXCEPTION);
testUri.runEx("ESTwoKeyNav", "$search=not%27allowed")
.isExceptionMessage(SearchParserException.MessageKeys.TOKENIZER_EXCEPTION);
}
@Test
public void searchTree() throws Exception {
testUri.run("ESTwoKeyNav", "$expand=NavPropertyETKeyNavMany($search=(abc AND def) OR NOT ghi)")
.goExpand().isSearchSerialized("{{'abc' AND 'def'} OR {NOT 'ghi'}}");
}
/**
* See <a href=
* "https://tools.oasis-open.org/version-control/browse/wsvn/odata/trunk/spec/ABNF/odata-abnf-testcases.xml">test
* cases at OASIS</a>.
*/
@Test
public void searchQueryPhraseAbnfTestcases() throws Exception {
// <TestCase Name="5.1.7 Search - simple phrase" Rule="queryOptions">
testUri.run("ESTwoKeyNav", "$search=\"blue%20green\"");
// <TestCase Name="5.1.7 Search - simple phrase" Rule="queryOptions">
testUri.run("ESTwoKeyNav", "$search=\"blue%20green%22");
// <TestCase Name="5.1.7 Search - phrase with escaped double-quote" Rule="queryOptions">
// <Input>$search="blue\"green"</Input>
testUri.run("ESTwoKeyNav", "$search=\"blue\\\"green\"");
// <TestCase Name="5.1.7 Search - phrase with escaped backslash" Rule="queryOptions">
// <Input>$search="blue\\green"</Input>
testUri.run("ESTwoKeyNav", "$search=\"blue\\\\green\"");
// <TestCase Name="5.1.7 Search - phrase with unescaped double-quote" Rule="queryOptions" FailAt="14">
testUri.runEx("ESTwoKeyNav", "$search=\"blue\"green\"")
.isExceptionMessage(SearchParserException.MessageKeys.TOKENIZER_EXCEPTION);
// <TestCase Name="5.1.7 Search - phrase with unescaped double-quote" Rule="queryOptions" FailAt="16">
testUri.runEx("ESTwoKeyNav", "$search=\"blue%22green\"")
.isExceptionMessage(SearchParserException.MessageKeys.TOKENIZER_EXCEPTION);
// <TestCase Name="5.1.7 Search - implicit AND" Rule="queryOptions">
// <Input>$search=blue green</Input>
// SearchassertQuery("\"blue%20green\"").resultsIn();
testUri.run("ESTwoKeyNav", "$search=blue green");
// <TestCase Name="5.1.7 Search - implicit AND, encoced" Rule="queryOptions">
// SearchassertQuery("blue%20green").resultsIn();
testUri.run("ESTwoKeyNav", "$search=blue%20green");
// <TestCase Name="5.1.7 Search - AND" Rule="queryOptions">
// <Input>$search=blue AND green</Input>
testUri.run("ESTwoKeyNav", "$search=blue AND green");
// <TestCase Name="5.1.7 Search - OR" Rule="queryOptions">
// <Input>$search=blue OR green</Input>
testUri.run("ESTwoKeyNav", "$search=blue OR green");
// <TestCase Name="5.1.7 Search - NOT" Rule="queryOptions">
// <Input>$search=blue NOT green</Input>
testUri.run("ESTwoKeyNav", "$search=blue NOT green");
// <TestCase Name="5.1.7 Search - only NOT" Rule="queryOptions">
// <Input>$search=NOT blue</Input>
testUri.run("ESTwoKeyNav", "$search=NOT blue");
// <TestCase Name="5.1.7 Search - multiple" Rule="queryOptions">
// <Input>$search=foo AND bar OR foo AND baz OR that AND bar OR that AND baz</Input>
testUri.run("ESTwoKeyNav", "$search=foo AND bar OR foo AND baz OR that AND bar OR that AND baz");
// <TestCase Name="5.1.7 Search - multiple" Rule="queryOptions">
// <Input>$search=(foo OR that) AND (bar OR baz)</Input>
testUri.run("ESTwoKeyNav", "$search=(foo OR that) AND (bar OR baz)");
// <TestCase Name="5.1.7 Search - grouping" Rule="queryOptions">
// <Input>$search=foo AND (bar OR baz)</Input>
testUri.run("ESTwoKeyNav", "$search=foo AND (bar OR baz)");
// <TestCase Name="5.1.7 Search - grouping" Rule="queryOptions">
// <Input>$search=(foo AND bar) OR baz</Input>
testUri.run("ESTwoKeyNav", "$search=(foo AND bar) OR baz");
// <TestCase Name="5.1.7 Search - grouping" Rule="queryOptions">
// <Input>$search=(NOT foo) OR baz</Input>
testUri.run("ESTwoKeyNav", "$search=(NOT foo) OR baz");
// <TestCase Name="5.1.7 Search - grouping" Rule="queryOptions">
// <Input>$search=(NOT foo)</Input>
testUri.run("ESTwoKeyNav", "$search=(NOT foo)");
// <TestCase Name="5.1.7 Search - on entity set" Rule="odataUri">
// <Input>http://serviceRoot/Products?$search=blue</Input>
testUri.run("ESTwoKeyNav", "$search=blue");
// <TestCase Name="5.1.7 Search - on entity container" Rule="odataUri">
// <Input>http://serviceRoot/Model.Container/$all?$search=blue</Input>
testUri.run("$all", "$search=blue");
// <TestCase Name="5.1.7 Search - on service" Rule="odataUri">
// <Input>http://serviceRoot/$all?$search=blue</Input>
testUri.run("$all", "$search=blue");
}
@Test
public void errors() {
testUri.runEx("FICRTString(wrong1='ABC')/olingo.odata.test1.BFCStringRTESTwoKeyNav()")
.isExSemantic(MessageKeys.FUNCTION_NOT_FOUND);
testUri.runEx("FICRTString(wrong1='ABC',wrong2=1)/olingo.odata.test1.BFCStringRTESTwoKeyNav()")
.isExSemantic(MessageKeys.FUNCTION_NOT_FOUND);
// type filter for entity incompatible
testUri.runEx("ESTwoKeyNav(PropertyInt16=1,PropertyString='2')/olingo.odata.test1.ETBase")
.isExSemantic(MessageKeys.INCOMPATIBLE_TYPE_FILTER);
// type filter for entity double on entry
testUri.runEx("ESTwoKeyNav(PropertyInt16=1,PropertyString='2')"
+ "/olingo.odata.test1.ETBaseTwoKeyNav/olingo.odata.test1.ETBaseTwoKeyNav")
.isExSemantic(MessageKeys.TYPE_FILTER_NOT_CHAINABLE);
// type filter for entity double on collection
testUri.runEx("ESTwoKeyNav/olingo.odata.test1.ETBaseTwoKeyNav/olingo.odata.test1.ETBaseTwoKeyNav")
.isExSemantic(MessageKeys.TYPE_FILTER_NOT_CHAINABLE);
// type filter for entity double on non key pred
testUri.runEx("SINav/olingo.odata.test1.ETBaseTwoKeyNav/olingo.odata.test1.ETBaseTwoKeyNav")
.isExSemantic(MessageKeys.TYPE_FILTER_NOT_CHAINABLE);
// type filter for complex incompatible
testUri.runEx("ESTwoKeyNav(PropertyInt16=1,PropertyString='2')/PropertyCompTwoPrim"
+ "/olingo.odata.test1.CTCollAllPrim")
.isExSemantic(MessageKeys.INCOMPATIBLE_TYPE_FILTER);
// type filter for complex double on entry
testUri.runEx("FICRTCTTwoPrimTwoParam(ParameterInt16=1,ParameterString='2')"
+ "/olingo.odata.test1.CTBase/olingo.odata.test1.CTBase")
.isExSemantic(MessageKeys.TYPE_FILTER_NOT_CHAINABLE);
// type filter for complex double on collection
testUri.runEx("FICRTCollCTTwoPrimTwoParam(ParameterInt16=1,ParameterString='2')"
+ "/olingo.odata.test1.CTBase/olingo.odata.test1.CTBase")
.isExSemantic(MessageKeys.TYPE_FILTER_NOT_CHAINABLE);
// type filter for complex double on non key pred
testUri.runEx("ESTwoKeyNav(PropertyInt16=1,PropertyString='2')/PropertyCompTwoPrim"
+ "/olingo.odata.test1.CTBase/olingo.odata.test1.CTBase")
.isExSemantic(MessageKeys.TYPE_FILTER_NOT_CHAINABLE);
testUri.runEx("ESTwoKeyNav/olingo.odata.test1.BFCESTwoKeyNavRTESTwoKeyNav")
.isExSemantic(MessageKeys.UNKNOWN_TYPE);
// $ref
testUri.runEx("ESTwoKeyNav(PropertyInt16=1,PropertyString='2')/PropertyCompTwoPrim/$ref")
.isExSemantic(MessageKeys.ONLY_FOR_ENTITY_TYPES);
testUri.runEx("ESTwoKeyNav(PropertyInt16=1,PropertyString='2')/PropertyCompTwoPrim/$count")
.isExSemantic(MessageKeys.ONLY_FOR_COLLECTIONS);
// Actions must not be followed by anything.
testUri.runEx(ContainerProvider.AIRT_STRING + "/$value")
.isExValidation(UriValidationException.MessageKeys.UNALLOWED_RESOURCE_PATH);
testUri.runEx(ContainerProvider.AIRTCT_TWO_PRIM_PARAM + "/PropertyInt16")
.isExValidation(UriValidationException.MessageKeys.UNALLOWED_RESOURCE_PATH);
testUri.runEx("ESTwoKeyNav(PropertyInt16=1,PropertyString='2')/"
+ "olingo.odata.test1.BAETTwoKeyNavRTETTwoKeyNav/olingo.odata.test1.ETTwoKeyNav")
.isExValidation(UriValidationException.MessageKeys.UNALLOWED_RESOURCE_PATH);
testUri.runEx("ESTwoKeyNav/olingo.odata.test1.BAESTwoKeyNavRTESTwoKeyNav/$count")
.isExValidation(UriValidationException.MessageKeys.UNALLOWED_RESOURCE_PATH);
}
@Test
public void doublePercentDecoding() throws Exception {
testUri.runEx("ESAllPrim%252832767%29").isExSyntax(UriParserSyntaxException.MessageKeys.SYNTAX);
}
@Test
public void multipleKeysInResourcePath() throws Exception {
// See OLINGO-730
testUri.runEx("ESAllPrim(32767)(1)(2)").isExSyntax(UriParserSyntaxException.MessageKeys.SYNTAX);
}
@Test
public void simpleKeyInExpandSystemQueryOption() throws Exception {
testUri.runEx("ESAllPrim(0)", "$expand=NavPropertyETTwoPrimMany(-365)($filter=PropertyString eq 'Test String1')")
.isExSyntax(UriParserSyntaxException.MessageKeys.SYNTAX);
}
@Test
public void compoundKeyInExpandSystemQueryOption() throws Exception {
testUri.runEx("ESAllPrim(0)", "$expand=NavPropertyETTwoPrimMany(PropertyInt16=1,PropertyString=2)"
+ "($filter=PropertyString eq 'Test String1')")
.isExSyntax(UriParserSyntaxException.MessageKeys.SYNTAX);
}
@Test
public void keyPredicatesInExpandFilter() throws Exception {
testUri.run("ESKeyNav(0)", "$expand=NavPropertyETTwoKeyNavMany($filter=NavPropertyETTwoKeyNavMany"
+ "(PropertyInt16=1,PropertyString='2')/PropertyInt16 eq 1)").goExpand()
.first().goPath().isNavProperty("NavPropertyETTwoKeyNavMany", EntityTypeProvider.nameETTwoKeyNav, true)
.goUpExpandValidator().goFilter()
.is("<<NavPropertyETTwoKeyNavMany/PropertyInt16> eq <1>>");
}
@Test
public void keyPredicatesInDoubleExpandedFilter() throws Exception {
testUri.run("ESKeyNav(0)", "$expand=NavPropertyETTwoKeyNavMany($expand=NavPropertyETTwoKeyNavMany"
+ "($filter=NavPropertyETTwoKeyNavMany(PropertyInt16=1,PropertyString='2')/PropertyInt16 eq 1))")
.goExpand()
.first().goPath().isNavProperty("NavPropertyETTwoKeyNavMany", EntityTypeProvider.nameETTwoKeyNav, true)
.goUpExpandValidator().goExpand()
.first().goPath().isNavProperty("NavPropertyETTwoKeyNavMany", EntityTypeProvider.nameETTwoKeyNav, true)
.goUpExpandValidator().goFilter()
.is("<<NavPropertyETTwoKeyNavMany/PropertyInt16> eq <1>>");
}
@Test
public void filterSystemQueryOptionManyWithKeyAny() throws Exception {
testFilter.runUriEx("ESAllPrim", "$filter=NavPropertyETTwoPrimMany(1)/any(d:d/PropertyInt16 eq 0)")
.isExSemantic(MessageKeys.EXPRESSION_PROPERTY_NOT_IN_TYPE);
}
@Test
public void filterSystemQueryOptionManyWithKeyAll() throws Exception {
testFilter.runUriEx("ESAllPrim", "$filter=NavPropertyETTwoPrimMany(1)/all(d:d/PropertyInt16 eq 0)")
.isExSemantic(MessageKeys.EXPRESSION_PROPERTY_NOT_IN_TYPE);
}
@Test
public void navigationPropertyWithCount() throws Exception {
testUri.run("ESKeyNav(1)/NavPropertyETTwoKeyNavMany/$count")
.goPath().at(0).isEntitySet("ESKeyNav").isKeyPredicate(0, "PropertyInt16", "1")
.at(1).isNavProperty("NavPropertyETTwoKeyNavMany", EntityTypeProvider.nameETTwoKeyNav, true)
.at(2).isCount();
}
@Test
public void navigationWithMoreThanOneKey() throws Exception {
testUri.runEx("ESKeyNav(1)/NavPropertyETTwoKeyNavMany(PropertyInt16=1,PropertyString='2')"
+ "(PropertyInt16=1,PropertyString='2')")
.isExSyntax(UriParserSyntaxException.MessageKeys.SYNTAX);
}
@Test
public void startElementsInsteadOfNavigationProperties() {
testUri.runEx("ESAllPrim(0)/ESAllPrim(0)/ESAllPrim(0)").isExSemantic(MessageKeys.PROPERTY_NOT_IN_TYPE);
testUri.runEx("ESAllPrim(0)/SINav").isExSemantic(MessageKeys.PROPERTY_NOT_IN_TYPE);
testUri.runEx("ESAllPrim(0)/FICRTString()").isExSemantic(MessageKeys.PROPERTY_NOT_IN_TYPE);
testUri.runEx("ESAllPrim(0)/AIRTString").isExSemantic(MessageKeys.PROPERTY_NOT_IN_TYPE);
testUri.runEx("SI/ESAllPrim(0)").isExSemantic(MessageKeys.PROPERTY_NOT_IN_TYPE);
testUri.runEx("SI/SINav").isExSemantic(MessageKeys.PROPERTY_NOT_IN_TYPE);
testUri.runEx("SI/FICRTString()").isExSemantic(MessageKeys.PROPERTY_NOT_IN_TYPE);
testUri.runEx("SI/AIRTString").isExSemantic(MessageKeys.PROPERTY_NOT_IN_TYPE);
testUri.runEx("FICRTETKeyNav()/ESAllPrim(0)").isExSemantic(MessageKeys.PROPERTY_NOT_IN_TYPE);
testUri.runEx("FICRTETKeyNav()/SINav").isExSemantic(MessageKeys.PROPERTY_NOT_IN_TYPE);
testUri.runEx("FICRTETKeyNav()/FICRTString()").isExSemantic(MessageKeys.PROPERTY_NOT_IN_TYPE);
testUri.runEx("FICRTETKeyNav()/AIRTString").isExSemantic(MessageKeys.PROPERTY_NOT_IN_TYPE);
testUri.runEx("AIRTESAllPrimParam/ESAllPrim(0)")
.isExValidation(UriValidationException.MessageKeys.UNALLOWED_RESOURCE_PATH);
testUri.runEx("AIRTESAllPrimParam/SINav")
.isExValidation(UriValidationException.MessageKeys.UNALLOWED_RESOURCE_PATH);
testUri.runEx("AIRTESAllPrimParam/FICRTString()")
.isExValidation(UriValidationException.MessageKeys.UNALLOWED_RESOURCE_PATH);
testUri.runEx("AIRTESAllPrimParam/AIRTString")
.isExValidation(UriValidationException.MessageKeys.UNALLOWED_RESOURCE_PATH);
}
@Test
public void invalidTypeCast() {
testUri.runEx("ESAllPrim/namespace.Invalid").isExSemantic(MessageKeys.UNKNOWN_TYPE);
testUri.runEx("ESAllPrim(0)/namespace.Invalid").isExSemantic(MessageKeys.UNKNOWN_TYPE);
}
@Test
public void firstResourcePathWithNamespace() {
testUri.runEx("olingo.odata.test1.ESAllPrim").isExSemantic(MessageKeys.NAMESPACE_NOT_ALLOWED_AT_FIRST_ELEMENT);
testUri.runEx("olingo.odata.test1.ESAllPrim(0)").isExSemantic(MessageKeys.NAMESPACE_NOT_ALLOWED_AT_FIRST_ELEMENT);
testUri.runEx("olingo.odata.test1.FINRTInt16()").isExSemantic(MessageKeys.NAMESPACE_NOT_ALLOWED_AT_FIRST_ELEMENT);
testUri.runEx("olingo.odata.test1.AIRTString").isExSemantic(MessageKeys.NAMESPACE_NOT_ALLOWED_AT_FIRST_ELEMENT);
testUri.runEx("olingo.odata.test1.SINav").isExSemantic(MessageKeys.NAMESPACE_NOT_ALLOWED_AT_FIRST_ELEMENT);
}
@Test
public void filterLiteralTypes() throws Exception {
testFilter.runOnETAllPrim("-1000 eq 42")
.isBinary(BinaryOperatorKind.EQ)
.left().isLiteral("-1000").isLiteralType(oData.createPrimitiveTypeInstance(EdmPrimitiveTypeKind.Int16))
.root()
.right().isLiteral("42").isLiteralType(oData.createPrimitiveTypeInstance(EdmPrimitiveTypeKind.SByte));
testFilter.runOnETAllPrim("127 eq 128")
.isBinary(BinaryOperatorKind.EQ)
.left().isLiteral("127").isLiteralType(oData.createPrimitiveTypeInstance(EdmPrimitiveTypeKind.SByte))
.root()
.right().isLiteral("128").isLiteralType(oData.createPrimitiveTypeInstance(EdmPrimitiveTypeKind.Byte));
testFilter.runOnETAllPrim("null eq 42.1")
.isBinary(BinaryOperatorKind.EQ)
.left().isLiteral("null").isLiteralType(null)
.root()
.right().isLiteral("42.1").isLiteralType(oData.createPrimitiveTypeInstance(EdmPrimitiveTypeKind.Decimal));
testFilter.runOnETAllPrim("15.6E300 eq 3.4E37")
.isBinary(BinaryOperatorKind.EQ)
.left().isLiteral("15.6E300")
.isLiteralType(oData.createPrimitiveTypeInstance(EdmPrimitiveTypeKind.Double))
.root()
.right().isLiteral("3.4E37").isLiteralType(oData.createPrimitiveTypeInstance(EdmPrimitiveTypeKind.Double));
testFilter.runOnETAllPrim("15.55555555555555555555555555555555555555555555 eq -12345678901234567890")
.isBinary(BinaryOperatorKind.EQ)
.left().isLiteral("15.55555555555555555555555555555555555555555555")
.isLiteralType(oData.createPrimitiveTypeInstance(EdmPrimitiveTypeKind.Decimal))
.root()
.right().isLiteral("-12345678901234567890")
.isLiteralType(oData.createPrimitiveTypeInstance(EdmPrimitiveTypeKind.Decimal));
testFilter.runOnETAllPrim("duration'PT1H2S' eq duration'PT3602S'")
.isBinary(BinaryOperatorKind.EQ)
.left().isLiteral("duration'PT1H2S'")
.isLiteralType(oData.createPrimitiveTypeInstance(EdmPrimitiveTypeKind.Duration))
.root()
.right().isLiteral("duration'PT3602S'")
.isLiteralType(oData.createPrimitiveTypeInstance(EdmPrimitiveTypeKind.Duration));
testFilter.runOnETAllPrim("2013-11-02 ne 2012-12-03")
.isBinary(BinaryOperatorKind.NE)
.left().isLiteral("2013-11-02").isLiteralType(oData.createPrimitiveTypeInstance(EdmPrimitiveTypeKind.Date))
.root()
.right().isLiteral("2012-12-03").isLiteralType(oData.createPrimitiveTypeInstance(EdmPrimitiveTypeKind.Date));
testFilter.runOnETAllPrim("null eq 2012-12-03T07:16:23Z")
.isBinary(BinaryOperatorKind.EQ)
.left().isLiteral("null")
.isLiteralType(null)
.root()
.right().isLiteral("2012-12-03T07:16:23Z")
.isLiteralType(oData.createPrimitiveTypeInstance(EdmPrimitiveTypeKind.DateTimeOffset));
testFilter.runOnETAllPrim("07:59:59.999 eq null")
.isBinary(BinaryOperatorKind.EQ)
.left().isLiteral("07:59:59.999")
.isLiteralType(oData.createPrimitiveTypeInstance(EdmPrimitiveTypeKind.TimeOfDay))
.root()
.right().isLiteral("null").isLiteralType(null);
testFilter.runOnETAllPrim("null eq 01234567-89ab-cdef-0123-456789abcdef")
.isBinary(BinaryOperatorKind.EQ)
.left().isLiteral("null").isLiteralType(null)
.root()
.right().isLiteral("01234567-89ab-cdef-0123-456789abcdef")
.isLiteralType(oData.createPrimitiveTypeInstance(EdmPrimitiveTypeKind.Guid));
testFilter.runOnETAllPrim("binary'VGVzdA==' eq null")
.isBinary(BinaryOperatorKind.EQ)
.left().isLiteral("binary'VGVzdA=='").isLiteralType(
oData.createPrimitiveTypeInstance(EdmPrimitiveTypeKind.Binary))
.root()
.right().isLiteral("null").isLiteralType(null);
testFilter.runOnETAllPrim(Short.MIN_VALUE + " eq " + Short.MAX_VALUE)
.isBinary(BinaryOperatorKind.EQ)
.left().isLiteral(Short.toString(Short.MIN_VALUE))
.isLiteralType(oData.createPrimitiveTypeInstance(EdmPrimitiveTypeKind.Int16))
.root()
.right().isLiteral(Short.toString(Short.MAX_VALUE))
.isLiteralType(oData.createPrimitiveTypeInstance(EdmPrimitiveTypeKind.Int16));
testFilter.runOnETAllPrim(Integer.MIN_VALUE + " eq " + Integer.MAX_VALUE)
.isBinary(BinaryOperatorKind.EQ)
.left().isLiteral(Integer.toString(Integer.MIN_VALUE))
.isLiteralType(oData.createPrimitiveTypeInstance(EdmPrimitiveTypeKind.Int32))
.root()
.right().isLiteral(Integer.toString(Integer.MAX_VALUE))
.isLiteralType(oData.createPrimitiveTypeInstance(EdmPrimitiveTypeKind.Int32));
testFilter.runOnETAllPrim(Long.MIN_VALUE + " eq " + Long.MAX_VALUE)
.isBinary(BinaryOperatorKind.EQ)
.left().isLiteral(Long.toString(Long.MIN_VALUE))
.isLiteralType(oData.createPrimitiveTypeInstance(EdmPrimitiveTypeKind.Int64))
.root()
.right().isLiteral(Long.toString(Long.MAX_VALUE))
.isLiteralType(oData.createPrimitiveTypeInstance(EdmPrimitiveTypeKind.Int64));
}
@Test
public void alias() throws Exception {
testUri.run("ESTwoKeyNav(PropertyInt16=1,PropertyString=@A)", "@A='2'").goPath()
.isKeyPredicate(0, "PropertyInt16", "1")
.isKeyPredicateAlias(1, "PropertyString", "@A")
.goUpUriValidator().isInAliasToValueMap("@A", "'2'");
testUri.run("ESAllPrim(PropertyInt16=@p1)", "@p1=1").goPath()
.isKeyPredicateAlias(0, "PropertyInt16", "@p1")
.goUpUriValidator().isInAliasToValueMap("@p1", "1");
testUri.run("ESAllPrim(@p1)", "@p1=-2").goPath()
.isKeyPredicateAlias(0, "PropertyInt16", "@p1")
.goUpUriValidator().isInAliasToValueMap("@p1", "-2");
testFilter.runOnETAllPrim("PropertyInt16 gt @alias&@alias=1")
.right().isAlias("@alias");
testFilter.runOnETAllPrim("@alias&@alias=@otherAlias&@otherAlias=true")
.isAlias("@alias");
testUri.runEx("ESAllPrim(@p1)")
.isExValidation(UriValidationException.MessageKeys.MISSING_ALIAS);
testUri.runEx("ESAllPrim(PropertyInt16=@p1)", "@p1='ewe'").isExSemantic(MessageKeys.UNKNOWN_PART);
testUri.runEx("ESAllPrim(PropertyInt16=@p1)", "@p1='ewe")
.isExSyntax(UriParserSyntaxException.MessageKeys.SYNTAX);
testFilter.runOnETKeyNavEx("PropertyInt16 gt @alias")
.isInAliasToValueMap("@alias", null);
testFilter.runOnETKeyNavEx("PropertyInt16 gt @alias&@alias=@alias")
.isInAliasToValueMap("@alias", "@alias");
testFilter.runOnETKeyNavEx("@alias&@alias=@alias2&@alias2=true or @alias")
.isInAliasToValueMap("@alias", "@alias2");
}
@Test
public void functionImportParameterAlias() throws Exception {
testUri.run("FICRTCollESTwoKeyNavParam(ParameterInt16=@parameterAlias)", "@parameterAlias=1");
testUri.run("FICRTCollESTwoKeyNavParam(ParameterInt16=@parameterAlias)/$count", "@parameterAlias=1");
testUri.runEx("FICRTCollESTwoKeyNavParam(ParameterInt16=@invalidAlias)", "@validAlias=1")
.isExValidation(UriValidationException.MessageKeys.MISSING_ALIAS);
}
@Test
public void functionsWithComplexParameters() throws Exception {
testUri.run("ESTwoKeyNav/olingo.odata.test1.BFCESTwoKeyNavRTStringParam"
+ "(ParameterComp=@p1)", "@p1={\"PropertyInt16\":1,\"PropertyString\":\"1\"}")
.goPath()
.at(0).isEntitySet("ESTwoKeyNav")
.at(1).isFunction("BFCESTwoKeyNavRTStringParam").isParameterAlias(0, "ParameterComp", "@p1")
.goUpUriValidator().isInAliasToValueMap("@p1", "{\"PropertyInt16\":1,\"PropertyString\":\"1\"}");
// Test JSON String lexer rule =\"3,Int16=abc},\\\nabc&test%test\b\f\r\t\u0022\\}\\{\\)\\(\\]\\[}
final String stringValueEncoded = "=\\\"3,Int16=abc},\\\\\\nabc%26test%25test\\b\\f\\r\\t\\u0022\\\\}\\\\{\\\\)"
+ "\\\\(\\\\]\\\\[}";
final String stringValueDecoded = "=\\\"3,Int16=abc},\\\\\\nabc&test%test\\b\\f\\r\\t\\u0022\\\\}\\\\{\\\\)"
+ "\\\\(\\\\]\\\\[}";
testUri.run("ESTwoKeyNav/olingo.odata.test1.BFCESTwoKeyNavRTStringParam"
+ "(ParameterComp=@p1)", "@p1={\"PropertyInt16\":1,\"PropertyString\":\"" + stringValueEncoded + "\"}")
.goPath()
.at(0).isEntitySet("ESTwoKeyNav")
.at(1).isFunction("BFCESTwoKeyNavRTStringParam").isParameterAlias(0, "ParameterComp", "@p1")
.goUpUriValidator()
.isInAliasToValueMap("@p1", "{\"PropertyInt16\":1,\"PropertyString\":\"" + stringValueDecoded + "\"}");
testFilter.runOnETTwoKeyNav("olingo.odata.test1.BFCESTwoKeyNavRTStringParam"
+ "(ParameterComp={\"PropertyString\":\"Test\",\"PropertyInt16\":1}) eq 'Test'")
.is("<<BFCESTwoKeyNavRTStringParam> eq <'Test'>>")
.isBinary(BinaryOperatorKind.EQ)
.left().isParameterText(0, "{\"PropertyString\":\"Test\",\"PropertyInt16\":1}");
testFilter.runOnETTwoKeyNav("olingo.odata.test1.BFCESTwoKeyNavRTStringParam"
+ "(ParameterComp={\"PropertyString\":\"" + stringValueEncoded + "\",\"PropertyInt16\":1}) eq 'Test'")
.is("<<BFCESTwoKeyNavRTStringParam> eq <'Test'>>")
.left().isParameterText(0, "{\"PropertyString\":\"" + stringValueDecoded + "\",\"PropertyInt16\":1}");
testUri.run("ESTwoKeyNav", "$filter=olingo.odata.test1.BFCESTwoKeyNavRTStringParam"
+ "(ParameterComp=@p1) eq '0'&@p1={\"PropertyInt16\":1,\"PropertyString\":\"1\"}");
testUri.run("ESTwoKeyNav", "$filter=olingo.odata.test1.BFCESTwoKeyNavRTStringParam"
+ "(ParameterComp=@p1) eq '0'&@p1={\"PropertyInt16\":1,\"PropertyString\":null}")
.goFilter().left().isParameterText(0, null);
testUri.run("ESTwoKeyNav", "$filter=olingo.odata.test1.BFCESTwoKeyNavRTStringParam"
+ "(ParameterComp=@p1) eq '0'&@p1={}");
testUri.run("ESTwoKeyNav", "$filter=olingo.odata.test1.BFCESTwoKeyNavRTStringParam"
+ "(ParameterComp=@p1) eq '0'&@p1={\"PropertyInt16\":[1,2,3],\"PropertyString\":\"1\"}");
testUri.run("ESTwoKeyNav", "$filter=olingo.odata.test1.BFCESTwoKeyNavRTStringParam"
+ "(ParameterComp=@p1) eq '0'&@p1={\"PropertyInt16\":[\"1\",\"2\",\"3\"],\"PropertyString\":\"1\"}");
testUri.run("ESTwoKeyNav", "$filter=olingo.odata.test1.BFCESTwoKeyNavRTStringParam"
+ "(ParameterComp=@p1) eq '0'&@p1={\"PropertyInt16\":[{\"Prop1\":123,\"Prop2\":\"Test\",\"Prop3\":[1,2,3]},"
+ "{\"Prop1\":{\"Prop1\":[\"Prop\\\":{]\"]}}],\"PropertyString\":\"1\"}");
testUri.run("FINRTByteNineParam(ParameterEnum=null,ParameterDef='x',ParameterComp=@c,"
+ "ParameterETTwoPrim=@c,CollParameterByte=@e,CollParameterEnum=@e,CollParameterDef=@e,"
+ "CollParameterComp=@e,CollParameterETTwoPrim=@e)",
"@c={}&@e=[]");
testUri.runEx("ESTwoKeyNav/olingo.odata.test1.BFCESTwoKeyNavRTStringParam"
+ "(ParameterComp=@p1)", "@p1={\"PropertyInt16\":1,\"PropertyString\":'1'}")
.isExSyntax(UriParserSyntaxException.MessageKeys.SYNTAX);
testUri.runEx("ESTwoKeyNav/olingo.odata.test1.BFCESTwoKeyNavRTStringParam"
+ "(ParameterComp={\"PropertyInt16\":1,\"PropertyString\":\"Test\"})")
.isExSemantic(MessageKeys.COMPLEX_PARAMETER_IN_RESOURCE_PATH);
testUri.runEx("FICRTCTTwoPrimTwoParam(ParameterInt16=1,ParameterString=null)")
.isExValidation(UriValidationException.MessageKeys.MISSING_PARAMETER);
testUri.runEx("FICRTCTTwoPrimTwoParam(ParameterInt16=1,ParameterString=@test)")
.isExValidation(UriValidationException.MessageKeys.MISSING_ALIAS);
testUri.runEx("FICRTCTTwoPrimTwoParam(ParameterInt16=1,ParameterString=@test)", "@test=null")
.isExValidation(UriValidationException.MessageKeys.MISSING_ALIAS);
testUri.run("FICRTCTTwoPrimTwoParam(ParameterInt16=1,ParameterString=@test)", "@test='null'");
testUri.runEx("FICRTCTTwoPrimTwoParam(ParameterInt16=1,ParameterString=@test,UnknownParam=1)", "@test='null'")
.isExSemantic(MessageKeys.FUNCTION_NOT_FOUND);
testUri.run("FICRTCollCTTwoPrimTwoParam(ParameterInt16=1,ParameterString=@test)", "@test='null'");
testUri.run("FICRTCollCTTwoPrimTwoParam(ParameterInt16=1,ParameterString=@test)", "@test=null");
testUri.run("FICRTCollCTTwoPrimTwoParam(ParameterInt16=1,ParameterString=@test)");
testUri.run("FICRTCollCTTwoPrimTwoParam(ParameterInt16=1,ParameterString=null)");
testUri.runEx("FICRTCollCTTwoPrimTwoParam(ParameterInt16=1,ParameterString=@test)", "@test=null&@test='1'")
.isExSyntax(UriParserSyntaxException.MessageKeys.DUPLICATED_ALIAS);
testFilter.runOnETKeyNavEx("FINRTInt16() eq 0")
.isExSemantic(MessageKeys.EXPRESSION_PROPERTY_NOT_IN_TYPE);
testUri.runEx("ESTwoKeyNav", "$filter=olingo.odata.test1.BFCESTwoKeyNavRTStringParam"
+ "(ParameterComp=@p1) eq '0'&@p1={\"PropertyInt16\":1,\"PropertyString\":\"1\"")
.isExSyntax(UriParserSyntaxException.MessageKeys.SYNTAX);
testUri.runEx("ESTwoKeyNav", "$filter=olingo.odata.test1.BFCESTwoKeyNavRTStringParam"
+ "(ParameterComp=@p1) eq '0'&@p1={\"PropertyInt16\":1,\"PropertyString\":\"1\"}}")
.isExSemantic(MessageKeys.UNKNOWN_PART);
testUri.runEx("ESTwoKeyNav", "$filter=olingo.odata.test1.BFCESTwoKeyNavRTStringParam"
+ "(ParameterComp=@p1) eq '0'&@p1={\"PropertyInt16\":[1,2,3]],\"PropertyString\":\"1\"}")
.isExSyntax(UriParserSyntaxException.MessageKeys.SYNTAX);
testUri.runEx("ESTwoKeyNav", "$filter=olingo.odata.test1.BFCESTwoKeyNavRTStringParam"
+ "(ParameterComp=@p1) eq '0'&@p1={\"PropertyInt16\":[1,2,3,\"PropertyString\":\"1\"}")
.isExSyntax(UriParserSyntaxException.MessageKeys.SYNTAX);
testUri.runEx("ESTwoKeyNav", "$filter=olingo.odata.test1.BFCESTwoKeyNavRTStringParam"
+ "(ParameterComp=@p1) eq '0'&@p1={\"PropertyInt16\":[1,2,3},\"PropertyString\":\"1\"}")
.isExSyntax(UriParserSyntaxException.MessageKeys.SYNTAX);
}
@Test
public void keyPredicatesInExpressions() throws Exception {
testFilter.runOnETTwoKeyNav("NavPropertyETTwoKeyNavMany(PropertyString='1',PropertyInt16=1)"
+ "/PropertyInt16 eq 1");
testUri.runEx("ESTwoKeyNav", "$filter=NavPropertyETTwoKeyNavMany(Prop='22',P=2)/PropertyInt16 eq 0")
.isExValidation(UriValidationException.MessageKeys.INVALID_KEY_PROPERTY);
}
}