The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use strict;
use Test::More;
my $dummy = {
    foo => 'ユー',
    bar => 'ティー',
    baz => 'エフ',
    qux => 'エイト',
};

my $dummy_tmp = {
    'ふぅ'       => '',
    'ばぁ'       => 't',
    'ばず'       => 'f',
    'きゅくす?' => '8',
};
my $dummy2;

eval {
    for my $key (keys %$dummy) {
	utf8::upgrade($dummy->{$key});
    }
    while (my($key, $value) = each %$dummy_tmp) {
	utf8::upgrade($key);
	$dummy2->{$key} = $value;
    }
};
if ($@) {
    plan skip_all => 'can not call utf8::upgrade';
}
else {
    plan tests => 17;
}
use_ok('Unicode::RecursiveDowngrade');
SKIP: {
    skip 'can not call utf8::is_utf8', 16 if $] < 5.008001;
    for my $key (keys %$dummy) {
	ok(utf8::is_utf8($dummy->{$key}), "is flagged variable");
    }
    my $rd = Unicode::RecursiveDowngrade->new;
    $dummy = $rd->downgrade($dummy);
    for my $key (keys %$dummy) {
	ok(! utf8::is_utf8($dummy->{$key}), "is unflagged variable");
    }
    for my $key (keys %$dummy2) {
	ok(utf8::is_utf8($key), "is flagged key");
    }
    $dummy2 = $rd->downgrade($dummy2);
    for my $key (keys %$dummy2) {
	ok(! utf8::is_utf8($key), "is unflagged key");
    }
}