public void WriteInstanceAnnotationsShouldWriteAllAnnotationsInTheEnumerable()
        {
            var primitive = AtomInstanceAnnotation.CreateFrom(new ODataInstanceAnnotation("ns.primitive", new ODataPrimitiveValue(123)), /*target*/ null);
            var complex   = AtomInstanceAnnotation.CreateFrom(new ODataInstanceAnnotation("ns.complex", new ODataComplexValue {
                Properties = new[] { new ODataProperty {
                                         Name = "p1", Value = 123
                                     } }, TypeName = "ns.complex1"
            }), /*target*/ null);
            var collection = AtomInstanceAnnotation.CreateFrom(new ODataInstanceAnnotation("ns.collection", new ODataCollectionValue {
                Items = new[] { 123 }
            }), /*target*/ null);

            var instanceAnnotationWriteTracker = new InstanceAnnotationWriteTracker();

            this.serializer.XmlWriter.WriteStartElement("wrapper");
            this.serializer.WriteInstanceAnnotations(new[] { primitive, complex, collection }, instanceAnnotationWriteTracker);
            this.serializer.XmlWriter.WriteEndElement();
            this.ValidatePayload(
                "<wrapper>" +
                "<annotation term=\"ns.primitive\" int=\"123\" xmlns=\"http://docs.oasis-open.org/odata/ns/metadata\" />" +
                "<annotation term=\"ns.complex\" m:type=\"#ns.complex1\" xmlns:m=\"http://docs.oasis-open.org/odata/ns/metadata\" xmlns=\"http://docs.oasis-open.org/odata/ns/metadata\"><d:p1 m:type=\"Int32\" xmlns:d=\"http://docs.oasis-open.org/odata/ns/data\">123</d:p1></annotation>" +
                "<annotation term=\"ns.collection\" xmlns=\"http://docs.oasis-open.org/odata/ns/metadata\"><m:element m:type=\"Int32\" xmlns:m=\"http://docs.oasis-open.org/odata/ns/metadata\">123</m:element></annotation>" +
                "</wrapper>");
            instanceAnnotationWriteTracker.IsAnnotationWritten("ns.primitive").Should().BeTrue();
            instanceAnnotationWriteTracker.IsAnnotationWritten("ns.complex").Should().BeTrue();
            instanceAnnotationWriteTracker.IsAnnotationWritten("ns.collection").Should().BeTrue();
        }
 public void InstanceAnnotationWriteTrackerTracksWrites()
 {
     var tracker = new InstanceAnnotationWriteTracker();
     tracker.IsAnnotationWritten("key").Should().BeFalse();
     tracker.MarkAnnotationWritten("key");
     tracker.IsAnnotationWritten("key").Should().BeTrue();
 }
        public void InstanceAnnotationWriteTrackerTracksWrites()
        {
            var tracker = new InstanceAnnotationWriteTracker();

            Assert.False(tracker.IsAnnotationWritten("key"));
            tracker.MarkAnnotationWritten("key");
            Assert.True(tracker.IsAnnotationWritten("key"));
        }
        public void InstanceAnnotationWriteTrackerTracksWrites()
        {
            var tracker = new InstanceAnnotationWriteTracker();

            tracker.IsAnnotationWritten("key").Should().BeFalse();
            tracker.MarkAnnotationWritten("key");
            tracker.IsAnnotationWritten("key").Should().BeTrue();
        }
        public void WriteInstanceAnnotationsShouldTrackWhichAnnotationHasBeenWriten()
        {
            var primitive = AtomInstanceAnnotation.CreateFrom(new ODataInstanceAnnotation("ns.primitive", new ODataPrimitiveValue(123)), /*target*/ null);
            var instanceAnnotationWriteTracker = new InstanceAnnotationWriteTracker();

            this.serializer.WriteInstanceAnnotations(new[] { primitive }, instanceAnnotationWriteTracker);
            instanceAnnotationWriteTracker.IsAnnotationWritten("ns.primitive").Should().BeTrue();
        }
        public void InstanceAnnotationWriteTrackerIsCaseSensitive()
        {
            var tracker = new InstanceAnnotationWriteTracker();
            string key = "key";

            tracker.MarkAnnotationWritten(key.ToUpper());
            tracker.MarkAnnotationWritten(key.ToLower());

            tracker.IsAnnotationWritten(key.ToLower()).Should().BeTrue();
            tracker.IsAnnotationWritten(key.ToUpper()).Should().BeTrue();
        }
        public void InstanceAnnotationWriteTrackerIsCaseSensitive()
        {
            var    tracker = new InstanceAnnotationWriteTracker();
            string key     = "key";

            tracker.MarkAnnotationWritten(key.ToUpper());
            tracker.MarkAnnotationWritten(key.ToLower());

            tracker.IsAnnotationWritten(key.ToLower()).Should().BeTrue();
            tracker.IsAnnotationWritten(key.ToUpper()).Should().BeTrue();
        }
        public ODataAtomPropertyTypeSerializerTests()
        {
            model = new EdmModel();
            EdmComplexType complexType = new EdmComplexType("ns", "complex");
            complexType.AddProperty(new EdmStructuralProperty(complexType, "StringProperty", EdmCoreModel.Instance.GetString(isNullable: false)));
            model.AddElement(complexType);

            this.stream = new MemoryStream();
            this.settings = new ODataMessageWriterSettings { Version = ODataVersion.V4, ShouldIncludeAnnotation = ODataUtils.CreateAnnotationFilter("*") };
            this.settings.SetServiceDocumentUri(ServiceDocumentUri);
            this.serializer = new ODataAtomPropertyAndValueSerializer(this.CreateAtomOutputContext(model, this.stream));
            this.instanceAnnotationWriteTracker = new InstanceAnnotationWriteTracker();
        }
        public void WriteInstanceAnnotationsShouldThrowWhenThereAreDuplicatedTermNames()
        {
            var primitive = AtomInstanceAnnotation.CreateFrom(new ODataInstanceAnnotation("ns.term", new ODataPrimitiveValue(123)), /*target*/ null);
            var complex   = AtomInstanceAnnotation.CreateFrom(new ODataInstanceAnnotation("ns.term", new ODataComplexValue {
                Properties = new[] { new ODataProperty {
                                         Name = "p1", Value = 123
                                     } }, TypeName = "ns.complex1"
            }), /*target*/ null);

            var instanceAnnotationWriteTracker = new InstanceAnnotationWriteTracker();

            instanceAnnotationWriteTracker.MarkAnnotationWritten("ns.term");
            Action test = () => this.serializer.WriteInstanceAnnotations(new[] { primitive, complex }, instanceAnnotationWriteTracker);

            test.ShouldThrow <ODataException>().WithMessage(Strings.JsonLightInstanceAnnotationWriter_DuplicateAnnotationNameInCollection("ns.term"));
        }
