public void ServiceDocumentErrorTests()
        {
            IEdmModel model = this.CreateMetadata(new[] { new CollectionInfo()
                                                          {
                                                              Url = "EntitySet1"
                                                          }, new CollectionInfo()
                                                          {
                                                              Url = "EntitySet2"
                                                          } });

            var testCases = new[]
            {
                new
                {       // relative uri without any base Uri
                    Workspace = new Func <ODataServiceDocument>(() => {
                        var defaultWorkspace        = ObjectModelUtils.CreateDefaultWorkspace();
                        defaultWorkspace.EntitySets = new ODataEntitySetInfo[]
                        {
                            new ODataEntitySetInfo()
                            {
                                Url = new Uri("SomeUri", UriKind.Relative)
                            }
                        };
                        return(defaultWorkspace);
                    })(),
                    MessageWriterSettings = (ODataMessageWriterSettings)null,
                    ExpectedException     = ODataExpectedExceptions.ODataException("ODataWriter_RelativeUriUsedWithoutBaseUriSpecified", "SomeUri"),
                    Model         = (IEdmModel)null,
                    OnlyForFormat = ODataFormat.Atom
                },
                new
                {       // empty relative uri without any base Uri
                    Workspace = new Func <ODataServiceDocument>(() => {
                        var defaultWorkspace        = ObjectModelUtils.CreateDefaultWorkspace();
                        defaultWorkspace.EntitySets = new ODataEntitySetInfo[]
                        {
                            new ODataEntitySetInfo()
                            {
                                Url = new Uri(string.Empty, UriKind.Relative)
                            }
                        };
                        return(defaultWorkspace);
                    })(),
                    MessageWriterSettings = (ODataMessageWriterSettings)null,
                    ExpectedException     = ODataExpectedExceptions.ODataException("ODataWriter_RelativeUriUsedWithoutBaseUriSpecified", string.Empty),
                    Model         = (IEdmModel)null,
                    OnlyForFormat = ODataFormat.Atom
                },
                new
                {       // empty collection name
                    Workspace = new Func <ODataServiceDocument>(() => {
                        var defaultWorkspace        = ObjectModelUtils.CreateDefaultWorkspace();
                        defaultWorkspace.EntitySets = new ODataEntitySetInfo[]
                        {
                            new ODataEntitySetInfo()
                            {
                                Url = null
                            }
                        };
                        return(defaultWorkspace);
                    })(),
                    MessageWriterSettings = settingsWithBaseUri,
                    ExpectedException     = ODataExpectedExceptions.ODataException("ValidationUtils_ResourceMustSpecifyUrl"),
                    Model         = (IEdmModel)null,
                    OnlyForFormat = (ODataFormat)null
                },
                new
                {       // null collection
                    Workspace = new Func <ODataServiceDocument>(() => {
                        var defaultWorkspace        = ObjectModelUtils.CreateDefaultWorkspace();
                        defaultWorkspace.EntitySets = new ODataEntitySetInfo[]
                        {
                            null
                        };
                        return(defaultWorkspace);
                    })(),
                    MessageWriterSettings = settingsWithBaseUri,
                    ExpectedException     = ODataExpectedExceptions.ODataException("ValidationUtils_WorkspaceResourceMustNotContainNullItem"),
                    Model         = (IEdmModel)null,
                    OnlyForFormat = (ODataFormat)null
                },
                new
                {       // no serviceDocument
                    Workspace             = (ODataServiceDocument)null,
                    MessageWriterSettings = settingsWithBaseUri,
                    ExpectedException     = new ExpectedException(typeof(ArgumentNullException)),
                    Model         = (IEdmModel)null,
                    OnlyForFormat = (ODataFormat)null
                },
            };

            var testDescriptors = testCases.Select(tc => new PayloadWriterTestDescriptor <WorkspaceWithSettings>(
                                                       this.Settings,
                                                       new WorkspaceWithSettings()
            {
                ServiceDocument = tc.Workspace,
                WriterSettings  = tc.MessageWriterSettings
            },
                                                       CreateErrorResultCallback(tc.ExpectedException, tc.OnlyForFormat, this.Settings.ExpectedResultSettings))
            {
                Model = tc.Model,
            });

            this.CombinatorialEngineProvider.RunCombinations(
                testDescriptors,
                this.WriterTestConfigurationProvider.ExplicitFormatConfigurationsWithIndent,
                (testDescriptor, testConfig) =>
            {
                testConfig = testConfig.Clone();
                testConfig.MessageWriterSettings.SetServiceDocumentUri(ServiceDocumentUri);

                WorkspaceWithSettings docWithSettings = testDescriptor.PayloadItems.Single();
                if (docWithSettings.WriterSettings != null)
                {
                    docWithSettings.WriterSettings.DisableMessageStreamDisposal = testConfig.MessageWriterSettings.DisableMessageStreamDisposal;
                    docWithSettings.WriterSettings.SetServiceDocumentUri(ServiceDocumentUri);
                }

                TestWriterUtils.WriteAndVerifyTopLevelContent(
                    testDescriptor,
                    testConfig,
                    (messageWriter) => messageWriter.WriteServiceDocument(docWithSettings.ServiceDocument),
                    this.Assert,
                    docWithSettings.WriterSettings,
                    baselineLogger: this.Logger);
            });
        }
        public void AdditionalResourceCollectionTests()
        {
            IEdmModel model = this.CreateMetadata(new[] { new CollectionInfo {
                                                              Url = "EntitySet1"
                                                          }, new CollectionInfo {
                                                              Url = "EntitySet2"
                                                          } });
            IEdmEntityType entityType = (IEdmEntityType)model.FindType("TestNS.EntityType");

            var testCases = new[]
            {
                // duplicate resource collection name
                new
                {
                    Collections = new [] { new CollectionInfo {
                                               Url = "A"
                                           }, new CollectionInfo {
                                               Url = "A"
                                           } },
                    Model = (IEdmModel)null,
                },

                // resource collection name does not match metadata.
                new
                {
                    Collections = new [] { new CollectionInfo {
                                               Url = "SomeName"
                                           } },
                    Model = model,
                },
            };

            var testDescriptors = testCases.Select(tc => new PayloadWriterTestDescriptor <WorkspaceWithSettings>(
                                                       this.Settings,
                                                       new WorkspaceWithSettings()
            {
                ServiceDocument = CreateWorkspace(/*createMetadataFirst*/ false, null, tc.Collections),
            },
                                                       CreateExpectedResultCallback(baseUri, null, tc.Collections))
            {
                Model = tc.Model,
            });

            this.CombinatorialEngineProvider.RunCombinations(
                testDescriptors,
                this.WriterTestConfigurationProvider.ExplicitFormatConfigurationsWithIndent,
                (testDescriptor, testConfig) =>
            {
                WorkspaceWithSettings docWithSettings = testDescriptor.PayloadItems.Single();
                if (docWithSettings.WriterSettings != null)
                {
                    docWithSettings.WriterSettings.DisableMessageStreamDisposal = testConfig.MessageWriterSettings.DisableMessageStreamDisposal;
                }

                WriterTestConfiguration newConfiguration = testConfig.Clone();
                newConfiguration.MessageWriterSettings.PayloadBaseUri = new Uri(baseUri);
                newConfiguration.MessageWriterSettings.SetServiceDocumentUri(ServiceDocumentUri);
                TestWriterUtils.WriteAndVerifyTopLevelContent(
                    testDescriptor,
                    newConfiguration,
                    (messageWriter) => messageWriter.WriteServiceDocument(docWithSettings.ServiceDocument),
                    this.Assert,
                    docWithSettings.WriterSettings,
                    baselineLogger: this.Logger);
            });
        }