| File: DocumentImageElementTests.cs | Web Access |
| Project: src\test\Libraries\Microsoft.Extensions.Documents.Abstractions.Tests\Microsoft.Extensions.Documents.Abstractions.Tests.csproj (Microsoft.Extensions.Documents.Abstractions.Tests) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using System; using Microsoft.Extensions.AI; using Microsoft.Extensions.Documents; using Xunit; namespace Microsoft.Extensions.Documents.Tests; public class DocumentImageElementTests { [Fact] public void PreservesContentMediaTypeSourceAndAlternativeText() { ExtractionDocumentImageElement image = new(new TextContent("stored image")); ReadOnlyMemory<byte> content = new byte[] { 1, 2, 3 }; Uri source = new("urn:image:opaque-7"); DataContent payload = new(content, "image/png"); image.Content = payload; image.Source = source; image.AlternativeText = "diagram"; Assert.Same(payload, image.Content); Assert.Equal(content.ToArray(), Assert.IsType<DataContent>(image.Content).Data.ToArray()); Assert.Equal("image/png", payload.MediaType); Assert.Same(source, image.Source); Assert.Equal("diagram", image.AlternativeText); } [Fact] public void SourceAndAlternativeText_DoNotReplaceLocalPayload() { ExtractionDocumentImageElement image = new(new TextContent("stored image")) { Source = new Uri("urn:image:opaque-8"), AlternativeText = "a diagram" }; Assert.Equal("stored image", Assert.IsType<TextContent>(image.Content).Text); Assert.Equal("urn:image:opaque-8", image.Source!.ToString()); Assert.Equal("a diagram", image.AlternativeText); } [Fact] public void AbsentSource_DoesNotDiscardLocalPayloadOrAlternativeText() { ExtractionDocumentImageElement image = new(new TextContent("stored image markdown")) { AlternativeText = "unused alternative text" }; Assert.Null(image.Source); Assert.Equal("stored image markdown", Assert.IsType<TextContent>(image.Content).Text); Assert.Equal("unused alternative text", image.AlternativeText); } [Fact] public void SameScalarAssignments_PreserveImagePayloadAndDescription() { ExtractionDocument document = new("document"); ExtractionDocumentSection section = new(null); ReadOnlyMemory<byte> content = new byte[] { 4, 5 }; Uri source = new("urn:image:opaque-9"); DataContent payload = new(content, "image/jpeg"); ExtractionDocumentImageElement image = new(payload) { Source = source, AlternativeText = "photo" }; document.Sections.Add(section); section.Elements.Add(image); image.Content = payload; image.Source = source; image.AlternativeText = "photo"; Assert.Same(payload, image.Content); Assert.Equal("image/jpeg", payload.MediaType); Assert.Same(source, image.Source); Assert.Equal("photo", image.AlternativeText); } [Fact] public void ImageOnlyContent_PreservesBytesSourceDescriptionAndBorrowedNativePayload() { ExtractionDocument document = new("image-only", null); byte[] bytes = [0x89, 0x50, 0x4E, 0x47, 0x01, 0x02]; using DocumentAnnotationTestData.CountingStream stream = new(bytes); Uri source = new("urn:image:page7"); DataContent payload = new(bytes, "image/png") { RawRepresentation = stream }; ExtractionDocumentImageElement image = new(payload) { Source = source, AlternativeText = "diagram only" }; ExtractionDocumentSourcePage page = DocumentAnnotationTestData.PdfPage(); document.SourcePages.Add(page); image.Sources.Add(new ExtractionDocumentSourceReference(page, DocumentAnnotationTestData.Polygon())); ExtractionDocumentSection section = new(null); section.Elements.Add(image); document.Sections.Add(section); Assert.Same(payload, image.Content); Assert.Same(stream, payload.RawRepresentation); Assert.Equal(bytes, Assert.IsType<DataContent>(image.Content).Data.ToArray()); Assert.Equal(bytes, stream.ToArray()); Assert.Equal("image/png", payload.MediaType); Assert.Same(source, image.Source); Assert.Equal("diagram only", image.AlternativeText); Assert.Null(image.Text); Assert.Null(document.Content); Assert.Same(image, Assert.Single(document.EnumerateContent())); Assert.Same(page, Assert.Single(document.SourcePages)); Assert.Equal(0, stream.DisposeCount); stream.Dispose(); Assert.Equal(bytes, Assert.IsType<DataContent>(image.Content).Data.ToArray()); } }