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

use Test::More;

my $not = 39;

SKIP: {
    eval { use HTML::Packer; };

    skip( 'HTML::Packer not installed!', $not ) if ( $@ );

    plan tests => $not;

    my $packer = HTML::Packer->init();

    ok( ! $packer->remove_comments(), 'Default value for remove_comments.' );
    ok( ! $packer->remove_newlines(), 'Default value for remove_newlines.' );
    ok( ! $packer->no_compress_comment(), 'Default value for no_compress_comment.' );
    ok( ! $packer->html5(), 'Default value for no_cdata.' );
    ok( ! $packer->do_javascript(), 'Default value for do_javascript.' );
    ok( ! $packer->do_stylesheet(), 'Default value for do_stylesheet.' );

    $packer->remove_comments( 1 );
    ok( $packer->remove_comments(), 'Set remove_comments.' );
    $packer->remove_comments( 0 );
    ok( ! $packer->remove_comments(), 'Unset remove_comments.' );

    $packer->remove_newlines( 1 );
    ok( $packer->remove_newlines(), 'Set remove_newlines.' );
    $packer->remove_newlines( 0 );
    ok( ! $packer->remove_newlines(), 'Unset remove_newlines.' );

    $packer->no_compress_comment( 1 );
    ok( $packer->no_compress_comment(), 'Set no_compress_comment.' );
    $packer->no_compress_comment( 0 );
    ok( ! $packer->no_compress_comment(), 'Unset no_compress_comment.' );

    $packer->html5( 1 );
    ok( $packer->html5(), 'Set html5.' );
    $packer->html5( 0 );
    ok( ! $packer->html5(), 'Unset html5.' );

    $packer->do_javascript( 'clean' );
    is( $packer->do_javascript(), 'clean', 'Set do_javascript to "clean".' );
    $packer->do_javascript( 'shrink' );
    is( $packer->do_javascript(), 'shrink', 'Set do_javascript to "shrink".' );
    $packer->do_javascript( 'obfuscate' );
    is( $packer->do_javascript(), 'obfuscate', 'Set do_javascript to "obfuscate".' );
    $packer->do_javascript( 'foo' );
    is( $packer->do_javascript(), 'obfuscate', 'Setting do_javascript to "foo" failed.' );
    $packer->do_javascript( '' );
    ok( ! $packer->do_javascript(), 'Unset do_javascript.' );
    $packer->do_javascript( 'bar' );
    ok( ! $packer->do_javascript(), 'Setting do_javascript to "bar" failed.' );

    $packer->do_stylesheet( 'minify' );
    is( $packer->do_stylesheet(), 'minify', 'Set do_stylesheet to "minify".' );
    $packer->do_stylesheet( 'pretty' );
    is( $packer->do_stylesheet(), 'pretty', 'Set do_stylesheet to "pretty".' );
    $packer->do_stylesheet( 'foo' );
    is( $packer->do_stylesheet(), 'pretty', 'Setting do_stylesheet to "foo" failed.' );
    $packer->do_stylesheet( '' );
    ok( ! $packer->do_stylesheet(), 'Unset do_stylesheet.' );
    $packer->do_stylesheet( 'bar' );
    ok( ! $packer->do_stylesheet(), 'Setting do_stylesheet to "bar" failed.' );

    eval "use JavaScript::Packer $HTML::Packer::REQUIRED_JAVASCRIPT_PACKER;";
    if ( $@ ) {
        ok( ! $packer->javascript_packer(), 'JavaScript::Packer >= ' . $HTML::Packer::REQUIRED_JAVASCRIPT_PACKER . ' not installed.' );
    }
    else {
        isa_ok( $packer->javascript_packer(), 'JavaScript::Packer', 'JavaScript::Packer installed.' );
    }

    eval "use CSS::Packer $HTML::Packer::REQUIRED_CSS_PACKER;";
    if ( $@ ) {
        ok( ! $packer->css_packer(), 'CSS::Packer >= ' . $HTML::Packer::REQUIRED_CSS_PACKER . ' not installed.' );
    }
    else {
        isa_ok( $packer->css_packer(), 'CSS::Packer', 'CSS::Packer installed.' );
    }

    my $str = '';

    $packer->minify( \$str, {} );

    ok( ! $packer->remove_comments(), 'Default value for remove_comments is still set.' );
    ok( ! $packer->remove_newlines(), 'Default value for remove_newlines is still set.' );
    ok( ! $packer->no_compress_comment(), 'Default value for no_compress_comment is still set.' );
    ok( ! $packer->html5(), 'Default value for html5 is still set.' );
    ok( ! $packer->do_javascript(), 'Default value for do_javascript is still set.' );
    ok( ! $packer->do_stylesheet(), 'Default value for do_stylesheet is still set.' );

    $packer->minify(
        \$str,
        {
            remove_comments     => 1,
            remove_newlines     => 1,
            no_compress_comment => 1,
            html5               => 1,
            do_javascript       => 'clean',
            do_stylesheet       => 'minify'
        }
    );

    ok( $packer->remove_comments(), 'Set remove_comments again.' );
    ok( $packer->remove_newlines(), 'Set remove_newlines again.' );
    ok( $packer->no_compress_comment(), 'Set no_compress_comment again.' );
    ok( $packer->html5(), 'Set html5 again.' );
    ok( $packer->do_javascript(), 'Set do_javascript to "clean" again.' );
    ok( $packer->do_stylesheet(), 'Set do_stylesheet to "minify" again.' );

}