public void should_handle_parts_with_no_charset_and_empty_binary_content_when_forcing_base64()
        {
            var mimePart = new MimePart(new byte[0], _textContentFileName)
            {
                TextContent = null
            };

            Assert.DoesNotThrow(() => mimePart.ToMimeString(true));
        }
        public void should_serialize_single_part_message_to_mime_string()
        {
            var textFileContent = File.ReadAllText(_textfilePath);
            var mimePart        = new MimePart(_textfilePath, false);

            var mimeString = mimePart.ToMimeString();

            mimeString.ShouldMatch("Content-Type: text/plain;\r\n");
            mimeString.ShouldMatch(@"\r\n" + textFileContent + "$");
        }
        public void should_serialize_to_mime_string_mutipart_message_with_nested_parts()
        {
            var mimePart = new MimePart
            {
                ContentType =
                {
                    MimeType   = "multipart/mixed",
                    Parameters = { { "boundary",   "OuterBoundary"} }
                },
                SubParts = new MimePartCollection
                {
                    new MimePart
                    {
                        ContentType =
                        {
                            MimeType   = "multipart/mixed",
                            Parameters = { { "boundary",   "InnerBoundary"} }
                        },
                        SubParts = new MimePartCollection
                        {
                            new MimePart(_textfilePath, true),
                            new MimePart(_imagefilePath, false)
                        }
                    },
                    new MimePart(_imagefilePath, false)
                }
            };

            var outerSubParts = mimePart.ToMimeString().SplitMimeParts("--OuterBoundary\r\n");

            outerSubParts.Length.ShouldEqual(3);
            var mixedPart = outerSubParts[1];

            mixedPart.ShouldMatch("^Content-Type: multipart/mixed;");
            mixedPart.ShouldMatch(@"	boundary=""InnerBoundary""\r\n");
            var imagePart = outerSubParts[2];

            imagePart.ShouldMatch("^Content-Type: image/gif");
            imagePart.ShouldMatch("--OuterBoundary--\r\n$");

            var innerSubParts = mixedPart.SplitMimeParts("--InnerBoundary\r\n");

            innerSubParts.Length.ShouldEqual(3);
            var innerTextPart = innerSubParts[1];

            innerTextPart.ShouldMatch("^Content-Type: text/plain;\r\n");
            innerTextPart.ShouldMatch("Hello, World !\r\n\r\n$");
            var innerImagePart = innerSubParts[2];

            innerImagePart.ShouldMatch("^Content-Type: image/gif");
            innerImagePart.ShouldMatch("--InnerBoundary--\r\n\r\n\r\n$");
        }