<?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-._~!$&amp;('')*+,;=:@'</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&#x000D;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&amp;$orderby=Name</Input>
  </TestCase>
  <TestCase Name="2 URL Components - resource path and query options" Rule="odataRelativeUri">
    <Input>Categories(1)/Products?$top=2&amp;$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&amp;!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')&amp;$select=CompanyName,ContactName&amp;$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')&amp;$select=CompanyName,ContactName&amp;$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">
    <Input>Categories?$expand=Products/BestSellingProduct</Input>
  </TestCase>
  <TestCase Name="4.11 Inheritance - $expand" Rule="odataRelativeUri">
    <Input>Products?$expand=Model.BestSellingProduct/Sales</Input>
  </TestCase>
  <TestCase Name="4.11 Inheritance - $expand, no namespace" Rule="odataRelativeUri">
    <Input>Products?$expand=BestSellingProduct/Sales</Input>
  </TestCase>
  <TestCase Name="4.11 Inheritance - $expand" Rule="odataRelativeUri">
    <Input>Categories?$expand=Products/Model.BestSellingProduct($select=Name)</Input>
  </TestCase>
  <TestCase Name="4.11 Inheritance - $expand on complex resource" Rule="odataRelativeUri">
    <Input>TheMostPopularAddresses()?$expand=Model.AddressWithLocation/Country</Input>
  </TestCase>
  <TestCase Name="4.12 Filter Path Segment" Rule="odataRelativeUri">
    <Input>Products/$filter(@foo)?@foo=Age gt 3</Input>
  </TestCase>
  <TestCase Name="4.12 Filter Path Segment - expression" Rule="odataRelativeUri">
    <Input>Products/$filter(Age gt 3)</Input>
  </TestCase>
  <TestCase Name="4.12 Filter Path Segment - multiple" Rule="odataRelativeUri">
    <Input>Products/$filter(@foo)/$filter(@bar)?@foo=Age gt 3&amp;@bar=Price lt 5</Input>
  </TestCase>
  <TestCase Name="4.12 Filter Path Segment - multiple" Rule="odataRelativeUri">
    <Input>Products/$filter(Age gt 3)/$filter(Price lt 5)</Input>
  </TestCase>
  <TestCase Name="4.12 Filter Path Segment - with /$ref" Rule="odataRelativeUri">
    <Input>Products/$filter(@foo)/$filter(@bar)/$ref?@foo=Age gt 3&amp;@bar=Price lt 5</Input>
  </TestCase>
  <TestCase Name="4.12 Filter Path Segment - with /$count" Rule="odataRelativeUri">
    <Input>Products/$filter(@foo)/$filter(@bar)/$count?@foo=Age gt 3&amp;@bar=Price lt 5</Input>
  </TestCase>
  <TestCase Name="4.12 Filter Path Segment - with /$count and $filter query option" Rule="odataRelativeUri">
    <Input>Products/$filter(@foo)/$filter(@bar)/$count?@foo=Age gt 3&amp;@bar=Price lt 5&amp;$filter=Price lt 6</Input>
  </TestCase>
  <TestCase Name="4.12 Filter Path Segment - multiple" Rule="odataRelativeUri">
    <Input>Products/$filter(@foo)/Special.ProductsByColor(color='red')/$filter(@bar)?@foo=Age gt 3&amp;@bar=Price lt 5</Input>
  </TestCase>
  <TestCase Name="4.12 Filter Path Segment - multiple, no namespace" Rule="odataRelativeUri">
    <Input>Products/$filter(@foo)/ProductsByColor(color='red')/$filter(@bar)?@foo=Age gt 3&amp;@bar=Price lt 5</Input>
  </TestCase>
  <TestCase Name="4.12 Filter Path Segment - with action" Rule="odataRelativeUri">
    <Input>Products/$filter(@foo)/Special.Cluster?@foo=Age gt 3</Input>
  </TestCase>
  <TestCase Name="4.12 Filter expression in query" Rule="odataRelativeUri">
    <Input>Categories?$filter=Products/$filter(Age gt 3)/$count lt 10</Input>
  </TestCase>
  <TestCase Name="4.12 Filter expression in query" Rule="filter">
    <Input>$filter=Addresses/$filter(endswith(Street,'St'))/$count lt 10</Input>
  </TestCase>
  <TestCase Name="4.12 $each Path Segment" Rule="odataRelativeUri">
    <Input>Products/$filter(@foo)/$each</Input>
  </TestCase>
  <TestCase Name="4.12 $each Path Segment - with action" Rule="odataRelativeUri">
    <Input>Products/$filter(@foo)/$each/Special.Discount?@foo=Age gt 3</Input>
  </TestCase>
  <TestCase Name="4.14 Addressing a Media Resource" Rule="odataRelativeUri">
    <Input>Categories(1)/$value</Input>
  </TestCase>
  <TestCase Name="4.15 - Cross Join" Rule="odataRelativeUri">
    <Input>$crossjoin(Customers,Countries)?$expand=Customers($select=Name),Countries($select=Name)&amp;$filter=Customers/CountryCode eq Countries/CountryCode and Countries/Name eq 'USA'</Input>
  </TestCase>
  <TestCase Name="4.16 Addressing All Entities in a Service" Rule="odataRelativeUri">
    <Input>$all?$search=red</Input>
  </TestCase>
  <TestCase Name="4.16 Addressing All Entities in a Service - with type cast" Rule="odataRelativeUri">
    <Input>$all/Model.Customer?$filter=contains(Name,'red')</Input>
  </TestCase>
  <TestCase Name="4.17 Passing Query Options in the Request Body - entity set" Rule="odataRelativeUri">
    <Input>People/$query</Input>
  </TestCase>
  <TestCase Name="4.17 Passing Query Options in the Request Body - entity" Rule="odataRelativeUri">
    <Input>People(42)/$query</Input>
  </TestCase>
  <TestCase Name="4.17 Passing Query Options in the Request Body - collection of complex" Rule="odataRelativeUri">
    <Input>People(42)/Addresses/$query</Input>
  </TestCase>
  <TestCase Name="4.17 Passing Query Options in the Request Body - complex" Rule="odataRelativeUri">
    <Input>People(42)/Address/$query</Input>
  </TestCase>
  <TestCase Name="4.17 Passing Query Options in the Request Body - collection of primitive" Rule="odataRelativeUri">
    <Input>People(42)/EmailAddresses/$query</Input>
  </TestCase>
  <TestCase Name="4.17 Passing Query Options in the Request Body - primitive" Rule="odataRelativeUri">
    <Input>People(42)/FirstName/$query</Input>
  </TestCase>
  <TestCase Name="4.17 Passing Query Options in the Request Body - bound function call" Rule="odataRelativeUri">
    <Input>Categories(1)/Model.ProductsByColor(color=@c)/$query</Input>
  </TestCase>
  <TestCase Name="4.17 Passing Query Options in the Request Body - bound function call with implicit parameter aliases"
    Rule="odataRelativeUri"
  >
    <Input>Categories(1)/Model.ProductsByColor/$query</Input>
  </TestCase>
  <TestCase Name="4.17 Passing Query Options in the Request Body - function import with parameter" Rule="odataRelativeUri">
    <Input>ProductsByComplex(complex=@c)/$query</Input>
  </TestCase>
  <TestCase Name="4.17 Passing Query Options in the Request Body - function import - implicit parameter aliases"
    Rule="odataRelativeUri"
  >
    <Input>TheBestProduct/$query</Input>
  </TestCase>
  <TestCase Name="4.17 Passing Query Options in the Request Body - Cross Join" Rule="odataRelativeUri">
    <Input>$crossjoin(Customers,Countries)/$query</Input>
  </TestCase>
  <TestCase Name="5.1.1 Filter" Rule="filter">
    <Input>$filter=true</Input>
  </TestCase>
  <TestCase Name="5.1.1 $ is optional" Rule="filter">
    <Input>filter=true</Input>
  </TestCase>
  <TestCase Name="5.1.1 Filter: no spaces" Rule="filter" FailAt="7">
    <Input>$filter =true</Input>
  </TestCase>
  <TestCase Name="5.1.1 Filter: no spaces" Rule="filter" FailAt="9">
    <Input>$filter= true</Input>
  </TestCase>
  <TestCase Name="5.1.1 Filter" Rule="filter">
    <Input>$filter=Completed</Input>
  </TestCase>
  <TestCase Name="5.1.1 Filter - member expressions" Rule="firstMemberExpr">
    <Input>Product</Input>
  </TestCase>
  <TestCase Name="5.1.1 Filter - member expressions - single navigation" Rule="firstMemberExpr">
    <Input>Product/Supplier</Input>
  </TestCase>
  <TestCase Name="5.1.1 Filter - member expressions - single-complex" Rule="firstMemberExpr">
    <Input>Product/Supplier/Address</Input>
  </TestCase>
  <TestCase Name="5.1.1 Filter - member expressions - single-complex-primitive" Rule="firstMemberExpr">
    <Input>Product/Supplier/Address/Street</Input>
  </TestCase>
  <TestCase Name="5.1.1 Filter - member expressions - single-complex-single" Rule="firstMemberExpr">
    <Input>Product/Supplier/Address/Country</Input>
  </TestCase>
  <TestCase Name="5.1.1 Filter - member expressions - single-complex-collection" Rule="firstMemberExpr">
    <Input>Product/Supplier/Address/Products</Input>
  </TestCase>
  <TestCase Name="5.1.1 Filter - member expressions - stream" Rule="firstMemberExpr">
    <Input>Product/Thumbnail</Input>
  </TestCase>
  <TestCase Name="5.1.1 Filter - member expressions - stream" Rule="firstMemberExpr">
    <Input>Address/Thumbnail</Input>
  </TestCase>
  <TestCase Name="5.1.1 Filter - member expressions - stream" Rule="firstMemberExpr">
    <Input>Thumbnail/Model.Available()</Input>
  </TestCase>
  <TestCase Name="5.1.1 Filter - member expressions - single-colComplex" Rule="firstMemberExpr">
    <Input>Product/Supplier/Addresses</Input>
  </TestCase>
  <TestCase Name="5.1.1 Filter - member expressions - single-primitive" Rule="firstMemberExpr">
    <Input>Product/Supplier/CompanyName</Input>
  </TestCase>
  <TestCase Name="5.1.1 Filter - member expressions - single-colPrimitive" Rule="firstMemberExpr">
    <Input>Product/Supplier/EmailAddresses</Input>
  </TestCase>
  <TestCase Name="5.1.1 Filter - member expressions - collection navigation" Rule="firstMemberExpr">
    <Input>Supplier/Products</Input>
  </TestCase>
  <TestCase Name="5.1.1 Filter - member expressions - collection navigation" Rule="firstMemberExpr">
    <Input>Products</Input>
  </TestCase>
  <TestCase Name="5.1.1 Filter - member expressions - collection navigation - count" Rule="firstMemberExpr">
    <Input>Products/$count</Input>
  </TestCase>
  <TestCase Name="5.1.1.1.1 Equals" Rule="boolCommonExpr">
    <Input>true eq false</Input>
  </TestCase>
  <TestCase Name="5.1.1.1.1 boolean - only true and false" Rule="booleanValue" FailAt="0">
    <Input>0</Input>
  </TestCase>
  <TestCase Name="5.1.1.1.1 boolean - only true and false" Rule="booleanValue" FailAt="0">
    <Input>1</Input>
  </TestCase>
  <TestCase Name="5.1.1.1.1 Equals - Property" Rule="firstMemberExpr">
    <Input>Size</Input>
  </TestCase>
  <TestCase Name="5.1.1.1.1 Equals" Rule="boolCommonExpr">
    <Input>Size eq true</Input>
  </TestCase>
  <TestCase Name="5.1.1.1.1 Equals - Literal" Rule="primitiveLiteral">
    <Input>4.0</Input>
  </TestCase>
  <TestCase Name="5.1.1.1.1 Equals - Literal" Rule="primitiveLiteral">
    <Input>'Huge'</Input>
  </TestCase>
  <TestCase Name="5.1.1.1.1 Equals" Rule="boolCommonExpr">
    <Input>Size eq 4.0</Input>
  </TestCase>
  <TestCase Name="5.1.1.1.1 Equals" Rule="boolCommonExpr">
    <Input>Street eq 'Hugo'</Input>
  </TestCase>
  <TestCase Name="5.1.1.1.1 Equals - property path argument" Rule="firstMemberExpr">
    <Input>Address/Street</Input>
  </TestCase>
  <TestCase Name="5.1.1.1.1 Equals - property path argument" Rule="firstMemberExpr">
    <Input>Address/Model.AddressWithLocation/Location</Input>
  </TestCase>
  <TestCase Name="5.1.1.1.1 Equals" Rule="boolCommonExpr">
    <Input>Address/Street eq 'Hugo'</Input>
  </TestCase>
  <TestCase Name="5.1.1.1.1 comparing complex types" Rule="filter">
    <Input>$filter=Address eq {"Street":"NE 40th","City":"Redmond","State":"WA","ZipCode":"98052"}</Input>
  </TestCase>
  <TestCase Name="5.1.1.1.2 Not Equals" Rule="boolCommonExpr">
    <Input>Name ne 'Milk'</Input>
  </TestCase>
  <TestCase Name="5.1.1.1.2 Not Equals" Rule="boolCommonExpr">
    <Input>true ne false</Input>
  </TestCase>
  <TestCase Name="5.1.1.1.3 Greater Than" Rule="boolCommonExpr">
    <Input>Name gt 'Milk'</Input>
  </TestCase>
  <TestCase Name="5.1.1.1.4 Greater Than or Equal" Rule="boolCommonExpr">
    <Input>Name ge 'Milk'</Input>
  </TestCase>
  <TestCase Name="5.1.1.1.5 Less Than" Rule="boolCommonExpr">
    <Input>Name lt 'Milk'</Input>
  </TestCase>
  <TestCase Name="5.1.1.1.6 Less Than or Equal" Rule="boolCommonExpr">
    <Input>Name le 'Milk'</Input>
  </TestCase>
  <TestCase Name="5.1.1.1.7 Logical And" Rule="boolCommonExpr">
    <Input>true and false</Input>
  </TestCase>
  <TestCase Name="5.1.1.1.8 Logical Or" Rule="boolCommonExpr">
    <Input>true or false</Input>
  </TestCase>
  <TestCase Name="5.1.1.1.9 Logical Negation" Rule="notExpr">
    <Input>not false</Input>
  </TestCase>
  <TestCase Name="5.1.1.1.12 Logical Operator Examples" Rule="boolCommonExpr">
    <Input>Name eq 'Milk'</Input>
  </TestCase>
  <TestCase Name="5.1.1.1.12 Logical Operator Examples" Rule="boolCommonExpr">
    <Input>Supplier/Name eq 'Milk'</Input>
  </TestCase>
  <TestCase Name="5.1.1.1.12 Logical Operator Examples" Rule="boolCommonExpr">
    <Input>Name EQ 'Milk' AND Price LT 2.55</Input>
  </TestCase>
  <TestCase Name="5.1.1.1.12 Logical Operator Examples" Rule="boolCommonExpr">
    <Input>Name Eq 'Milk' OR Price Lt 2.55</Input>
  </TestCase>
  <TestCase Name="5.1.1.1.12 Logical Operator Examples" Rule="boolCommonExpr">
    <Input>not endswith(Name,'ilk')</Input>
  </TestCase>
  <TestCase Name="5.1.1.1.12 Logical Operator Examples" Rule="boolCommonExpr">
    <Input>style has Sales.Pattern'Yellow'</Input>
  </TestCase>
  <TestCase Name="5.1.1.1.12 Logical Operator Examples" Rule="boolCommonExpr">
    <Input>Name in ('Milk', 'Cheese')</Input>
  </TestCase>
  <TestCase Name="5.1.1.1.12 Logical Operator Examples" Rule="boolCommonExpr">
    <Input>Name in ["Milk", "Cheese"]</Input>
  </TestCase>
  <TestCase Name="5.1.1.2.1 Addition" Rule="commonExpr">
    <Input>Price add 2.45</Input>
  </TestCase>
  <TestCase Name="5.1.1.2.1 Addition" Rule="commonExpr">
    <Input>(Price add 2.45) mod 2</Input>
  </TestCase>
  <TestCase Name="5.1.1.2.2 Subtraction" Rule="commonExpr">
    <Input>Price sub 0.55</Input>
  </TestCase>
  <TestCase Name="5.1.1.2.3 Negate" Rule="commonExpr">
    <Input>-Price</Input>
  </TestCase>
  <TestCase Name="5.1.1.2.4 Multiplication" Rule="commonExpr">
    <Input>Price mul 2</Input>
  </TestCase>
  <TestCase Name="5.1.1.2.5 Division" Rule="commonExpr">
    <Input>Price div 2</Input>
  </TestCase>
  <TestCase Name="5.1.1.2.5 Division" Rule="commonExpr">
    <Input>Price divby 2</Input>
  </TestCase>
  <TestCase Name="5.1.1.2.6 Modulo" Rule="commonExpr">
    <Input>Price mod 5</Input>
  </TestCase>
  <TestCase Name="5.1.1.2.7 Arithmetic Operator Examples" Rule="boolCommonExpr">
    <Input>Price add 2.45 eq 5.00</Input>
  </TestCase>
  <TestCase Name="5.1.1.2.7 Arithmetic Operator Examples" Rule="boolCommonExpr">
    <Input>Price sub 0.55 eq 2.00</Input>
  </TestCase>
  <TestCase Name="5.1.1.2.7 Arithmetic Operator Examples" Rule="boolCommonExpr">
    <Input>Price mul 2.0 eq 5.10</Input>
  </TestCase>
  <TestCase Name="5.1.1.2.7 Arithmetic Operator Examples" Rule="boolCommonExpr">
    <Input>Price div 2.55 eq 1</Input>
  </TestCase>
  <TestCase Name="5.1.1.2.7 Arithmetic Operator Examples" Rule="boolCommonExpr">
    <Input>Rating divby 2 eq 2.5</Input>
  </TestCase>
  <TestCase Name="5.1.1.2.7 Arithmetic Operator Examples" Rule="boolCommonExpr">
    <Input>Rating mod 5 eq 0</Input>
  </TestCase>
  <TestCase Name="5.1.1.3 Parenthesis" Rule="commonExpr">
    <Input>(true)</Input>
  </TestCase>
  <TestCase Name="5.1.1.3 Parenthesis" Rule="boolCommonExpr">
    <Input>( true )</Input>
  </TestCase>
  <TestCase Name="5.1.1.3 Parenthesis" Rule="boolCommonExpr">
    <Input>(Name eq 'Milk')</Input>
  </TestCase>
  <TestCase Name="5.1.1.3 Parenthesis" Rule="boolCommonExpr">
    <Input>(false)</Input>
  </TestCase>
  <TestCase Name="5.1.1.3 Parenthesis" Rule="commonExpr">
    <Input>(4 add 5) mod (4 sub 1)</Input>
  </TestCase>
  <TestCase Name="5.1.1.3 Parenthesis" Rule="boolcommonExpr">
    <Input>(4 add 5) mod (4 sub 1) eq 0</Input>
  </TestCase>
  <TestCase Name="5.1.1.5.1 concat" Rule="commonExpr">
    <Input>concat(CompanyName, Name)</Input>
  </TestCase>
  <TestCase Name="5.1.1.5.1 concat" Rule="commonExpr">
    <Input>concat(concat(Street,'-'),City)</Input>
  </TestCase>
  <TestCase Name="5.1.1.5.2 contains" Rule="boolCommonExpr">
    <Input>contains(CompanyName,'lfreds')</Input>
  </TestCase>
  <TestCase Name="5.1.1.5.2 contains" Rule="boolCommonExpr">
    <Input>contains(Names,["Fred","George"])</Input>
  </TestCase>
  <TestCase Name="5.1.1.5.3 endswith" Rule="boolCommonExpr">
    <Input>endswith(CompanyName,'Futterkiste')</Input>
  </TestCase>
  <TestCase Name="5.1.1.5.3 endswith" Rule="boolCommonExpr">
    <Input>endswith(["Fred","George","Ron"],["George","Ron"])</Input>
  </TestCase>
  <TestCase Name="5.1.1.5.4 indexof" Rule="boolCommonExpr">
    <Input>indexof(["Fred","George","Ron"],["George","Ron"]) eq 1</Input>
  </TestCase>
  <TestCase Name="5.1.1.5.5 length" Rule="boolCommonExpr">
    <Input>length(CompanyName) eq 19</Input>
  </TestCase>
  <TestCase Name="5.1.1.5.5 length" Rule="boolCommonExpr">
    <Input>length(["Fred","George","Ron"]) eq 3</Input>
  </TestCase>
  <TestCase Name="5.1.1.5.6 startswith" Rule="boolCommonExpr">
    <Input>startswith(CompanyName,'Futterkiste')</Input>
  </TestCase>
  <TestCase Name="5.1.1.5.6 startswith" Rule="boolCommonExpr">
    <Input>startswith(Supplier/Name,'Futterkiste')</Input>
  </TestCase>
  <TestCase Name="5.1.1.5.6 startswith" Rule="boolCommonExpr">
    <Input>startswith(["Fred","George","Ron"],["Fred","George"])</Input>
  </TestCase>
  <TestCase Name="5.1.1.5.7 substring" Rule="commonExpr">
    <Input>substring(CompanyName, 5)</Input>
  </TestCase>
  <TestCase Name="5.1.1.5.7 substring with length" Rule="commonExpr">
    <Input>substring(CompanyName,5,2)</Input>
  </TestCase>
  <TestCase Name="5.1.1.6.1 hassubset" Rule="boolCommonExpr">
    <Input>hassubset(Names,["Milk", "Cheese"])</Input>
  </TestCase>
  <TestCase Name="5.1.1.6.1 hassubset" Rule="boolCommonExpr">
    <Input>hassubset(["Milk", "Cheese"],Names)</Input>
  </TestCase>
  <TestCase Name="5.1.1.6.2 hassubsequence" Rule="boolCommonExpr">
    <Input>hassubsequence([4,1,3],[4,3])</Input>
  </TestCase>
  <TestCase Name="5.1.1.7.1 matchesPattern ^A.*e$" Rule="commonExpr">
    <Input>matchesPattern(CompanyName,'%5EA.*e$')</Input>
  </TestCase>
  <TestCase Name="5.1.1.7.2 tolower" Rule="commonExpr">
    <Input>tolower(CompanyName)</Input>
  </TestCase>
  <TestCase Name="5.1.1.7.3 toupper" Rule="commonExpr">
    <Input>toupper(CompanyName)</Input>
  </TestCase>
  <TestCase Name="5.1.1.7.4 trim" Rule="commonExpr">
    <Input>trim(CompanyName)</Input>
  </TestCase>
  <TestCase Name="5.1.1.8.1" Rule="commonExpr">
    <Input>date(LifeTime)</Input>
  </TestCase>
  <TestCase Name="5.1.1.8.2" Rule="commonExpr">
    <Input>day(BirthDate)</Input>
  </TestCase>
  <TestCase Name="5.1.1.8.3" Rule="commonExpr">
    <Input>fractionalseconds(LifeTime)</Input>
  </TestCase>
  <TestCase Name="5.1.1.8.4" Rule="commonExpr">
    <Input>hour(BirthDate)</Input>
  </TestCase>
  <TestCase Name="5.1.1.8.5" Rule="commonExpr">
    <Input>maxdatetime()</Input>
  </TestCase>
  <TestCase Name="5.1.1.8.5 - non-canonical percent-encoding" Rule="commonExpr">
    <Input>maxdatetime%28%20%29</Input>
  </TestCase>
  <TestCase Name="5.1.1.8.6" Rule="commonExpr">
    <Input>mindatetime()</Input>
  </TestCase>
  <TestCase Name="5.1.1.8.6 - non-canonical percent-encoding" Rule="commonExpr">
    <Input>mindatetime%28%20%29</Input>
  </TestCase>
  <TestCase Name="5.1.1.8.7" Rule="commonExpr">
    <Input>minute(BirthDate)</Input>
  </TestCase>
  <TestCase Name="5.1.1.8.8" Rule="commonExpr">
    <Input>month(BirthDate)</Input>
  </TestCase>
  <TestCase Name="5.1.1.8.9" Rule="commonExpr">
    <Input>now()</Input>
  </TestCase>
  <TestCase Name="5.1.1.8.9 - non-canonical percent-encoding" Rule="commonExpr">
    <Input>now%28%20%29</Input>
  </TestCase>
  <TestCase Name="5.1.1.8.10" Rule="commonExpr">
    <Input>second(BirthDate)</Input>
  </TestCase>
  <TestCase Name="5.1.1.8.11" Rule="commonExpr">
    <Input>time(ReleaseDate)</Input>
  </TestCase>
  <TestCase Name="5.1.1.8.12 - totaloffsetminutes" Rule="commonExpr">
    <Input>totaloffsetminutes(ReleaseDate)</Input>
  </TestCase>
  <TestCase Name="5.1.1.8.13" Rule="commonExpr">
    <Input>totalseconds(LifeTime)</Input>
  </TestCase>
  <TestCase Name="5.1.1.8.14 year" Rule="commonExpr">
    <Input>year(BirthDate)</Input>
  </TestCase>
  <TestCase Name="5.1.1.9.1" Rule="commonExpr">
    <Input>ceiling(Price)</Input>
  </TestCase>
  <TestCase Name="5.1.1.9.2" Rule="commonExpr">
    <Input>floor(Price)</Input>
  </TestCase>
  <TestCase Name="5.1.1.9.3" Rule="commonExpr">
    <Input>round(Price)</Input>
  </TestCase>
  <TestCase Name="5.1.1.10.1 cast(1)" Rule="commonExpr">
    <Input>cast(Model.Customer)</Input>
  </TestCase>
  <TestCase Name="5.1.1.10.1 cast(1), no nanmespace" Rule="commonExpr">
    <Input>cast(Customer)</Input>
  </TestCase>
  <TestCase Name="5.1.1.10.1 cast(2)" Rule="commonExpr">
    <Input>cast(Category,Model.Customer)</Input>
  </TestCase>
  <TestCase Name="5.1.1.10.1 cast(2), no namespace" Rule="commonExpr">
    <Input>cast(Category,Customer)</Input>
  </TestCase>
  <TestCase Name="5.1.1.10.1 cast(3)" Rule="commonExpr">
    <Input>cast(Category,Edm.Boolean)</Input>
  </TestCase>
  <TestCase Name="5.1.1.10.2 isof(1)" Rule="isofExpr">
    <Input>isof(Model.Customer)</Input>
  </TestCase>
  <TestCase Name="5.1.1.10.2 isof(1), no namespace" Rule="isofExpr">
    <Input>isof(Customer)</Input>
  </TestCase>
  <TestCase Name="5.1.1.10.2 isof(2)" Rule="isofExpr">
    <Input>isof(Category,Model.Customer)</Input>
  </TestCase>
  <TestCase Name="5.1.1.10.2 isof(2), no namespace" Rule="isofExpr">
    <Input>isof(Category,Customer)</Input>
  </TestCase>
  <TestCase Name="5.1.1.10.2 isof(2)" Rule="isofExpr">
    <Input>isof(Location,Edm.GeographyPoint)</Input>
  </TestCase>
  <TestCase Name="5.1.1.11.1 geo.distance" Rule="commonExpr">
    <Input>geo.distance(Supplier/Location,Product/Location)</Input>
  </TestCase>
  <TestCase Name="5.1.1.11.3 geo.intersects" Rule="boolCommonExpr">
    <Input>geo.intersects(Supplier/SalesArea,Product/Location)</Input>
  </TestCase>
  <TestCase Name="5.1.1.11.3 geo.length" Rule="commonExpr">
    <Input>geo.length(Line)</Input>
  </TestCase>
  <TestCase Name="5.1.1.11.3 geo.length" Rule="commonExpr">
    <Input>geo.length(geography'SRID=0;LineString(142.1 64.1,3.14 2.78)')</Input>
  </TestCase>
  <TestCase Name="5.1.1.12 case" Rule="compute">
    <Input>$compute=case(X gt 0:1,X lt 0:-1,true:0) as SignumX</Input>
  </TestCase>
  <TestCase Name="5.1.1.12 case - lots of unnecessary whitespace" Rule="compute">
    <Input>$compute=case( X gt 0 : 1 , X lt 0 : -1 , true : 0) as SignumX</Input>
  </TestCase>
  <TestCase Name="5.1.1.13 Lambda Operators" Rule="firstMemberExpr">
    <Input>lambda/Completed</Input>
  </TestCase>
  <TestCase Name="5.1.1.13 Lambda Operators" Rule="boolCommonExpr">
    <Input>lambda/Name eq $it/Name</Input>
  </TestCase>
  <TestCase Name="5.1.1.13.1 any()" Rule="anyExpr">
    <Input>any()</Input>
  </TestCase>
  <TestCase Name="5.1.1.13.1 any()" Rule="anyExpr">
    <Input>any( )</Input>
  </TestCase>
  <TestCase Name="5.1.1.13.1 any()" Rule="anyExpr">
    <Input>any(lambda:true)</Input>
  </TestCase>
  <TestCase Name="5.1.1.13.1 any()" Rule="anyExpr">
    <Input>any( lambda : true )</Input>
  </TestCase>
  <TestCase Name="5.1.1.13.1 any()" Rule="commonExpr">
    <Input>Products/any(lambda:true)</Input>
  </TestCase>
  <TestCase Name="5.1.1.13.1 any() - requires a path prefix" Rule="boolCommonExpr" FailAt="3">
    <Input>any()</Input>
  </TestCase>
  <TestCase Name="5.1.1.13.1 any()" Rule="commonExpr">
    <Input>Supplier/Products/any(lambda:true)</Input>
  </TestCase>
  <TestCase Name="5.1.1.13.1 any()" Rule="commonExpr">
    <Input>Products/any(lambda:lambda/Completed)</Input>
  </TestCase>
  <TestCase Name="5.1.1.13.1 any()" Rule="commonExpr">
    <Input>Products/any(lambda:$it/Completed)</Input>
  </TestCase>
  <TestCase Name="5.1.1.13.2 all()" Rule="boolCommonExpr">
    <Input>Products/all(lambda:true)</Input>
  </TestCase>
  <TestCase Name="5.1.1.13.2 all() - requires path prefix" Rule="boolCommonExpr" FailAt="3">
    <Input>all(lambda:true)</Input>
  </TestCase>
  <TestCase Name="5.1.1.13.2 all() - must contain a lambda expression" Rule="boolCommonExpr" FailAt="14">
    <Input>Products/all()</Input>
  </TestCase>
  <TestCase Name="5.1.1.13.2 all()" Rule="commonExpr">
    <Input>Products/all(lambda:true)</Input>
  </TestCase>
  <TestCase Name="5.1.1.13.2 all()" Rule="commonExpr">
    <Input>EmailAddresses/all(lambda:true)</Input>
  </TestCase>
  <TestCase Name="5.1.1.14.1 primitive literal" Rule="filter">
    <Input>$filter=ReleaseDate gt 2013-05-24</Input>
  </TestCase>
  <TestCase Name="5.1.1.14.2 simple array" Rule="commonExpr">
    <Input>FirstName in ["Miller","Smith"]</Input>
  </TestCase>
  <TestCase Name="5.1.1.14.2 array with single-quoted OData strings" Rule="commonExpr">
    <Input>FirstName in ["Miller",'Smith']</Input>
  </TestCase>
  <TestCase Name="5.1.1.14.2 empty array" Rule="commonExpr">
    <Input>FirstName in []</Input>
  </TestCase>
  <TestCase Name="5.1.1.14.2 array in array of arrays" Rule="boolCommonExpr">
    <Input>["Joe","Smith"] in [["John","Doe"],["Jane","Smith"]]</Input>
  </TestCase>
  <TestCase Name="5.1.1.14.2 array of properties in array of arrays" Rule="boolCommonExpr">
    <Input>[FirstName,LastName] in [["John","Doe"],["Jane","Smith"]]</Input>
  </TestCase>
  <TestCase Name="5.1.1.14.2 comparing arrays" Rule="boolCommonExpr">
    <Input>["Milk", "Cheese"] eq ["Oranges", "Carrots", "Ginger"]</Input>
  </TestCase>
  <TestCase Name="5.1.1.14.2 mixed array" Rule="commonExpr">
    <Input>["Hello",42,true,false,null,'World']</Input>
  </TestCase>
  <TestCase Name="5.1.1.14.2 array of property names" Rule="commonExpr">
    <Input>[FirstName,LastName]</Input>
  </TestCase>
  <TestCase Name="5.1.1.14.2 empty object" Rule="commonExpr">
    <Input>{}</Input>
  </TestCase>
  <TestCase Name="5.1.1.14.2 object with concrete values" Rule="commonExpr">
    <Input>{"FirstName":"John","LastName":"Doe","Sizes":["Large","Small"]}</Input>
  </TestCase>
  <TestCase Name="5.1.1.14.2 object with expression values" Rule="commonExpr">
    <Input>{"FirstName":Customer/FirstName,"LastName":Manager/LastName,"Sizes":[1, 2 add 3]}</Input>
  </TestCase>
  <TestCase Name="5.1.1.14.2 array with 'untyped' values" Rule="commonExpr">
    <Input>[[],{},true,false,null,42,{"no property name":"value","@something":true}]</Input>
  </TestCase>
  <TestCase Name="5.1.1.14.4 $it" Rule="firstMemberExpr">
    <Input>$it/Completed</Input>
  </TestCase>
  <TestCase Name="5.1.1.14.4 $it" Rule="filter">
    <Input>$filter=endswith($it,'.com')</Input>
  </TestCase>
  <TestCase Name="5.1.1.14.4 $it with alias for entity reference" Rule="queryOptions">
    <Input>$filter=$it eq @ref&amp;@ref={"@odata.id":"http://host/service/ZqV5t"}</Input>
  </TestCase>
  <TestCase Name="5.1.1.14.4 $it with entity reference" Rule="queryOptions">
    <Input>$filter=$it eq {"@odata.id":"http://host/service/ZqV5t"}</Input>
  </TestCase>
  <TestCase Name="5.1.1.14.5 $root" Rule="odataRelativeUri">
    <Input>Employees?$filter=LastName eq $root/Employees('A1245')/LastName</Input>
  </TestCase>
  <TestCase Name="5.1.1.14.5 $root" Rule="odataRelativeUri">
    <Input>ProductsOrderedBy(Customers=@c)?@c=[$root/Customers('ALFKI'),$root/Customers('BLAUS')]</Input>
  </TestCase>
  <TestCase Name="5.1.1.14.6 $this" Rule="boolCommonExpr">
    <Input>$this eq 'Hugo'</Input>
  </TestCase>
  <TestCase Name="5.1.1.14.6 $this" Rule="filter">
    <Input>$filter=endswith($this,'.com')</Input>
  </TestCase>
  <TestCase Name="5.1.1.14.6 $this" Rule="odataRelativeUri">
    <Input>Customers?$select=EmailAddresses($filter=endswith($this,'.com'))</Input>
  </TestCase>
  <TestCase Name="5.1.1.14.6 $this" Rule="odataRelativeUri">
    <Input>Customers?$select=Addresses($filter=endswith($this/Street,'gasse'))</Input>
  </TestCase>
  <TestCase Name="5.1.1.14.6 $this" Rule="odataRelativeUri">
    <Input>Customers?$select=Addresses(@a=$this;$filter=endswith(@a/Street,'gasse'))</Input>
  </TestCase>
  <TestCase Name="5.1.1.15 Path expressions" Rule="commonExpr">
    <Input>Items</Input>
  </TestCase>
  <TestCase Name="5.1.1.15 Path expressions - key access after set navigation" Rule="commonExpr">
    <Input>Items(1)</Input>
  </TestCase>
  <TestCase Name="5.1.1.16 Annotation Values" Rule="filter">
    <Input>$filter=Price/@Measures.Currency eq 'EUR'</Input>
  </TestCase>
  <TestCase Name="5.1.1.16 Annotation Values, no namespace" Rule="filter">
    <Input>$filter=Price/@Currency eq 'EUR'</Input>
  </TestCase>
  <TestCase Name="5.1.1.16 Annotation Values" Rule="orderBy">
    <Input>$orderby=Price/@Measures.Currency</Input>
  </TestCase>
  <TestCase Name="5.1.1.16 Annotation Values with qualifier" Rule="orderBy">
    <Input>$orderby=Price/@Measures.Currency%23Reporting</Input>
  </TestCase>
  <TestCase Name="5.1.1.16 Annotation Values with qualifier, no namespace" Rule="filter">
    <Input>$filter=Price/@Currency%23Reporting eq 'EUR'</Input>
  </TestCase>
  <TestCase Name="5.1.1.16 Annotation Values" Rule="filter">
    <Input>$filter=@Core.Messages/any(m:m/severity eq 'error')</Input>
  </TestCase>
  <TestCase Name="5.1.1.16 Annotation Values" Rule="compute">
    <Input>$compute=@Core.Messages as CoreMessages</Input>
  </TestCase>
  <TestCase Name="5.1.1.16 Annotation Values" Rule="queryOptions">
    <Input>$compute=@Core.Messages as _at_Core_dot_Messages&amp;$select=_at_Core_dot_Messages($top=5)</Input>
  </TestCase>
  <TestCase Name="5.1.1.16 Annotation Values" Rule="filter">
    <Input>$filter=@Messages/any(m:m/severity eq 'error')</Input>
  </TestCase>
  <TestCase Name="5.1.2 Expand - single navigation property" Rule="expand">
    <Input>$expand=Items</Input>
  </TestCase>
  <TestCase Name="5.1.2 Expand - $ is optional" Rule="expand">
    <Input>expand=Items</Input>
  </TestCase>
  <TestCase Name="5.1.2 Expand - single navigation property" Rule="expand">
    <Input>$expand=Items/$ref</Input>
  </TestCase>
  <TestCase Name="5.1.2 Expand - multiple navigation properties" Rule="expand">
    <Input>$expand=Customer,Items</Input>
  </TestCase>
  <TestCase Name="5.1.2 Expand - multiple navigation properties" Rule="expand">
    <Input>$expand=Customer/$ref,Items</Input>
  </TestCase>
  <TestCase Name="5.1.2 Expand - multiple navigation properties, nested" Rule="expand">
    <Input>$expand=Customer,Items($expand=Product)</Input>
  </TestCase>
  <TestCase Name="5.1.2 Expand - multiple navigation properties, nested - no $ prefix" Rule="expand">
    <Input>expand=Customer,Items(expand=Product)</Input>
  </TestCase>
  <TestCase Name="5.1.2 Expand - recursive expansion" Rule="expand">
    <Input>$expand=Customer($levels=4)</Input>
  </TestCase>
  <TestCase Name="5.1.2 Expand - recursive expansion - no $ prefix" Rule="expand">
    <Input>expand=Customer(levels=4)</Input>
  </TestCase>
  <TestCase Name="5.1.2 Expand - multiple navigation properties, nested" Rule="expand">
    <Input>$expand=Customer,Items($expand=Product/$ref)</Input>
  </TestCase>
  <TestCase Name="5.1.2 Expand - no $level after $ref" Rule="expand" FailAt="22">
    <Input>$expand=Customer/$ref($levels=4)</Input>
  </TestCase>
  <TestCase Name="5.1.2 Expand - no $select after $ref" Rule="expand" FailAt="22">
    <Input>$expand=Customer/$ref($select=Name)</Input>
  </TestCase>
  <TestCase Name="5.1.2 Expand - no $expand after $ref" Rule="expand" FailAt="28">
    <Input>$expand=Customer,Items/$ref($expand=Product)</Input>
  </TestCase>
  <TestCase Name="5.1.2 Expand - $count" Rule="expand">
    <Input>$expand=Items($count=true)</Input>
  </TestCase>
  <TestCase Name="5.1.2 Expand - $count" Rule="expand">
    <Input>$expand=Items/$count</Input>
  </TestCase>
  <TestCase Name="5.1.2 Expand - $count" Rule="expand">
    <Input>$expand=Items/$count($filter=Name eq 'Hugo')</Input>
  </TestCase>
  <TestCase Name="5.1.2 Expand - $count - no $ prefix for query options, still required for path segment" Rule="expand">
    <Input>expand=Items/$count(filter=Name eq 'Hugo')</Input>
  </TestCase>
  <TestCase Name="5.1.2 Expand - $count" Rule="expand">
    <Input>$expand=Items/$count($search=Hugo)</Input>
  </TestCase>
  <TestCase Name="5.1.2 Expand - $count" Rule="expand">
    <Input>expand=Items/$count(search=Hugo)</Input>
  </TestCase>
  <TestCase Name="5.1.2 Expand - no $count after $count" Rule="expand" FailAt="21">
    <Input>$expand=Items/$count($count=true)</Input>
  </TestCase>
  <TestCase Name="5.1.2 Expand - multiple nested options" Rule="expand">
    <Input>$expand=Items($select=Quantity;$expand=Product($select=Name,Price);@c=15)</Input>
  </TestCase>
  <TestCase Name="5.1.2 Expand - navigation property in complex type" Rule="expand">
    <Input>$expand=Address/Country</Input>
  </TestCase>
  <TestCase Name="5.1.2 Expand - navigation property in collection of complex type" Rule="expand">
    <Input>$expand=Addresses/Country</Input>
  </TestCase>
  <TestCase Name="5.1.2 Expand - levels" Rule="expand">
    <Input>$expand=Category($levels=4),Category($levels=max)</Input>
  </TestCase>
  <TestCase Name="5.1.2 Expand - levels without leading zeroes" Rule="expand" FailAt="25">
    <Input>$expand=Category($levels=04)</Input>
  </TestCase>
  <TestCase Name="5.1.2 Expand - star" Rule="expand">
    <Input>$expand=*,*/$ref,*($levels=2),Category</Input>
  </TestCase>
  <TestCase Name="5.1.2 Expand - star on complex path" Rule="expand">
    <Input>$expand=Address/*,Address/Address/*,Addresses/*,Address/Model.AddressWithLocation/*,Model.VipCustomer/Address/*</Input>
  </TestCase>
  <TestCase Name="5.1.2 Expand - star on complex path with $ref and $levels" Rule="expand">
    <Input>$expand=Address/*/$ref,Address/*($levels=max)</Input>
  </TestCase>
  <TestCase Name="5.1.2 Expand - stream property" Rule="expand">
    <Input>$expand=$value,Thumbnail</Input>
  </TestCase>
  <TestCase Name="5.1.2 Expand - annotation" Rule="expand">
    <Input>$expand=@Namespace.EntityTerm</Input>
  </TestCase>
  <TestCase Name="5.1.2 Expand - annotation with nested query options" Rule="expand">
    <Input>$expand=@Namespace.EntityTerm($top=2)</Input>
  </TestCase>
  <TestCase Name="5.1.2 Expand - annotation with navigation property" Rule="expand">
    <Input>$expand=@Namespace.SomeTerm/Products($top=2)</Input>
  </TestCase>
  <TestCase Name="5.1.3 Select - simple" Rule="select">
    <Input>$select=Rating,ReleaseDate</Input>
  </TestCase>
  <TestCase Name="5.1.3 Select - $ is optional" Rule="select">
    <Input>select=Rating,ReleaseDate</Input>
  </TestCase>
  <TestCase Name="5.1.3 Select - with star" Rule="select">
    <Input>$select=*</Input>
  </TestCase>
  <TestCase Name="5.1.3 Select - with property of complex property" Rule="select">
    <Input>$select=Address/Street</Input>
  </TestCase>
  <TestCase Name="5.1.3 Select - with property of complex property" Rule="select">
    <Input>$select=Address/Country</Input>
  </TestCase>
  <TestCase Name="5.1.3 Select - with cast" Rule="select">
    <Input>$select=Address/Model.AddressWithLocation</Input>
  </TestCase>
  <TestCase Name="5.1.3 Select - with cast and property of complex property" Rule="select">
    <Input>$select=Address/Model.AddressWithLocation/Location</Input>
  </TestCase>
  <TestCase Name="5.1.3 Select - with cast and property of complex property, no namespace" Rule="select">
    <Input>$select=Address/AddressWithLocation/Location</Input>
  </TestCase>
  <TestCase Name="5.1.3 Select on complex resource - with cast and property of sub-type" Rule="select">
    <Input>$select=Model.AddressWithLocation/Location</Input>
  </TestCase>
  <TestCase Name="5.1.3 Select on complex resource - with cast and property of sub-type, no namespace" Rule="select">
    <Input>$select=AddressWithLocation/Location</Input>
  </TestCase>
  <TestCase Name="5.1.3 Select - with expand" Rule="queryOptions">
    <Input>$expand=Category($select=Name)</Input>
  </TestCase>
  <TestCase Name="5.1.3 Select - qualifiedEntityTypeName" Rule="select">
    <Input>$select=Model.PreferredSupplier/Name</Input>
  </TestCase>
  <TestCase Name="5.1.3 Select - actions by namespace" Rule="select">
    <Input>$select=Model.ActionName,Model.MostPopularName,Model.*</Input>
  </TestCase>
  <TestCase Name="5.1.3 Select - actions and functions with signature" Rule="select">
    <Input>$select=Model.ActionName,Model.MostPopularName(Location,Kind)</Input>
  </TestCase>
  <TestCase Name="5.1.3 Select - actions and functions with signature, no  namespace" Rule="select">
    <Input>$select=ActionName,MostPopularName(Location,Kind)</Input>
  </TestCase>
  <TestCase Name="5.1.3 Select - tricky" Rule="select">
    <Input>$select=Namespace.PreferredSupplier/AccountRepresentative,Address/Street,Address/Namespace.AddressWithLocation/Location</Input>
  </TestCase>
  <TestCase Name="5.1.3 Select - tricky, no namespace" Rule="select">
    <Input>$select=PreferredSupplier/AccountRepresentative,Address/Street,Address/AddressWithLocation/Location</Input>
  </TestCase>
  <TestCase Name="5.1.3 Select - nested select" Rule="select">
    <Input>$select=Address($select=Street,City,Namespace.AddressWithLocation/Location)</Input>
  </TestCase>
  <TestCase Name="5.1.3 Select - nested filter etc." Rule="queryOptions">
    <Input>$select=Addresses($filter=startswith(City,'H');$top=5;$skip=0;$count=true;$orderby=$it;$search=blue;@c=15)&amp;$expand=Addresses/Country</Input>
  </TestCase>
  <TestCase Name="5.1.3 Select - annotations" Rule="select">
    <Input>$select=@Core.Messages($top=5)</Input>
  </TestCase>
  <TestCase Name="5.1.3 Select - annotations" Rule="select">
    <Input>$select=Address/@Core.Messages($top=5)</Input>
  </TestCase>
  <TestCase Name="5.1.3 Select - annotations" Rule="select">
    <Input>$select=@Measures.Currency,@Core.MayImplement($top=2)</Input>
  </TestCase>
  <TestCase Name="5.1.4 OrderBy" Rule="orderby">
    <Input>$orderby=Name</Input>
  </TestCase>
  <TestCase Name="5.1.4 OrderBy - case-insensitive" Rule="orderby">
    <Input>$OrderBy=Name</Input>
  </TestCase>
  <TestCase Name="5.1.4 OrderBy - $ is optional" Rule="orderby">
    <Input>OrderBy=Name</Input>
  </TestCase>
  <TestCase Name="5.1.4 OrderBy asc" Rule="orderby">
    <Input>$orderby=Name&#09;asc</Input>
  </TestCase>
  <TestCase Name="5.1.4 OrderBy mixed" Rule="orderby">
    <Input>$orderby=Name asc,Rating,ReleaseDate desc</Input>
  </TestCase>
  <TestCase Name="5.1.4 OrderBy expression" Rule="orderby">
    <Input>$orderby=Cost ge Revenue asc</Input>
  </TestCase>
  <TestCase Name="5.1.5 Top and Skip" Rule="queryOptions">
    <Input>$top=5&amp;$skip=10</Input>
  </TestCase>
  <TestCase Name="5.1.5 Top and Skip - $ is optional" Rule="queryOptions">
    <Input>top=5&amp;skip=10</Input>
  </TestCase>
  <TestCase Name="5.1.6 Inlinecount" Rule="queryOptions">
    <Input>$count=true</Input>
  </TestCase>
  <TestCase Name="5.1.6 Inlinecount - $ is optional" Rule="queryOptions">
    <Input>count=true</Input>
  </TestCase>
  <TestCase Name="5.1.6 Inlinecount" Rule="queryOptions">
    <Input>$count=false</Input>
  </TestCase>
  <TestCase Name="5.1.6 Inlinecount" Rule="queryOptions" FailAt="6">
    <Input>$count</Input>
  </TestCase>
  <TestCase Name="5.1.7 Search - simple term" Rule="queryOptions">
    <Input>$search=blue</Input>
  </TestCase>
  <TestCase Name="5.1.7 Search - simple term" Rule="queryOptions">
    <Input>$search=1984</Input>
  </TestCase>
  <TestCase Name="5.1.7 Search - simple term" Rule="queryOptions">
    <Input>$search=2x4</Input>
  </TestCase>
  <TestCase Name="5.1.7 Search - simple term with dot" Rule="queryOptions">
    <Input>$search=3.14</Input>
  </TestCase>
  <TestCase Name="5.1.7 Search - simple term with comma" Rule="queryOptions">
    <Input>$search=9,81</Input>
  </TestCase>
  <TestCase Name="5.1.7 Search - simple term with dash" Rule="queryOptions">
    <Input>$search=brand-new</Input>
  </TestCase>
  <TestCase Name="5.1.7 Search - simple term with quote" Rule="queryOptions">
    <Input>$search=Daniel's</Input>
  </TestCase>
  <TestCase Name="5.1.7 Search - simple term with underscore" Rule="queryOptions">
    <Input>$search=__FILE__</Input>
  </TestCase>
  <TestCase Name="5.1.7 Search - simple term with dollar" Rule="queryOptions">
    <Input>$search=$search</Input>
  </TestCase>
  <TestCase Name="5.1.7 Search - simple term with slash" Rule="queryOptions">
    <Input>$search=08/15</Input>
  </TestCase>
  <TestCase Name="5.1.7 Search - simple term with unencoded hash" Rule="queryOptions" FailAt="8">
    <Input>$search=#1</Input>
  </TestCase>
  <TestCase Name="5.1.7 Search - simple term with percent-encoded hash (#)" Rule="queryOptions">
    <Input>$search=%231</Input>
  </TestCase>
  <TestCase Name="5.1.7 Search - simple term with unencoded ampersand" Rule="queryOptions" FailAt="17">
    <Input>$search=more&amp;more</Input>
  </TestCase>
  <TestCase Name="5.1.7 Search - simple term with percent-encoded ampersand" Rule="queryOptions">
    <Input>$search=more%26more</Input>
  </TestCase>
  <TestCase Name="5.1.7 Search - simple term with unencoded semicolon" Rule="queryOptions" FailAt="9">
    <Input>$search=a;b</Input>
  </TestCase>
  <TestCase Name="5.1.7 Search - simple term with percent-encoded semicolon" Rule="queryOptions">
    <Input>$search=a%3Bb</Input>
  </TestCase>
  <TestCase Name="5.1.7 Search - AND is a word here, not an operator" Rule="queryOptions">
    <Input>$search=AND</Input>
  </TestCase>
  <TestCase Name="5.1.7 Search - OR is a word here, not an operator" Rule="queryOptions">
    <Input>$search=OR</Input>
  </TestCase>
  <TestCase Name="5.1.7 Search - NOT is a word here, not an operator" Rule="queryOptions">
    <Input>$search=NOT</Input>
  </TestCase>
  <TestCase Name="5.1.7 Search - NOT is an operator here, search for items that do not match blue" Rule="queryOptions">
    <Input>$search=NOT blue</Input>
  </TestCase>
  <TestCase Name="5.1.7 Search - NOT is an operator here, search for items that do not match blue" Rule="queryOptions">
    <Input>$search=NOT (blue green)</Input>
  </TestCase>
  <TestCase Name="5.1.7 Search - the first NOT is an operator, the second a word, search for items that do not match NOT"
    Rule="queryOptions"
  >
    <Input>$search=NOT NOT</Input>
  </TestCase>
  <TestCase Name="5.1.7 Search - AND and OR are words here, search for items that match both AND and OR" Rule="queryOptions">
    <Input>$search=AND OR</Input>
  </TestCase>
  <TestCase Name="5.1.7 Search - AND and OR are words here, search for items that match both AND and OR" Rule="queryOptions">
    <Input>$search=OR AND</Input>
  </TestCase>
  <TestCase Name="5.1.7 Search - AND and NOT are words here, search for items that match AND or NOT" Rule="queryOptions">
    <Input>$search=AND OR NOT</Input>
  </TestCase>
  <TestCase Name="5.1.7 Search - $ is optional" Rule="queryOptions">
    <Input>search=blue</Input>
  </TestCase>
  <TestCase Name="5.1.7 Search - simple phrase" Rule="queryOptions">
    <Input>$search="blue%20green"</Input>
  </TestCase>
  <TestCase Name="5.1.7 Search - simple phrase" Rule="search">
    <Input>$search="blue green"</Input>
  </TestCase>
  <TestCase Name="5.1.7 Search - phrase with unbalanced double-quotes" Rule="queryOptions">
    <Input>$search='"blue'</Input>
  </TestCase>
  <TestCase Name="5.1.7 Search - phrase with unbalanced double-quotes" FailAt="13" Rule="search">
    <Input>$search="blue</Input>
  </TestCase>
  <TestCase Name="5.1.7 Search - phrase with unbalanced double-quotes" FailAt="15" Rule="search">
    <Input>$search=%22blue</Input>
  </TestCase>
  <TestCase Name="5.1.7 Search - phrase with unbalanced double-quotes - still ok" Rule="queryOptions">
    <Input>$search='"blue" "green'</Input>
  </TestCase>
  <TestCase Name="5.1.7 Search - phrase with double-quote without whitespace" Rule="searchExpr" FailAt="8">
    <Input>"blue%22green</Input>
  </TestCase>
  <TestCase Name="5.1.7 Search - implicit AND" Rule="queryOptions">
    <Input>$search=blue green</Input>
  </TestCase>
  <TestCase Name="5.1.7 Search - implicit AND, encoded" Rule="queryOptions">
    <Input>$search=blue%20green</Input>
  </TestCase>
  <TestCase Name="5.1.7 Search - AND" Rule="queryOptions">
    <Input>$search=blue AND green</Input>
  </TestCase>
  <TestCase Name="5.1.7 Search - OR" Rule="queryOptions">
    <Input>$search=blue OR green</Input>
  </TestCase>
  <TestCase Name="5.1.7 Search - NOT" Rule="queryOptions">
    <Input>$search=blue NOT green</Input>
  </TestCase>
  <TestCase Name="5.1.7 Search - only NOT" Rule="queryOptions">
    <Input>$search=NOT blue</Input>
  </TestCase>
  <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>
  </TestCase>
  <TestCase Name="5.1.7 Search - multiple" Rule="searchExpr">
    <Input>(foo OR that) AND (bar OR baz) AND NOT quux</Input>
  </TestCase>
  <TestCase Name="5.1.7 Search - grouping" Rule="queryOptions">
    <Input>$search=foo AND (bar OR baz)</Input>
  </TestCase>
  <TestCase Name="5.1.7 Search - grouping" Rule="queryOptions">
    <Input>$search=(foo AND bar) OR baz</Input>
  </TestCase>
  <TestCase Name="5.1.7 Search - grouping" Rule="queryOptions">
    <Input>$search=(NOT foo) OR baz</Input>
  </TestCase>
  <TestCase Name="5.1.7 Search - grouping" Rule="queryOptions">
    <Input>$search=(NOT foo)</Input>
  </TestCase>
  <TestCase Name="5.1.7 Search - UTF-8 characters: Greek Capital Letter Delta (Δ)" Rule="queryOptions">
    <Input>$search=%CE%94</Input>
  </TestCase>
  <TestCase Name="5.1.7 Search - incomplete expressions" Rule="queryOptions">
    <Input>$search='"'</Input>
  </TestCase>
  <TestCase Name="5.1.7 Search - incomplete expressions" Rule="queryOptions">
    <Input>$search='"bl'</Input>
  </TestCase>
  <TestCase Name="5.1.7 Search - incomplete expressions" Rule="queryOptions">
    <Input>$search='"blue%20p'</Input>
  </TestCase>
  <TestCase Name="5.1.7 Search - incomplete expressions" Rule="queryOptions">
    <Input>$search='('</Input>
  </TestCase>
  <TestCase Name="5.1.7 Search - nested $search may contain balanced parentheses" Rule="queryOptions">
    <Input>$expand=Manager($search=(green))</Input>
  </TestCase>
  <TestCase Name="5.1.7 Search - nested $search must not contain unbalanced parentheses" Rule="queryOptions" FailAt="26">
    <Input>$expand=Manager($search=gr(een)</Input>
  </TestCase>
  <TestCase Name="5.1.7 Search - nested $search must not contain unbalanced parentheses unless single-quoted" Rule="queryOptions">
    <Input>$expand=Manager($search='gr(een')</Input>
  </TestCase>
  <TestCase Name="5.1.7 Search - nested $search simple term with percent-encoded semicolon" Rule="queryOptions">
    <Input>$expand=Manager($search=a%3Bb)</Input>
  </TestCase>
  <TestCase Name="5.1.7 Search - nested $search simple term with percent-encoded semicolon" Rule="queryOptions">
    <Input>$expand=Manager($search='a%3Bb')</Input>
  </TestCase>
  <TestCase Name="5.1.7 Search - on entity set" Rule="odataUri">
    <Input>http://serviceRoot/Products?$search=blue</Input>
  </TestCase>
  <TestCase Name="5.1.7 Search - on entity container" Rule="odataUri">
    <Input>http://serviceRoot/Model.Container/$all?$search=blue</Input>
  </TestCase>
  <TestCase Name="5.1.7 Search - on service" Rule="odataUri">
    <Input>http://serviceRoot/$all?$search=blue</Input>
  </TestCase>
  <TestCase Name="5.1.8 Format" Rule="queryOptions">
    <Input>$format=json&amp;$Format=atom&amp;$format=xml&amp;$format=text/html</Input>
  </TestCase>
  <TestCase Name="5.1.8 Format - $ is optional" Rule="queryOptions">
    <Input>format=json</Input>
  </TestCase>
  <TestCase Name="5.1.8 Format - value is case-insensitive" Rule="queryOptions">
    <Input>$format=JSON&amp;$format=Atom&amp;$format=XML&amp;$format=text/html</Input>
  </TestCase>
  <TestCase Name="5.1.8 Format - media type" Rule="queryOptions">
    <Input>$format=text/html</Input>
  </TestCase>
  <TestCase Name="5.1.9 Index" Rule="queryOptions">
    <Input>$index=42</Input>
  </TestCase>
  <TestCase Name="5.1.9 Index - $ is optional" Rule="queryOptions">
    <Input>index=42</Input>
  </TestCase>
  <TestCase Name="5.1.9 Index - negative indexes allowed with V4.01" Rule="queryOptions">
    <Input>index=-42</Input>
  </TestCase>
  <TestCase Name="5.1.9 Index" Rule="queryOptions" FailAt="7">
    <Input>$index=fortytwo</Input>
  </TestCase>
  <TestCase Name="5.1.10 Compute" Rule="queryOptions">
    <Input>$compute=Amount mul Product/TaxRate as Tax</Input>
  </TestCase>
  <TestCase Name="5.1.10 Compute - $ is optional" Rule="queryOptions">
    <Input>compute=Amount mul Product/TaxRate as Tax</Input>
  </TestCase>
  <TestCase Name="5.1.10 Compute - many" Rule="queryOptions">
    <Input>$compute=Amount mul Product/TaxRate as Tax,day(Time/Date) as WeekDay</Input>
  </TestCase>
  <TestCase Name="5.1.10 Compute - within $expand" Rule="queryOptions">
    <Input>$expand=Sales($compute=Amount mul Product/TaxRate as Tax)</Input>
  </TestCase>
  <TestCase Name="Delta Link" Rule="deltatoken">
    <Input>$deltatoken=A@Lot_Has:Changed?=Here!</Input>
  </TestCase>
  <TestCase Name="Next Link" Rule="skiptoken">
    <Input>$skiptoken=Start@Next_Chunk:From?=Here!</Input>
  </TestCase>
  <TestCase Name="Next Link: no Ampersand" Rule="skiptoken" FailAt="14">
    <Input>$skiptoken=Not&amp;this</Input>
  </TestCase>
  <TestCase Name="5.2 Custom Query Option" Rule="customQueryOption">
    <Input>find=O%27Neil</Input>
  </TestCase>
  <TestCase Name="5.2 Custom Query Option" Rule="customQueryOption">
    <Input>!deltatoken='201208210403'</Input>
  </TestCase>
  <TestCase Name="5.2 Custom Query Option" Rule="customQueryOption">
    <Input>!special</Input>
  </TestCase>
  <TestCase Name="5.2 Custom Query Option" Rule="queryOptions">
    <Input>find=O%27Neil&amp;!special</Input>
  </TestCase>
  <TestCase Name="5.2 Custom Query Option" Rule="queryOptions">
    <Input>$orderby=Name&amp;!deltatoken=0412312321</Input>
  </TestCase>
  <TestCase Name="5.3 Parameter Aliases" Rule="queryOptions">
    <Input>$filter=contains(Title,@word)&amp;@word='Black'</Input>
  </TestCase>
  <TestCase Name="5.3 Parameter Aliases" Rule="queryOptions">
    <Input>$filter=Title eq @title&amp;@title='Wizard%20of%20Oz'</Input>
  </TestCase>
  <TestCase Name="5.3 Parameter Aliases" Rule="odataRelativeUri">
    <Input>Products/Model.WithIngredients(Ingredients=@i)?@i=["Carrots","Ginger","Oranges"]</Input>
  </TestCase>
  <TestCase Name="5.3 Parameter Aliases" Rule="odataRelativeUri">
    <Input>Categories?$expand=Products(@foo=$this;$filter=@foo/Price gt 3)</Input>
  </TestCase>
  <TestCase Name="5.3 Parameter Aliases" Rule="odataRelativeUri">
    <Input>Employees?$expand=Manager(@m=$this;$expand=DirectReports($filter=@m/FirstName eq FirstName))</Input>
  </TestCase>
  <TestCase Name="function with complex parameter - no properties" Rule="odataRelativeUri">
    <Input>ProductsByComplex(complex=@c)?@c={}</Input>
  </TestCase>
  <TestCase Name="function with complex parameter - one property" Rule="odataRelativeUri">
    <Input>ProductsByComplex(complex=@c)?@c={"Name":"Value"}</Input>
  </TestCase>
  <TestCase Name="function with complex parameter - one property" Rule="odataRelativeUri">
    <Input>ProductsByComplex(complex=@c)?@c={"@odata.type":"Model.Customer","Name":"Value"}</Input>
  </TestCase>
  <TestCase Name="function with complex parameter - three properties" Rule="odataRelativeUri">
    <Input>ProductsByComplex(complex=@c)?@c={"Name":false,"Price":3.14e0,"Rating":null}</Input>
  </TestCase>
  <TestCase Name="function with collection of primitive - zero" Rule="odataRelativeUri">
    <Input>ProductsByColor(colors=@c)?@c=[]</Input>
  </TestCase>
  <TestCase Name="function with collection of primitive - one" Rule="odataRelativeUri">
    <Input>ProductsByColor(colors=@c)?@c=["red"]</Input>
  </TestCase>
  <TestCase Name="function with collection of primitive - two" Rule="odataRelativeUri">
    <Input>ProductsByColor(colors=@c)?@c=["red","green"]</Input>
  </TestCase>
  <TestCase Name="function with complex parameter - complex and collection properties" Rule="odataRelativeUri">
    <Input>ProductsByComplex(complex=@c)?@c={"Names":["Fred","George"],"Address":{"Street":"MyWay"}}</Input>
  </TestCase>
  <TestCase Name="function with rootExpr" Rule="odataRelativeUri">
    <Input>ProductsByCustomer(customer=@c)?@c=$root/Customers(1)</Input>
  </TestCase>
  <TestCase Name="function with rootExpr - single navigation" Rule="odataRelativeUri">
    <Input>ProductsByCustomer(customer=@c)?@c=$root/Customers(1)/Model.VipCustomer/AccountRepresentative</Input>
  </TestCase>
  <TestCase Name="function with rootExpr - array" Rule="odataRelativeUri">
    <Input>ProductsByCustomer(customer=@c)?@c=[$root/Customers(1),$root/Customers(2)]</Input>
  </TestCase>
  <TestCase Name="function with rootExpr - complex with single navigation" Rule="odataRelativeUri">
    <Input>ProductsByCustomer(customer=@c)?@c={"Country":$root/Countries('DE')}</Input>
  </TestCase>
  <TestCase Name="function with rootExpr - complex with collection navigation" Rule="odataRelativeUri">
    <Input>ProductsByCustomer(customer=@c)?@c={"Orders":[$root/Orders(1)]}</Input>
  </TestCase>
  <!-- Enumeration types -->
  <TestCase Name="Enumeration value in URI" Rule="enum">
    <Input>Sales.Pattern'Yellow'</Input>
  </TestCase>
  <TestCase Name="Enumeration value in URI - without prefix" Rule="enum">
    <Input>'Yellow'</Input>
  </TestCase>
  <TestCase Name="Enumeration value in URI - multiple flag values" Rule="enum">
    <Input>Sales.Pattern'Solid,Yellow'</Input>
  </TestCase>
  <TestCase Name="Enumeration value in URI - multiple flag values without prefix" Rule="enum">
    <Input>'Solid,Yellow'</Input>
  </TestCase>
  <TestCase Name="Enumeration value - in filter" Rule="filter">
    <Input>$filter=style eq Sales.Pattern'Yellow'</Input>
  </TestCase>
  <TestCase Name="Enumeration value - in filter without prefix" Rule="filter">
    <Input>$filter=style eq 'Yellow'</Input>
  </TestCase>
  <TestCase Name="Enumeration value - in filter with has" Rule="filter">
    <Input>$filter=style has Sales.Pattern'Yellow'</Input>
  </TestCase>
  <TestCase Name="Enumeration value - undefined value as numeric constant" Rule="filter">
    <Input>$filter=style has Sales.Pattern'32'</Input>
  </TestCase>
  <TestCase Name="Enumeration value - undefined value as numeric constant" Rule="odataRelativeUri">
    <Input>Products?$filter=style eq Sales.Pattern'Yellow,32'</Input>
  </TestCase>
  <TestCase Name="Enumeration value - undefined value as numeric constant" Rule="odataRelativeUri">
    <Input>Products?$filter=style eq cast(eyeColor,Sales.Pattern)</Input>
  </TestCase>
  <!-- Geography and Geometry types -->
  <TestCase Name="GeographyCollection" Rule="geographyCollection">
    <Input>geography'SRID=0;Collection(LineString(142.1 64.1,3.14 2.78))'</Input>
  </TestCase>
  <TestCase Name="GeographyLineString" Rule="geographyLineString">
    <Input>geography'SRID=0;LineString(142.1 64.1,3.14 2.78)'</Input>
  </TestCase>
  <TestCase Name="GeographyMultiLineString" Rule="geographyMultiLineString">
    <Input>geography'SRID=0;MultiLineString((142.1 64.1,3.14 2.78),(142.1 64.1,3.14 2.78))'</Input>
  </TestCase>
  <TestCase Name="GeographyMultiPoint" Rule="geographyMultiPoint">
    <Input>geography'SRID=0;MultiPoint()'</Input>
  </TestCase>
  <TestCase Name="GeographyMultiPoint" Rule="geographyMultiPoint">
    <Input>geography'SRID=0;MultiPoint((142.1 64.1),(1 2))'</Input>
  </TestCase>
  <TestCase Name="GeographyMultiPolygon" Rule="geographyMultiPolygon">
    <Input>geography'SRID=0;MultiPolygon(((1 1,1 1),(1 1,2 2,3 3,1 1)))'</Input>
  </TestCase>
  <TestCase Name="GeographyPoint" Rule="geographyPoint">
    <Input>geography'SRID=0;Point(142.1 64.1)'</Input>
  </TestCase>
  <TestCase Name="GeographyPoint with elevation" Rule="geographyPoint">
    <Input>geography'SRID=0;Point(142.1 64.1 10.0)'</Input>
  </TestCase>
  <TestCase Name="GeographyPoint with elevation and measure" Rule="geographyPoint">
    <Input>geography'SRID=0;Point(142.1 64.1 10.0 -3.14)'</Input>
  </TestCase>
  <TestCase Name="GeographyPolygon" Rule="geographyPolygon">
    <Input>geography'SRID=0;Polygon((1 1,1 1),(1 1,2 2,3 3,1 1))'</Input>
  </TestCase>
  <TestCase Name="GeometryCollection" Rule="geometryCollection">
    <Input>geometry'SRID=0;Collection(LineString(142.1 64.1,3.14 2.78))'</Input>
  </TestCase>
  <TestCase Name="GeometryLineString" Rule="geometryLineString">
    <Input>geometry'SRID=0;LineString(142.1 64.1,3.14 2.78)'</Input>
  </TestCase>
  <TestCase Name="GeometryMultiLineString" Rule="geometryMultiLineString">
    <Input>geometry'SRID=0;MultiLineString((142.1 64.1,3.14 2.78),(142.1 64.1,3.14 2.78))'</Input>
  </TestCase>
  <TestCase Name="GeometryMultiPoint" Rule="geometryMultiPoint">
    <Input>geometry'SRID=0;MultiPoint()'</Input>
  </TestCase>
  <TestCase Name="GeometryMultiPoint" Rule="geometryMultiPoint">
    <Input>geometry'SRID=0;MultiPoint((142.1 64.1),(1 2))'</Input>
  </TestCase>
  <TestCase Name="GeometryMultiPolygon" Rule="geometryMultiPolygon">
    <Input>geometry'SRID=0;MultiPolygon(((1 1,1 1),(1 1,2 2,3 3,1 1)))'</Input>
  </TestCase>
  <TestCase Name="GeometryPoint" Rule="geometryPoint">
    <Input>geometry'SRID=0;Point(142.1 64.1)'</Input>
  </TestCase>
  <TestCase Name="GeometryPolygon" Rule="geometryPolygon">
    <Input>geometry'SRID=0;Polygon((1 1,1 1),(1 1,2 2,3 3,1 1))'</Input>
  </TestCase>
  <TestCase Name="$filter with geometry" Rule="filter">
    <Input>$filter=geo.intersects(geometry'SRID=0;Point(142.1 64.1)',geometry'SRID=0;Polygon((1 1,1 1),(1 1,2 2,3 3,1 1))')</Input>
  </TestCase>
  <TestCase Name="Functions in commonExpr" Rule="commonExpr">
    <Input>Model.Available()</Input>
  </TestCase>
  <TestCase Name="Functions in commonExpr" Rule="commonExpr" FailAt="15">
    <Input>Model.Available</Input>
  </TestCase>
  <TestCase Name="Functions in commonExpr - directly call function" Rule="commonExpr">
    <Input>Model.MostPopularName()</Input>
  </TestCase>
  <TestCase Name="Functions in commonExpr - after collection navigation" Rule="commonExpr">
    <Input>Products/Model.Available()</Input>
  </TestCase>
  <TestCase Name="Functions in commonExpr - composed functions" Rule="commonExpr">
    <Input>Products/Model.BestProduct()/Model.MostPopularName()</Input>
  </TestCase>
  <TestCase Name="Functions in commonExpr - composed functions, no namespace" Rule="commonExpr">
    <Input>Products/BestProduct()/MostPopularName()</Input>
  </TestCase>
  <TestCase Name="Functions in commonExpr - singleNavigation" Rule="commonExpr">
    <Input>Products/Model.BestProduct()/Name</Input>
  </TestCase>
  <TestCase Name="Functions in commonExpr - singleNavigation" Rule="commonExpr">
    <Input>Products/Model.BestProduct()/Model.BestSellingProduct/Name</Input>
  </TestCase>
  <TestCase Name="Functions in commonExpr - singleNavigation" Rule="commonExpr">
    <Input>Products/Model.BestProduct()/Name/Model.Available()</Input>
  </TestCase>
  <TestCase Name="Functions in commonExpr - singleNavigation" Rule="commonExpr">
    <Input>Products/Model.BestProduct()/Address</Input>
  </TestCase>
  <TestCase Name="Functions in commonExpr - singleNavigation" Rule="commonExpr">
    <Input>Products/Model.BestProduct()/Address/Street</Input>
  </TestCase>
  <TestCase Name="Functions in commonExpr - singleNavigation" Rule="commonExpr">
    <Input>Products/Model.BestProduct()/Addresses</Input>
  </TestCase>
  <TestCase Name="Functions in commonExpr - singleNavigation" Rule="commonExpr">
    <Input>Products/Model.BestProduct()/Addresses/Model.MostPopularName()</Input>
  </TestCase>
  <TestCase Name="Functions in commonExpr - singleNavigation" Rule="commonExpr">
    <Input>Products/Model.BestProduct()/EmailAddresses</Input>
  </TestCase>
  <TestCase Name="Functions in commonExpr - stream property" Rule="commonExpr">
    <Input>Products/Model.BestProduct()/Thumbnail</Input>
  </TestCase>
  <TestCase Name="Functions in commonExpr - singleNavigation with any" Rule="commonExpr">
    <Input>Products/Model.BestProduct()/EmailAddresses/any()</Input>
  </TestCase>
  <TestCase Name="Functions in commonExpr - singleNavigation with all" Rule="commonExpr">
    <Input>Products/Model.BestProduct()/EmailAddresses/all(lambda:true)</Input>
  </TestCase>
  <TestCase Name="Functions in commonExpr - collectionNavigation" Rule="commonExpr">
    <Input>Products/Model.ProductsByColor(color='green')/Model.MostPopularName()</Input>
  </TestCase>
  <TestCase Name="Functions in commonExpr - collectionNavigation" Rule="commonExpr">
    <Input>Products/Model.ProductsByColor(color='green')/Model.BestSellingProduct/Model.MostPopularName()</Input>
  </TestCase>
  <TestCase Name="Functions in commonExpr - collectionNavigation" Rule="commonExpr">
    <Input>Products/Model.ProductsByColor(color=@color)/Model.BestSellingProduct/Model.MostPopularName()</Input>
  </TestCase>
  <TestCase Name="Functions in commonExpr - collectionNavigation with all" Rule="commonExpr">
    <Input>Products/Model.ProductsByColor()/all(lambda:true)</Input>
  </TestCase>
  <TestCase Name="Functions in commonExpr - complexPath" Rule="commonExpr">
    <Input>Items/Model.MostPopularAddress()/Street</Input>
  </TestCase>
  <TestCase Name="Functions in commonExpr - complexPath" Rule="commonExpr">
    <Input>Items/Model.MostPopularAddress()/Address</Input>
  </TestCase>
  <TestCase Name="Functions in commonExpr - complexPath" Rule="commonExpr">
    <Input>Items/Model.MostPopularAddress()/Address/Model.Available()</Input>
  </TestCase>
  <TestCase Name="Functions in commonExpr - collectionPath" Rule="commonExpr">
    <Input>Items/Model.MostPopularAddresses()/$count</Input>
  </TestCase>
  <TestCase Name="Functions in commonExpr - collectionPath" Rule="commonExpr">
    <Input>Items/Model.MostPopularAddresses()/Model.MostPopularName()</Input>
  </TestCase>
  <TestCase Name="Functions in commonExpr - collectionPath" Rule="commonExpr">
    <Input>Items/Model.MostPopularNames()/$count</Input>
  </TestCase>
  <TestCase Name="Functions in commonExpr - collectionPath" Rule="commonExpr">
    <Input>Items/Model.MostPopularNames()/Model.MostPopularName()</Input>
  </TestCase>
  <TestCase Name="Functions in commonExpr - collectionPath, no namespace" Rule="commonExpr">
    <Input>Items/MostPopularNames()/MostPopularName()</Input>
  </TestCase>
  <TestCase Name="Functions in commonExpr - singlePath" Rule="commonExpr">
    <Input>Items/Model.MostPopularName()/Model.MostPopularName()</Input>
  </TestCase>
  <TestCase Name="Functions in commonExpr - singlePath, no namespace" Rule="commonExpr">
    <Input>Items/MostPopularName()/MostPopularName()</Input>
  </TestCase>
  <TestCase Name="Functions in commonExpr - collection parameter in JSON" Rule="commonExpr">
    <Input>Products/Model.ProductsByColor(colors=["red","green","blue"])</Input>
  </TestCase>
  <TestCase Name="Functions in commonExpr - collection parameter in JSON with whitespace" Rule="commonExpr">
    <Input>Products/Model.ProductsByColor(colors=[ "red", "green" , "blue" ])</Input>
  </TestCase>
  <TestCase Name="Functions in commonExpr - collection parameter in JSON with whitespace" Rule="commonExpr">
    <Input>Products/Model.ProductsByColor(colors=%5B%20"red",%20"green"%20,"blue"%20%5D)</Input>
  </TestCase>
  <TestCase Name="Functions in commonExpr - complex JSON parameter" Rule="commonExpr">
    <Input>Model.Available(complex={"Name":"Value"})</Input>
  </TestCase>
  <TestCase Name="Functions in commonExpr - complex JSON parameter with whitespace" Rule="commonExpr">
    <Input>Model.Available(complex={ "Name" : "double quote (\") in value" })</Input>
  </TestCase>
  <TestCase Name="Functions in commonExpr - complex JSON parameter with whitespace" Rule="commonExpr">
    <Input>Model.Available(complex=%7B %22Name%22 : "double%20quote (%5C%22) in value" %7D)</Input>
  </TestCase>
  <TestCase Name="Functions in commonExpr - property as parameter" Rule="commonExpr">
    <Input>Model.PhoneticallySimilar(Word1=Name,Word2=Supplier/Name)</Input>
  </TestCase>
  <TestCase Name="Functions in commonExpr - property as parameter" Rule="commonExpr">
    <Input>Model.PhoneticallySimilar(Word1=Name,Word2=Supplier/Name)</Input>
  </TestCase>
  <TestCase Name="in operator with list of primitives" Rule="commonExpr">
    <Input>FirstName in ('Miller','Smith')</Input>
  </TestCase>
  <TestCase Name="lists can only contain primitive literals" Rule="commonExpr" FailAt="23">
    <Input>FirstName in (FirstName,LastName)</Input>
  </TestCase>
  <TestCase Name="right operand is not a list, it's a complicated way of writing FirstName" Rule="commonExpr">
    <Input>FirstName in (FirstName)</Input>
  </TestCase>
  <TestCase Name="lists only allowed right of in operator" Rule="commonExpr" FailAt="27">
    <Input>EmailAddresses eq ('Miller','Smith')</Input>
  </TestCase>
  <TestCase Name="Functions in filter - alias as parameter" Rule="queryOptions">
    <Input>$filter=Model.PhoneticallySimilar(Word=@expression)&amp;@expression=5 add 3</Input>
  </TestCase>
  <TestCase Name="Functions in filter - expression as parameter" Rule="queryOptions">
    <Input>$filter=Model.PhoneticallySimilar(Number=5 add 3)</Input>
  </TestCase>
  <TestCase Name="Functions in filter - $it as prefix" Rule="queryOptions">
    <Input>$filter=$it/Model.PhoneticallySimilar(Number=5 add 3)</Input>
  </TestCase>
  <TestCase Name="Context URL - Entity set" Rule="odataUri">
    <Input>http://host/service/$metadata#Customers</Input>
  </TestCase>
  <TestCase Name="Context URL - Entity set with $select" Rule="odataRelativeUri">
    <Input>$metadata#Customers(Address,Orders)</Input>
  </TestCase>
  <TestCase Name="Context URL - Entity set with $select" Rule="context">
    <Input>#Customers(Address/Street,Orders)</Input>
  </TestCase>
  <TestCase Name="Context URL - Entity set with $select" Rule="context">
    <Input>#Customers(Address/Country)</Input>
  </TestCase>
  <TestCase Name="Context URL - Entity set with $select and type-cast" Rule="context">
    <Input>#Customers(Address/Model.AddressWithLocation,Orders)</Input>
  </TestCase>
  <TestCase Name="Context URL - Entity set with $select and type-cast, qualifier is required" Rule="context" FailAt="38">
    <Input>#Customers(Address/AddressWithLocation,Orders)</Input>
  </TestCase>
  <TestCase Name="Context URL - Entity set with $select" Rule="context">
    <Input>#Customers(Address/Name,Orders)</Input>
  </TestCase>
  <TestCase Name="Context URL - Entity set with $select" Rule="context">
    <Input>#Customers/Model.VipCustomer(Orders(ID))</Input>
  </TestCase>
  <TestCase Name="Context URL - Entity set with $select and type cast" Rule="context">
    <Input>#Customers(Name,Address/Country,Model.VipCustomer/Rating)</Input>
  </TestCase>
  <TestCase Name="Context URL - Entity set with $select and $expand" Rule="context">
    <Input>#Customers/Model.VipCustomer(Name,Address/Country,Model.*)</Input>
  </TestCase>
  <TestCase Name="Context URL - Entity set with $select and $expand with nested select" Rule="context">
    <Input>#Customers/Model.VipCustomer(Name,Address/Country(Code,Model.ActionName,Model.MostPopularAddress))</Input>
  </TestCase>
  <TestCase Name="Context URL - Entity set with $select and $expand" Rule="context">
    <Input>#Customers/Model.VipCustomer(Orders,Orders())</Input>
  </TestCase>
  <TestCase Name="Context URL - Entity set with $select and $expand with nested select" Rule="context">
    <Input>#Customers/Model.VipCustomer(Orders,Orders(ID,Items(Price)))</Input>
  </TestCase>
  <TestCase Name="Context URL - Entity with $select and $expand with nested select" Rule="context">
    <Input>#Customers/Model.VipCustomer(*,Orders(ID))/$entity</Input>
  </TestCase>
  <TestCase Name="Context URL - Entity set with cast, $select and recursive $expand" Rule="context">
    <Input>#Employees(Title,DirectReports+(FirstName,LastName))</Input>
  </TestCase>
  <TestCase Name="Context URL - Collection of structured type with $select and recursive $expand" Rule="context">
    <Input>#Collection(Model.Employee)(Title,DirectReports+(FirstName,LastName))</Input>
  </TestCase>
  <TestCase Name="Context URL - annotations in select" Rule="context">
    <Input>#Employees(@Core.Messages,Title,DirectReports+(@Core.Messages,FirstName,LastName))</Input>
  </TestCase>
  <TestCase Name="Context URL - annotations in select - cleartext #" Rule="context">
    <Input>#Employees(@Core.Messages/code,@Core.Messages/message,Title,DirectReports+(@Core.Messages#second,FirstName,LastName))</Input>
  </TestCase>
  <TestCase Name="Context URL - annotations in select - # must be cleartext, not percent-encoded" Rule="context" FailAt="89">
    <Input>#Employees(@Core.Messages/code,@Core.Messages/message,Title,DirectReports+(@Core.Messages%23second,FirstName,LastName))</Input>
  </TestCase>
  <TestCase Name="Context URL - annotations in expand" Rule="context">
    <Input>#Employees(@Namespace.EntityTerm(FirstName,LastName))</Input>
  </TestCase>
  <TestCase Name="Context URL - Entity set with type cast" Rule="context">
    <Input>#Customers/Model.VipCustomer</Input>
  </TestCase>
  <TestCase Name="Context URL - Entity" Rule="context">
    <Input>#Customers/$entity</Input>
  </TestCase>
  <TestCase Name="Context URL - Singleton" Rule="context">
    <Input>#SingletonEntity</Input>
  </TestCase>
  <TestCase Name="Context URL - Singleton with containment" Rule="context">
    <Input>#SingletonEntity/Orders</Input>
  </TestCase>
  <TestCase Name="Context URL - Singleton with containment" Rule="context">
    <Input>#SingletonEntity/Orders(3)/Items</Input>
  </TestCase>
  <TestCase Name="Context URL - collection with containment" Rule="context">
    <Input>#Customers('ALFKI')/Orders</Input>
  </TestCase>
  <TestCase Name="Context URL - containment" Rule="context">
    <Input>#Customers('ALFKI')/Orders/$entity</Input>
  </TestCase>
  <TestCase Name="Context URL - collection with containment - multi-level" Rule="context">
    <Input>#Customers('ALFKI')/Orders(1)/Items</Input>
  </TestCase>
  <TestCase Name="Context URL - containment - multi-level with $select" Rule="context">
    <Input>#Customers('ALFKI')/Orders(1)/Items(Product)/$entity</Input>
  </TestCase>
  <TestCase Name="Context URL - containment with type cast" Rule="context">
    <Input>#Customers('ALFKI')/Model.VipCustomer/Address/Orders</Input>
  </TestCase>
  <TestCase Name="Context URL - Singleton with $select" Rule="context">
    <Input>#SingletonEntity(Address,Orders)</Input>
  </TestCase>
  <TestCase Name="Context URL - Entity with $select" Rule="context">
    <Input>#Customers(Address,Orders)/$entity</Input>
  </TestCase>
  <TestCase Name="Context URL - Entity with type cast" Rule="context">
    <Input>#Customers/Model.VipCustomer/$entity</Input>
  </TestCase>
  <TestCase Name="Context URL - Entity property value" Rule="context">
    <Input>#Customers(1)/Addresses</Input>
  </TestCase>
  <TestCase Name="Context URL - Entity property value with $select" Rule="context">
    <Input>#Customers(1)/Addresses(Country)</Input>
  </TestCase>
  <TestCase Name="Context URL - Individual value" Rule="context">
    <Input>#Model.MonetaryAmount</Input>
  </TestCase>
  <TestCase Name="Context URL - Individual collection value" Rule="context">
    <Input>#Collection(Edm.String)</Input>
  </TestCase>
  <TestCase Name="Context URL - Reference collection" Rule="context">
    <Input>#Collection($ref)</Input>
  </TestCase>
  <TestCase Name="Context URL - Reference" Rule="context">
    <Input>#$ref</Input>
  </TestCase>
  <TestCase Name="Context URL - $all" Rule="context">
    <Input>#Collection(Edm.EntityType)</Input>
  </TestCase>
  <TestCase Name="Context URL - $crossjoin" Rule="context">
    <Input>#Collection(Edm.ComplexType)</Input>
  </TestCase>
  <TestCase Name="Context URL - Delta" Rule="context">
    <Input>#Customers/$delta</Input>
  </TestCase>
  <TestCase Name="Context URL - Delta - deleted context" Rule="context">
    <Input>#Orders/$deletedEntity</Input>
  </TestCase>
  <TestCase Name="Context URL - Delta - link" Rule="context">
    <Input>#Customers/$link</Input>
  </TestCase>
  <TestCase Name="Context URL - Delta - deleted link" Rule="context">
    <Input>#Orders/$deletedLink</Input>
  </TestCase>
  <TestCase Name="Header - content-id" Rule="header">
    <Input>content-id: 1</Input>
  </TestCase>
  <TestCase Name="Batch Request - request identifier" Rule="request-id">
    <Input>First-Insert~Customer_1.1</Input>
  </TestCase>
  <TestCase Name="Batch Request - request identifier" Rule="request-id">
    <Input>group1</Input>
  </TestCase>
  <TestCase Name="Header - odata-entityid" Rule="header">
    <Input>odata-entityid: ralf:handl</Input>
  </TestCase>
  <TestCase Name="Header - odata-entityid" Rule="header">
    <Input>odata-entityID: empty-path:/</Input>
  </TestCase>
  <TestCase Name="Header - odata-entityid" Rule="header">
    <Input>odata-entityId:strange:&#x00FF;/</Input>
  </TestCase>
  <TestCase Name="Header - odata-error" Rule="header">
    <Input>OData-error: {"code":"err123","message":"Unsupported functionality","target":"query","details":[{"code":"fourtytwo","target":"$search","message":"$search query option not supported"}]}</Input>
  </TestCase>
  <TestCase Name="Header - odata-isolation" Rule="header">
    <Input>odata-isolation:sNapShoT</Input>
  </TestCase>
  <TestCase Name="Header - isolation" Rule="header">
    <Input>isolation:sNapShoT</Input>
  </TestCase>
  <TestCase Name="Header - odata-maxversion" Rule="header">
    <Input>odata-maxversion: 4.0</Input>
  </TestCase>
  <TestCase Name="Header - odata-maxversion next" Rule="header">
    <Input>odata-maxversion: 4.01</Input>
  </TestCase>
  <TestCase Name="Header - odata-maxversion" Rule="header">
    <Input>odata-maxversion:06.2831852000</Input>
  </TestCase>
  <TestCase Name="Header - odata-version" Rule="header">
    <Input>odata-version: 4.0</Input>
  </TestCase>
  <TestCase Name="Header - odata-version" Rule="header">
    <Input>odata-version: 4.01</Input>
  </TestCase>
  <TestCase Name="Preferences - allow entity references and maximum page size" Rule="prefer">
    <Input>Prefer: odata.allow-entityreferences,odata.maxpagesize=20</Input>
  </TestCase>
  <TestCase Name="Preferences - allow entity references and maximum page size - no prefix" Rule="prefer">
    <Input>Prefer: allow-entityreferences,maxpagesize=20</Input>
  </TestCase>
  <TestCase Name="Preferences - callback" Rule="preference">
    <Input>odata.callback;url="please://call/me?back#here"</Input>
  </TestCase>
  <TestCase Name="Preferences - callback" Rule="preference">
    <Input>odata.callback;url="http://myserver/notfication/token/12345"</Input>
  </TestCase>
  <TestCase Name="Preferences - callback" Rule="preference">
    <Input>odata.callback;url="some:where"</Input>
  </TestCase>
  <TestCase Name="Preferences - callback" Rule="preference">
    <Input>odata.callback;url="some:/where"</Input>
  </TestCase>
  <TestCase Name="Preferences - without prefix" Rule="preference">
    <Input>callback;url="some:/where"</Input>
  </TestCase>
  <TestCase Name="Preferences - continue on error" Rule="preference">
    <Input>odata.continue-on-error</Input>
  </TestCase>
  <TestCase Name="Preferences - continue on error - no prefix" Rule="preference">
    <Input>continue-on-error</Input>
  </TestCase>
  <TestCase Name="Preferences - continue on error with value true" Rule="preference">
    <Input>odata.continue-on-error=true</Input>
  </TestCase>
  <TestCase Name="Preferences - continue on error with value true" Rule="preference">
    <Input>continue-on-error=true</Input>
  </TestCase>
  <TestCase Name="Preferences - continue on error with value false" Rule="preference">
    <Input>odata.continue-on-error=false</Input>
  </TestCase>
  <TestCase Name="Preferences - continue on error with value false" Rule="preference">
    <Input>continue-on-error=false</Input>
  </TestCase>
  <TestCase Name="Preferences - include annotations - all" Rule="preference">
    <Input>odata.include-annotations="*"</Input>
  </TestCase>
  <TestCase Name="Preferences - include annotations - all with a given qualifier" Rule="preference">
    <Input>odata.include-annotations="*#qualified"</Input>
  </TestCase>
  <TestCase Name="Preferences - include annotations - none" Rule="preference">
    <Input>odata.include-annotations="-*"</Input>
  </TestCase>
  <TestCase Name="Preferences - include annotations - none with a given qualifier" Rule="preference">
    <Input>odata.include-annotations="-*#qualified"</Input>
  </TestCase>
  <TestCase Name="Preferences - include annotations - all in namespace" Rule="preference">
    <Input>odata.include-annotations="Namespace.*"</Input>
  </TestCase>
  <TestCase Name="Preferences - include annotations - all in namespace with given qualifier" Rule="preference">
    <Input>odata.include-annotations="Namespace.*#quali"</Input>
  </TestCase>
  <TestCase Name="Preferences - include annotations - namespace must be suffixed with .*" Rule="includeAnnotationsPreference"
    FailAt="36"
  >
    <Input>odata.include-annotations="Namespace"</Input>
  </TestCase>
  <TestCase Name="Preferences - include annotations - namespace must be suffixed with .*" Rule="includeAnnotationsPreference"
    FailAt="37"
  >
    <Input>odata.include-annotations="Namespace."</Input>
  </TestCase>
  <TestCase Name="Preferences - include annotations - nothing from namespace" Rule="preference">
    <Input>odata.include-annotations="-Namespace.*"</Input>
  </TestCase>
  <TestCase Name="Preferences - include annotations - nothing from namespace" Rule="preference">
    <Input>odata.include-annotations="-Namespace.*#quali"</Input>
  </TestCase>
  <TestCase Name="Preferences - include annotations - only a special term" Rule="preference">
    <Input>odata.include-annotations="Namespace.SomeTerm"</Input>
  </TestCase>
  <TestCase Name="Preferences - include annotations - only a special term" Rule="preference">
    <Input>odata.include-annotations="Namespace.SomeTerm#qual"</Input>
  </TestCase>
  <TestCase Name="Preferences - include annotations - everything except a special term" Rule="preference">
    <Input>odata.include-annotations="-Namespace.SomeTerm"</Input>
  </TestCase>
  <TestCase Name="Preferences - include annotations - only a special term" Rule="preference">
    <Input>odata.include-annotations="-Namespace.SomeTerm#qual"</Input>
  </TestCase>
  <TestCase Name="Preferences - include annotations - several" Rule="preference">
    <Input>odata.include-annotations="Namespace.SomeTerm,Model.AnotherTerm,Namespace.*"</Input>
  </TestCase>
  <TestCase Name="Preferences - include annotations - no prefix" Rule="preference">
    <Input>include-annotations="*"</Input>
  </TestCase>
  <TestCase Name="Preferences - maxpagesize - ok" Rule="preference">
    <Input>odata.maxpagesize=50</Input>
  </TestCase>
  <TestCase Name="Preferences - maxpagesize - no prefix" Rule="preference">
    <Input>maxpagesize=50</Input>
  </TestCase>
  <TestCase Name="Preferences - maxpagesize - not zero" Rule="maxpagesizePreference" FailAt="18">
    <Input>odata.maxpagesize=0</Input>
  </TestCase>
  <TestCase Name="Preferences - maxpagesize - not negative" Rule="maxpagesizePreference" FailAt="18">
    <Input>odata.maxpagesize=-1</Input>
  </TestCase>
  <TestCase Name="Preferences - omit-values - defaults" Rule="preference">
    <Input>omit-values=defaults</Input>
  </TestCase>
  <TestCase Name="Preferences - omit-values - nulls" Rule="preference">
    <Input>omit-values=nulls</Input>
  </TestCase>
  <TestCase Name="Preferences - return minimal" Rule="preference">
    <Input>return=minimal</Input>
  </TestCase>
  <TestCase Name="Preferences - return representation" Rule="preference">
    <Input>return=representation</Input>
  </TestCase>
  <TestCase Name="Preferences - respond async" Rule="preference">
    <Input>respond-async</Input>
  </TestCase>
  <TestCase Name="Preferences - track changes" Rule="preference">
    <Input>odata.track-changes</Input>
  </TestCase>
  <TestCase Name="Preferences - track changes - no prefix" Rule="preference">
    <Input>track-changes</Input>
  </TestCase>
  <TestCase Name="Preferences - wait" Rule="preference">
    <Input>wait=0</Input>
  </TestCase>
  <TestCase Name="Preferences - wait with bad whitespace" Rule="preference">
    <Input>wait = 0</Input>
  </TestCase>
  <TestCase Name="Schema Version - numeric" Rule="systemQueryOption">
    <Input>$schemaversion=0001</Input>
  </TestCase>
  <TestCase Name="Schema Version - alphanumeric" Rule="systemQueryOption">
    <Input>schemaversion=second</Input>
  </TestCase>
  <TestCase Name="Schema Version - semantic" Rule="systemQueryOption">
    <Input>schemaversion=1.42.2</Input>
  </TestCase>
  <TestCase Name="Schema Version - latest" Rule="systemQueryOption">
    <Input>$schemaversion=*</Input>
  </TestCase>
  <TestCase Name="ODATA-633 hex pair bug" Rule="stringInUrl">
    <Input>"b%75g"</Input>
  </TestCase>
</TestSuite>