Ejemplo n.º 10
0
        public void Init()
        {
            model = new EdmModel();
            EdmComplexType complexType = new EdmComplexType("ns", "complex");

            complexType.AddProperty(new EdmStructuralProperty(complexType, "StringProperty", EdmCoreModel.Instance.GetString(isNullable: false)));
            model.AddElement(complexType);

            this.stream   = new MemoryStream();
            this.settings = new ODataMessageWriterSettings {
                Version = ODataVersion.V4, ShouldIncludeAnnotation = ODataUtils.CreateAnnotationFilter("*")
            };
            this.settings.SetServiceDocumentUri(ServiceDocumentUri);
            this.serializer = new ODataAtomPropertyAndValueSerializer(this.CreateAtomOutputContext(model, this.stream));
            this.instanceAnnotationWriteTracker = new InstanceAnnotationWriteTracker();
        }
        /// <summary>
        /// Writes a collection of instance annotations in ATOM format.
        /// </summary>
        /// <param name="instanceAnnotations">Instance annotation collection to write.</param>
        /// <param name="tracker">The tracker to track which instance annotations have been written.</param>
        internal void WriteInstanceAnnotations(IEnumerable<AtomInstanceAnnotation> instanceAnnotations, InstanceAnnotationWriteTracker tracker)
        {
            Debug.Assert(instanceAnnotations != null, "instanceAnnotations should not be null if we called this");
            Debug.Assert(tracker != null, "tracker should not be null if we called this");

            HashSet<string> instanceAnnotationNames = new HashSet<string>(StringComparer.Ordinal);
            foreach (var annotation in instanceAnnotations)
            {
                if (!instanceAnnotationNames.Add(annotation.TermName))
                {
                    throw new ODataException(ODataErrorStrings.JsonLightInstanceAnnotationWriter_DuplicateAnnotationNameInCollection(annotation.TermName));
                }

                if (!tracker.IsAnnotationWritten(annotation.TermName))
                {
                    this.WriteInstanceAnnotation(annotation);
                    tracker.MarkAnnotationWritten(annotation.TermName);
                }
            }
        }
