The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use strict;
use warnings;
use Test::More tests => 20;

use_ok 'Email::MIME';
use_ok 'Email::MIME::Modifier';

for my $encode ('7bit', '7bit; foo') {
  my $email = Email::MIME->new(<<__MESSAGE__);
Content-Transfer-Encoding: $encode
Content-Type: text/plain

Hello World!
I like you!
__MESSAGE__

  is $email->body, qq[Hello World!\nI like you!\n], 'plain works';
  is $email->body_raw, qq[Hello World!\nI like you!\n], 'plain raw works';
  is $email->header('Content-Transfer-Encoding'), $encode, 'plain encoding works';
}

my $email = Email::MIME->new(<<__MESSAGE__);
Content-Transfer-Encoding: 7bit
Content-Type: text/plain

Hello World!
I like you!
__MESSAGE__

is $email->body, qq[Hello World!\nI like you!\n], 'plain works';
is $email->body_raw, qq[Hello World!\nI like you!\n], 'plain raw works';
is $email->header('Content-Transfer-Encoding'), '7bit', 'plain encoding works';

$email->encoding_set('base64');

is $email->body, qq[Hello World!\nI like you!\n], 'base64 works';

is(
  $email->body_raw,
  qq[SGVsbG8gV29ybGQhCkkgbGlrZSB5b3UhCg==\x0d\x0a],
  'base64 raw works',
);

is(
  $email->header('Content-Transfer-Encoding'),
  'base64',
  'base64 encoding works',
);

$email->encoding_set('binary');

is(
  $email->body,
  qq[Hello World!\nI like you!\n],
  'binary works',
);

is(
  $email->body_raw,
  qq[Hello World!\nI like you!\n],
  'binary raw works',
);

is(
  $email->header('Content-Transfer-Encoding'),
  'binary',
  'binary encoding works',
);

my $long_line = 'Long line! ' x 100;

$email->encoding_set('quoted-printable');
$email->body_set(<<__MESSAGE__);
$long_line
__MESSAGE__

my $qp_expect = qq{Long line! Long line! Long line! Long line! Long line! Long line! Long line=
! Long line! Long line! Long line! Long line! Long line! Long line! Long li=
ne! Long line! Long line! Long line! Long line! Long line! Long line! Long =
line! Long line! Long line! Long line! Long line! Long line! Long line! Lon=
g line! Long line! Long line! Long line! Long line! Long line! Long line! L=
ong line! Long line! Long line! Long line! Long line! Long line! Long line!=
 Long line! Long line! Long line! Long line! Long line! Long line! Long lin=
e! Long line! Long line! Long line! Long line! Long line! Long line! Long l=
ine! Long line! Long line! Long line! Long line! Long line! Long line! Long=
 line! Long line! Long line! Long line! Long line! Long line! Long line! Lo=
ng line! Long line! Long line! Long line! Long line! Long line! Long line! =
Long line! Long line! Long line! Long line! Long line! Long line! Long line=
! Long line! Long line! Long line! Long line! Long line! Long line! Long li=
ne! Long line! Long line! Long line! Long line! Long line! Long line! Long =
line! Long line! Long line! Long line! Long line!=20\x0d\x0a};

$qp_expect =~ s/=\n/=\x0d\x0a/g;

is(
  $email->body,
  qq[$long_line\x0d\x0a],
  'quoted-printable + body_set works'
);

is(
  $email->body_raw,
  $qp_expect,
  'quoted-printable + body_set raw works',
);

is(
  $email->header('Content-Transfer-Encoding'),
  'quoted-printable',
  'quoted-printble + body_set encoding works',
);