// Copyright (c) Six Labors and contributors. // Licensed under the Apache License, Version 2.0. using System.Text; using SixLabors.ImageSharp.Formats; using SixLabors.ImageSharp.Formats.Gif; using SixLabors.ImageSharp.PixelFormats; using SixLabors.Primitives; using Xunit; // ReSharper disable InconsistentNaming namespace SixLabors.ImageSharp.Tests { public class GifDecoderTests { private const PixelTypes PixelTypes = Tests.PixelTypes.Rgba32 | Tests.PixelTypes.RgbaVector | Tests.PixelTypes.Argb32; public static readonly string[] TestFiles = { TestImages.Gif.Giphy, TestImages.Gif.Rings, TestImages.Gif.Trans }; [Theory] [WithFileCollection(nameof(TestFiles), PixelTypes)] public void DecodeAndReSave(TestImageProvider imageProvider) where TPixel : struct, IPixel { using (Image image = imageProvider.GetImage()) { imageProvider.Utility.SaveTestOutputFile(image, "bmp"); imageProvider.Utility.SaveTestOutputFile(image, "gif"); } } [Theory] [WithFileCollection(nameof(TestFiles), PixelTypes)] public void DecodeResizeAndSave(TestImageProvider imageProvider) where TPixel : struct, IPixel { using (Image image = imageProvider.GetImage()) { image.Mutate(x => x.Resize(new Size(image.Width / 2, image.Height / 2))); imageProvider.Utility.SaveTestOutputFile(image, "bmp"); imageProvider.Utility.SaveTestOutputFile(image, "gif"); } } [Fact] public void Decode_IgnoreMetadataIsFalse_CommentsAreRead() { GifDecoder options = new GifDecoder() { IgnoreMetadata = false }; TestFile testFile = TestFile.Create(TestImages.Gif.Rings); using (Image image = testFile.CreateImage(options)) { Assert.Equal(1, image.MetaData.Properties.Count); Assert.Equal("Comments", image.MetaData.Properties[0].Name); Assert.Equal("ImageSharp", image.MetaData.Properties[0].Value); } } [Fact] public void Decode_IgnoreMetadataIsTrue_CommentsAreIgnored() { GifDecoder options = new GifDecoder() { IgnoreMetadata = true }; TestFile testFile = TestFile.Create(TestImages.Gif.Rings); using (Image image = testFile.CreateImage(options)) { Assert.Equal(0, image.MetaData.Properties.Count); } } [Fact] public void Decode_TextEncodingSetToUnicode_TextIsReadWithCorrectEncoding() { GifDecoder options = new GifDecoder() { TextEncoding = Encoding.Unicode }; TestFile testFile = TestFile.Create(TestImages.Gif.Rings); using (Image image = testFile.CreateImage(options)) { Assert.Equal(1, image.MetaData.Properties.Count); Assert.Equal("浉条卥慨灲", image.MetaData.Properties[0].Value); } } } }