Ejemplo n.º 12
0
        public void WriteInstanceAnnotations_AnnotationsCannotBeWrittenTwice()
        {
            var annotations = new List <ODataInstanceAnnotation>();

            annotations.Add(new ODataInstanceAnnotation("term.one", new ODataPrimitiveValue(123)));
            annotations.Add(new ODataInstanceAnnotation("term.two", new ODataPrimitiveValue("456")));
            var verifierCalls = 0;

            this.jsonWriter.WriteNameVerifier       = (name) => verifierCalls++;
            this.valueWriter.WritePrimitiveVerifier = (value, reference) => verifierCalls++;
            InstanceAnnotationWriteTracker tracker = new InstanceAnnotationWriteTracker();

            this.jsonLightInstanceAnnotationWriter.WriteInstanceAnnotations(annotations, tracker);
            Assert.Equal(4, verifierCalls);

            this.jsonLightInstanceAnnotationWriter.WriteInstanceAnnotations(annotations, tracker);
            Assert.Equal(4, verifierCalls);

            Assert.True(tracker.IsAnnotationWritten("term.one"));
            Assert.True(tracker.IsAnnotationWritten("term.two"));
        }
Ejemplo n.º 13
0
        public void WriteInstanceAnnotationsWithTrackerShouldThrowOnDuplicatedAnnotationNames()
        {
            var annotations = new List <ODataInstanceAnnotation>();

            annotations.Add(new ODataInstanceAnnotation("term.one", new ODataPrimitiveValue(123)));
            var verifierCalls = 0;

            this.jsonWriter.WriteNameVerifier       = (name) => verifierCalls++;
            this.valueWriter.WritePrimitiveVerifier = (value, reference) => verifierCalls++;

            InstanceAnnotationWriteTracker tracker = new InstanceAnnotationWriteTracker();

            this.jsonLightInstanceAnnotationWriter.WriteInstanceAnnotations(annotations, tracker);
            Assert.Equal(2, verifierCalls);
            Assert.True(tracker.IsAnnotationWritten("term.one"));

            annotations.Add(new ODataInstanceAnnotation("term.one", new ODataPrimitiveValue(456)));
            Action test = () => this.jsonLightInstanceAnnotationWriter.WriteInstanceAnnotations(annotations, tracker);

            test.Throws <ODataException>(Strings.JsonLightInstanceAnnotationWriter_DuplicateAnnotationNameInCollection("term.one"));
        }
