The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/env perl
# Conversion of character-sets
#

use strict;
use warnings;

use lib qw(. .. tests);
use Tools;
use utf8;
use Scalar::Util 'refaddr';
use Data::Dumper;

use Test::More tests => 19;

use Mail::Message::Body;

my $src = "märkøv\n";  # fragile!  must be utf8, not latin1
ok(utf8::is_utf8($src));

my $dec = Mail::Message::Body->new(data => $src);

isa_ok($dec, 'Mail::Message::Body');
is($dec->charset, 'PERL', 'default charset PERL');

my $enc = $dec->encode(charset => 'PERL');
is(ref $dec, ref $enc, 'same type');
is(refaddr $dec, refaddr $enc, 'same object');
is($enc->charset, 'PERL', 'charset PERL');

$enc = $dec->encode(charset => 'utf8', transfer_encoding => 'quoted-printable');
is(ref $dec, ref $enc, 'same type');
isnt(refaddr $dec, refaddr $enc, 'new object');

is($enc->charset, 'utf8');
my @lines = $enc->lines;
cmp_ok(scalar @lines, '==', 1);
is($lines[0], "m=C3=A4rk=C3=B8v\n");
ok(!utf8::is_utf8($lines[0]), 'raw bytes');

my $rec = $enc->encode(charset => 'PERL', transfer_encoding => 'none');
is(ref $rec, ref $enc, 'same type');
isnt(refaddr $rec, refaddr $enc, 'new object');
isnt(refaddr $rec, refaddr $dec, 'new object');
ok($rec->charset.'', 'PERL');
@lines = $rec->lines;
cmp_ok(scalar @lines, '==', 1);
is($lines[0], $src, 'transfer decoded');
ok(utf8::is_utf8($lines[0]), 'is perl utf-8');