");
+ }
+
+ [Fact]
+ public async Task ConvertAsync_EmailWithHtmlContent_ConvertsHtmlToMarkdown()
+ {
+ // Arrange
+ var htmlEmail = @"Date: Mon, 15 Jan 2024 10:30:00 +0000
+From: sender@example.com
+To: recipient@example.com
+Subject: HTML Test
+MIME-Version: 1.0
+Content-Type: text/html; charset=UTF-8
+
+
+
+Welcome
+This is bold text and italic text.
+
+
+";
+
+ var converter = new EmlConverter();
+ var bytes = Encoding.UTF8.GetBytes(htmlEmail);
+ using var stream = new MemoryStream(bytes);
+ var streamInfo = new StreamInfo(mimeType: "message/rfc822");
+
+ // Act
+ var result = await converter.ConvertAsync(stream, streamInfo);
+
+ // Assert
+ result.ShouldNotBeNull();
+ result.Markdown.ShouldNotBeNullOrWhiteSpace();
+ result.Title.ShouldBe("HTML Test");
+
+ // Check that HTML was converted to Markdown
+ result.Markdown.ShouldContain("# Welcome");
+ result.Markdown.ShouldContain("**bold**");
+ result.Markdown.ShouldContain("*italic*");
+ }
+
+ [Fact]
+ public async Task MarkItDown_ConvertAsync_EmlFile_WorksEndToEnd()
+ {
+ // Arrange
+ var markItDown = new global::MarkItDown.MarkItDown();
+ var bytes = Encoding.UTF8.GetBytes(SampleEmail);
+ using var stream = new MemoryStream(bytes);
+ var streamInfo = new StreamInfo(mimeType: "message/rfc822", extension: ".eml");
+
+ // Act
+ var result = await markItDown.ConvertAsync(stream, streamInfo);
+
+ // Assert
+ result.ShouldNotBeNull();
+ result.Markdown.ShouldNotBeNullOrWhiteSpace();
+ result.Title.ShouldBe("Important Project Update");
+ result.Markdown.ShouldContain("**Subject:** Important Project Update");
+ result.Markdown.ShouldContain("Hello Jane");
+ }
+}
\ No newline at end of file
diff --git a/tests/MarkItDown.Tests/NewConvertersTests.cs b/tests/MarkItDown.Tests/NewConvertersTests.cs
index 302811770..8aa7f9b20 100644
--- a/tests/MarkItDown.Tests/NewConvertersTests.cs
+++ b/tests/MarkItDown.Tests/NewConvertersTests.cs
@@ -147,6 +147,7 @@ public void AllNewConverters_HaveCorrectPriorities()
[InlineData(".pptx", "application/vnd.openxmlformats-officedocument.presentationml.presentation")]
[InlineData(".jpg", "image/jpeg")]
[InlineData(".png", "image/png")]
+ [InlineData(".eml", "message/rfc822")]
public void MarkItDown_RegistersNewConverters_CanHandleNewFormats(string extension, string mimeType)
{
// Arrange
@@ -160,4 +161,64 @@ public void MarkItDown_RegistersNewConverters_CanHandleNewFormats(string extensi
// Assert
canHandle.ShouldBeTrue($"Should have a converter that can handle {extension} files");
}
+
+ [Fact]
+ public void EmlConverter_AcceptsInput_ValidEmlExtension_ReturnsTrue()
+ {
+ // Arrange
+ var converter = new EmlConverter();
+ var streamInfo = new StreamInfo(mimeType: "message/rfc822", extension: ".eml");
+
+ // Act
+ var result = converter.AcceptsInput(streamInfo);
+
+ // Assert
+ result.ShouldBeTrue();
+ }
+
+ [Fact]
+ public void EmlConverter_AcceptsInput_InvalidExtension_ReturnsFalse()
+ {
+ // Arrange
+ var converter = new EmlConverter();
+ var streamInfo = new StreamInfo(mimeType: "text/plain", extension: ".txt");
+
+ // Act
+ var result = converter.AcceptsInput(streamInfo);
+
+ // Assert
+ result.ShouldBeFalse();
+ }
+
+ [Theory]
+ [InlineData(".eml", "message/rfc822")]
+ [InlineData(".eml", "message/email")]
+ [InlineData(".eml", "application/email")]
+ [InlineData(".eml", "text/email")]
+ public void EmlConverter_AcceptsInput_ValidMimeTypes_ReturnsTrue(string extension, string mimeType)
+ {
+ // Arrange
+ var converter = new EmlConverter();
+ var streamInfo = new StreamInfo(mimeType: mimeType, extension: extension);
+
+ // Act
+ var result = converter.AcceptsInput(streamInfo);
+
+ // Assert
+ result.ShouldBeTrue($"Should accept {extension} files with MIME type {mimeType}");
+ }
+
+ [Fact]
+ public void EmlConverter_Priority_IsBetweenPptxAndEpub()
+ {
+ // Arrange
+ var emlConverter = new EmlConverter();
+ var epubConverter = new EpubConverter();
+ var pptxConverter = new PptxConverter();
+
+ // Act & Assert
+ // Lower number = higher priority, so EML (240) should be between PPTX (230) and EPUB (250)
+ emlConverter.Priority.ShouldBeGreaterThan(pptxConverter.Priority);
+ emlConverter.Priority.ShouldBeLessThan(epubConverter.Priority);
+ }
}