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

# This is a regression test for:
# http://rt.cpan.org/Public/Bug/Display.html?id=5438
# based on the original script supplied with the report.

use strict;
use warnings;

use XML::RSS;
use File::Spec;

use Test::More;

if (eval "require Test::Differences") {
    Test::Differences->import;
    plan tests => 2;
}
else {
    plan skip_all => 'Test::Differences required';
}

{
    my $rss_file = File::Spec->catfile("t", "generated", "charset1-generated.xml");

    my %rss_new = (version => '1.0', encoding => 'iso-8859-1', output => '1.0');
    my $rss = XML::RSS->new(%rss_new);

    #
    # Add a channel
    #

    $rss->channel (title => "Channel Title",
               link  => "http://channel.url/",
               description => "Channel Description");

    #
    # Add an item with accented characters
    #

    $rss->add_item (title => "Item Title",
            link => "http://item.url/",
            description => "Item Description (©)");

    #
    # Save RSS content to file.
    #

    open (RSS, ">", $rss_file) ||
        die "Unable to open $rss_file.";


    my $rss1 = $rss->as_string;
    print RSS $rss1;

    close (RSS);

    #
    # Now read it back in
    #

    $rss = XML::RSS->new(%rss_new);
    $rss->parsefile($rss_file);

    #
    # save it again
    #

    open (RSS, ">", $rss_file) || die "Unable to open $rss_file.";

    my $rss2 = $rss->as_string;
    print RSS $rss2;

    close (RSS);

    eq_or_diff($rss1, $rss2, 'got the same RSS both times');

    #
    # And read it back in again.
    #

    $rss = XML::RSS->new;
    $rss->parsefile($rss_file);

    # Check that no exception was thrown along the way.
    ok(1);
}