mirror of https://github.com/SixLabors/ImageSharp
23 changed files with 761 additions and 492 deletions
@ -1,337 +0,0 @@ |
|||
// Copyright (c) Six Labors and contributors.
|
|||
// Licensed under the Apache License, Version 2.0.
|
|||
|
|||
using System; |
|||
using System.IO; |
|||
using SixLabors.ImageSharp.Formats; |
|||
using SixLabors.ImageSharp.IO; |
|||
using Moq; |
|||
using Xunit; |
|||
using SixLabors.ImageSharp.Advanced; |
|||
using SixLabors.ImageSharp.PixelFormats; |
|||
|
|||
namespace SixLabors.ImageSharp.Tests |
|||
{ |
|||
/// <summary>
|
|||
/// Tests the <see cref="Image"/> class.
|
|||
/// </summary>
|
|||
public partial class ImageLoadTests : IDisposable |
|||
{ |
|||
private readonly Mock<IFileSystem> fileSystem; |
|||
private Image<Rgba32> returnImage; |
|||
private Mock<IImageDecoder> localDecoder; |
|||
private readonly string FilePath; |
|||
private readonly IImageFormatDetector localMimeTypeDetector; |
|||
private readonly Mock<IImageFormat> localImageFormatMock; |
|||
|
|||
public Configuration LocalConfiguration { get; private set; } |
|||
public byte[] Marker { get; private set; } |
|||
public MemoryStream DataStream { get; private set; } |
|||
public byte[] DecodedData { get; private set; } |
|||
|
|||
public ImageLoadTests() |
|||
{ |
|||
this.returnImage = new Image<Rgba32>(1, 1); |
|||
|
|||
this.localImageFormatMock = new Mock<IImageFormat>(); |
|||
|
|||
this.localDecoder = new Mock<IImageDecoder>(); |
|||
this.localMimeTypeDetector = new MockImageFormatDetector(this.localImageFormatMock.Object); |
|||
this.localDecoder.Setup(x => x.Decode<Rgba32>(It.IsAny<Configuration>(), It.IsAny<Stream>())) |
|||
|
|||
.Callback<Configuration, Stream>((c, s) => |
|||
{ |
|||
using (var ms = new MemoryStream()) |
|||
{ |
|||
s.CopyTo(ms); |
|||
this.DecodedData = ms.ToArray(); |
|||
} |
|||
}) |
|||
.Returns(this.returnImage); |
|||
|
|||
this.fileSystem = new Mock<IFileSystem>(); |
|||
|
|||
this.LocalConfiguration = new Configuration |
|||
{ |
|||
FileSystem = this.fileSystem.Object |
|||
}; |
|||
this.LocalConfiguration.ImageFormatsManager.AddImageFormatDetector(this.localMimeTypeDetector); |
|||
this.LocalConfiguration.ImageFormatsManager.SetDecoder(this.localImageFormatMock.Object, this.localDecoder.Object); |
|||
|
|||
TestFormat.RegisterGlobalTestFormat(); |
|||
this.Marker = Guid.NewGuid().ToByteArray(); |
|||
this.DataStream = TestFormat.GlobalTestFormat.CreateStream(this.Marker); |
|||
|
|||
this.FilePath = Guid.NewGuid().ToString(); |
|||
this.fileSystem.Setup(x => x.OpenRead(this.FilePath)).Returns(this.DataStream); |
|||
|
|||
TestFileSystem.RegisterGlobalTestFormat(); |
|||
TestFileSystem.Global.AddFile(this.FilePath, this.DataStream); |
|||
} |
|||
|
|||
[Fact] |
|||
public void LoadFromStream() |
|||
{ |
|||
Image<Rgba32> img = Image.Load<Rgba32>(this.DataStream); |
|||
|
|||
Assert.NotNull(img); |
|||
|
|||
TestFormat.GlobalTestFormat.VerifyDecodeCall(this.Marker, Configuration.Default); |
|||
} |
|||
|
|||
[Fact] |
|||
public void LoadFromNoneSeekableStream() |
|||
{ |
|||
NoneSeekableStream stream = new NoneSeekableStream(this.DataStream); |
|||
Image<Rgba32> img = Image.Load<Rgba32>(stream); |
|||
|
|||
Assert.NotNull(img); |
|||
|
|||
TestFormat.GlobalTestFormat.VerifyDecodeCall(this.Marker, Configuration.Default); |
|||
} |
|||
|
|||
[Fact] |
|||
public void LoadFromStreamWithType() |
|||
{ |
|||
Image<Rgba32> img = Image.Load<Rgba32>(this.DataStream); |
|||
|
|||
Assert.NotNull(img); |
|||
Assert.Equal(TestFormat.GlobalTestFormat.Sample<Rgba32>(), img); |
|||
|
|||
TestFormat.GlobalTestFormat.VerifyDecodeCall(this.Marker, Configuration.Default); |
|||
} |
|||
|
|||
|
|||
[Fact] |
|||
public void LoadFromStreamWithConfig() |
|||
{ |
|||
Stream stream = new MemoryStream(); |
|||
Image<Rgba32> img = Image.Load<Rgba32>(this.LocalConfiguration, stream); |
|||
|
|||
Assert.NotNull(img); |
|||
|
|||
this.localDecoder.Verify(x => x.Decode<Rgba32>(this.LocalConfiguration, stream)); |
|||
} |
|||
|
|||
[Fact] |
|||
public void LoadFromStreamWithTypeAndConfig() |
|||
{ |
|||
Stream stream = new MemoryStream(); |
|||
Image<Rgba32> img = Image.Load<Rgba32>(this.LocalConfiguration, stream); |
|||
|
|||
Assert.NotNull(img); |
|||
Assert.Equal(this.returnImage, img); |
|||
|
|||
this.localDecoder.Verify(x => x.Decode<Rgba32>(this.LocalConfiguration, stream)); |
|||
} |
|||
|
|||
|
|||
[Fact] |
|||
public void LoadFromStreamWithDecoder() |
|||
{ |
|||
Stream stream = new MemoryStream(); |
|||
Image<Rgba32> img = Image.Load<Rgba32>(stream, this.localDecoder.Object); |
|||
|
|||
Assert.NotNull(img); |
|||
this.localDecoder.Verify(x => x.Decode<Rgba32>(Configuration.Default, stream)); |
|||
} |
|||
|
|||
[Fact] |
|||
public void LoadFromStreamWithTypeAndDecoder() |
|||
{ |
|||
Stream stream = new MemoryStream(); |
|||
Image<Rgba32> img = Image.Load<Rgba32>(stream, this.localDecoder.Object); |
|||
|
|||
Assert.NotNull(img); |
|||
Assert.Equal(this.returnImage, img); |
|||
this.localDecoder.Verify(x => x.Decode<Rgba32>(Configuration.Default, stream)); |
|||
} |
|||
|
|||
[Fact] |
|||
public void LoadFromBytes() |
|||
{ |
|||
Image<Rgba32> img = Image.Load<Rgba32>(this.DataStream.ToArray()); |
|||
|
|||
Assert.NotNull(img); |
|||
|
|||
TestFormat.GlobalTestFormat.VerifyDecodeCall(this.Marker, Configuration.Default); |
|||
} |
|||
|
|||
[Fact] |
|||
public void LoadFromBytesWithType() |
|||
{ |
|||
Image<Rgba32> img = Image.Load<Rgba32>(this.DataStream.ToArray()); |
|||
|
|||
Assert.NotNull(img); |
|||
Assert.Equal(TestFormat.GlobalTestFormat.Sample<Rgba32>(), img); |
|||
|
|||
TestFormat.GlobalTestFormat.VerifyDecodeCall(this.Marker, Configuration.Default); |
|||
|
|||
} |
|||
|
|||
[Fact] |
|||
public void LoadFromBytesWithConfig() |
|||
{ |
|||
Image<Rgba32> img = Image.Load<Rgba32>(this.LocalConfiguration, this.DataStream.ToArray()); |
|||
|
|||
Assert.NotNull(img); |
|||
|
|||
this.localDecoder.Verify(x => x.Decode<Rgba32>(this.LocalConfiguration, It.IsAny<Stream>())); |
|||
|
|||
Assert.Equal(this.DataStream.ToArray(), this.DecodedData); |
|||
} |
|||
|
|||
[Fact] |
|||
public void LoadFromBytesWithTypeAndConfig() |
|||
{ |
|||
Image<Rgba32> img = Image.Load<Rgba32>(this.LocalConfiguration, this.DataStream.ToArray()); |
|||
|
|||
Assert.NotNull(img); |
|||
Assert.Equal(this.returnImage, img); |
|||
|
|||
this.localDecoder.Verify(x => x.Decode<Rgba32>(this.LocalConfiguration, It.IsAny<Stream>())); |
|||
|
|||
Assert.Equal(this.DataStream.ToArray(), this.DecodedData); |
|||
} |
|||
|
|||
[Fact] |
|||
public void LoadFromBytesWithDecoder() |
|||
{ |
|||
Image<Rgba32> img = Image.Load<Rgba32>(this.DataStream.ToArray(), this.localDecoder.Object); |
|||
|
|||
Assert.NotNull(img); |
|||
this.localDecoder.Verify(x => x.Decode<Rgba32>(Configuration.Default, It.IsAny<Stream>())); |
|||
Assert.Equal(this.DataStream.ToArray(), this.DecodedData); |
|||
} |
|||
|
|||
[Fact] |
|||
public void LoadFromBytesWithTypeAndDecoder() |
|||
{ |
|||
Image<Rgba32> img = Image.Load<Rgba32>(this.DataStream.ToArray(), this.localDecoder.Object); |
|||
|
|||
Assert.NotNull(img); |
|||
Assert.Equal(this.returnImage, img); |
|||
this.localDecoder.Verify(x => x.Decode<Rgba32>(Configuration.Default, It.IsAny<Stream>())); |
|||
Assert.Equal(this.DataStream.ToArray(), this.DecodedData); |
|||
} |
|||
|
|||
[Fact] |
|||
public void LoadFromFile() |
|||
{ |
|||
Image<Rgba32> img = Image.Load<Rgba32>(this.DataStream); |
|||
|
|||
Assert.NotNull(img); |
|||
|
|||
TestFormat.GlobalTestFormat.VerifyDecodeCall(this.Marker, Configuration.Default); |
|||
} |
|||
|
|||
[Fact] |
|||
public void LoadFromFileWithType() |
|||
{ |
|||
Image<Rgba32> img = Image.Load<Rgba32>(this.DataStream); |
|||
|
|||
Assert.NotNull(img); |
|||
Assert.Equal(TestFormat.GlobalTestFormat.Sample<Rgba32>(), img); |
|||
|
|||
TestFormat.GlobalTestFormat.VerifyDecodeCall(this.Marker, Configuration.Default); |
|||
} |
|||
|
|||
[Fact] |
|||
public void LoadFromFileWithConfig() |
|||
{ |
|||
Image<Rgba32> img = Image.Load<Rgba32>(this.LocalConfiguration, this.FilePath); |
|||
|
|||
Assert.NotNull(img); |
|||
|
|||
this.localDecoder.Verify(x => x.Decode<Rgba32>(this.LocalConfiguration, this.DataStream)); |
|||
} |
|||
|
|||
[Fact] |
|||
public void LoadFromFileWithTypeAndConfig() |
|||
{ |
|||
Image<Rgba32> img = Image.Load<Rgba32>(this.LocalConfiguration, this.FilePath); |
|||
|
|||
Assert.NotNull(img); |
|||
Assert.Equal(this.returnImage, img); |
|||
|
|||
this.localDecoder.Verify(x => x.Decode<Rgba32>(this.LocalConfiguration, this.DataStream)); |
|||
} |
|||
|
|||
[Fact] |
|||
public void LoadFromFileWithDecoder() |
|||
{ |
|||
Image<Rgba32> img = Image.Load<Rgba32>(this.FilePath, this.localDecoder.Object); |
|||
|
|||
Assert.NotNull(img); |
|||
this.localDecoder.Verify(x => x.Decode<Rgba32>(Configuration.Default, this.DataStream)); |
|||
} |
|||
|
|||
[Fact] |
|||
public void LoadFromFileWithTypeAndDecoder() |
|||
{ |
|||
Image<Rgba32> img = Image.Load<Rgba32>(this.FilePath, this.localDecoder.Object); |
|||
|
|||
Assert.NotNull(img); |
|||
Assert.Equal(this.returnImage, img); |
|||
this.localDecoder.Verify(x => x.Decode<Rgba32>(Configuration.Default, this.DataStream)); |
|||
} |
|||
|
|||
[Fact] |
|||
public void LoadFromPixelData_Pixels() |
|||
{ |
|||
var img = Image.LoadPixelData<Rgba32>(new Rgba32[] { |
|||
Rgba32.Black, Rgba32.White, |
|||
Rgba32.White, Rgba32.Black, |
|||
}, 2, 2); |
|||
|
|||
Assert.NotNull(img); |
|||
using (var px = img.Lock()) |
|||
{ |
|||
Assert.Equal(Rgba32.Black, px[0, 0]); |
|||
Assert.Equal(Rgba32.White, px[0, 1]); |
|||
|
|||
Assert.Equal(Rgba32.White, px[1, 0]); |
|||
Assert.Equal(Rgba32.Black, px[1, 1]); |
|||
} |
|||
} |
|||
|
|||
[Fact] |
|||
public void LoadFromPixelData_Bytes() |
|||
{ |
|||
var img = Image.LoadPixelData<Rgba32>(new byte[] { |
|||
0,0,0,255, // 0,0
|
|||
255,255,255,255, // 0,1
|
|||
255,255,255,255, // 1,0
|
|||
0,0,0,255, // 1,1
|
|||
}, 2, 2); |
|||
|
|||
Assert.NotNull(img); |
|||
using (var px = img.Lock()) |
|||
{ |
|||
Assert.Equal(Rgba32.Black, px[0, 0]); |
|||
Assert.Equal(Rgba32.White, px[0, 1]); |
|||
|
|||
Assert.Equal(Rgba32.White, px[1, 0]); |
|||
Assert.Equal(Rgba32.Black, px[1, 1]); |
|||
} |
|||
} |
|||
|
|||
|
|||
[Fact] |
|||
public void LoadsImageWithoutThrowingCrcException() |
|||
{ |
|||
var image1Provider = TestImageProvider<Rgba32>.File(TestImages.Png.VersioningImage1); |
|||
|
|||
using (Image<Rgba32> img = image1Provider.GetImage()) |
|||
{ |
|||
Assert.Equal(166036, img.Frames.RootFrame.GetPixelSpan().Length); |
|||
} |
|||
} |
|||
|
|||
public void Dispose() |
|||
{ |
|||
// clean up the global object;
|
|||
this.returnImage?.Dispose(); |
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,63 @@ |
|||
// Copyright (c) Six Labors and contributors.
|
|||
// Licensed under the Apache License, Version 2.0.
|
|||
|
|||
using System; |
|||
using SixLabors.ImageSharp.PixelFormats; |
|||
using Xunit; |
|||
// ReSharper disable InconsistentNaming
|
|||
|
|||
namespace SixLabors.ImageSharp.Tests |
|||
{ |
|||
public partial class ImageTests |
|||
{ |
|||
public class Load_BasicCases |
|||
{ |
|||
[Fact] |
|||
public void ByteArray() |
|||
{ |
|||
Assert.Throws<ArgumentNullException>(() => |
|||
{ |
|||
Image.Load<Rgba32>((byte[])null); |
|||
}); |
|||
|
|||
var file = TestFile.Create(TestImages.Bmp.Car); |
|||
using (var image = Image.Load<Rgba32>(file.Bytes)) |
|||
{ |
|||
Assert.Equal(600, image.Width); |
|||
Assert.Equal(450, image.Height); |
|||
} |
|||
} |
|||
|
|||
[Fact] |
|||
public void FileSystemPath() |
|||
{ |
|||
var file = TestFile.Create(TestImages.Bmp.Car); |
|||
using (var image = Image.Load<Rgba32>(file.FullPath)) |
|||
{ |
|||
Assert.Equal(600, image.Width); |
|||
Assert.Equal(450, image.Height); |
|||
} |
|||
} |
|||
|
|||
[Fact] |
|||
public void FileSystemPath_FileNotFound() |
|||
{ |
|||
System.IO.FileNotFoundException ex = Assert.Throws<System.IO.FileNotFoundException>( |
|||
() => |
|||
{ |
|||
Image.Load<Rgba32>(Guid.NewGuid().ToString()); |
|||
}); |
|||
} |
|||
|
|||
[Fact] |
|||
public void FileSystemPath_NullPath() |
|||
{ |
|||
ArgumentNullException ex = Assert.Throws<ArgumentNullException>( |
|||
() => |
|||
{ |
|||
Image.Load<Rgba32>((string)null); |
|||
}); |
|||
} |
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,338 @@ |
|||
// Copyright (c) Six Labors and contributors.
|
|||
// Licensed under the Apache License, Version 2.0.
|
|||
|
|||
using System; |
|||
using System.IO; |
|||
|
|||
using Moq; |
|||
|
|||
using SixLabors.ImageSharp.Advanced; |
|||
using SixLabors.ImageSharp.Formats; |
|||
using SixLabors.ImageSharp.IO; |
|||
using SixLabors.ImageSharp.PixelFormats; |
|||
|
|||
using Xunit; |
|||
// ReSharper disable InconsistentNaming
|
|||
|
|||
namespace SixLabors.ImageSharp.Tests |
|||
{ |
|||
public partial class ImageTests |
|||
{ |
|||
/// <summary>
|
|||
/// Tests the <see cref="Image"/> class.
|
|||
/// </summary>
|
|||
public class Load_ComplexCases : IDisposable |
|||
{ |
|||
private readonly Mock<IFileSystem> fileSystem; |
|||
private readonly Image<Rgba32> returnImage; |
|||
private readonly Mock<IImageDecoder> localDecoder; |
|||
private readonly string FilePath; |
|||
private readonly IImageFormatDetector localMimeTypeDetector; |
|||
private readonly Mock<IImageFormat> localImageFormatMock; |
|||
|
|||
public Configuration LocalConfiguration { get; private set; } |
|||
public byte[] Marker { get; private set; } |
|||
public MemoryStream DataStream { get; private set; } |
|||
public byte[] DecodedData { get; private set; } |
|||
|
|||
public Load_ComplexCases() |
|||
{ |
|||
this.returnImage = new Image<Rgba32>(1, 1); |
|||
|
|||
this.localImageFormatMock = new Mock<IImageFormat>(); |
|||
|
|||
this.localDecoder = new Mock<IImageDecoder>(); |
|||
this.localMimeTypeDetector = new MockImageFormatDetector(this.localImageFormatMock.Object); |
|||
this.localDecoder.Setup(x => x.Decode<Rgba32>(It.IsAny<Configuration>(), It.IsAny<Stream>())) |
|||
|
|||
.Callback<Configuration, Stream>((c, s) => |
|||
{ |
|||
using (var ms = new MemoryStream()) |
|||
{ |
|||
s.CopyTo(ms); |
|||
this.DecodedData = ms.ToArray(); |
|||
} |
|||
}) |
|||
.Returns(this.returnImage); |
|||
|
|||
this.fileSystem = new Mock<IFileSystem>(); |
|||
|
|||
this.LocalConfiguration = new Configuration |
|||
{ |
|||
FileSystem = this.fileSystem.Object |
|||
}; |
|||
this.LocalConfiguration.ImageFormatsManager.AddImageFormatDetector(this.localMimeTypeDetector); |
|||
this.LocalConfiguration.ImageFormatsManager.SetDecoder(this.localImageFormatMock.Object, this.localDecoder.Object); |
|||
|
|||
TestFormat.RegisterGlobalTestFormat(); |
|||
this.Marker = Guid.NewGuid().ToByteArray(); |
|||
this.DataStream = TestFormat.GlobalTestFormat.CreateStream(this.Marker); |
|||
|
|||
this.FilePath = Guid.NewGuid().ToString(); |
|||
this.fileSystem.Setup(x => x.OpenRead(this.FilePath)).Returns(this.DataStream); |
|||
|
|||
TestFileSystem.RegisterGlobalTestFormat(); |
|||
TestFileSystem.Global.AddFile(this.FilePath, this.DataStream); |
|||
} |
|||
|
|||
[Fact] |
|||
public void LoadFromStream() |
|||
{ |
|||
var img = Image.Load<Rgba32>(this.DataStream); |
|||
|
|||
Assert.NotNull(img); |
|||
|
|||
TestFormat.GlobalTestFormat.VerifyDecodeCall(this.Marker, Configuration.Default); |
|||
} |
|||
|
|||
[Fact] |
|||
public void LoadFromNoneSeekableStream() |
|||
{ |
|||
var stream = new NoneSeekableStream(this.DataStream); |
|||
var img = Image.Load<Rgba32>(stream); |
|||
|
|||
Assert.NotNull(img); |
|||
|
|||
TestFormat.GlobalTestFormat.VerifyDecodeCall(this.Marker, Configuration.Default); |
|||
} |
|||
|
|||
[Fact] |
|||
public void LoadFromStreamWithType() |
|||
{ |
|||
var img = Image.Load<Rgba32>(this.DataStream); |
|||
|
|||
Assert.NotNull(img); |
|||
Assert.Equal(TestFormat.GlobalTestFormat.Sample<Rgba32>(), img); |
|||
|
|||
TestFormat.GlobalTestFormat.VerifyDecodeCall(this.Marker, Configuration.Default); |
|||
} |
|||
|
|||
|
|||
[Fact] |
|||
public void LoadFromStreamWithConfig() |
|||
{ |
|||
Stream stream = new MemoryStream(); |
|||
var img = Image.Load<Rgba32>(this.LocalConfiguration, stream); |
|||
|
|||
Assert.NotNull(img); |
|||
|
|||
this.localDecoder.Verify(x => x.Decode<Rgba32>(this.LocalConfiguration, stream)); |
|||
} |
|||
|
|||
[Fact] |
|||
public void LoadFromStreamWithTypeAndConfig() |
|||
{ |
|||
Stream stream = new MemoryStream(); |
|||
var img = Image.Load<Rgba32>(this.LocalConfiguration, stream); |
|||
|
|||
Assert.NotNull(img); |
|||
Assert.Equal(this.returnImage, img); |
|||
|
|||
this.localDecoder.Verify(x => x.Decode<Rgba32>(this.LocalConfiguration, stream)); |
|||
} |
|||
|
|||
|
|||
[Fact] |
|||
public void LoadFromStreamWithDecoder() |
|||
{ |
|||
Stream stream = new MemoryStream(); |
|||
var img = Image.Load<Rgba32>(stream, this.localDecoder.Object); |
|||
|
|||
Assert.NotNull(img); |
|||
this.localDecoder.Verify(x => x.Decode<Rgba32>(Configuration.Default, stream)); |
|||
} |
|||
|
|||
[Fact] |
|||
public void LoadFromStreamWithTypeAndDecoder() |
|||
{ |
|||
Stream stream = new MemoryStream(); |
|||
var img = Image.Load<Rgba32>(stream, this.localDecoder.Object); |
|||
|
|||
Assert.NotNull(img); |
|||
Assert.Equal(this.returnImage, img); |
|||
this.localDecoder.Verify(x => x.Decode<Rgba32>(Configuration.Default, stream)); |
|||
} |
|||
|
|||
[Fact] |
|||
public void LoadFromBytes() |
|||
{ |
|||
var img = Image.Load<Rgba32>(this.DataStream.ToArray()); |
|||
|
|||
Assert.NotNull(img); |
|||
|
|||
TestFormat.GlobalTestFormat.VerifyDecodeCall(this.Marker, Configuration.Default); |
|||
} |
|||
|
|||
[Fact] |
|||
public void LoadFromBytesWithType() |
|||
{ |
|||
var img = Image.Load<Rgba32>(this.DataStream.ToArray()); |
|||
|
|||
Assert.NotNull(img); |
|||
Assert.Equal(TestFormat.GlobalTestFormat.Sample<Rgba32>(), img); |
|||
|
|||
TestFormat.GlobalTestFormat.VerifyDecodeCall(this.Marker, Configuration.Default); |
|||
|
|||
} |
|||
|
|||
[Fact] |
|||
public void LoadFromBytesWithConfig() |
|||
{ |
|||
var img = Image.Load<Rgba32>(this.LocalConfiguration, this.DataStream.ToArray()); |
|||
|
|||
Assert.NotNull(img); |
|||
|
|||
this.localDecoder.Verify(x => x.Decode<Rgba32>(this.LocalConfiguration, It.IsAny<Stream>())); |
|||
|
|||
Assert.Equal(this.DataStream.ToArray(), this.DecodedData); |
|||
} |
|||
|
|||
[Fact] |
|||
public void LoadFromBytesWithTypeAndConfig() |
|||
{ |
|||
var img = Image.Load<Rgba32>(this.LocalConfiguration, this.DataStream.ToArray()); |
|||
|
|||
Assert.NotNull(img); |
|||
Assert.Equal(this.returnImage, img); |
|||
|
|||
this.localDecoder.Verify(x => x.Decode<Rgba32>(this.LocalConfiguration, It.IsAny<Stream>())); |
|||
|
|||
Assert.Equal(this.DataStream.ToArray(), this.DecodedData); |
|||
} |
|||
|
|||
[Fact] |
|||
public void LoadFromBytesWithDecoder() |
|||
{ |
|||
var img = Image.Load<Rgba32>(this.DataStream.ToArray(), this.localDecoder.Object); |
|||
|
|||
Assert.NotNull(img); |
|||
this.localDecoder.Verify(x => x.Decode<Rgba32>(Configuration.Default, It.IsAny<Stream>())); |
|||
Assert.Equal(this.DataStream.ToArray(), this.DecodedData); |
|||
} |
|||
|
|||
[Fact] |
|||
public void LoadFromBytesWithTypeAndDecoder() |
|||
{ |
|||
var img = Image.Load<Rgba32>(this.DataStream.ToArray(), this.localDecoder.Object); |
|||
|
|||
Assert.NotNull(img); |
|||
Assert.Equal(this.returnImage, img); |
|||
this.localDecoder.Verify(x => x.Decode<Rgba32>(Configuration.Default, It.IsAny<Stream>())); |
|||
Assert.Equal(this.DataStream.ToArray(), this.DecodedData); |
|||
} |
|||
|
|||
[Fact] |
|||
public void LoadFromFile() |
|||
{ |
|||
var img = Image.Load<Rgba32>(this.DataStream); |
|||
|
|||
Assert.NotNull(img); |
|||
|
|||
TestFormat.GlobalTestFormat.VerifyDecodeCall(this.Marker, Configuration.Default); |
|||
} |
|||
|
|||
[Fact] |
|||
public void LoadFromFileWithType() |
|||
{ |
|||
var img = Image.Load<Rgba32>(this.DataStream); |
|||
|
|||
Assert.NotNull(img); |
|||
Assert.Equal(TestFormat.GlobalTestFormat.Sample<Rgba32>(), img); |
|||
|
|||
TestFormat.GlobalTestFormat.VerifyDecodeCall(this.Marker, Configuration.Default); |
|||
} |
|||
|
|||
[Fact] |
|||
public void LoadFromFileWithConfig() |
|||
{ |
|||
var img = Image.Load<Rgba32>(this.LocalConfiguration, this.FilePath); |
|||
|
|||
Assert.NotNull(img); |
|||
|
|||
this.localDecoder.Verify(x => x.Decode<Rgba32>(this.LocalConfiguration, this.DataStream)); |
|||
} |
|||
|
|||
[Fact] |
|||
public void LoadFromFileWithTypeAndConfig() |
|||
{ |
|||
var img = Image.Load<Rgba32>(this.LocalConfiguration, this.FilePath); |
|||
|
|||
Assert.NotNull(img); |
|||
Assert.Equal(this.returnImage, img); |
|||
|
|||
this.localDecoder.Verify(x => x.Decode<Rgba32>(this.LocalConfiguration, this.DataStream)); |
|||
} |
|||
|
|||
[Fact] |
|||
public void LoadFromFileWithDecoder() |
|||
{ |
|||
var img = Image.Load<Rgba32>(this.FilePath, this.localDecoder.Object); |
|||
|
|||
Assert.NotNull(img); |
|||
this.localDecoder.Verify(x => x.Decode<Rgba32>(Configuration.Default, this.DataStream)); |
|||
} |
|||
|
|||
[Fact] |
|||
public void LoadFromFileWithTypeAndDecoder() |
|||
{ |
|||
var img = Image.Load<Rgba32>(this.FilePath, this.localDecoder.Object); |
|||
|
|||
Assert.NotNull(img); |
|||
Assert.Equal(this.returnImage, img); |
|||
this.localDecoder.Verify(x => x.Decode<Rgba32>(Configuration.Default, this.DataStream)); |
|||
} |
|||
|
|||
[Fact] |
|||
public void LoadFromPixelData_Pixels() |
|||
{ |
|||
var img = Image.LoadPixelData<Rgba32>(new Rgba32[] { |
|||
Rgba32.Black, Rgba32.White, |
|||
Rgba32.White, Rgba32.Black, |
|||
}, 2, 2); |
|||
|
|||
Assert.NotNull(img); |
|||
Assert.Equal(Rgba32.Black, img[0, 0]); |
|||
Assert.Equal(Rgba32.White, img[0, 1]); |
|||
|
|||
Assert.Equal(Rgba32.White, img[1, 0]); |
|||
Assert.Equal(Rgba32.Black, img[1, 1]); |
|||
} |
|||
|
|||
[Fact] |
|||
public void LoadFromPixelData_Bytes() |
|||
{ |
|||
var img = Image.LoadPixelData<Rgba32>(new byte[] { |
|||
0,0,0,255, // 0,0
|
|||
255,255,255,255, // 0,1
|
|||
255,255,255,255, // 1,0
|
|||
0,0,0,255, // 1,1
|
|||
}, 2, 2); |
|||
|
|||
Assert.NotNull(img); |
|||
Assert.Equal(Rgba32.Black, img[0, 0]); |
|||
Assert.Equal(Rgba32.White, img[0, 1]); |
|||
|
|||
Assert.Equal(Rgba32.White, img[1, 0]); |
|||
Assert.Equal(Rgba32.Black, img[1, 1]); |
|||
} |
|||
|
|||
|
|||
[Fact] |
|||
public void LoadsImageWithoutThrowingCrcException() |
|||
{ |
|||
var image1Provider = TestImageProvider<Rgba32>.File(TestImages.Png.VersioningImage1); |
|||
|
|||
using (Image<Rgba32> img = image1Provider.GetImage()) |
|||
{ |
|||
Assert.Equal(166036, img.Frames.RootFrame.GetPixelSpan().Length); |
|||
} |
|||
} |
|||
|
|||
public void Dispose() |
|||
{ |
|||
// clean up the global object;
|
|||
this.returnImage?.Dispose(); |
|||
} |
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,70 @@ |
|||
// Copyright (c) Six Labors and contributors.
|
|||
// Licensed under the Apache License, Version 2.0.
|
|||
|
|||
// ReSharper disable InconsistentNaming
|
|||
|
|||
using System; |
|||
using SixLabors.ImageSharp.Formats.Png; |
|||
using SixLabors.ImageSharp.PixelFormats; |
|||
using Xunit; |
|||
|
|||
namespace SixLabors.ImageSharp.Tests |
|||
{ |
|||
using SixLabors.ImageSharp.Formats; |
|||
|
|||
public partial class ImageTests |
|||
{ |
|||
public class Save |
|||
{ |
|||
[Fact] |
|||
public void DetecedEncoding() |
|||
{ |
|||
string dir = TestEnvironment.CreateOutputDirectory(nameof(ImageTests)); |
|||
string file = System.IO.Path.Combine(dir, "DetecedEncoding.png"); |
|||
|
|||
using (var image = new Image<Rgba32>(10, 10)) |
|||
{ |
|||
image.Save(file); |
|||
} |
|||
|
|||
using (var img = Image.Load(file, out IImageFormat mime)) |
|||
{ |
|||
Assert.Equal("image/png", mime.DefaultMimeType); |
|||
} |
|||
} |
|||
|
|||
[Fact] |
|||
public void WhenExtensionIsUnknown_Throws() |
|||
{ |
|||
string dir = TestEnvironment.CreateOutputDirectory(nameof(ImageTests)); |
|||
string file = System.IO.Path.Combine(dir, "UnknownExtensionsEncoding_Throws.tmp"); |
|||
|
|||
NotSupportedException ex = Assert.Throws<NotSupportedException>( |
|||
() => |
|||
{ |
|||
using (var image = new Image<Rgba32>(10, 10)) |
|||
{ |
|||
image.Save(file); |
|||
} |
|||
}); |
|||
} |
|||
|
|||
[Fact] |
|||
public void SetEncoding() |
|||
{ |
|||
string dir = TestEnvironment.CreateOutputDirectory(nameof(ImageTests)); |
|||
string file = System.IO.Path.Combine(dir, "SetEncoding.dat"); |
|||
|
|||
using (var image = new Image<Rgba32>(10, 10)) |
|||
{ |
|||
image.Save(file, new PngEncoder()); |
|||
} |
|||
|
|||
using (var img = Image.Load(file, out var mime)) |
|||
{ |
|||
Assert.Equal("image/png", mime.DefaultMimeType); |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,24 @@ |
|||
// Copyright (c) Six Labors and contributors.
|
|||
// Licensed under the Apache License, Version 2.0.
|
|||
|
|||
using System; |
|||
using SixLabors.Memory; |
|||
using Xunit; |
|||
|
|||
// ReSharper disable InconsistentNaming
|
|||
namespace SixLabors.ImageSharp.Tests |
|||
{ |
|||
public partial class ImageTests |
|||
{ |
|||
public class WrapMemory |
|||
{ |
|||
[Fact] |
|||
public void ConsumedBuffer_IsMemoryOwner_ReturnsFalse() |
|||
{ |
|||
var memory = new Memory<int>(new int[55]); |
|||
var buffer = new ConsumedBuffer<int>(memory); |
|||
Assert.False(buffer.IsMemoryOwner); |
|||
} |
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,50 @@ |
|||
using System; |
|||
using System.Buffers; |
|||
|
|||
namespace SixLabors.ImageSharp.Tests |
|||
{ |
|||
using SixLabors.ImageSharp.Advanced; |
|||
using SixLabors.ImageSharp.PixelFormats; |
|||
|
|||
class TestMemoryManager<T> : MemoryManager<T> |
|||
where T : struct, IPixel<T> |
|||
{ |
|||
public TestMemoryManager(T[] pixelArray) |
|||
{ |
|||
this.PixelArray = pixelArray; |
|||
} |
|||
|
|||
public T[] PixelArray { get; } |
|||
|
|||
protected override void Dispose(bool disposing) |
|||
{ |
|||
} |
|||
|
|||
public override Span<T> GetSpan() |
|||
{ |
|||
return this.PixelArray; |
|||
} |
|||
|
|||
public override MemoryHandle Pin(int elementIndex = 0) |
|||
{ |
|||
throw new NotImplementedException(); |
|||
} |
|||
|
|||
public override void Unpin() |
|||
{ |
|||
throw new NotImplementedException(); |
|||
} |
|||
|
|||
public static TestMemoryManager<T> CreateAsCopyOfPixelData(Span<T> pixelData) |
|||
{ |
|||
var pixelArray = new T[pixelData.Length]; |
|||
pixelData.CopyTo(pixelArray); |
|||
return new TestMemoryManager<T>(pixelArray); |
|||
} |
|||
|
|||
public static TestMemoryManager<T> CreateAsCopyOfPixelData(Image<T> image) |
|||
{ |
|||
return CreateAsCopyOfPixelData(image.GetPixelSpan()); |
|||
} |
|||
} |
|||
} |
|||
Loading…
Reference in new issue