| /// <reference path="../src/odata-atom.js" /> |
| /// <reference path="../src/odata-xml.js" /> |
| /// <reference path="../src/odata-metadata.js" /> |
| /// <reference path="../src/odata.js" /> |
| /// <reference path="common/djstest.js" /> |
| |
| // odata-metadata-tests.js |
| |
| (function (window, undefined) { |
| djstest.addTest(function testMetadataHandler() { |
| // Test cases as result / model tuples. |
| var cases = [ |
| { i: {}, e: undefined }, |
| { i: { headers: { "Content-Type": "application/xml" }, body: '<edmx:Edmx Version="4.0" xmlns:edmx="http://docs.oasis-open.org/odata/ns/edmx" />' }, |
| e: { version: "4.0" } |
| } |
| ]; |
| |
| var i, len; |
| for (i = 0, len = cases.length; i < len; i++) { |
| var response = cases[i].i; |
| var testClient = { request: function (r, success, error) { success(response); } }; |
| window.odatajs.oData.read("foo", function (data) { |
| djstest.assertAreEqualDeep(data, cases[i].e, "handler result matches target"); |
| }, function (err) { |
| djstest.fail(err.message); |
| }, window.odatajs.oData.metadataHandler, testClient); |
| } |
| |
| djstest.done(); |
| }); |
| |
| // DATAJS INTERNAL START |
| djstest.addTest(function testScriptCase() { |
| // Test cases as input/result pairs. |
| var cases = [ |
| { i: null, e: null }, |
| { i: "", e: "" }, |
| { i: "a", e: "a" }, |
| { i: "A", e: "a" }, |
| { i: "TestCase", e: "testCase" }, |
| { i: "123abc", e: "123abc" }, |
| { i: "ITEM", e: "ITEM" } |
| ]; |
| |
| var i, len; |
| for (i = 0, len = cases.length; i < len; i++) { |
| djstest.assertAreEqual(window.odatajs.oData.scriptCase(cases[i].i), cases[i].e, "processed input matches expected value"); |
| } |
| |
| djstest.done(); |
| }); |
| |
| djstest.addTest(function testGetChildSchema() { |
| // Test cases as input parent / input element / result tuples. |
| var schema = window.odatajs.oData.schema; |
| var cases = [ |
| { ip: schema.elements.EntityType, ie: "Property", e: { isArray: true, propertyName: "property"} }, |
| { ip: schema.elements.EntityType, ie: "Key", e: { isArray: true, propertyName: "key"} }, |
| { ip: schema.elements.EntitySet, ie: "SomethingElse", e: null }, |
| { ip: schema.elements.Property, ie: "Name", e: null} // this is an attribute, not an element, thus it's no found |
| ]; |
| |
| var i, len; |
| for (i = 0, len = cases.length; i < len; i++) { |
| var result = window.odatajs.oData.getChildSchema(cases[i].ip, cases[i].ie); |
| djstest.assertAreEqualDeep(result, cases[i].e, "getChildSchema matches target"); |
| } |
| |
| djstest.done(); |
| }); |
| |
| var testFullCsdl = '' + |
| '<?xml version="1.0" encoding="utf-8"?>\r\n' + |
| '<edmx:Edmx Version="4.0" xmlns:edmx="http://docs.oasis-open.org/odata/ns/edmx">\r\n' + |
| ' <edmx:DataServices xmlns:m="http://docs.oasis-open.org/odata/ns/metadata" m:MaxDataServiceVersion="4.0" m:DataServiceVersion="4.0">\r\n' + |
| ' <Schema xmlns="http://docs.oasis-open.org/odata/ns/edm" Namespace="TestCatalog.Model">\r\n' + |
| ' <EntityType Name="Genre">\r\n' + |
| ' <Key><PropertyRef Name="Name" /></Key>\r\n' + |
| ' <Property Name="Name" Type="Edm.String" Nullable="false" MaxLength="50" Unicode="false" />\r\n' + |
| ' <NavigationProperty Name="Titles" Type="Collection(TestCatalog.Model.Title)" Partner="Series" />\r\n' + |
| ' </EntityType>\r\n' + |
| ' <EntityType Name="Language">\r\n' + |
| ' <Key><PropertyRef Name="Name" /></Key>\r\n' + |
| ' <Property Name="Name" Type="Edm.String" Nullable="false" MaxLength="80" Unicode="false" />\r\n' + |
| ' <NavigationProperty Name="Titles" Type="Collection(TestCatalog.Model.Title)" Partner="Languages" />\r\n' + |
| ' </EntityType>\r\n' + |
| ' <EntityType Name="Person">\r\n' + |
| ' <Key><PropertyRef Name="Id" /></Key>\r\n' + |
| ' <Property Name="Id" Type="Edm.Int32" Nullable="false" />\r\n' + |
| ' <Property Name="Name" Type="Edm.String" Nullable="false" MaxLength="80" Unicode="true" />\r\n' + |
| ' <NavigationProperty Name="Awards" Type="Collection(TestCatalog.Model.TitleAward)" Partner="Person"/>\r\n' + |
| ' <NavigationProperty Name="TitlesActedIn" Type="Collection(TestCatalog.Model.Title)" Partner="Cast"/>\r\n' + |
| ' <NavigationProperty Name="TitlesDirected" Type="Collection(TestCatalog.Model.Title)" Partner="Directors"/>\r\n' + |
| ' </EntityType>\r\n' + |
| ' <EntityType Name="TitleAudioFormat">\r\n' + |
| ' <Key><PropertyRef Name="TitleId" /><PropertyRef Name="DeliveryFormat" /><PropertyRef Name="Language" /><PropertyRef Name="Format" /></Key>\r\n' + |
| ' <Property Name="TitleId" Type="Edm.String" Nullable="false" MaxLength="30" FixedLength="false" />\r\n' + |
| ' <Property Name="DeliveryFormat" Type="Edm.String" Nullable="false" MaxLength="10" Unicode="false" />\r\n' + |
| ' <Property Name="Language" Type="Edm.String" Nullable="false" MaxLength="30" Unicode="false" FixedLength="false" />\r\n' + |
| ' <Property Name="Format" Type="Edm.String" Nullable="false" MaxLength="30" Unicode="false" FixedLength="false" />\r\n' + |
| ' <NavigationProperty Name="Title" Type="TestCatalog.Model.Title" Partner="AudioFormats" >\r\n' + |
| ' <ReferentialConstraint Property="TitleId" ReferencedProperty="Id" />' + |
| ' </NavigationProperty>' + |
| ' </EntityType>\r\n' + |
| ' <EntityType Name="TitleAward">\r\n' + |
| ' <Key><PropertyRef Name="Id" /></Key>\r\n' + |
| ' <Property Name="Id" Type="Edm.Guid" Nullable="false" />\r\n' + |
| ' <Property Name="Type" Type="Edm.String" Nullable="false" MaxLength="30" Unicode="false" />\r\n' + |
| ' <Property Name="Category" Type="Edm.String" Nullable="false" MaxLength="60" Unicode="false" />\r\n' + |
| ' <Property Name="Year" Type="Edm.Int32" Nullable="true" />\r\n' + |
| ' <Property Name="Won" Type="Edm.Boolean" Nullable="false" />\r\n' + |
| ' <NavigationProperty Name="Title" Type="TestCatalog.Model.Title" Partner="Awards"/>\r\n' + |
| ' <NavigationProperty Name="Person" Type="TestCatalog.Model.Person" Partner="Awards"/>\r\n' + |
| ' </EntityType>\r\n' + |
| ' <EntityType Name="Title" HasStream="true">\r\n' + |
| ' <Key><PropertyRef Name="Id" /></Key>\r\n' + |
| ' <Property Name="Id" Type="Edm.String" Nullable="false" MaxLength="30" />\r\n' + |
| ' <Property Name="Synopsis" Type="Edm.String" Nullable="true" MaxLength="Max" Unicode="false" />\r\n' + |
| ' <Property Name="ShortSynopsis" Type="Edm.String" Nullable="true" MaxLength="Max" Unicode="false" />\r\n' + |
| ' <Property Name="AverageRating" Type="Edm.Double" Nullable="true" />\r\n' + |
| ' <Property Name="ReleaseYear" Type="Edm.Int32" Nullable="true" />\r\n' + |
| ' <Property Name="Url" Type="Edm.String" Nullable="true" MaxLength="200" Unicode="false" />\r\n' + |
| ' <Property Name="Runtime" Type="Edm.Int32" Nullable="true" />\r\n' + |
| ' <Property Name="Rating" Type="Edm.String" Nullable="true" MaxLength="10" Unicode="false" />\r\n' + |
| ' <Property Name="DateModified" Type="Edm.DateTime" Nullable="false" />\r\n' + |
| ' <Property Name="Type" Type="Edm.String" Nullable="false" MaxLength="8" Unicode="false" />\r\n' + |
| ' <Property Name="BoxArt" Type="TestCatalog.Model.BoxArt" Nullable="false" />\r\n' + |
| ' <Property Name="ShortName" Type="Edm.String" Nullable="false" MaxLength="200" Unicode="false" />\r\n' + |
| ' <Property Name="Name" Type="Edm.String" Nullable="false" MaxLength="200" Unicode="false" />\r\n' + |
| ' <Property Name="Instant" Type="TestCatalog.Model.InstantAvailability" Nullable="false" />\r\n' + |
| ' <Property Name="Dvd" Type="TestCatalog.Model.DeliveryFormatAvailability" Nullable="false" />\r\n' + |
| ' <Property Name="BluRay" Type="TestCatalog.Model.DeliveryFormatAvailability" Nullable="false" />\r\n' + |
| ' <Property Name="TinyUrl" Type="Edm.String" Nullable="false" />\r\n' + |
| ' <Property Name="WebsiteUrl" Type="Edm.String" Nullable="true" />\r\n' + |
| ' <Property Name="TestApiId" Type="Edm.String" Nullable="false" />\r\n' + |
| ' <NavigationProperty Name="AudioFormats" Type="Collection(TestCatalog.Model.TitleAudioFormat)" Partner="Title" Nullable="false" />\r\n' + |
| ' <NavigationProperty Name="Awards" Type="Collection(TestCatalog.Model.TitleAward)" Partner="Title" Nullable="false" />\r\n' + |
| ' <NavigationProperty Name="Disc" Type="Collection(TestCatalog.Model.Title)" />\r\n' + |
| ' <NavigationProperty Name="Movie" Type="Collection(TestCatalog.Model.Title)" />\r\n' + |
| ' <NavigationProperty Name="Season" Type="Collection(TestCatalog.Model.Title)" />\r\n' + |
| ' <NavigationProperty Name="Series" Type="Collection(TestCatalog.Model.Title)" />\r\n' + |
| ' <NavigationProperty Name="ScreenFormats" Type="Collection(TestCatalog.Model.TitleScreenFormat)" Partner="Title" Nullable="false" />\r\n' + |
| ' <NavigationProperty Name="Cast" Type="Collection(TestCatalog.Model.Person)" Partner="TitlesActedIn" Nullable="false" />\r\n' + |
| ' <NavigationProperty Name="Languages" Type="Collection(TestCatalog.Model.Language)" Partner="Titles" Nullable="false" />\r\n' + |
| ' <NavigationProperty Name="Directors" Type="Collection(TestCatalog.Model.Person)" Partner="TitlesDirected" Nullable="false" />\r\n' + |
| ' <NavigationProperty Name="Genres" Type="Collection(TestCatalog.Model.Genre)" Partner="Titles" Nullable="false" />\r\n' + |
| ' </EntityType>\r\n' + |
| ' <ComplexType Name="BoxArt">\r\n' + |
| ' <Property Name="SmallUrl" Type="Edm.String" Nullable="true" MaxLength="80" Unicode="false" />\r\n' + |
| ' <Property Name="MediumUrl" Type="Edm.String" Nullable="true" MaxLength="80" Unicode="false" />\r\n' + |
| ' <Property Name="LargeUrl" Type="Edm.String" Nullable="true" MaxLength="80" Unicode="false" />\r\n' + |
| ' <Property Name="HighDefinitionUrl" Type="Edm.String" Nullable="true" MaxLength="80" Unicode="false" />\r\n' + |
| ' </ComplexType>\r\n' + |
| ' <ComplexType Name="InstantAvailability">\r\n' + |
| ' <Property Name="Available" Type="Edm.Boolean" Nullable="false" />\r\n' + |
| ' <Property Name="AvailableFrom" Type="Edm.DateTime" Nullable="true" />\r\n' + |
| ' <Property Name="AvailableTo" Type="Edm.DateTime" Nullable="true" />\r\n' + |
| ' <Property Name="HighDefinitionAvailable" Type="Edm.Boolean" Nullable="false" />\r\n' + |
| ' <Property Name="Runtime" Type="Edm.Int32" Nullable="true" />\r\n' + |
| ' <Property Name="Rating" Type="Edm.String" Nullable="true" MaxLength="10" Unicode="false" />\r\n' + |
| ' </ComplexType>\r\n' + |
| ' <ComplexType Name="DeliveryFormatAvailability">\r\n' + |
| ' <Property Name="Available" Type="Edm.Boolean" Nullable="false" />\r\n' + |
| ' <Property Name="AvailableFrom" Type="Edm.DateTime" Nullable="true" />\r\n' + |
| ' <Property Name="AvailableTo" Type="Edm.DateTime" Nullable="true" />\r\n' + |
| ' <Property Name="Runtime" Type="Edm.Int32" Nullable="true" />\r\n' + |
| ' <Property Name="Rating" Type="Edm.String" Nullable="true" MaxLength="10" Unicode="false" />\r\n' + |
| ' </ComplexType>\r\n' + |
| ' <EntityType Name="TitleScreenFormat">\r\n' + |
| ' <Key><PropertyRef Name="TitleId" /><PropertyRef Name="DeliveryFormat" /><PropertyRef Name="Format" /></Key>\r\n' + |
| ' <Property Name="TitleId" Type="Edm.String" Nullable="false" MaxLength="30" />\r\n' + |
| ' <Property Name="DeliveryFormat" Type="Edm.String" Nullable="false" MaxLength="10" Unicode="false" />\r\n' + |
| ' <Property Name="Format" Type="Edm.String" Nullable="false" MaxLength="30" Unicode="false" />\r\n' + |
| ' <NavigationProperty Name="Title" Type="TestCatalog.Model.Title" Partner="ScreenFormats" >\r\n' + |
| ' <ReferentialConstraint Property="TitleId" ReferencedProperty="Id" />' + |
| ' </NavigationProperty>' + |
| ' </EntityType>\r\n' + |
| ' <Function Name="ProductsByRating">' + |
| ' <ReturnType Type="Collection(TestCatalog.Model.Title)" />\r\n' + |
| ' </Function>\r\n' + |
| ' </Schema>\r\n' + |
| ' <Schema xmlns="http://docs.oasis-open.org/odata/ns/edm" Namespace="Test.Catalog">\r\n' + |
| ' <EntityContainer Name="TestCatalog" >\r\n' + |
| ' <FunctionImport Name="Movies" EntitySet="Titles" Function="estCatalog.Model.GetTitles" />\r\n' + |
| ' <FunctionImport Name="Series" EntitySet="Titles" Function="estCatalog.Model.GetTitles" />\r\n' + |
| ' <FunctionImport Name="Seasons" EntitySet="Titles" Function="estCatalog.Model.GetTitles" />\r\n' + |
| ' <FunctionImport Name="Discs" EntitySet="Titles" Function="estCatalog.Model.GetTitles" />\r\n' + |
| ' <FunctionImport Name="Episodes" EntitySet="Titles" Function="estCatalog.Model.GetTitles" />\r\n' + |
| ' <EntitySet Name="Genres" EntityType="TestCatalog.Model.Genre" >\r\n' + |
| ' <NavigationPropertyBinding Target="Titles" Path="Titles" />\r\n' + |
| ' </EntitySet>\r\n' + |
| ' <EntitySet Name="Languages" EntityType="TestCatalog.Model.Language" >\r\n' + |
| ' <NavigationPropertyBinding Target="Titles" Path="Languages" />\r\n' + |
| ' </EntitySet>\r\n' + |
| ' <EntitySet Name="People" EntityType="TestCatalog.Model.Person" >\r\n' + |
| ' <NavigationPropertyBinding Target="Titles" Path="Cast" />\r\n' + |
| ' <NavigationPropertyBinding Target="Titles" Path="Directors" />\r\n' + |
| ' </EntitySet>' + |
| ' <EntitySet Name="TitleAudioFormats" EntityType="TestCatalog.Model.TitleAudioFormat" >\r\n' + |
| ' <NavigationPropertyBinding Target="Titles" Path="AudioFormats" />\r\n' + |
| ' </EntitySet>\r\n' + |
| ' <EntitySet Name="TitleAwards" EntityType="TestCatalog.Model.TitleAward" >\r\n' + |
| ' <NavigationPropertyBinding Target="Titles" Path="Awards" />\r\n' + |
| ' </EntitySet>\r\n' + |
| ' <EntitySet Name="Titles" EntityType="TestCatalog.Model.Title" >\r\n' + |
| ' <NavigationPropertyBinding Target="TitleAudioFormats" Path="Title" />\r\n' + |
| ' <NavigationPropertyBinding Target="TitleAwards" Path="Title" />\r\n' + |
| ' <NavigationPropertyBinding Target="Titles" Path="Disc" />\r\n' + |
| ' <NavigationPropertyBinding Target="Titles" Path="Movie" />\r\n' + |
| ' <NavigationPropertyBinding Target="Titles" Path="Season" />\r\n' + |
| ' <NavigationPropertyBinding Target="Titles" Path="Series" />\r\n' + |
| ' <NavigationPropertyBinding Target="TitleScreenFormats" Path="ScreenFormats" />\r\n' + |
| ' <NavigationPropertyBinding Target="People" Path="TitlesActedIn" />\r\n' + |
| ' <NavigationPropertyBinding Target="Languages" Path="Titles" />\r\n' + |
| ' <NavigationPropertyBinding Target="People" Path="TitlesDirected" />\r\n' + |
| ' <NavigationPropertyBinding Target="Genres" Path="Genres" />\r\n' + |
| ' </EntitySet>\r\n' + |
| ' <EntitySet Name="TitleScreenFormats" EntityType="TestCatalog.Model.TitleScreenFormat" >\r\n' + |
| ' <NavigationPropertyBinding Target="TitleScreenFormats" Path="Title" />\r\n' + |
| ' </EntitySet>\r\n' + |
| ' </EntityContainer>\r\n' + |
| ' </Schema>\r\n' + |
| ' </edmx:DataServices>\r\n' + |
| '</edmx:Edmx>\r\n' + |
| ''; |
| |
| var testFullMetadataResult = { |
| "version": "4.0", |
| "dataServices": { |
| "dataServiceVersion": "4.0", |
| "maxDataServiceVersion": "4.0", |
| "schema": [{ |
| "namespace": "TestCatalog.Model", |
| "entityType": [{ |
| "name": "Genre", |
| "key": [{ "propertyRef": [{ "name": "Name"}] }], |
| "property": [{ "name": "Name", "type": "Edm.String", "nullable": "false", "maxLength": "50", "unicode": "false"}], |
| "navigationProperty": [{ "name": "Titles", "partner": "Series", "type": "Collection(TestCatalog.Model.Title)"}] |
| }, { |
| "name": "Language", |
| "key": [{ "propertyRef": [{ "name": "Name"}] }], |
| "property": [{ "name": "Name", "type": "Edm.String", "nullable": "false", "maxLength": "80", "unicode": "false"}], |
| "navigationProperty": [{ "name": "Titles", "partner": "Languages", "type": "Collection(TestCatalog.Model.Title)"}] |
| }, { |
| "name": "Person", |
| "key": [{ "propertyRef": [{ "name": "Id"}] }], |
| "property": [ |
| { "name": "Id", "type": "Edm.Int32", "nullable": "false" }, |
| { "name": "Name", "type": "Edm.String", "nullable": "false", "maxLength": "80", "unicode": "true" } |
| ], |
| "navigationProperty": [ |
| { "name": "Awards", "partner": "Person", "type": "Collection(TestCatalog.Model.TitleAward)" }, |
| { "name": "TitlesActedIn", "partner": "Cast", "type": "Collection(TestCatalog.Model.Title)" }, |
| { "name": "TitlesDirected", "partner": "Directors", "type": "Collection(TestCatalog.Model.Title)" } |
| ] |
| }, { |
| "name": "TitleAudioFormat", |
| "key": [{ "propertyRef": [{ "name": "TitleId" }, { "name": "DeliveryFormat" }, { "name": "Language" }, { "name": "Format"}] }], |
| "property": [ |
| { "name": "TitleId", "type": "Edm.String", "nullable": "false", "maxLength": "30" }, |
| { "name": "DeliveryFormat", "type": "Edm.String", "nullable": "false", "maxLength": "10", "unicode": "false" }, |
| { "name": "Language", "type": "Edm.String", "nullable": "false", "maxLength": "30", "unicode": "false" }, |
| { "name": "Format", "type": "Edm.String", "nullable": "false", "maxLength": "30", "unicode": "false" } |
| ], |
| "navigationProperty": [{ "name": "Title", "partner": "AudioFormats", "referentialConstraint": [{"property": "TitleId", "referencedProperty": "Id"}], "type": "TestCatalog.Model.Title" }] |
| }, { |
| "name": "TitleAward", |
| "key": [{ "propertyRef": [{ "name": "Id"}] }], |
| "property": [ |
| { "name": "Id", "type": "Edm.Guid", "nullable": "false" }, |
| { "name": "Type", "type": "Edm.String", "nullable": "false", "maxLength": "30", "unicode": "false" }, |
| { "name": "Category", "type": "Edm.String", "nullable": "false", "maxLength": "60", "unicode": "false" }, |
| { "name": "Year", "type": "Edm.Int32", "nullable": "true" }, { "name": "Won", "type": "Edm.Boolean", "nullable": "false" } |
| ], |
| "navigationProperty": [ |
| { "name": "Title", "partner": "Awards", "type": "TestCatalog.Model.Title" }, |
| { "name": "Person", "partner": "Awards", "type": "TestCatalog.Model.Person" } |
| ] |
| }, { |
| "name": "Title", |
| "hasStream": "true", |
| "key": [{ "propertyRef": [{ "name": "Id"}] }], |
| "property": [ |
| { "name": "Id", "type": "Edm.String", "nullable": "false", "maxLength": "30" }, |
| { "name": "Synopsis", "type": "Edm.String", "nullable": "true", "maxLength": "Max", "unicode": "false" }, |
| { "name": "ShortSynopsis", "type": "Edm.String", "nullable": "true", "maxLength": "Max", "unicode": "false" }, |
| { "name": "AverageRating", "type": "Edm.Double", "nullable": "true" }, { "name": "ReleaseYear", "type": "Edm.Int32", "nullable": "true" }, |
| { "name": "Url", "type": "Edm.String", "nullable": "true", "maxLength": "200", "unicode": "false" }, |
| { "name": "Runtime", "type": "Edm.Int32", "nullable": "true" }, |
| { "name": "Rating", "type": "Edm.String", "nullable": "true", "maxLength": "10", "unicode": "false" }, |
| { "name": "DateModified", "type": "Edm.DateTime", "nullable": "false"}, |
| { "name": "Type", "type": "Edm.String", "nullable": "false", "maxLength": "8", "unicode": "false" }, |
| { "name": "BoxArt", "type": "TestCatalog.Model.BoxArt", "nullable": "false" }, |
| { "name": "ShortName", "type": "Edm.String", "nullable": "false", "maxLength": "200", "unicode": "false" }, |
| { "name": "Name", "type": "Edm.String", "nullable": "false", "maxLength": "200", "unicode": "false" }, |
| { "name": "Instant", "type": "TestCatalog.Model.InstantAvailability", "nullable": "false" }, |
| { "name": "Dvd", "type": "TestCatalog.Model.DeliveryFormatAvailability", "nullable": "false" }, |
| { "name": "BluRay", "type": "TestCatalog.Model.DeliveryFormatAvailability", "nullable": "false" }, |
| { "name": "TinyUrl", "type": "Edm.String", "nullable": "false" }, |
| { "name": "WebsiteUrl", "type": "Edm.String", "nullable": "true" }, |
| { "name": "TestApiId", "type": "Edm.String", "nullable": "false" } |
| ], |
| "navigationProperty": [ |
| { "name": "AudioFormats", "nullable": "false", "partner": "Title", "type": "Collection(TestCatalog.Model.TitleAudioFormat)" }, |
| { "name": "Awards", "nullable": "false", "partner": "Title", "type": "Collection(TestCatalog.Model.TitleAward)" }, |
| { "name": "Disc", "type": "Collection(TestCatalog.Model.Title)" }, |
| { "name": "Movie", "type": "Collection(TestCatalog.Model.Title)" }, |
| { "name": "Season", "type": "Collection(TestCatalog.Model.Title)" }, |
| { "name": "Series", "type": "Collection(TestCatalog.Model.Title)" }, |
| { "name": "ScreenFormats", "nullable": "false", "partner": "Title", "type": "Collection(TestCatalog.Model.TitleScreenFormat)" }, |
| { "name": "Cast", "nullable": "false", "partner": "TitlesActedIn", "type": "Collection(TestCatalog.Model.Person)" }, |
| { "name": "Languages", "nullable": "false", "partner": "Titles", "type": "Collection(TestCatalog.Model.Language)" }, |
| { "name": "Directors", "nullable": "false", "partner": "TitlesDirected", "type": "Collection(TestCatalog.Model.Person)" }, |
| { "name": "Genres", "nullable": "false", "partner": "Titles", "type": "Collection(TestCatalog.Model.Genre)" } |
| ] |
| }, { |
| "name": "TitleScreenFormat", |
| "key": [{ "propertyRef": [{ "name": "TitleId" }, { "name": "DeliveryFormat" }, { "name": "Format"}]}], |
| "property": [ |
| { "name": "TitleId", "type": "Edm.String", "nullable": "false", "maxLength": "30" }, |
| { "name": "DeliveryFormat", "type": "Edm.String", "nullable": "false", "maxLength": "10", "unicode": "false" }, |
| { "name": "Format", "type": "Edm.String", "nullable": "false", "maxLength": "30", "unicode": "false" } |
| ], |
| "navigationProperty": [{ "name": "Title", "partner": "ScreenFormats", "referentialConstraint": [{"property": "TitleId", "referencedProperty": "Id"}], "type": "TestCatalog.Model.Title" }] |
| }], |
| "complexType": [{ |
| "name": "BoxArt", |
| "property": [ |
| { "name": "SmallUrl", "type": "Edm.String", "nullable": "true", "maxLength": "80", "unicode": "false" }, |
| { "name": "MediumUrl", "type": "Edm.String", "nullable": "true", "maxLength": "80", "unicode": "false" }, |
| { "name": "LargeUrl", "type": "Edm.String", "nullable": "true", "maxLength": "80", "unicode": "false" }, |
| { "name": "HighDefinitionUrl", "type": "Edm.String", "nullable": "true", "maxLength": "80", "unicode": "false" } |
| ] |
| }, { |
| "name": "InstantAvailability", |
| "property": [ |
| { "name": "Available", "type": "Edm.Boolean", "nullable": "false" }, |
| { "name": "AvailableFrom", "type": "Edm.DateTime", "nullable": "true" }, |
| { "name": "AvailableTo", "type": "Edm.DateTime", "nullable": "true" }, |
| { "name": "HighDefinitionAvailable", "type": "Edm.Boolean", "nullable": "false" }, |
| { "name": "Runtime", "type": "Edm.Int32", "nullable": "true" }, |
| { "name": "Rating", "type": "Edm.String", "nullable": "true", "maxLength": "10", "unicode": "false" } |
| ] |
| }, { |
| "name": "DeliveryFormatAvailability", |
| "property": [ |
| { "name": "Available", "type": "Edm.Boolean", "nullable": "false" }, |
| { "name": "AvailableFrom", "type": "Edm.DateTime", "nullable": "true" }, |
| { "name": "AvailableTo", "type": "Edm.DateTime", "nullable": "true" }, |
| { "name": "Runtime", "type": "Edm.Int32", "nullable": "true" }, |
| { "name": "Rating", "type": "Edm.String", "nullable": "true", "maxLength": "10", "unicode": "false" } |
| ] |
| }], |
| "function": [ |
| { |
| "name": "ProductsByRating", |
| "returnType": {"type": "Collection(TestCatalog.Model.Title)" } |
| }] |
| }, { |
| "namespace": "Test.Catalog", |
| "entityContainer": { |
| "name": "TestCatalog", |
| "functionImport": [ |
| { "entitySet": "Titles", "function": "estCatalog.Model.GetTitles", "name": "Movies"}, |
| { "entitySet": "Titles", "function": "estCatalog.Model.GetTitles", "name": "Series"}, |
| { "entitySet": "Titles", "function": "estCatalog.Model.GetTitles", "name": "Seasons" }, |
| { "entitySet": "Titles", "function": "estCatalog.Model.GetTitles", "name": "Discs" }, |
| { "entitySet": "Titles", "function": "estCatalog.Model.GetTitles", "name": "Episodes" } |
| ], "entitySet": [ |
| { "name": "Genres", "entityType": "TestCatalog.Model.Genre", "navigationPropertyBinding": [{"path": "Titles", "target": "Titles"}] }, |
| { "name": "Languages", "entityType": "TestCatalog.Model.Language", "navigationPropertyBinding": [{ "path": "Languages", "target": "Titles"}] }, |
| { "name": "People", "entityType": "TestCatalog.Model.Person", "navigationPropertyBinding": [{ "path": "Cast", "target": "Titles" }, { "path": "Directors", "target": "Titles"}] }, |
| { "name": "TitleAudioFormats", "entityType": "TestCatalog.Model.TitleAudioFormat", "navigationPropertyBinding": [{ "path": "AudioFormats", "target": "Titles"}] }, |
| { "name": "TitleAwards", "entityType": "TestCatalog.Model.TitleAward", "navigationPropertyBinding": [{ "path": "Awards", "target": "Titles"}] }, |
| { "name": "Titles", "entityType": "TestCatalog.Model.Title", "navigationPropertyBinding": [{ "path": "Title", "target": "TitleAudioFormats" }, { "path": "Title", "target": "TitleAwards" }, { "path": "Disc", "target": "Titles" }, { "path": "Movie", "target": "Titles" }, { "path": "Season", "target": "Titles" }, { "path": "Series", "target": "Titles" }, { "path": "ScreenFormats", "target": "TitleScreenFormats" }, { "path": "TitlesActedIn", "target": "People" }, { "path": "Titles", "target": "Languages" }, { "path": "TitlesDirected", "target": "People" }, { "path": "Genres", "target": "Genres"}] }, |
| { "name": "TitleScreenFormats", "entityType": "TestCatalog.Model.TitleScreenFormat", "navigationPropertyBinding": [{ "path": "Title", "target": "TitleScreenFormats"}] } |
| ] |
| } |
| }] |
| } |
| }; |
| |
| var testCsdlV4 = '' + |
| '<edmx:Edmx xmlns:edmx="http://docs.oasis-open.org/odata/ns/edmx" Version="4.0">\r\n' + |
| ' <edmx:DataServices xmlns:m="http://docs.oasis-open.org/odata/ns/metadata" m:MaxDataServiceVersion="4.0" m:DataServiceVersion="4.0">\r\n' + |
| ' <Schema xmlns="http://docs.oasis-open.org/odata/ns/edm" Namespace="TestCatalog.Model"/>\r\n' + |
| ' </edmx:DataServices>\r\n' + |
| '</edmx:Edmx>'; |
| |
| var testMetadataV4 = { |
| "version": "4.0", |
| "dataServices": { |
| "maxDataServiceVersion": "4.0", |
| "dataServiceVersion": "4.0", |
| "schema": [{ |
| "namespace": "TestCatalog.Model" |
| }] |
| } |
| }; |
| |
| djstest.addTest(function testParseConceptualModelElement() { |
| // Test cases as input XML text / result tuples. |
| var cases = [ |
| { i: "<foo />", e: null }, |
| { i: '<edmx:Edmx Version="4.0" xmlns:edmx="http://docs.oasis-open.org/odata/ns/edmx" />', e: { version: "4.0"} }, |
| { i: '<edmx:Edmx Version="4.0" xmlns:edmx="http://docs.oasis-open.org/odata/ns/edmx-invalid" />', e: null }, |
| { i: testCsdlV4, e: testMetadataV4 }, |
| { i: testFullCsdl, e: testFullMetadataResult } |
| ]; |
| |
| var i, len; |
| for (i = 0, len = cases.length; i < len; i++) { |
| var doc = window.odatajs.xmlParse(cases[i].i); |
| var schema = window.odatajs.oData.parseConceptualModelElement(doc.documentElement); |
| djstest.assertAreEqualDeep(schema, cases[i].e, "parseConceptualModelElement result matches target"); |
| } |
| |
| djstest.done(); |
| }); |
| |
| djstest.addTest(function metadataVocabularyTest() { |
| var testCsdl = '' + |
| '<?xml version="1.0" encoding="utf-8" standalone="yes"?>\r\n' + |
| '<edmx:Edmx Version="4.0" xmlns:edmx="http://docs.oasis-open.org/odata/ns/edmx" >\r\n' + |
| ' <edmx:DataServices xmlns:m="http://docs.oasis-open.org/odata/ns/metadata" m:MaxDataServiceVersion="4.0" m:DataServiceVersion="4.0">\r\n' + |
| ' <Schema Namespace="TestCatalog.Model" xmlns="http://docs.oasis-open.org/odata/ns/edm">\r\n' + |
| ' <Term Name="Rating" Type="Edm.Int32" />\r\n' + |
| ' <Term Name="CanEdit" Type="Edm.String" />\r\n' + |
| ' <EntityType Name="Genre">\r\n' + |
| ' <Key><PropertyRef Name="Name" /></Key>\r\n' + |
| ' <Property Name="Name" Type="Edm.String" Nullable="false" MaxLength="50" Unicode="false" />\r\n' + |
| ' </EntityType></Schema></edmx:DataServices></edmx:Edmx>'; |
| |
| |
| var doc = window.odatajs.xmlParse(testCsdl); |
| var schema = window.odatajs.oData.parseConceptualModelElement(doc.documentElement); |
| |
| djstest.assertAreEqual(schema.dataServices.schema[0].term.length, 2, "schema.DataServices.Schema.Term.length === 2"); |
| djstest.assertAreEqual(schema.dataServices.schema[0].term[0].name, "Rating", "schema.DataServices.Schema.Term[0].name === 'Rating'"); |
| djstest.assertAreEqual(schema.dataServices.schema[0].term[1].name, "CanEdit", "schema.DataServices.Schema.Term[1].name === 'CanEdit'"); |
| djstest.done(); |
| }); |
| |
| djstest.addTest(function metadataAnnotationTest() { |
| var testCsdl = '' + |
| '<?xml version="1.0" encoding="utf-8" standalone="yes"?>\r\n' + |
| '<edmx:Edmx Version="4.0" xmlns:edmx="http://docs.oasis-open.org/odata/ns/edmx" >\r\n' + |
| ' <edmx:DataServices xmlns:m="http://docs.oasis-open.org/odata/ns/metadata" m:MaxDataServiceVersion="4.0" m:DataServiceVersion="4.0">\r\n' + |
| ' <Schema Namespace="TestCatalog.Model" xmlns="http://docs.oasis-open.org/odata/ns/edm">\r\n' + |
| ' <EntityType Name="Genre">\r\n' + |
| ' <Key><PropertyRef Name="Name" /></Key>\r\n' + |
| ' <Property Name="Name" Type="Edm.String" Nullable="false" MaxLength="50" Unicode="false" />\r\n' + |
| ' </EntityType>\r\n' + |
| ' <EntityType Name="Language">\r\n' + |
| ' <Key><PropertyRef Name="Name" /></Key>\r\n' + |
| ' <Property Name="Name" Type="Edm.String" Nullable="false" MaxLength="80" Unicode="false" />\r\n' + |
| ' <Property Name="Id" Type="Edm.Int32" />\r\n' + |
| ' </EntityType>\r\n' + |
| ' <Annotations Target="TestCatalog.Model.Genre/Name">\r\n' + |
| ' <Annotation String="Genre Name" Term="Org.OData.Display.V1.DisplayName"/>\r\n' + |
| ' </Annotations>\r\n' + |
| ' <Annotations Target="TestCatalog.Model.Language/Name">\r\n' + |
| ' <Annotation String="Language Name" Term="Org.OData.Display.V1.DisplayName"/>\r\n' + |
| ' <Annotation String="Language Name 2" Term="Org.OData.Display.V1.DisplayName 2"/>\r\n' + |
| ' </Annotations>\r\n' + |
| ' </Schema></edmx:DataServices></edmx:Edmx>'; |
| |
| |
| var doc = window.odatajs.xmlParse(testCsdl); |
| var schema = window.odatajs.oData.parseConceptualModelElement(doc.documentElement); |
| |
| djstest.assertAreEqual(schema.dataServices.schema[0].annotations.length, 2, "Annotations number"); |
| djstest.assertAreEqual(schema.dataServices.schema[0].annotations[0].annotation.length, 1, "Annotation number"); |
| djstest.assertAreEqual(schema.dataServices.schema[0].annotations[0].annotation[0].string, "Genre Name", "Annotation name"); |
| djstest.assertAreEqual(schema.dataServices.schema[0].annotations[0].annotation[0].term, "Org.OData.Display.V1.DisplayName", "Annotation term"); |
| djstest.assertAreEqual(schema.dataServices.schema[0].annotations[1].annotation.length, 2, "Annotation number"); |
| djstest.assertAreEqual(schema.dataServices.schema[0].annotations[1].annotation[0].string, "Language Name", "Annotation name"); |
| djstest.assertAreEqual(schema.dataServices.schema[0].annotations[1].annotation[0].term, "Org.OData.Display.V1.DisplayName", "Annotation term"); |
| djstest.assertAreEqual(schema.dataServices.schema[0].annotations[1].annotation[1].string, "Language Name 2", "Annotation name"); |
| djstest.assertAreEqual(schema.dataServices.schema[0].annotations[1].annotation[1].term, "Org.OData.Display.V1.DisplayName 2", "Annotation term"); |
| djstest.done(); |
| }); |
| |
| // DATAJS INTERNAL END |
| })(this); |