UNPKG

trader-server

Version:

OData server for testing strategies, simulating and real trading.

1,443 lines (1,431 loc) 91.1 kB
<?xml version="1.0" encoding="UTF-8"?> <!-- OData Version 4.0 OASIS Standard 24 February 2014 Copyright (c) OASIS Open 2014. All Rights Reserved. Source: http://docs.oasis-open.org/odata/odata/v4.0/os/abnf/ --> <!-- Technical Committee: OASIS Open Data Protocol (OData) TC Chairs: - Barbara Hartel (barbara.hartel@sap.com), SAP AG - Ram Jeyaraman (Ram.Jeyaraman@microsoft.com), Microsoft Editors: - Ralf Handl (ralf.handl@sap.com), SAP AG - Michael Pizzo (mikep@microsoft.com), Microsoft Additional artifacts: This test case document is one component of a Work Product which consists of: - OData Version 4.0 Part 1: Protocol - OData Version 4.0 Part 2: URL Conventions - OData Version 4.0 Part 3: Common Schema Definition Language (CSDL) - OData ABNF Construction Rules Version 4.0 - OData ABNF Test Cases (this document) - OData Core Vocabulary - OData Measures Vocabulary - OData Metadata Service Entity Model - OData EDMX XML Schema - OData EDM XML Schema Related work: This work product is related to the following two Work Products, each of which define alternate formats for OData payloads - OData JSON Format Version 4.0 - OData Atom Format Version 4.0 This specification replaces or supersedes: - None Declared XML namespaces: - None 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.0. 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.0 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"> <DisableTrace Rule="odataIdentifier"/> <DisableTrace Rule="identifierLeadingCharacter"/> <DisableTrace Rule="identifierCharacter"/> <DisableTrace Rule="ALPHA"/> <DisableTrace Rule="DIGIT"/> <!-- TODO: remove constraints that were only needed for data aggregation --> <Constraint Rule="action"> <Match>ActionName</Match> <Match>Rejection</Match> </Constraint> <Constraint Rule="actionImport"> <Match>Activation</Match> </Constraint> <Constraint Rule="complexColProperty"> <Match>Addresses</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>search</Match> </Constraint> <Constraint Rule="entityColFunction"> <Match>AllOrders</Match> <Match>ProductsByColor</Match> </Constraint> <Constraint Rule="entityColFunctionImport"> <Match>AllProductsByColor</Match> <Match>AllProductsByCategoryId</Match> </Constraint> <Constraint Rule="entityColNavigationProperty"> <Match>DirectReports</Match> <Match>Items</Match> <Match>Orders</Match> <Match>Products</Match> <Match>Sales</Match> </Constraint> <Constraint Rule="entityColFunction"> </Constraint> <Constraint Rule="entityColFunctionImport"> <Match>ProductsByCategoryId</Match> <Match>ProductsByColor</Match> <Match>ProductsByComplex</Match> <Match>ProductsByCustomer</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>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>Products</Match> <Match>Sales</Match> <Match>SalesOrganizations</Match> <Match>Suppliers</Match> </Constraint> <Constraint Rule="entityTypeName"> <Match>Customer</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="keyPropertyAlias"> <Match>KeyAlias</Match> </Constraint> <Constraint Rule="lambdaVariableExpr"> <Match>lambda</Match> </Constraint> <Constraint Rule="singletonEntity"> <Match>BestProductEverCreated</Match> <Match>SingletonEntity</Match> </Constraint> <Constraint Rule="namespacePart"> <Match>Model</Match> <Match>Namespace</Match> <Match>odata</Match> <Match>SaM</Match> <Match>Sales</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>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>Amount</Match> <Match>BirthDate</Match> <Match>City</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>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>Shipped</Match> <Match>Spokesperson</Match> <Match>Status</Match> <Match>Street</Match> <Match>style</Match> <Match>SumAmount</Match> <Match>TaxRate</Match> <Match>Title</Match> </Constraint> <Constraint Rule="streamProperty"> <Match>Thumbnail</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="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="DateTimeOffset: no seconds" Rule="dateTimeOffsetValue"> <Input>2012-09-03T13:52Z</Input> </TestCase> <TestCase Name="DateTimeOffset: seconds" Rule="dateTimeOffsetValue"> <Input>2012-09-03T08:09:02Z</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="Decimal" Rule="decimalValue"> <Input>3.14</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="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="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: 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 OData URI --> <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 alias" Rule="resourcePath"> <Input>Categories(KeyAlias=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 - allowed but reserved for future use" Rule="odataUri"> <Input>http://services.odata.org/OData/OData.svc/$metadata?$format=json</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.2 - Batch URL" Rule="odataUri"> <Input>http://services.odata.org/OData/OData.svc/$batch</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 alias" Rule="odataRelativeUri"> <Input>ProductsByCategoryId(categoryId=@cat)?@cat=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 - 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 (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" 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 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.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.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" FailAt="14"> <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="25"> <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 - multiple" Rule="odataRelativeUri"> <Input>Customers/Model.MostPopularAddresses()/Model.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 - $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 - 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.9 Inheritance - set of subtypes" Rule="odataRelativeUri"> <Input>Products/Model.BestSellingProduct</Input> </TestCase> <TestCase Name="4.9 Inheritance - set of subtypes, then key access" Rule="odataRelativeUri"> <Input>Products/Model.BestSellingProduct(1)</Input> </TestCase> <TestCase Name="4.9 Inheritance - key access, then cast to subtype" Rule="odataRelativeUri"> <Input>Products(1)/Model.BestSellingProduct</Input> </TestCase> <TestCase Name="4.9 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.9 Inheritance - $expand" Rule="odataRelativeUri"> <Input>Categories?$expand=Products/Model.BestSellingProduct</Input> </TestCase> <TestCase Name="4.9 Inheritance - $expand" Rule="odataRelativeUri"> <Input>Products?$expand=Model.BestSellingProduct/Sales</Input> </TestCase> <TestCase Name="4.9 Inheritance - $expand" Rule="odataRelativeUri"> <Input>Categories?$expand=Products/Model.BestSellingProduct($select=Name)</Input> </TestCase> <TestCase Name="4.9 Inheritance - $expand" Rule="odataRelativeUri"> <Input>Categories?$expand=Products($filter=startswith(Name,'P'))</Input> </TestCase> <TestCase Name="4.10 Addressing a Media Resource" Rule="odataRelativeUri"> <Input>Categories(1)/$value</Input> </TestCase> <TestCase Name="5 $ is reserved" Rule="filter"> <Input>$filter=true</Input> </TestCase> <TestCase Name="5.1.1 Filter" 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 - 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.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.10 Logical Operator Examples" Rule="boolCommonExpr"> <Input>Name eq 'Milk'</Input> </TestCase> <TestCase Name="5.1.1.1.10 Logical Operator Examples" Rule="boolCommonExpr"> <Input>Supplier/Name eq 'Milk'</Input> </TestCase> <TestCase Name="5.1.1.1.10 Logical Operator Examples" Rule="boolCommonExpr"> <Input>Name eq 'Milk' and Price lt 2.55</Input> </TestCase> <TestCase Name="5.1.1.1.10 Logical Operator Examples" Rule="boolCommonExpr"> <Input>Name eq 'Milk' or Price lt 2.55</Input> </TestCase> <TestCase Name="5.1.1.1.10 Logical Operator Examples" Rule="boolCommonExpr"> <Input>not endswith(Name,'ilk')</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 Multiplication" Rule="commonExpr"> <Input>Price mul 2</Input> </TestCase> <TestCase Name="5.1.1.2.4 Division" Rule="commonExpr"> <Input>Price div 2</Input> </TestCase> <TestCase Name="5.1.1.2.5 Modulo" Rule="commonExpr"> <Input>Price mod 5</Input> </TestCase> <TestCase Name="5.1.1.2.5 Negate" Rule="commonExpr"> <Input>-Price</Input> </TestCase> <TestCase Name="5.1.1.2.6 Arithmetic Operator Examples" Rule="boolCommonExpr"> <Input>Price add 2.45 eq 5.00</Input> </TestCase> <TestCase Name="5.1.1.2.6 Arithmetic Operator Examples" Rule="boolCommonExpr"> <Input>Price sub 0.55 eq 2.00</Input> </TestCase> <TestCase Name="5.1.1.2.6 Arithmetic Operator Examples" Rule="boolCommonExpr"> <Input>Price mul 2.0 eq 5.10</Input> </TestCase> <TestCase Name="5.1.1.2.6 Arithmetic Operator Examples" Rule="boolCommonExpr"> <Input>Price div 2.55 eq 1</Input> </TestCase> <TestCase Name="5.1.1.2.6 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.4.1 contains" Rule="boolCommonExpr"> <Input>contains(CompanyName,'lfreds')</Input> </TestCase> <TestCase Name="5.1.1.4.2 endswith" Rule="boolCommonExpr"> <Input>endswith(CompanyName,'Futterkiste')</Input> </TestCase> <TestCase Name="5.1.1.4.3 startswith" Rule="boolCommonExpr"> <Input>startswith(CompanyName,'Futterkiste')</Input> </TestCase> <TestCase Name="5.1.1.4.3 startswith" Rule="boolCommonExpr"> <Input>startswith(Supplier/Name,'Futterkiste')</Input> </TestCase> <TestCase Name="5.1.1.4.4 length" Rule="boolCommonExpr"> <Input>length(CompanyName) eq 19</Input> </TestCase> <TestCase Name="5.1.1.4.5 indexof" Rule="boolCommonExpr"> <Input>indexof(CompanyName,'lfreds') eq 1</Input> </TestCase> <TestCase Name="5.1.1.4.6 substring" Rule="commonExpr"> <Input>substring(CompanyName, 5)</Input> </TestCase> <TestCase Name="5.1.1.4.6 substring with length" Rule="commonExpr"> <Input>substring(CompanyName,5,2)</Input> </TestCase> <TestCase Name="5.1.1.4.7 tolower" Rule="commonExpr"> <Input>tolower(CompanyName)</Input> </TestCase> <TestCase Name="5.1.1.4.8 toupper" Rule="commonExpr"> <Input>toupper(CompanyName)</Input> </TestCase> <TestCase Name="5.1.1.4.9 trim" Rule="commonExpr"> <Input>trim(CompanyName)</Input> </TestCase> <TestCase Name="5.1.1.4.10 concat" Rule="commonExpr"> <Input>concat(CompanyName, Name)</Input> </TestCase> <TestCase Name="5.1.1.4.10 concat" Rule="commonExpr"> <Input>concat(concat(Street,'-'),City)</Input> </TestCase> <TestCase Name="5.1.1.4.11 year" Rule="commonExpr"> <Input>year(BirthDate)</Input> </TestCase> <TestCase Name="5.1.1.4.12" Rule="commonExpr"> <Input>month(BirthDate)</Input> </TestCase> <TestCase Name="5.1.1.4.13" Rule="commonExpr"> <Input>day(BirthDate)</Input> </TestCase> <TestCase Name="5.1.1.4.14" Rule="commonExpr"> <Input>hour(BirthDate)</Input> </TestCase> <TestCase Name="5.1.1.4.15" Rule="commonExpr"> <Input>minute(BirthDate)</Input> </TestCase> <TestCase Name="5.1.1.4.16" Rule="commonExpr"> <Input>second(BirthDate)</Input> </TestCase> <TestCase Name="5.1.1.4.17" Rule="commonExpr"> <Input>fractionalseconds(LifeTime)</Input> </TestCase> <TestCase Name="5.1.1.4.18" Rule="commonExpr"> <Input>totalseconds(LifeTime)</Input> </TestCase> <TestCase Name="5.1.1.4.19" Rule="commonExpr"> <Input>date(LifeTime)</Input> </TestCase> <TestCase Name="5.1.1.4.20" Rule="commonExpr"> <Input>time(ReleaseDate)</Input> </TestCase> <TestCase Name="5.1.1.4.21 - totaloffsetminutes" Rule="commonExpr"> <Input>totaloffsetminutes(ReleaseDate)</Input> </TestC