Esempio n. 1
0
        /// <summary>
        /// Visits a payload element whose root is a ServiceDocumentInstance.
        /// </summary>
        /// <param name="payloadElement">The root node of payload element being visited.</param>
        /// <returns>The original element or a copy to replace it with</returns>
        public virtual ODataPayloadElement Visit(ServiceDocumentInstance payloadElement)
        {
            ExceptionUtilities.CheckArgumentNotNull(payloadElement, "payloadElement");

            IList <WorkspaceInstance> replacedWorkspaces = null;

            if (payloadElement.Workspaces != null)
            {
                replacedWorkspaces = new List <WorkspaceInstance>();

                foreach (WorkspaceInstance workspace in payloadElement.Workspaces)
                {
                    ExceptionUtilities.CheckObjectNotNull(workspace, "Workspace is null");
                    WorkspaceInstance replacedWorkspace = this.Visit(workspace) as WorkspaceInstance;
                    ExceptionUtilities.CheckObjectNotNull(replacedWorkspace, "Replaced workspace was null or wrong type");
                    replacedWorkspaces.Add(replacedWorkspace);
                }
            }

            if (!this.ShouldReplace(payloadElement.Workspaces, replacedWorkspaces))
            {
                return(payloadElement);
            }

            return(payloadElement.ReplaceWith(new ServiceDocumentInstance(replacedWorkspaces.ToArray())));
        }
Esempio n. 2
0
        public void ServiceDocumentReadingNullUriTest()
        {
            EdmModel model = (EdmModel)Microsoft.Test.OData.Utils.Metadata.TestModels.BuildTestModel();

            model.Fixup();

            ServiceDocumentInstance serviceDocument = PayloadBuilder.ServiceDocument()
                                                      .Workspace(PayloadBuilder.Workspace()
                                                                 .ResourceCollection(/*title*/ null, /*href*/ null));

            // Run only on responses
            this.CombinatorialEngineProvider.RunCombinations(
                baseUriValues,
                this.ReaderTestConfigurationProvider.AtomFormatConfigurations.Where(tc => !tc.IsRequest),
                (baseUriValue, testConfiguration) =>
            {
                // NOTE: In JSON, collection names must not be null (and we expect an error)
                //       In ATOM, the HREF of a resource collection is an attribute and will be missing if null;
                //       this is not allowed (and we expect an error)
                NullUriValueTestCase <ServiceDocumentInstance> testCase = new NullUriValueTestCase <ServiceDocumentInstance>
                {
                    SetNullUriAction     = (instance, uri, testConfig) => instance.Workspaces[0].ResourceCollections[0].Href = null,
                    SetExpectedUriAction = (instance, uri, testConfig) => instance.Workspaces[0].ResourceCollections[0].Href = UriToString(uri),
                };

                this.RunNullUriReadingTest(serviceDocument, testCase, model, baseUriValue, testConfiguration);
            });
        }
            /// <summary>
            /// Visits a payload element whose root is a ServiceDocumentInstance.
            /// </summary>
            /// <param name="expected">The root node of payload element being visited.</param>
            public void Visit(ServiceDocumentInstance expected)
            {
                ExceptionUtilities.CheckArgumentNotNull(expected, "expected");
                var observed = this.GetNextObservedElement <ServiceDocumentInstance>();

                using (this.Assert.WithMessage("Service document did not match expectation"))
                {
                    this.CompareAnnotations(expected.Annotations, observed.Annotations);
                    this.CompareList <WorkspaceInstance>(expected.Workspaces, observed.Workspaces);
                }
            }
        /// <summary>
        /// Visits a payload element whose root is a ServiceDocumentInstance.
        /// </summary>
        /// <param name="payloadElement">The root node of the payload element being visited.</param>
        public override void Visit(ServiceDocumentInstance payloadElement)
        {
            base.Visit(payloadElement);

            var contextUriAnnotation = payloadElement.GetAnnotation <JsonLightContextUriAnnotation>();

            if (contextUriAnnotation == null)
            {
                payloadElement.AddAnnotation(new JsonLightContextUriAnnotation {
                    ContextUri = JsonLightConstants.DefaultMetadataDocumentUri.OriginalString
                });
            }
        }
Esempio n. 5
0
            /// <summary>
            /// Visits a payload element whose root is a ServiceDocumentInstance.
            /// </summary>
            /// <param name="payloadElement">The root node of payload element being visited.</param>
            public void Visit(ServiceDocumentInstance payloadElement)
            {
                ExceptionUtilities.Assert(this.isRootElement, "Json serialization allows service document elements only at the root level");
                this.isRootElement = false;

                // NOTE nothing to do here for now since both Astoria and ODataLib only support a single workspace per service document
                ExceptionUtilities.Assert(payloadElement.Workspaces.Count == 1, "Exactly one workspace expected for the service document.");

                foreach (WorkspaceInstance workspace in payloadElement.Workspaces)
                {
                    this.Recurse(workspace);
                }
            }
            /// <summary>
            /// Visits a serviceDocument item.
            /// </summary>
            /// <param name="serviceDocument">The serviceDocument item to visit.</param>
            /// <returns>An ODataPayloadElement representing a service document enclosing the serviceDocument.</returns>
            protected override ODataPayloadElement VisitWorkspace(ODataServiceDocument serviceDocument)
            {
                ExceptionUtilities.CheckArgumentNotNull(serviceDocument, "serviceDocument");

                ServiceDocumentInstance wrappingServiceDocumentInstance = (ServiceDocumentInstance)base.VisitWorkspace(serviceDocument);

                WorkspaceInstance     workspaceInstance = wrappingServiceDocumentInstance.Workspaces.Single();
                AtomWorkspaceMetadata atomMetadata      = serviceDocument.GetAnnotation <AtomWorkspaceMetadata>();

                if (atomMetadata != null)
                {
                    if (atomMetadata.Title != null)
                    {
                        workspaceInstance.Title = atomMetadata.Title.Text;
                        workspaceInstance.AtomTitle(atomMetadata.Title.Text, ToString(atomMetadata.Title.Kind));
                    }
                }

                return(wrappingServiceDocumentInstance);
            }
