apg-js-examples
Version:
Examples of using the suite of apg-js applications and libraries.
1,160 lines (1,143 loc) • 132 kB
text/xml
<?xml version="1.0" encoding="UTF-8"?>
<!--
OData ABNF Test Cases Version 4.01 and 4.0
17 September 2020
Technical Committee:
OASIS Open Data Protocol (OData) TC
https://www.oasis-open.org/committees/odata
Chairs:
- Ralf Handl (ralf.handl@sap.com), SAP SE
- Michael Pizzo (mikep@microsoft.com), Microsoft
Editors:
- Ralf Handl (ralf.handl@sap.com), SAP SE
- Michael Pizzo (mikep@microsoft.com), Microsoft
- Martin Zurmuehl (martin.zurmuehl@sap.com), SAP SE
Additional artifacts:
This test case document is one component of a Work Product which consists of:
- OData Version 4.01 Part 1: Protocol
- OData Version 4.01 Part 2: URL Conventions
- OData ABNF Construction Rules Version 4.01
- OData ABNF Test Cases Version 4.01 (this document)
Related work:
This specification replaces or supersedes:
- OData ABNF Test Cases Version 4.0
This work product is related to
- OData Common Schema Definition Language (CSDL) JSON Representation Version 4.01
- OData Common Schema Definition Language (CSDL) XML Representation Version 4.01
- OData JSON Format Version 4.01
Abstract:
The Open Data Protocol (OData) enables the creation of REST-based data
services, which allow resources, identified using Uniform Resource
Identifiers (URLs) and defined in a data model, to be published and
edited by Web clients using simple HTTP messages. This document defines
the URL syntax for requests and the serialization format for primitive
literals in request and response payloads.
Overview:
This document contains positive and negative test cases for the
OData ABNF Construction Rules Version 4.01.
Positive test cases consist of the rule to test, the input string to parse,
and a description of the test case, often starting with a section number
referring to OData Version 4.01 Part 2: URL Conventions.
Negative test cases in addition state the character position at which the
invalid portion of input text starts, 0 meaning the whole input string.
These test cases can be automatically executed with the ABNF test tool
available at https://github.com/SAP/abnf-test-tool.
This tool is neither required for interpreting the test cases, nor is it
part of the OData work product.
-->
<TestSuite MaxUncoveredRules="80" xmlns="http://docs.oasis-open.org/odata/ns/testcases">
<!--
This document contains positive and negative test cases for the
OData ABNF Construction Rules Version 4.01.
Positive test cases consist of the rule to test, the input string to parse,
and a description of the test case, often starting with a section number
referring to OData Version 4.01 Part 2: URL Conventions.
Negative test cases in addition state the character position at which the
invalid portion of input text starts, 0 meaning the whole input string.
These test cases can be automatically executed with the ABNF test tool
available at https://github.com/SAP/abnf-test-tool.
This tool is neither required for interpreting the test cases, nor is it
part of the OData work product.
-->
<DisableTrace Rule="odataIdentifier" />
<DisableTrace Rule="identifierLeadingCharacter" />
<DisableTrace Rule="identifierCharacter" />
<DisableTrace Rule="ALPHA" />
<DisableTrace Rule="DIGIT" />
<DisableTrace Rule="unreserved" />
<!-- constraints needed only for rule alternatives added by data aggregation -->
<Constraint Rule="customAggregate" />
<Constraint Rule="expressionAlias" />
<!-- end of constraints for data aggregation -->
<Constraint Rule="action">
<Match>ActionName</Match>
<Match>Cluster</Match>
<Match>Discount</Match>
<Match>Rejection</Match>
</Constraint>
<Constraint Rule="actionImport">
<Match>Activation</Match>
</Constraint>
<Constraint Rule="complexAnnotationInQuery">
<Match>@Core.Messages</Match>
<Match>@Namespace.SomeTerm</Match>
</Constraint>
<Constraint Rule="complexColProperty">
<Match>Addresses</Match>
<Match>_at_Core_dot_Messages</Match>
</Constraint>
<Constraint Rule="complexColFunction">
<Match>MostPopularAddresses</Match>
</Constraint>
<Constraint Rule="complexColFunctionImport">
<Match>TheMostPopularAddresses</Match>
</Constraint>
<Constraint Rule="complexFunction">
<Match>MostPopularAddress</Match>
</Constraint>
<Constraint Rule="complexFunctionImport">
<Match>TheMostPopularAddress</Match>
</Constraint>
<Constraint Rule="complexProperty">
<Match>Address</Match>
</Constraint>
<Constraint Rule="complexTypeName">
<Match>Address</Match>
<Match>AddressWithLocation</Match>
</Constraint>
<Constraint Rule="customName">
<Match>!deltatoken</Match>
<Match>!special</Match>
<Match>find</Match>
</Constraint>
<Constraint Rule="entityAnnotationInFragment">
<Match>@Namespace.EntityTerm</Match>
</Constraint>
<Constraint Rule="entityColFunction">
<Match>AllOrders</Match>
<Match>ProductsByColor</Match>
<Match>WithIngredients</Match>
</Constraint>
<Constraint Rule="entityColFunctionImport">
<Match>AllProductsByColor</Match>
<Match>AllProductsByCategoryId</Match>
<Match>EmployeesByManager</Match>
<Match>ProductsByCategoryId</Match>
<Match>ProductsByColor</Match>
<Match>ProductsByComplex</Match>
<Match>ProductsByCustomer</Match>
<Match>ProductsOrderedBy</Match>
</Constraint>
<Constraint Rule="entityColNavigationProperty">
<Match>DirectReports</Match>
<Match>Items</Match>
<Match>Orders</Match>
<Match>Products</Match>
<Match>Sales</Match>
</Constraint>
<Constraint Rule="entityFunction">
<Match>BestProduct</Match>
<Match>MostExpensive</Match>
</Constraint>
<Constraint Rule="entityFunctionImport">
<Match>TheBestProduct</Match>
</Constraint>
<Constraint Rule="entityNavigationProperty">
<Match>Category</Match>
<Match>Continent</Match>
<Match>Country</Match>
<Match>Countries</Match>
<Match>CountrySet</Match>
<Match>Currency</Match>
<Match>Customer</Match>
<Match>Customers</Match>
<Match>Manager</Match>
<Match>Product</Match>
<Match>ProductGroup</Match>
<Match>Supplier</Match>
<Match>Time</Match>
</Constraint>
<Constraint Rule="entitySetName">
<Match>Categories</Match>
<Match>Countries</Match>
<Match>Customers</Match>
<Match>Employees</Match>
<Match>LeaveRequests</Match>
<Match>Orders</Match>
<Match>OrderItems</Match>
<Match>People</Match>
<Match>Products</Match>
<Match>Sales</Match>
<Match>SalesOrganizations</Match>
<Match>Suppliers</Match>
</Constraint>
<Constraint Rule="entityTypeName">
<Match>Customer</Match>
<Match>Employee</Match>
<Match>Manager</Match>
<Match>BestSellingProduct</Match>
<Match>PreferredSupplier</Match>
<Match>VipCustomer</Match>
</Constraint>
<Constraint Rule="enumMemberValue">
<Match>32</Match>
</Constraint>
<Constraint Rule="enumerationMember">
<Match>Solid</Match>
<Match>Yellow</Match>
</Constraint>
<Constraint Rule="enumerationTypeName">
<Match>NameKind</Match>
<Match>Pattern</Match>
</Constraint>
<Constraint Rule="keyPathLiteral">
<Match>1</Match>
<Match>2001</Match>
<Match>A1245</Match>
<Match>O'Neil</Match>
<Match>O%27Neil</Match>
<Match>Smartphone%2FTablet</Match>
</Constraint>
<Constraint Rule="keyPropertyAlias">
<Match>KeyAlias</Match>
</Constraint>
<Constraint Rule="lambdaVariableExpr">
<Match>lambda</Match>
<Match>m</Match>
</Constraint>
<Constraint Rule="namespacePart">
<Match>Core</Match>
<Match>Measures</Match>
<Match>Model</Match>
<Match>Namespace</Match>
<Match>odata</Match>
<Match>SaM</Match>
<Match>Sales</Match>
<Match>Special</Match>
</Constraint>
<Constraint Rule="parameterAlias">
<Match>@a</Match>
<Match>@bar</Match>
<Match>@c</Match>
<Match>@cat</Match>
<Match>@categoryId</Match>
<Match>@color</Match>
<Match>@expression</Match>
<Match>@foo</Match>
<Match>@i</Match>
<Match>@key</Match>
<Match>@ManagerID</Match>
<Match>@m</Match>
<Match>@p1</Match>
<Match>@ref</Match>
<Match>@title</Match>
<Match>@word</Match>
</Constraint>
<Constraint Rule="parameterName">
<Match>categoryId</Match>
<Match>color</Match>
<Match>colors</Match>
<Match>customer</Match>
<Match>Customers</Match>
<Match>complex</Match>
<Match>Ingredients</Match>
<Match>Kind</Match>
<Match>Location</Match>
<Match>ManagerID</Match>
<Match>Number</Match>
<Match>Rank</Match>
<Match>Size</Match>
<Match>Word</Match>
<Match>Word1</Match>
<Match>Word2</Match>
</Constraint>
<Constraint Rule="primitiveAnnotationInQuery">
<Match>@Measures.Currency</Match>
</Constraint>
<Constraint Rule="primitiveColAnnotationInQuery">
<Match>@Core.MayImplement</Match>
</Constraint>
<Constraint Rule="primitiveColFunction">
<Match>MostPopularNames</Match>
</Constraint>
<Constraint Rule="primitiveColFunctionImport">
<Match>TheMostPopularNames</Match>
</Constraint>
<Constraint Rule="primitiveColProperty">
<Match>EmailAddresses</Match>
<Match>Names</Match>
<Match>Sizes</Match>
</Constraint>
<Constraint Rule="primitiveFunction">
<Match>Available</Match>
<Match>MostPopularCategory</Match>
<Match>MostPopularName</Match>
<Match>PhoneticallySimilar</Match>
<Match>GeoLocation</Match>
</Constraint>
<Constraint Rule="primitiveFunctionImport">
<Match>TheMostPopularName</Match>
</Constraint>
<Constraint Rule="primitiveKeyProperty">
<Match>Code</Match>
<Match>Date</Match>
<Match>ID</Match>
<Match>ItemID</Match>
<Match>OrderID</Match>
<Match>Size</Match>
</Constraint>
<Constraint Rule="primitiveNonKeyProperty">
<Match>AccountRepresentative</Match>
<Match>Age</Match>
<Match>Amount</Match>
<Match>BirthDate</Match>
<Match>City</Match>
<Match>code</Match>
<Match>CompanyName</Match>
<Match>ContactName</Match>
<Match>Completed</Match>
<Match>Cost</Match>
<Match>CountryCode</Match>
<Match>eyeColor</Match>
<Match>FirstName</Match>
<Match>LastName</Match>
<Match>LifeTime</Match>
<Match>Line</Match>
<Match>Location</Match>
<Match>message</Match>
<Match>Month</Match>
<Match>Name</Match>
<Match>Population</Match>
<Match>Price</Match>
<Match>Quantity</Match>
<Match>Rating</Match>
<Match>ReleaseDate</Match>
<Match>Revenue</Match>
<Match>SalesArea</Match>
<Match>severity</Match>
<Match>Shipped</Match>
<Match>Spokesperson</Match>
<Match>State</Match>
<Match>Status</Match>
<Match>Street</Match>
<Match>style</Match>
<Match>SumAmount</Match>
<Match>TaxRate</Match>
<Match>Title</Match>
<Match>X</Match>
<Match>ZipCode</Match>
</Constraint>
<Constraint Rule="singletonEntity">
<Match>BestProductEverCreated</Match>
<Match>MainSupplier</Match>
<Match>SingletonEntity</Match>
</Constraint>
<Constraint Rule="streamProperty">
<Match>Thumbnail</Match>
</Constraint>
<Constraint Rule="termName">
<Match>AnotherTerm</Match>
<Match>Currency</Match>
<Match>EntityTerm</Match>
<Match>id</Match>
<Match>MayImplement</Match>
<Match>Messages</Match>
<Match>SomeTerm</Match>
<Match>type</Match>
</Constraint>
<Constraint Rule="typeDefinitionName">
<Match>MonetaryAmount</Match>
</Constraint>
<TestCase Name="Just to test the dummy start rule" Rule="dummyStartRule">
<Input>http://services.odata.org/</Input>
</TestCase>
<TestCase Name="URI with IPv4 address, path and trailing slash" Rule="odataUri">
<Input>http://127.0.0.1:8080/MyService/</Input>
</TestCase>
<TestCase Name="URI with IPv6 address, path and trailing slash" Rule="odataUri">
<Input>https://[2001:db8:85a3:8d3:1319:8a2e:370:7348]:8080/MyService/</Input>
</TestCase>
<TestCase Name="URI with IPvFuture address, path and trailing slash" Rule="odataUri">
<Input>https://[v7.0]/MyService/</Input>
</TestCase>
<TestCase Name="URI without schema separator" Rule="odataUri" FailAt="4">
<Input>http//My.Org/</Input>
</TestCase>
<TestCase Name="Binary with X" Rule="binary" FailAt="0">
<Input>X'1a2B3c4D'</Input>
</TestCase>
<TestCase Name="Binary - empty" Rule="binary">
<Input>binary''</Input>
</TestCase>
<TestCase Name="Binary - f" Rule="binary">
<Input>binary'Zg=='</Input>
</TestCase>
<TestCase Name="Binary - f (pad character is optional)" Rule="binary">
<Input>binary'Zg'</Input>
</TestCase>
<TestCase Name="Binary - fo" Rule="binary">
<Input>binary'Zm8='</Input>
</TestCase>
<TestCase Name="Binary - fo (pad character is optional)" Rule="binary">
<Input>binary'Zm8='</Input>
</TestCase>
<TestCase Name="Binary - foo" Rule="binary">
<Input>binary'Zm9v'</Input>
</TestCase>
<TestCase Name="Binary - foob" Rule="binary">
<Input>binary'Zm9vYg=='</Input>
</TestCase>
<TestCase Name="Binary - fooba" Rule="binary">
<Input>binary'Zm9vYmE='</Input>
</TestCase>
<TestCase Name="Binary - foobar" Rule="binary">
<Input>binary'Zm9vYmFy'</Input>
</TestCase>
<TestCase Name="Boolean - true" Rule="booleanValue">
<Input>true</Input>
</TestCase>
<TestCase Name="Boolean - false" Rule="booleanValue">
<Input>false</Input>
</TestCase>
<TestCase Name="Boolean - literals are case-insensitive" Rule="booleanValue">
<Input>tRUe</Input>
</TestCase>
<TestCase Name="Date in URL or body" Rule="dateValue">
<Input>2012-09-03</Input>
</TestCase>
<TestCase Name="Date" Rule="dateValue">
<Input>2012-09-10</Input>
</TestCase>
<TestCase Name="Date" Rule="dateValue">
<Input>2012-09-20</Input>
</TestCase>
<TestCase Name="Date" Rule="dateValue">
<Input>2012-09-03</Input>
</TestCase>
<TestCase Name="Date: year zero" Rule="dateValue">
<Input>0000-01-01</Input>
</TestCase>
<TestCase Name="Date: negative" Rule="dateValue">
<Input>-10000-04-01</Input>
</TestCase>
<TestCase Name="Date: negative Infinity" Rule="dateValue" FailAt="1">
<Input>-INF</Input>
</TestCase>
<TestCase Name="Date: positive Infinity" Rule="dateValue" FailAt="0">
<Input>INF</Input>
</TestCase>
<TestCase Name="DateTimeOffset: no seconds" Rule="dateTimeOffsetValue">
<Input>2012-09-03T13:52Z</Input>
</TestCase>
<TestCase Name="DateTimeOffset: seconds" Rule="dateTimeOffsetValue">
<Input>2012-09-03T22:09:02Z</Input>
</TestCase>
<TestCase Name="DateTimeOffset: leap second" Rule="dateTimeOffsetValue">
<Input>1972-06-30T23:59:60Z</Input>
</TestCase>
<TestCase Name="DateTimeOffset: subseconds" Rule="dateTimeOffsetValue">
<Input>2012-08-31T18:19:22.1Z</Input>
</TestCase>
<TestCase Name="DateTimeOffset: year zero" Rule="dateTimeOffsetValue">
<Input>0000-01-01T00:00Z</Input>
</TestCase>
<TestCase Name="DateTimeOffset: negative" Rule="dateTimeOffsetValue">
<Input>-10000-04-01T00:00Z</Input>
</TestCase>
<TestCase Name="DateTimeOffset: Midnight this day" Rule="dateTimeOffsetValue" FailAt="12">
<Input>2011-12-31T24:00Z</Input>
</TestCase>
<TestCase Name="DateTimeOffset: Midnight this day with seconds" Rule="dateTimeOffsetValue" FailAt="12">
<Input>2011-12-31T24:00:00Z</Input>
</TestCase>
<TestCase Name="DateTimeOffset: CEST" Rule="dateTimeOffsetValue">
<Input>2012-09-03T14:53+02:00</Input>
</TestCase>
<TestCase Name="DateTimeOffset: UTC" Rule="dateTimeOffsetValue">
<Input>2012-09-03T12:53Z</Input>
</TestCase>
<TestCase Name="DateTimeOffset: 24:00" Rule="dateTimeOffsetValue" FailAt="12">
<Input>2012-09-03T24:00-03:00</Input>
</TestCase>
<TestCase Name="DateTimeOffset: negative infinitiy" Rule="dateTimeOffsetValue" FailAt="1">
<Input>-INF</Input>
</TestCase>
<TestCase Name="DateTimeOffset: positive infinitiy" Rule="dateTimeOffsetValue" FailAt="0">
<Input>INF</Input>
</TestCase>
<TestCase Name="DateTimeOffset: no percent-encoding in payloads" Rule="dateTimeOffsetValue" FailAt="13">
<Input>2012-09-03T23%3A59Z</Input>
</TestCase>
<TestCase Name="DateTimeOffset: no percent-encoding in payloads" Rule="dateTimeOffsetValue" FailAt="19">
<Input>2012-09-03T23:59+01%3A00</Input>
</TestCase>
<TestCase Name="DateTimeOffset: with percent-encoding" Rule="dateTimeOffsetValueInUrl">
<Input>2012-09-03T23%3A59+01%3A00</Input>
</TestCase>
<TestCase Name="Decimal" Rule="decimalValue">
<Input>3.14</Input>
</TestCase>
<TestCase Name="Decimal - exponential notation" Rule="decimalValue">
<Input>-1.234567e3</Input>
</TestCase>
<TestCase Name="Decimal - exponential notation" Rule="decimalValue">
<Input>1e-101</Input>
</TestCase>
<TestCase Name="Decimal - negative infinitiy" Rule="decimalValue">
<Input>-INF</Input>
</TestCase>
<TestCase Name="Decimal - positive infinitiy" Rule="decimalValue">
<Input>INF</Input>
</TestCase>
<TestCase Name="Decimal - not a number" Rule="decimalValue">
<Input>NaN</Input>
</TestCase>
<TestCase Name="Duration in body" Rule="durationValue">
<Input>P6DT23H59M59.9999S</Input>
</TestCase>
<TestCase Name="Duration in body: no years allowed" Rule="durationValue" FailAt="2">
<Input>P1Y6DT23H59M59.9999S</Input>
</TestCase>
<TestCase Name="Duration in body: no months allowed" Rule="durationValue" FailAt="2">
<Input>P1M6DT23H59M59.9999S</Input>
</TestCase>
<TestCase Name="Duration in URL" Rule="duration">
<Input>duration'P6DT23H59M59.9999S'</Input>
</TestCase>
<TestCase Name="Duration in URL without prefix" Rule="duration">
<Input>'P6DT23H59M59.9999S'</Input>
</TestCase>
<TestCase Name="Decimal: integer" Rule="decimalValue">
<Input>-2</Input>
</TestCase>
<TestCase Name="Decimal: integer" Rule="decimalValue" FailAt="4">
<Input>+42.</Input>
</TestCase>
<TestCase Name="Decimal: no digit before decimal point" Rule="decimalValue" FailAt="0">
<Input>.1</Input>
</TestCase>
<TestCase Name="Decimal in URL" Rule="decimalValue">
<Input>3.14</Input>
</TestCase>
<TestCase Name="Double" Rule="doubleValue">
<Input>3.14</Input>
</TestCase>
<TestCase Name="Double with exponent" Rule="doubleValue">
<Input>-0.314e1</Input>
</TestCase>
<TestCase Name="Double with at most one exponent" Rule="doubleValue" FailAt="8">
<Input>-0.314e1e2</Input>
</TestCase>
<TestCase Name="Negative infinity" Rule="doubleValue">
<Input>-INF</Input>
</TestCase>
<TestCase Name="Positive infinity" Rule="doubleValue">
<Input>INF</Input>
</TestCase>
<TestCase Name="Not a Number" Rule="doubleValue">
<Input>NaN</Input>
</TestCase>
<TestCase Name="Double in URL" Rule="doubleValue">
<Input>-0.314e1</Input>
</TestCase>
<TestCase Name="Single in URL" Rule="singleValue">
<Input>-0.314e1</Input>
</TestCase>
<TestCase Name="Byte" Rule="byteValue">
<Input>255</Input>
</TestCase>
<TestCase Name="SByte" Rule="sbyteValue">
<Input>-128</Input>
</TestCase>
<TestCase Name="Int16" Rule="int16Value">
<Input>+32000</Input>
</TestCase>
<TestCase Name="Int32" Rule="int32Value">
<Input>-2000000000</Input>
</TestCase>
<TestCase Name="Int64" Rule="int64Value">
<Input>1234567890123456789</Input>
</TestCase>
<TestCase Name="Null: unqualified" Rule="nullValue">
<Input>null</Input>
</TestCase>
<TestCase Name="String" Rule="string">
<Input>'ABCDEFGHIHJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~!$&('')*+,;=:@'</Input>
</TestCase>
<TestCase Name="String" Rule="string">
<Input>'O''Neil'</Input>
</TestCase>
<TestCase Name="String" Rule="string">
<Input>%27O'%27Neil'</Input>
</TestCase>
<TestCase Name="String" Rule="string" FailAt="3">
<Input>'O'Neil'</Input>
</TestCase>
<TestCase Name="String" Rule="string" FailAt="5">
<Input>'O%27Neil'</Input>
</TestCase>
<TestCase Name="String" Rule="string">
<Input>'%26%28'</Input>
</TestCase>
<TestCase Name="primitive value in request body - enumeration member" Rule="primitiveValue">
<Input>Yellow</Input>
</TestCase>
<TestCase Name="primitive value in request body - geo point" Rule="primitiveValue">
<Input>SRID=0;Point(142.1 64.1)</Input>
</TestCase>
<TestCase Name="primitive value in request body - integer" Rule="primitiveValue">
<Input>0123456789</Input>
</TestCase>
<TestCase Name="primitive value in request body - guid" Rule="primitiveValue">
<Input>01234567-89ab-cdef-0123-456789abcdef</Input>
</TestCase>
<TestCase Name="primitive value in request body - binary" Rule="primitiveValue">
<Input>a123456789abcdefABA=</Input>
</TestCase>
<TestCase Name="primitive value in request body - binary with line breaks and spaces" Rule="primitiveValue" FailAt="8">
<Input>a1234567 89
ab
cdefABA</Input>
</TestCase>
<TestCase Name="Resource Path - Entity Set" Rule="resourcePath">
<Input>Categories</Input>
</TestCase>
<TestCase Name="Resource Path - Entity" Rule="resourcePath">
<Input>Categories(11)</Input>
</TestCase>
<TestCase Name="Resource Path - Entity" Rule="resourcePath">
<Input>Categories(ID=1)</Input>
</TestCase>
<TestCase Name="Key" Rule="string">
<Input>'Hugo''s%20Tavern'</Input>
</TestCase>
<TestCase Name="Resource Path - Entity" Rule="resourcePath">
<Input>Categories(ID=1,Size=5)</Input>
</TestCase>
<TestCase Name="Correct Guid" Rule="guidValue">
<Input>01234567-89ab-cdef-0123-456789abcdef</Input>
</TestCase>
<TestCase Name="Guid with wrong character" Rule="guidValue" FailAt="5">
<Input>01234g67-89ab-cdef-0123-456789abcdef</Input>
</TestCase>
<TestCase Name="Guid with less than 32 digits" Rule="guidValue" FailAt="23">
<Input>01234567-89ab-cdef-456789abcdef</Input>
</TestCase>
<TestCase Name="TimeOfDay" Rule="timeOfDayValue">
<Input>11:22:33</Input>
</TestCase>
<TestCase Name="TimeOfDay - percent-encoded colon" Rule="timeOfDayValueInUrl">
<Input>11%3A22%3a33</Input>
</TestCase>
<TestCase Name="TimeOfDay - no percent-encoding in payloads" Rule="timeOfDayValue" FailAt="2">
<Input>11%3A22%3a33</Input>
</TestCase>
<TestCase Name="TimeOfDay: no seconds" Rule="timeOfDayValue">
<Input>11:22</Input>
</TestCase>
<TestCase Name="TimeOfDay: fractional seconds" Rule="timeOfDayValue">
<Input>11:22:33.4444444</Input>
</TestCase>
<TestCase Name="TimeOfDay: 24:00" Rule="timeOfDayValue" FailAt="1">
<Input>24:00:00</Input>
</TestCase>
<TestCase Name="Identifier" Rule="odataIdentifier">
<Input>TheQuickBrownFoxSays42</Input>
</TestCase>
<TestCase Name="Identifier with leading underscores" Rule="odataIdentifier">
<Input>__ID</Input>
</TestCase>
<TestCase Name="Identifier: no starting digit" Rule="odataIdentifier" FailAt="0">
<Input>0time</Input>
</TestCase>
<TestCase Name="Identifier: no dots within" Rule="odataIdentifier" FailAt="2">
<Input>No.Dot</Input>
</TestCase>
<TestCase Name="Entity Set" Rule="resourcePath">
<Input>Products</Input>
</TestCase>
<!--
Test cases for example URLs in Part 1: Protocol
-->
<TestCase Name="Inline Parameter Syntax" Rule="odataUri">
<Input>http://host/service/EmployeesByManager(ManagerID=3)</Input>
</TestCase>
<TestCase Name="Inline Parameter Syntax" Rule="odataUri">
<Input>http://host/service/EmployeesByManager(ManagerID=@p1)?@p1=3</Input>
</TestCase>
<TestCase Name="Inline Parameter Syntax" Rule="odataUri">
<Input>http://host/service/EmployeesByManager?ManagerID=3</Input>
</TestCase>
<TestCase Name="Inline Parameter Syntax" Rule="odataUri">
<Input>http://host/service/EmployeesByManager?@ManagerID=3</Input>
</TestCase>
<!--
Test cases for example URLs in Part 2: URL Conventions
-->
<TestCase Name="2 URL Components - service root URL" Rule="odataUri">
<Input>http://services.odata.org/OData/OData.svc/</Input>
</TestCase>
<TestCase Name="2 URL Components - service root directly at server root" Rule="odataUri">
<Input>http://My.Org:80/</Input>
</TestCase>
<TestCase Name="2 URL Components - resource path" Rule="resourcePath">
<Input>Categories(1)/Products</Input>
</TestCase>
<TestCase Name="2 URL Components - resource path" Rule="resourcePath">
<Input>Categories(1)/Products</Input>
</TestCase>
<TestCase Name="2 URL Components - key with key property alias" Rule="resourcePath">
<Input>Categories(KeyAlias=1)</Input>
</TestCase>
<TestCase Name="2 URL Components - key with parameter alias - short form" Rule="odataRelativeUri">
<Input>Categories(@key)?@key=1</Input>
</TestCase>
<TestCase Name="2 URL Components - key with parameter alias - long form" Rule="odataRelativeUri">
<Input>Categories(ID=@key)?@key=1</Input>
</TestCase>
<TestCase Name="2 URL Components - query options" Rule="queryOptions">
<Input>$top=2&$orderby=Name</Input>
</TestCase>
<TestCase Name="2 URL Components - resource path and query options" Rule="odataRelativeUri">
<Input>Categories(1)/Products?$top=2&$orderby=Name</Input>
</TestCase>
<TestCase Name="2 URL Components - single quotes" Rule="odataRelativeUri">
<Input>Customers('O''Neil')</Input>
</TestCase>
<TestCase Name="2 URL Components - single quotes" Rule="odataRelativeUri">
<Input>Customers(%27O%27%27Neil%27)</Input>
</TestCase>
<TestCase Name="2 URL Components - unquoted single quotes" Rule="odataRelativeUri" FailAt="15">
<Input>Customers('O%27Neil')</Input>
</TestCase>
<TestCase Name="2 URL Components - parentheses" Rule="odataRelativeUri">
<Input>Customers%28%27O%27%27Neil%27%29</Input>
</TestCase>
<TestCase Name="2 URL Components - encoded forward slash" Rule="odataUri">
<Input>http://host/service/Categories('Smartphone%2FTablet')</Input>
</TestCase>
<TestCase Name="2 URL Components - unencoded forward slash" Rule="odataRelativeUri" FailAt="22">
<Input>Categories('Smartphone/Tablet')</Input>
</TestCase>
<TestCase Name="4.1 - Metadata URL" Rule="odataUri">
<Input>http://services.odata.org/OData/OData.svc/$metadata</Input>
</TestCase>
<TestCase Name="4.1 - Metadata URL - CSDL JSON" Rule="odataUri">
<Input>http://services.odata.org/OData/OData.svc/$metadata?$format=json</Input>
</TestCase>
<TestCase Name="4.1 - Metadata URL - CSDL XML" Rule="odataUri">
<Input>http://services.odata.org/OData/OData.svc/$metadata?$format=xml</Input>
</TestCase>
<TestCase Name="4.1 - Metadata URL - allowed" Rule="odataUri">
<Input>http://services.odata.org/OData/OData.svc/$metadata?$format=text/html</Input>
</TestCase>
<TestCase Name="4.1 - Metadata URL - allowed" Rule="odataUri">
<Input>http://services.odata.org/OData/OData.svc/$metadata?$format=text/html&!special</Input>
</TestCase>
<TestCase Name="4.2 - Batch URL" Rule="odataUri">
<Input>http://services.odata.org/OData/OData.svc/$batch</Input>
</TestCase>
<TestCase Name="4.2 - Batch URL - JSON batch response" Rule="odataUri">
<Input>http://services.odata.org/OData/OData.svc/$batch?$format=json</Input>
</TestCase>
<TestCase Name="4.2 - Batch URL - multipart batch response" Rule="odataUri">
<Input>http://services.odata.org/OData/OData.svc/$batch?$format=multipart/mixed</Input>
</TestCase>
<TestCase Name="4.2 - Batch URL - allowed" Rule="odataUri">
<Input>http://services.odata.org/OData/OData.svc/$batch?!special</Input>
</TestCase>
<TestCase Name="4.3 Addressing entities - entity set" Rule="entitySetName">
<Input>Products</Input>
</TestCase>
<TestCase Name="4.3 Addressing entities - entity set" Rule="odataRelativeUri">
<Input>Products</Input>
</TestCase>
<TestCase Name="4.3 Addressing entities - no trailing dot" Rule="odataRelativeUri" FailAt="8">
<Input>Products.('foo')</Input>
</TestCase>
<TestCase Name="4.3 Addressing entities - no leading dot" Rule="odataRelativeUri" FailAt="0">
<Input>.Products('foo')</Input>
</TestCase>
<TestCase Name="4.3 Addressing entities - function call" Rule="odataRelativeUri">
<Input>ProductsByCategoryId(categoryId=2)</Input>
</TestCase>
<TestCase Name="4.3 Addressing entities - function call with subsequent key segment" Rule="odataRelativeUri">
<Input>ProductsByCategoryId(categoryId=2)(2)</Input>
</TestCase>
<TestCase Name="4.3 Addressing entities - function call with alias" Rule="odataRelativeUri">
<Input>ProductsByCategoryId(categoryId=@cat)?@cat=2</Input>
</TestCase>
<TestCase Name="4.3 Addressing entities - function call with alias for expression" Rule="odataRelativeUri">
<Input>ProductsByCategoryId(categoryId=@cat)?@cat=Model.MostPopularCategory(Rank=2)</Input>
</TestCase>
<TestCase Name="4.3 Addressing entities - function call with query parameter" Rule="odataRelativeUri">
<Input>ProductsByCategoryId(categoryId=2)</Input>
</TestCase>
<TestCase Name="4.3 Addressing entities - function call with query parameter" Rule="odataRelativeUri">
<Input>ProductsByCategoryId?@categoryId=2</Input>
</TestCase>
<TestCase Name="4.3 Addressing entities - function parameter" Rule="functionParameter">
<Input>color='red'</Input>
</TestCase>
<TestCase Name="4.3 Addressing entities - top-level function call" Rule="odataRelativeUri">
<Input>ProductsByColor(color='red')</Input>
</TestCase>
<TestCase Name="4.3 Addressing entities - bound function call" Rule="odataRelativeUri">
<Input>Categories(1)/Model.ProductsByColor(color='red')</Input>
</TestCase>
<TestCase Name="4.3 Addressing entities - bound function call with implicit parameter aliases" Rule="odataRelativeUri">
<Input>Categories(1)/Model.ProductsByColor?@color='red'</Input>
</TestCase>
<TestCase Name="4.3 Addressing entities - single entity (short)" Rule="resourcePath">
<Input>Categories(1)</Input>
</TestCase>
<TestCase Name="4.3 Addressing entities - single entity (short)" Rule="odataRelativeUri">
<Input>Customers(1)</Input>
</TestCase>
<TestCase Name="4.3 Addressing entities - single entity (long)" Rule="resourcePath">
<Input>Categories(ID=1)</Input>
</TestCase>
<TestCase Name="4.3 Addressing entities - single entity (string)" Rule="resourcePath">
<Input>Categories('Tablet')</Input>
</TestCase>
<TestCase Name="4.3 Addressing entities - single entity (string)" Rule="resourcePath">
<Input>Categories('7''''%20Tablet')</Input>
</TestCase>
<TestCase Name="4.3 Addressing entities - single entity (string)" Rule="resourcePath">
<Input>Categories%28%27Tablet%27%29</Input>
</TestCase>
<TestCase Name="4.3 Addressing entities - single entity (string)" Rule="resourcePath">
<Input>Categories('Tablet%2FSlate')</Input>
</TestCase>
<TestCase Name="4.3 Addressing entities - single entity (wrong)" Rule="resourcePath" FailAt="18">
<Input>Categories('Tablet/Slate')</Input>
</TestCase>
<TestCase Name="4.3 Addressing entities - single entity (string)" Rule="resourcePath">
<Input>Categories('Tablet%20%28small%29')</Input>
</TestCase>
<TestCase Name="4.3 Addressing entities - single entity (string)" Rule="resourcePath">
<Input>Categories('Tablet%20(small)')</Input>
</TestCase>
<TestCase Name="4.3 Addressing entities - single entity (string)" Rule="resourcePath">
<Input>Categories('Tablet%20)small(')</Input>
</TestCase>
<TestCase Name="4.3 Addressing entities - single entity (timestamp)" Rule="resourcePath">
<Input>Categories(2018-02-13T23:59:59Z)</Input>
</TestCase>
<TestCase Name="4.3 Addressing entities - single entity (timestamp, percent-encoded colon)" Rule="resourcePath">
<Input>Categories(2018-02-13T23%3A59%3A59Z)</Input>
</TestCase>
<TestCase Name="4.3 Addressing entities - single entity (time)" Rule="resourcePath">
<Input>Categories(23:59:59)</Input>
</TestCase>
<TestCase Name="4.3 Addressing entities - single entity (time, percent-encoded colon)" Rule="resourcePath">
<Input>Categories(23%3A59%3A59)</Input>
</TestCase>
<TestCase Name="4.3 Addressing entities - single entity (wrong)" Rule="resourcePath" FailAt="19">
<Input>Categories(ID=wrong)</Input>
</TestCase>
<TestCase Name="4.3 Addressing entities - single entity (multi-part key)" Rule="resourcePath">
<Input>OrderItems(OrderID=1,ItemID='a')</Input>
</TestCase>
<TestCase Name="4.3 Addressing entities - single entity (wrong multi-part key)" Rule="resourcePath" FailAt="20">
<Input>OrderItems(OrderID=1;ItemID='a')</Input>
</TestCase>
<TestCase Name="4.3 Addressing entities - bound operation on entity set" Rule="resourcePath">
<Input>Products/Model.MostExpensive()</Input>
</TestCase>
<TestCase Name="4.3 Addressing entities - follow navigation property" Rule="resourcePath">
<Input>Products(1)/Supplier</Input>
</TestCase>
<TestCase Name="4.3 Addressing entities - follow navigation property and call function" Rule="odataRelativeUri">
<Input>Categories(1)/Products/Model.AllOrders()</Input>
</TestCase>
<TestCase Name="4.3 Addressing entities - follow navigation property and call function, then count results"
Rule="odataRelativeUri"
>
<Input>Categories(1)/Products/Model.AllOrders()/$count</Input>
</TestCase>
<TestCase Name="4.3 Addressing entities - follow navigation property and call function - no parens" Rule="odataRelativeUri">
<Input>Categories(1)/Products/Model.AllOrders</Input>
</TestCase>
<TestCase Name="4.3 Addressing entities - follow navigation property and call function - no namespace" Rule="odataRelativeUri">
<Input>Categories(1)/Products/AllOrders</Input>
</TestCase>
<TestCase Name="4.3 Addressing entities - follow navigation property and call function" Rule="odataRelativeUri">
<Input>Categories(1)/Products/Model.MostExpensive()</Input>
</TestCase>
<TestCase Name="4.3 Addressing entities - singleton entities" Rule="resourcePath">
<Input>SingletonEntity</Input>
</TestCase>
<TestCase Name="4.3 Addressing entities - single navigation property in complex type" Rule="resourcePath">
<Input>Customers(1)/Address/Country</Input>
</TestCase>
<TestCase Name="4.3 Addressing entities - collection navigation property in complex type" Rule="resourcePath">
<Input>Customers(1)/Address/Products</Input>
</TestCase>
<TestCase Name="4.3.1 Canonical URL" Rule="odataRelativeUri">
<Input>Categories(1)/Products(1)</Input>
</TestCase>
<TestCase Name="4.3.4 $entity with OData URL" Rule="odataRelativeUri">
<Input>$entity?$id=http://host/path</Input>
</TestCase>
<TestCase Name="4.3.4 $entity with URN" Rule="odataRelativeUri">
<Input>$entity?$id=urn:some:id</Input>
</TestCase>
<TestCase Name="4.3.4 $entity with URN, id without $ prefix" Rule="odataRelativeUri">
<Input>$entity?id=urn:some:id</Input>
</TestCase>
<TestCase Name="4.3.4 $entity with OData URL, $select and $expand fails without type-cast" Rule="odataRelativeUri" FailAt="48">
<Input>$entity?$id=http://myservice/Customers('ALFKI')&$select=CompanyName,ContactName&$expand=Orders</Input>
</TestCase>
<TestCase Name="4.3.4 $entity with OData URL, $select and $expand" Rule="odataRelativeUri">
<Input>$entity/Model.Customer?$id=http://myservice/Customers('ALFKI')&$select=CompanyName,ContactName&$expand=Orders</Input>
</TestCase>
<TestCase Name="4.3.4 $entity without $id fails" Rule="odataRelativeUri" FailAt="20">
<Input>$entity?$format=json</Input>
</TestCase>
<TestCase Name="4.3.6 Key-as-Segment - single entity (numeric single-part key)" Rule="odataRelativeUri">
<Input>Customers/1</Input>
</TestCase>
<TestCase Name="4.3.6 Key-as-Segment - single entity (string single-part key)" Rule="resourcePath">
<Input>Employees/A1245</Input>
</TestCase>
<TestCase Name="4.3.6 Key-as-Segment - single entity (string single-part key)" Rule="resourcePath">
<Input>People/O'Neil</Input>
</TestCase>
<TestCase Name="4.3.6 Key-as-Segment - single entity (string single-part key)" Rule="resourcePath">
<Input>People/O%27Neil</Input>
</TestCase>
<TestCase Name="4.3.6 Key-as-Segment - single entity (string single-part key)" Rule="resourcePath">
<Input>Categories/Smartphone%2FTablet</Input>
</TestCase>
<TestCase Name="4.3.6 Key-as-Segment - single entity (multi-part key)" Rule="resourcePath">
<Input>OrderItems/2001/1</Input>
</TestCase>
<TestCase Name="4.3.6 Key-as-Segment - navigation (segment)" Rule="resourcePath">
<Input>Orders/1/Items</Input>
</TestCase>
<TestCase Name="4.3.6 Key-as-Segment - navigation (segment)" Rule="resourcePath">
<Input>Orders/1/Items/1</Input>
</TestCase>
<TestCase Name="4.4 Addressing Links between Entities" Rule="odataRelativeUri">
<Input>Categories(1)/Products/$ref</Input>
</TestCase>
<TestCase Name="4.4 Addressing Links between Entities" Rule="odataRelativeUri">
<Input>Categories(1)/Products/$ref?$id=Products(0)</Input>
</TestCase>
<TestCase Name="4.4 Addressing Links between Entities" Rule="odataRelativeUri">
<Input>Products(1)/Category/$ref</Input>
</TestCase>
<TestCase Name="4.4 Addressing Links between Entities - count" Rule="odataRelativeUri" FailAt="27">
<Input>Categories(1)/Products/$ref/$count</Input>
</TestCase>
<TestCase Name="4.4 Addressing Links between Entities" Rule="odataRelativeUri">
<Input>Categories(1)/Products(2)/$ref</Input>
</TestCase>
<TestCase Name="4.4 Addressing Links between Entities" Rule="odataRelativeUri" FailAt="30">
<Input>Categories(1)/Products(2)/$ref/$count</Input>
</TestCase>
<TestCase Name="4.4 edge case: entity set as references" Rule="odataRelativeUri">
<Input>Categories/$ref</Input>
</TestCase>
<TestCase Name="4.4 edge case: top-level entity as reference" Rule="odataRelativeUri">
<Input>Categories(1)/$ref</Input>
</TestCase>
<TestCase Name="4.5.1 Call unbound action via action import" Rule="odataRelativeUri">
<Input>Activation</Input>
</TestCase>
<TestCase Name="4.5.1 Call bound action" Rule="odataRelativeUri">
<Input>LeaveRequests(4)/Model.Rejection</Input>
</TestCase>
<TestCase Name="4.5.1 Call action at service root" Rule="odataRelativeUri" FailAt="5">
<Input>Model.Rejection</Input>
</TestCase>
<TestCase Name="4.5.2 Call function import" Rule="odataRelativeUri">
<Input>TheBestProduct()</Input>
</TestCase>
<TestCase Name="4.5.2 Call function import - no parentheses" Rule="odataRelativeUri">
<Input>TheBestProduct</Input>
</TestCase>
<TestCase Name="4.5.2 Call function import - inline parameter" Rule="odataRelativeUri">
<Input>TheBestProduct(Size=3)</Input>
</TestCase>
<TestCase Name="4.5.2 Call function import - only at service root" Rule="odataRelativeUri" FailAt="27">
<Input>Categories/TheBestProduct()</Input>
</TestCase>
<TestCase Name="4.5.2 Call complex function import" Rule="odataRelativeUri">
<Input>TheMostPopularAddress()</Input>
</TestCase>
<TestCase Name="4.5.2 Call complex collection function import" Rule="odataRelativeUri">
<Input>TheMostPopularAddresses()</Input>
</TestCase>
<TestCase Name="4.5.2 Call primitive function import" Rule="odataRelativeUri">
<Input>TheMostPopularName()</Input>
</TestCase>
<TestCase Name="4.5.2 Call primitive function import" Rule="odataRelativeUri">
<Input>TheMostPopularName()/$value</Input>
</TestCase>
<TestCase Name="4.5.2 Call primitive collection function import" Rule="odataRelativeUri">
<Input>TheMostPopularNames()</Input>
</TestCase>
<TestCase Name="4.5.2 Call bound complex function" Rule="odataRelativeUri">
<Input>Customers/Model.MostPopularAddress()</Input>
</TestCase>
<TestCase Name="4.5.2 Call bound complex collection function" Rule="odataRelativeUri">
<Input>Customers/Model.MostPopularAddresses()</Input>
</TestCase>
<TestCase Name="4.5.2 Call bound complex collection function" Rule="odataRelativeUri">
<Input>Customers/Model.MostPopularAddresses()/$count</Input>
</TestCase>
<TestCase Name="4.5.2 Call bound complex collection function with cast" Rule="odataRelativeUri">
<Input>Customers/Model.MostPopularAddresses()/Model.AddressWithLocation</Input>
</TestCase>
<TestCase Name="4.5.2 Call bound complex collection function with cast" Rule="odataRelativeUri">
<Input>Customers/Model.MostPopularAddresses()/Model.AddressWithLocation/$count</Input>
</TestCase>
<TestCase Name="4.5.2 Call bound complex collection function with cast, no namespace" Rule="odataRelativeUri">
<Input>Customers/MostPopularAddresses()/AddressWithLocation/$count</Input>
</TestCase>
<TestCase Name="4.5.2 Call bound complex collection function - multiple" Rule="odataRelativeUri">
<Input>Customers/Model.MostPopularAddresses()/Model.MostPopularNames()</Input>
</TestCase>
<TestCase Name="4.5.2 Call bound complex collection function - multiple, no namespace" Rule="odataRelativeUri">
<Input>Customers/MostPopularAddresses()/MostPopularNames()</Input>
</TestCase>
<TestCase Name="4.5.2 Call bound primitive function" Rule="odataRelativeUri">
<Input>Customers/Model.MostPopularName()</Input>
</TestCase>
<TestCase Name="4.5.2 Call bound primitive function" Rule="odataRelativeUri">
<Input>Customers/Model.MostPopularName()/$value</Input>
</TestCase>
<TestCase Name="4.5.2 Call bound primitive collection function" Rule="odataRelativeUri">
<Input>Customers/Model.MostPopularNames()</Input>
</TestCase>
<TestCase Name="4.5.2 Call bound primitive collection function" Rule="odataRelativeUri">
<Input>Customers/Model.MostPopularNames()/$count</Input>
</TestCase>
<TestCase Name="4.6 Addressing a Property - primitive" Rule="odataRelativeUri">
<Input>Categories(1)/ID</Input>
</TestCase>
<TestCase Name="4.6 Addressing a Property - complex" Rule="odataRelativeUri">
<Input>Categories(1)/Address</Input>
</TestCase>
<TestCase Name="4.6 Addressing a Property - complex path" Rule="odataRelativeUri">
<Input>Categories(1)/Address/Street</Input>
</TestCase>
<TestCase Name="4.6 Addressing a Property - complex path with type cast" Rule="odataRelativeUri">
<Input>Categories(1)/Address/Model.AddressWithLocation/Location</Input>
</TestCase>
<TestCase Name="4.6 Addressing a Property - stream" Rule="odataRelativeUri">
<Input>Categories(1)/Thumbnail</Input>
</TestCase>
<TestCase Name="4.6 Addressing a Property - collection of primitive" Rule="odataRelativeUri">
<Input>Suppliers(1)/EmailAddresses</Input>
</TestCase>
<TestCase Name="4.6 Addressing a Property - collection of complex" Rule="odataRelativeUri">
<Input>Suppliers(1)/Addresses</Input>
</TestCase>
<TestCase Name="4.7 Addressing a Property Value" Rule="odataRelativeUri">
<Input>Categories(1)/ID/$value</Input>
</TestCase>
<TestCase Name="4.7 Addressing a Property Value - with $format" Rule="odataRelativeUri">
<Input>Categories(1)/ID/$value?$format=json</Input>
</TestCase>
<TestCase Name="4.7 Addressing a Property Value - illegal suffix" Rule="odataRelativeUri" FailAt="23">
<Input>Categories(1)/ID/$value/foo</Input>
</TestCase>
<TestCase Name="4.7 Addressing a Property Value - complex" Rule="odataRelativeUri" FailAt="22">
<Input>Categories(1)/Address/$value</Input>
</TestCase>
<TestCase Name="4.7 Addressing a Property Value - property of complex" Rule="odataRelativeUri">
<Input>Categories(1)/Address/Street/$value</Input>
</TestCase>
<TestCase Name="4.7 Named Stream Property - $value does not make sense here" Rule="odataRelativeUri" FailAt="24">
<Input>Categories(1)/Thumbnail/$value</Input>
</TestCase>
<TestCase Name="4.8 Addressing entities - entity set with $count" Rule="odataRelativeUri">
<Input>Products/$count</Input>
</TestCase>
<TestCase Name="4.8 Addressing entities - entity set with $count" Rule="odataRelativeUri">
<Input>Products/$count?$filter=Price gt 5.00</Input>
</TestCase>
<TestCase Name="4.8 Addressing entities - $count not last segment" Rule="odataRelativeUri" FailAt="15">
<Input>Products/$count/foo</Input>
</TestCase>
<TestCase Name="4.8 Addressing entities - entity set navigation with $count" Rule="odataRelativeUri">
<Input>Products(1)/Items/$count</Input>
</TestCase>
<TestCase Name="4.8 Addressing entities - collection property with $count" Rule="odataRelativeUri">
<Input>Products(1)/Addresses/$count</Input>
</TestCase>
<TestCase Name="4.8 Addressing entities - collection property with $count" Rule="odataRelativeUri">
<Input>Products(1)/Sizes/$count</Input>
</TestCase>
<TestCase Name="4.8 Addressing the Count - in $filter with navigation" Rule="filter">
<Input>$filter=Products/$count gt 0</Input>
</TestCase>
<TestCase Name="4.8 Addressing the Count - in $filter with complex collection" Rule="filter">
<Input>$filter=Addresses/$count gt 0</Input>
</TestCase>
<TestCase Name="4.8 Addressing the Count - in $filter with primitive collection" Rule="filter">
<Input>$filter=Sizes/$count gt 0</Input>
</TestCase>
<TestCase Name="4.8 Addressing the Count - in $filter with filtered collection" Rule="filter">
<Input>$filter=Products/$count($filter=Price gt 5.00) gt 2</Input>
</TestCase>
<TestCase Name="4.8 Addressing the Count - collection navigation property with $count in $orderby" Rule="orderby">
<Input>$orderby=Products/$count</Input>
</TestCase>
<TestCase Name="4.8 Addressing the Count - collection property with $count in $orderby" Rule="orderby">
<Input>$orderby=Addresses/$count</Input>
</TestCase>
<TestCase Name="4.8 Addressing the Count - collection property with $count in $orderby" Rule="orderby">
<Input>$orderby=Sizes/$count</Input>
</TestCase>
<TestCase Name="4.10 Addressing a Member of an Ordered Primitive Collection" Rule="odataRelativeUri">
<Input>Suppliers(1)/EmailAddresses/1</Input>
</TestCase>
<TestCase Name="4.10 Addressing a Member of an Ordered Complex Collection" Rule="odataRelativeUri">
<Input>MainSupplier/Addresses/0</Input>
</TestCase>
<TestCase Name="4.10 Addressing a Member of an Ordered Complex Collection with type-cast" Rule="odataRelativeUri">
<Input>Suppliers(1)/Addresses/Model.AddressWithLocation/-1</Input>
</TestCase>
<TestCase Name="4.11 Inheritance - set of subtypes" Rule="odataRelativeUri">
<Input>Products/Model.BestSellingProduct</Input>
</TestCase>
<TestCase Name="4.11 Inheritance - set of subtypes, then key access" Rule="odataRelativeUri">
<Input>Products/Model.BestSellingProduct(1)</Input>
</TestCase>
<TestCase Name="4.11 Inheritance - key access, then cast to subtype" Rule="odataRelativeUri">
<Input>Products(1)/Model.BestSellingProduct</Input>
</TestCase>
<TestCase Name="4.11 Inheritance - key access, then cast to subtype - only once" Rule="odataRelativeUri" FailAt="61">
<Input>Products(1)/Model.BestSellingProduct/Model.BestSellingProduct</Input>
</TestCase>
<TestCase Name="4.11 Inheritance - complex type" Rule="odataRelativeUri">
<Input>Products(1)/Address/Model.AddressWithLocation</Input>
</TestCase>
<TestCase Name="4.11 Inheritance - complex type with property" Rule="odataRelativeUri">
<Input>Products(1)/Address/Model.AddressWithLocation/Street</Input>
</TestCase>
<TestCase Name="4.11 Inheritance - complex type with property, no namespace" Rule="odataRelativeUri">
<Input>Products(1)/Address/AddressWithLocation/Street</Input>
</TestCase>
<TestCase Name="4.11 Inheritance - collection of complex type" Rule="odataRelativeUri">
<Input>Products(1)/Addresses/Model.AddressWithLocation</Input>
</TestCase>
<TestCase Name="4.11 Inheritance - expressions: complex type" Rule="propertyPathExpr">
<Input>Address/Model.AddressWithLocation</Input>
</TestCase>
<TestCase Name="4.11 Inheritance - expressions: complex type with path" Rule="propertyPathExpr">
<Input>Address/Model.AddressWithLocation/Street</Input>
</TestCase>
<TestCase Name="4.11 Inheritance - expressions: complex type with path, no namespace" Rule="propertyPathExpr">
<Input>Address/AddressWithLocation/Street</Input>
</TestCase>
<TestCase Name="4.11 Inheritance - expressions: collection of complex type" Rule="propertyPathExpr">
<Input>Addresses/Model.AddressWithLocation</Input>
</TestCase>
<TestCase Name="4.11 Inheritance - $expand" Rule="odataRelativeUri">
<Input>Categories?$expand=Products/Model.BestSellingProduct</Input>
</TestCase>
<TestCase Name="4.11 Inheritance - $expand, no namespace" Rule="odataRelativeUri">