diff --git a/tests/ImageSharp.Tests/Image/ImageDiscoverMimeType.cs b/tests/ImageSharp.Tests/Image/ImageDiscoverMimeType.cs
new file mode 100644
index 000000000..80414662b
--- /dev/null
+++ b/tests/ImageSharp.Tests/Image/ImageDiscoverMimeType.cs
@@ -0,0 +1,107 @@
+//
+// Copyright (c) James Jackson-South and contributors.
+// Licensed under the Apache License, Version 2.0.
+//
+
+namespace ImageSharp.Tests
+{
+ using System;
+ using System.IO;
+
+ using ImageSharp.Formats;
+ using ImageSharp.IO;
+ using ImageSharp.PixelFormats;
+ using Moq;
+ using Xunit;
+
+ ///
+ /// Tests the class.
+ ///
+ public class DiscoverMimeTypeTests
+ {
+ private readonly Mock fileSystem;
+ private readonly string FilePath;
+ private readonly Mock localMimeTypeDetector;
+
+ public Configuration LocalConfiguration { get; private set; }
+ public byte[] Marker { get; private set; }
+ public MemoryStream DataStream { get; private set; }
+ public byte[] DecodedData { get; private set; }
+ private const string localMimeType = "image/local";
+
+ public DiscoverMimeTypeTests()
+ {
+ this.localMimeTypeDetector = new Mock();
+ this.localMimeTypeDetector.Setup(x => x.HeaderSize).Returns(1);
+ this.localMimeTypeDetector.Setup(x => x.DetectMimeType(It.IsAny>())).Returns(localMimeType);
+
+ this.fileSystem = new Mock();
+
+ this.LocalConfiguration = new Configuration()
+ {
+ FileSystem = this.fileSystem.Object
+ };
+ this.LocalConfiguration.AddMimeTypeDetector(this.localMimeTypeDetector.Object);
+
+ TestFormat.RegisterGloablTestFormat();
+ 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.RegisterGloablTestFormat();
+ TestFileSystem.Global.AddFile(this.FilePath, this.DataStream);
+ }
+
+ [Fact]
+ public void DiscoverMimeTypeByteArray()
+ {
+ var type = Image.DiscoverMimeType(DataStream.ToArray());
+ Assert.Equal(TestFormat.GlobalTestFormat.MimeType, type);
+ }
+
+ [Fact]
+ public void DiscoverMimeTypeByteArray_WithConfig()
+ {
+ var type = Image.DiscoverMimeType(this.LocalConfiguration, DataStream.ToArray());
+ Assert.Equal(localMimeType, type);
+ }
+
+ [Fact]
+ public void DiscoverMimeTypeFile()
+ {
+ var type = Image.DiscoverMimeType(this.FilePath);
+ Assert.Equal(TestFormat.GlobalTestFormat.MimeType, type);
+ }
+
+ [Fact]
+ public void DiscoverMimeTypeFilePath_WithConfig()
+ {
+ var type = Image.DiscoverMimeType(this.LocalConfiguration, FilePath);
+ Assert.Equal(localMimeType, type);
+ }
+
+
+ [Fact]
+ public void DiscoverMimeTypeStream()
+ {
+ var type = Image.DiscoverMimeType(this.DataStream);
+ Assert.Equal(TestFormat.GlobalTestFormat.MimeType, type);
+ }
+
+ [Fact]
+ public void DiscoverMimeTypeFileStream_WithConfig()
+ {
+ var type = Image.DiscoverMimeType(this.LocalConfiguration, DataStream);
+ Assert.Equal(localMimeType, type);
+ }
+
+ [Fact]
+ public void DiscoverMimeTypeNoDetectorsRegisterdShouldReturnNull()
+ {
+ var type = Image.DiscoverMimeType(new Configuration(), DataStream);
+ Assert.Null(type);
+ }
+ }
+}