/// <summary> /// Writes an in-stream error. /// </summary> /// <param name="error">The error to write.</param> /// <param name="includeDebugInformation"> /// A flag indicating whether debug information (e.g., the inner error from the <paramref name="error"/>) should /// be included in the payload. This should only be used in debug scenarios. /// </param> private void WriteInStreamErrorImplementation(ODataError error, bool includeDebugInformation) { if (this.outputInStreamErrorListener != null) { this.outputInStreamErrorListener.OnInStreamError(); } JsonLightInstanceAnnotationWriter instanceAnnotationWriter = new JsonLightInstanceAnnotationWriter(new ODataJsonLightValueSerializer(this), this.TypeNameOracle); ODataJsonWriterUtils.WriteError(this.JsonWriter, instanceAnnotationWriter.WriteInstanceAnnotationsForError, error, includeDebugInformation, this.MessageWriterSettings.MessageQuotas.MaxNestingDepth, /*writingJsonLight*/ true); }
public JsonLightInstanceAnnotationWriterTests() { this.jsonWriter = new MockJsonWriter { WriteNameVerifier = name => { }, WriteValueVerifier = str => { } }; this.referencedModel = new EdmModel(); model = TestUtils.WrapReferencedModelsToMainModel(referencedModel); // Version will be V3+ in production since it's JSON Light only var stream = new MemoryStream(); this.valueWriter = new MockJsonLightValueSerializer(CreateJsonLightOutputContext(stream, model, this.jsonWriter)); this.jsonLightInstanceAnnotationWriter = new JsonLightInstanceAnnotationWriter(this.valueWriter, new JsonMinimalMetadataTypeNameOracle()); }
public void TestWriteInstanceAnnotationsForError() { var stream = new MemoryStream(); var defaultValueWriter = new MockJsonLightValueSerializer(CreateJsonLightOutputContext(stream, model, this.jsonWriter, new ODataMessageWriterSettings { Version = ODataVersion.V4 })); var defaultAnnotationWriter = new JsonLightInstanceAnnotationWriter(defaultValueWriter, new JsonMinimalMetadataTypeNameOracle()); var annotations = new Collection <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++; defaultValueWriter.WritePrimitiveVerifier = (value, reference) => verifierCalls++; defaultAnnotationWriter.WriteInstanceAnnotationsForError(annotations); Assert.Equal(4, verifierCalls); }
public JsonLightInstanceAnnotationWriterTests() { this.jsonWriter = new MockJsonWriter { WriteNameVerifier = name => { }, WriteValueVerifier = str => { } }; this.referencedModel = new EdmModel(); model = TestUtils.WrapReferencedModelsToMainModel(referencedModel); // Version will be V3+ in production since it's JSON Light only this.valueWriter = new MockJsonLightValueSerializer(jsonWriter, model) { Settings = new ODataMessageWriterSettings { Version = ODataVersion.V4, ShouldIncludeAnnotation = ODataUtils.CreateAnnotationFilter("*") } }; this.jsonLightInstanceAnnotationWriter = new JsonLightInstanceAnnotationWriter(this.valueWriter, new JsonMinimalMetadataTypeNameOracle()); }
public void ShouldWriteAnyAnnotationByDefaultWithIgnoreFilterSetToTrue() { var stream = new MemoryStream(); var defaultValueWriter = new MockJsonLightValueSerializer(CreateJsonLightOutputContext(stream, model, this.jsonWriter, new ODataMessageWriterSettings { Version = ODataVersion.V4 })); var defaultAnnotationWriter = new JsonLightInstanceAnnotationWriter(defaultValueWriter, new JsonMinimalMetadataTypeNameOracle()); var annotations = new Collection <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++; defaultValueWriter.WritePrimitiveVerifier = (value, reference) => verifierCalls++; defaultAnnotationWriter.WriteInstanceAnnotations(annotations, new InstanceAnnotationWriteTracker(), true); verifierCalls.Should().Be(4); }
public void TestWriteInstanceAnnotationsForError() { var defaultValueWriter = new MockJsonLightValueSerializer(jsonWriter, model) { Settings = new ODataMessageWriterSettings { Version = ODataVersion.V4 } }; var defaultAnnotationWriter = new JsonLightInstanceAnnotationWriter(defaultValueWriter, new JsonMinimalMetadataTypeNameOracle()); var annotations = new Collection <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++; defaultValueWriter.WritePrimitiveVerifier = (value, reference) => verifierCalls++; defaultAnnotationWriter.WriteInstanceAnnotationsForError(annotations); verifierCalls.Should().Be(4); }
private static string WriteInstanceAnnotation(ODataInstanceAnnotation instanceAnnotation, IEdmModel model) { var stringWriter = new StringWriter(); var outputContext = new ODataJsonLightOutputContext( ODataFormat.Json, stringWriter, new ODataMessageWriterSettings { Version = ODataVersion.V4, ShouldIncludeAnnotation = ODataUtils.CreateAnnotationFilter("*") }, model); var valueSerializer = new ODataJsonLightValueSerializer(outputContext); // The JSON Writer will complain if there is no active scope, so start an object scope. valueSerializer.JsonWriter.StartObjectScope(); var instanceAnnotationWriter = new JsonLightInstanceAnnotationWriter(valueSerializer, new JsonMinimalMetadataTypeNameOracle()); // The method under test. instanceAnnotationWriter.WriteInstanceAnnotation(instanceAnnotation); valueSerializer.JsonWriter.EndObjectScope(); return(stringWriter.ToString()); }