Ejemplo n.º 14
0
        public void WriteInstanceAnnotationsWithTrackerShouldNotThrowOnNamesWithDifferentCasing()
        {
            var annotations = new List <ODataInstanceAnnotation>();

            annotations.Add(new ODataInstanceAnnotation("term.one", new ODataPrimitiveValue(123)));
            var verifierCalls = 0;

            this.jsonWriter.WriteNameVerifier       = (name) => verifierCalls++;
            this.valueWriter.WritePrimitiveVerifier = (value, reference) => verifierCalls++;

            InstanceAnnotationWriteTracker tracker = new InstanceAnnotationWriteTracker();

            this.jsonLightInstanceAnnotationWriter.WriteInstanceAnnotations(annotations, tracker);
            Assert.Equal(2, verifierCalls);
            Assert.True(tracker.IsAnnotationWritten("term.one"));

            annotations.Add(new ODataInstanceAnnotation("term.One", new ODataPrimitiveValue(456)));
            this.jsonLightInstanceAnnotationWriter.WriteInstanceAnnotations(annotations, tracker);
            Assert.Equal(4, verifierCalls);
            Assert.True(tracker.IsAnnotationWritten("term.one"));
            Assert.True(tracker.IsAnnotationWritten("term.One"));
        }
        public void WriteInstanceAnnotationCollection_NewAnnotationsGetWritten()
        {
            var annotations = new List <ODataInstanceAnnotation>();

            annotations.Add(new ODataInstanceAnnotation("term.one", new ODataPrimitiveValue(123)));
            var verifierCalls = 0;

            this.jsonWriter.WriteNameVerifier       = (name) => verifierCalls++;
            this.valueWriter.WritePrimitiveVerifier = (value, reference) => verifierCalls++;
            InstanceAnnotationWriteTracker tracker = new InstanceAnnotationWriteTracker();

            this.jsonLightInstanceAnnotationWriter.WriteInstanceAnnotations(annotations, tracker);
            verifierCalls.Should().Be(2);

            annotations.Add(new ODataInstanceAnnotation("term.two", new ODataPrimitiveValue("456")));
            tracker.IsAnnotationWritten("term.two").Should().BeFalse();

            this.jsonLightInstanceAnnotationWriter.WriteInstanceAnnotations(annotations, tracker);
            verifierCalls.Should().Be(4);

            tracker.IsAnnotationWritten("term.two").Should().BeTrue();
        }
        public void WriteInstanceAnnotationsShouldNotWriteAnnotationsThatHasAlreadyBeenWriten()
        {
            var primitive = AtomInstanceAnnotation.CreateFrom(new ODataInstanceAnnotation("ns.primitive", new ODataPrimitiveValue(123)), /*target*/ null);
            var complex   = AtomInstanceAnnotation.CreateFrom(new ODataInstanceAnnotation("ns.complex", new ODataComplexValue {
                Properties = new[] { new ODataProperty {
                                         Name = "p1", Value = 123
                                     } }, TypeName = "ns.complex1"
            }), /*target*/ null);
            var collection = AtomInstanceAnnotation.CreateFrom(new ODataInstanceAnnotation("ns.collection", new ODataCollectionValue {
                Items = new[] { 123 }
            }), /*target*/ null);

            var instanceAnnotationWriteTracker = new InstanceAnnotationWriteTracker();

            instanceAnnotationWriteTracker.MarkAnnotationWritten("ns.primitive");
            instanceAnnotationWriteTracker.MarkAnnotationWritten("ns.collection");
            this.serializer.WriteInstanceAnnotations(new[] { primitive, complex, collection }, instanceAnnotationWriteTracker);
            this.ValidatePayload("<annotation term=\"ns.complex\" m:type=\"#ns.complex1\" xmlns:m=\"http://docs.oasis-open.org/odata/ns/metadata\" xmlns=\"http://docs.oasis-open.org/odata/ns/metadata\"><d:p1 m:type=\"Int32\" xmlns:d=\"http://docs.oasis-open.org/odata/ns/data\">123</d:p1></annotation>");

            instanceAnnotationWriteTracker.IsAnnotationWritten("ns.primitive").Should().BeTrue();
            instanceAnnotationWriteTracker.IsAnnotationWritten("ns.complex").Should().BeTrue();
            instanceAnnotationWriteTracker.IsAnnotationWritten("ns.collection").Should().BeTrue();
        }
Ejemplo n.º 17
0
 /// <summary>
 /// Writes the collection of <see cref="ODataInstanceAnnotation"/> to the ATOM payload.
 /// </summary>
 /// <param name="instanceAnnotations">The collection of <see cref="ODataInstanceAnnotation"/> to write.</param>
 /// <param name="tracker">Helper class to track if an annotation has been writen.</param>
 private void WriteInstanceAnnotations(IEnumerable<ODataInstanceAnnotation> instanceAnnotations, InstanceAnnotationWriteTracker tracker)
 {
     IEnumerable<AtomInstanceAnnotation> atomInstanceAnnotations = instanceAnnotations.Select(instanceAnnotation => AtomInstanceAnnotation.CreateFrom(instanceAnnotation, /*target*/ null));
     this.atomEntryAndFeedSerializer.WriteInstanceAnnotations(atomInstanceAnnotations, tracker);
 }
