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

use strict;

use Test::Memory::Cycle;
use Test::More qw/no_plan/;
use t::Test;
my $scratch = t::Test->scratch;

ok(-e $scratch->base->file("static/css/apple.css"));
ok(-e $scratch->base->file("static/css/banana.css"));
ok(-e $scratch->base->file("static/js/apple.js"));

sub assets {
    my $assets = t::Test->assets(@_);

    ok($assets->include("css/apple.css"));
    ok($assets->include("js/apple.js"));
    ok($assets->include_content(<<_END_, "css"));
div {
    background: red;
}
_END_

    return $assets;
}

{
    my $assets = assets;

    compare($assets->export, qw(
            http://example.com/static/css/apple.css
        ), [ css => <<_END_ ],
div {
    background: red;
}
_END_
            "http://example.com/static/js/apple.js"
    );

    compare($assets->export('css'), qw(
            http://example.com/static/css/apple.css
        ), [ css => <<_END_ ],
div {
    background: red;
}
_END_
    );


    compare($assets->export('js'), qw(
            http://example.com/static/js/apple.js
    ));

    ok($assets->include("css/banana.css"));

    compare($assets->export, qw(
            http://example.com/static/css/apple.css
        ), [ css => <<_END_ ],
div {
    background: red;
}
_END_
        qw(
            http://example.com/static/css/banana.css
            http://example.com/static/js/apple.js
    ));

    memory_cycle_ok($assets);
}

{
    my $assets = assets(output_path => [
        [ "*" => '%d.%e' ],
            
    ], filter => [
        [ qw/css concat/, { skip_inline => 0, content_digest => 1 } ],
    ]);
    my $digest = "4622fcfb3d29438ce9298d288fdcc57e";
    ok($assets->include("css/banana.css"));

    compare($assets->export,
        "http://example.com/static/$digest.css",
        "http://example.com/static/js/apple.js",
    );

    ok($scratch->exists("static/$digest.css"));
    ok(-s $scratch->file("static/$digest.css"));
    is($scratch->read("static/$digest.css"), <<_END_);
/* Test file: static/css/apple.css */

div {
    background: red;
}
/* Test file: static/css/banana.css */
_END_

    $scratch->delete("static/$digest.css");
}

SKIP: {
    skip 'install ./yuicompressor.jar to enable this test' unless -e "./yuicompressor.jar";
    my $assets = assets(output_path => [
        [ "*" => '%d.%e' ],
            
    ], filter => [
        [ qw(css yuicompressor:./yuicompressor.jar), { skip_inline => 0, content_digest => 1 } ],
    ]);
    my $digest = "4622fcfb3d29438ce9298d288fdcc57e";
    ok($assets->include("css/banana.css"));

    compare($assets->export,
        "http://example.com/static/$digest.css",
        "http://example.com/static/js/apple.js",
    );
    ok($scratch->exists("static/$digest.css"));
    ok(-s $scratch->file("static/$digest.css"));
    is($scratch->read("static/$digest.css"), 'div{background:red;}');
}

{
    my $assets = assets(output_path => [
        [ "*" => '%d.%e' ],
            
    ], filter => [
        [ qw/css concat/, { content_digest => 1 } ],
    ]);
    my $digest = "408d257d77bf611e910a689912e0befa";

    my $asset = $assets->include(\<<_END_, undef, "css");
span {
    border: 1px solid black;
}
_END_
    $asset->inline(0);
    $assets->include_content(<<_END_, "css", { inline => 0 });
span {
    padding: 1em;
}
_END_
    $assets->include_content(<<_END_, { type => "css", inline => 1 });
span {
    margin: 1em;
}
_END_

    compare($assets->export,
        "http://example.com/static/$digest.css",
        [ css => <<_END_ ],
div {
    background: red;
}
_END_
        [ css => <<_END_ ],
span {
    margin: 1em;
}
_END_
        "http://example.com/static/js/apple.js",
    );

    compare($assets->export,
        "http://example.com/static/$digest.css",
        [ css => <<_END_ ],
div {
    background: red;
}
_END_
        [ css => <<_END_ ],
span {
    margin: 1em;
}
_END_
        "http://example.com/static/js/apple.js",
    );

    ok($scratch->exists("static/$digest.css"));
    ok(-s $scratch->file("static/$digest.css"));
    local $/ = undef;
    is($scratch->read("static/$digest.css"), <<_END_);
/* Test file: static/css/apple.css */

span {
    border: 1px solid black;
}
span {
    padding: 1em;
}
_END_

    $scratch->delete("static/$digest.css");
}