Esempio n. 7
0
        public void ServiceDocumentReadingBaseUriTest()
        {
            EdmModel model = (EdmModel)Microsoft.Test.OData.Utils.Metadata.TestModels.BuildTestModel();

            model.Fixup();

            ServiceDocumentInstance serviceDocument = PayloadBuilder.ServiceDocument()
                                                      .Workspace(PayloadBuilder.Workspace()
                                                                 .ResourceCollection(/*title*/ null, /*href*/ null));

            // Run only on responses
            this.CombinatorialEngineProvider.RunCombinations(
                payloadUris.Where(uri => uri.OriginalString.Length != 0),
                baseUriValues,
                resolvers,
                this.ReaderTestConfigurationProvider.AtomFormatConfigurations.Where(tc => !tc.IsRequest),
                (payloadUri, baseUriValue, resolver, testConfiguration) =>
            {
                Action <ServiceDocumentInstance, Uri, ReaderTestConfiguration> setCollectionHrefAction =
                    (instance, uri, testConfig) => instance.Workspaces[0].ResourceCollections[0].Href  = UriToString(uri);
                this.RunBaseUriReadingTest(serviceDocument, setCollectionHrefAction, model, payloadUri, baseUriValue, resolver, testConfiguration);
            });
        }
        /// <summary>
        /// Visits the payload element
        /// </summary>
        /// <param name="payloadElement">The payload element to visit</param>
        public override void Visit(ServiceDocumentInstance payloadElement)
        {
            ExceptionUtilities.CheckArgumentNotNull(payloadElement, "payloadElement");
            ExceptionUtilities.CheckObjectNotNull(this.currentXElement, "Current XElement is not defined");

            // Override the namespace attributes for this element
            this.namespaceAttributes = new XAttribute[]
            {
                // xmlns="http://www.w3.org/2007/app"
                new XAttribute("xmlns", AtomPubNamespace),

                // ATOM namespace
                new XAttribute(XNamespace.Xmlns.GetName("atom"), AtomNamespace),
            };

            XElement serviceDocument = CreateAtomPubElement(this.currentXElement, "service");

            foreach (WorkspaceInstance workspaceInstance in payloadElement.Workspaces)
            {
                this.VisitPayloadElement(workspaceInstance, serviceDocument);
            }

            PostProcessXElement(payloadElement, serviceDocument);
        }
            /// <summary>
            /// Visits a payload element whose root is a ServiceDocumentInstance.
            /// </summary>
            /// <param name="payloadElement">The root node of payload element being visited.</param>
            public void Visit(ServiceDocumentInstance payloadElement)
            {
                ExceptionUtilities.Assert(this.isRootElement, "Json serialization allows service document elements only at the root level");
                this.isRootElement = false;

                // NOTE nothing to do here for now since both Astoria and ODataLib only support a single workspace per service document
                ExceptionUtilities.Assert(payloadElement.Workspaces.Count == 1, "Exactly one workspace expected for the service document.");

                foreach (WorkspaceInstance workspace in payloadElement.Workspaces)
                {
                    this.Recurse(workspace);
                }
            }
Esempio n. 10
0
 /// <summary>
 /// Visits the payload element
 /// </summary>
 /// <param name="payloadElement">The payload element to visit</param>
 public virtual void Visit(ServiceDocumentInstance payloadElement)
 {
     ExceptionUtilities.CheckArgumentNotNull(payloadElement, "payloadElement");
     this.VisitEnumerable <WorkspaceInstance>(payloadElement.Workspaces);
 }
 /// <summary>
 /// Visits a payload element whose root is a ServiceDocumentInstance.
 /// </summary>
 /// <param name="payloadElement">The root node of payload element being visited.</param>
 public void Visit(ServiceDocumentInstance payloadElement)
 {
     throw new TaupoNotSupportedException("Not supported.");
 }
        /// <summary>
        /// Visits a payload element whose root is a ServiceDocumentInstance.
        /// </summary>
        /// <param name="payloadElement">The root node of the payload element being visited.</param>
        public override void Visit(ServiceDocumentInstance payloadElement)
        {
            base.Visit(payloadElement);

            var contextUriAnnotation = payloadElement.GetAnnotation<JsonLightContextUriAnnotation>();
            if (contextUriAnnotation == null)
            {
                payloadElement.AddAnnotation(new JsonLightContextUriAnnotation { ContextUri = JsonLightConstants.DefaultMetadataDocumentUri.OriginalString });
            }
        }