Ejemplo n.º 18
0
        /// <summary>
        /// Writes a collection of instance annotations in ATOM format.
        /// </summary>
        /// <param name="instanceAnnotations">Instance annotation collection to write.</param>
        /// <param name="tracker">The tracker to track which instance annotations have been written.</param>
        internal void WriteInstanceAnnotations(IEnumerable <AtomInstanceAnnotation> instanceAnnotations, InstanceAnnotationWriteTracker tracker)
        {
            DebugUtils.CheckNoExternalCallers();
            Debug.Assert(instanceAnnotations != null, "instanceAnnotations should not be null if we called this");
            Debug.Assert(tracker != null, "tracker should not be null if we called this");

            HashSet <string> instanceAnnotationNames = new HashSet <string>(StringComparer.Ordinal);

            foreach (var annotation in instanceAnnotations)
            {
                if (!instanceAnnotationNames.Add(annotation.TermName))
                {
                    throw new ODataException(ODataErrorStrings.JsonLightInstanceAnnotationWriter_DuplicateAnnotationNameInCollection(annotation.TermName));
                }

                if (!tracker.IsAnnotationWritten(annotation.TermName))
                {
                    this.WriteInstanceAnnotation(annotation);
                    tracker.MarkAnnotationWritten(annotation.TermName);
                }
            }
        }
Ejemplo n.º 19
0
        /// <summary>
        /// Writes the collection of <see cref="ODataInstanceAnnotation"/> to the ATOM payload.
        /// </summary>
        /// <param name="instanceAnnotations">The collection of <see cref="ODataInstanceAnnotation"/> to write.</param>
        /// <param name="tracker">Helper class to track if an annotation has been writen.</param>
        private void WriteInstanceAnnotations(IEnumerable <ODataInstanceAnnotation> instanceAnnotations, InstanceAnnotationWriteTracker tracker)
        {
            IEnumerable <AtomInstanceAnnotation> atomInstanceAnnotations = instanceAnnotations.Select(instanceAnnotation => AtomInstanceAnnotation.CreateFrom(instanceAnnotation, /*target*/ null));

            this.atomEntryAndFeedSerializer.WriteInstanceAnnotations(atomInstanceAnnotations, tracker);
        }
        public void WriteInstanceAnnotationsShouldWriteAllAnnotationsInTheEnumerable()
        {
            var primitive = AtomInstanceAnnotation.CreateFrom(new ODataInstanceAnnotation("ns.primitive", new ODataPrimitiveValue(123)), /*target*/ null);
            var complex = AtomInstanceAnnotation.CreateFrom(new ODataInstanceAnnotation("ns.complex", new ODataComplexValue { Properties = new[] { new ODataProperty { Name = "p1", Value = 123 } }, TypeName = "ns.complex1" }), /*target*/ null);
            var collection = AtomInstanceAnnotation.CreateFrom(new ODataInstanceAnnotation("ns.collection", new ODataCollectionValue { Items = new[] { 123 } }), /*target*/ null);

            var instanceAnnotationWriteTracker = new InstanceAnnotationWriteTracker();
            this.serializer.XmlWriter.WriteStartElement("wrapper");
            this.serializer.WriteInstanceAnnotations(new[] {primitive, complex, collection}, instanceAnnotationWriteTracker);
            this.serializer.XmlWriter.WriteEndElement();
            this.ValidatePayload(
                "<wrapper>" +
                    "<annotation term=\"ns.primitive\" int=\"123\" xmlns=\"http://docs.oasis-open.org/odata/ns/metadata\" />" +
                    "<annotation term=\"ns.complex\" m:type=\"#ns.complex1\" xmlns:m=\"http://docs.oasis-open.org/odata/ns/metadata\" xmlns=\"http://docs.oasis-open.org/odata/ns/metadata\"><d:p1 m:type=\"Int32\" xmlns:d=\"http://docs.oasis-open.org/odata/ns/data\">123</d:p1></annotation>" +
                    "<annotation term=\"ns.collection\" xmlns=\"http://docs.oasis-open.org/odata/ns/metadata\"><m:element m:type=\"Int32\" xmlns:m=\"http://docs.oasis-open.org/odata/ns/metadata\">123</m:element></annotation>" +
                "</wrapper>");
            instanceAnnotationWriteTracker.IsAnnotationWritten("ns.primitive").Should().BeTrue();
            instanceAnnotationWriteTracker.IsAnnotationWritten("ns.complex").Should().BeTrue();
            instanceAnnotationWriteTracker.IsAnnotationWritten("ns.collection").Should().BeTrue();
        }
        public void WriteInstanceAnnotationsShouldThrowWhenThereAreDuplicatedTermNames()
        {
            var primitive = AtomInstanceAnnotation.CreateFrom(new ODataInstanceAnnotation("ns.term", new ODataPrimitiveValue(123)), /*target*/ null);
            var complex = AtomInstanceAnnotation.CreateFrom(new ODataInstanceAnnotation("ns.term", new ODataComplexValue { Properties = new[] { new ODataProperty { Name = "p1", Value = 123 } }, TypeName = "ns.complex1" }), /*target*/ null);

            var instanceAnnotationWriteTracker = new InstanceAnnotationWriteTracker();
            instanceAnnotationWriteTracker.MarkAnnotationWritten("ns.term");
            Action test = () => this.serializer.WriteInstanceAnnotations(new[] { primitive, complex }, instanceAnnotationWriteTracker);
            test.ShouldThrow<ODataException>().WithMessage(Strings.JsonLightInstanceAnnotationWriter_DuplicateAnnotationNameInCollection("ns.term"));
        }
 public void WriteInstanceAnnotationsShouldTrackWhichAnnotationHasBeenWriten()
 {
     var primitive = AtomInstanceAnnotation.CreateFrom(new ODataInstanceAnnotation("ns.primitive", new ODataPrimitiveValue(123)), /*target*/ null);
     var instanceAnnotationWriteTracker = new InstanceAnnotationWriteTracker();
     this.serializer.WriteInstanceAnnotations(new[] { primitive }, instanceAnnotationWriteTracker);
     instanceAnnotationWriteTracker.IsAnnotationWritten("ns.primitive").Should().BeTrue();
 }
        public void WriteInstanceAnnotationsShouldNotWriteAnnotationsThatHasAlreadyBeenWriten()
        {
            var primitive = AtomInstanceAnnotation.CreateFrom(new ODataInstanceAnnotation("ns.primitive", new ODataPrimitiveValue(123)), /*target*/ null);
            var complex = AtomInstanceAnnotation.CreateFrom(new ODataInstanceAnnotation("ns.complex", new ODataComplexValue { Properties = new[] { new ODataProperty { Name = "p1", Value = 123 } }, TypeName = "ns.complex1" }), /*target*/ null);
            var collection = AtomInstanceAnnotation.CreateFrom(new ODataInstanceAnnotation("ns.collection", new ODataCollectionValue { Items = new[] { 123 } }), /*target*/ null);

            var instanceAnnotationWriteTracker = new InstanceAnnotationWriteTracker();
            instanceAnnotationWriteTracker.MarkAnnotationWritten("ns.primitive");
            instanceAnnotationWriteTracker.MarkAnnotationWritten("ns.collection");
            this.serializer.WriteInstanceAnnotations(new[] { primitive, complex, collection }, instanceAnnotationWriteTracker);
            this.ValidatePayload("<annotation term=\"ns.complex\" m:type=\"#ns.complex1\" xmlns:m=\"http://docs.oasis-open.org/odata/ns/metadata\" xmlns=\"http://docs.oasis-open.org/odata/ns/metadata\"><d:p1 m:type=\"Int32\" xmlns:d=\"http://docs.oasis-open.org/odata/ns/data\">123</d:p1></annotation>");

            instanceAnnotationWriteTracker.IsAnnotationWritten("ns.primitive").Should().BeTrue();
            instanceAnnotationWriteTracker.IsAnnotationWritten("ns.complex").Should().BeTrue();
            instanceAnnotationWriteTracker.IsAnnotationWritten("ns.collection").Should().BeTrue();
        }