The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use strict;
use warnings;
use Test::More;
use Test::Requires 'HTML::FillInForm::Lite', 'Tiffany', 'Text::MicroTemplate::File';
use File::Spec;
use File::Temp qw/tempdir/;

my $tmp = tempdir(CLEANUP => 1);

{
    package MyApp;
    use parent qw/Amon2/;

    package MyApp::Web;
    use parent -norequire, qw/MyApp/;
    use parent qw/Amon2::Web/;
    use Tiffany;
    sub create_view { Tiffany->load('Text::MicroTemplate::File',  { include_path => [$tmp] } ) }

    sub dispatch {
        my $c = shift;
        $c->fillin_form(+{body => 'hello'});
        $c->render('hoge.mt');
    }
    __PACKAGE__->load_plugins(
        'Web::FillInFormLite' => {},
    );
}

my $c = MyApp::Web->bootstrap();

{
    open my $fh, '>', File::Spec->catfile($tmp, 'hoge.mt') or die $!;
    print $fh <<'...';
<html>
<head>
</head>
<body>
<form action="/" method="post">
<input type="text" name="body" />
<input type="submit" name="post" />
</form>
</body>
</html>
...
    close $fh;
}

subtest 'new style' => sub {
    my $res = MyApp::Web->to_app()->(+{});
    like $res->[2]->[0], qr{<input type="text" name="body" value="hello" />};
    is Plack::Util::header_get($res->[1], 'Content-Length'), length($res->[2]->[0]);
};

subtest 'old style' => sub {
    local $SIG{__WARN__} = sub { };
    my $res = $c->render('hoge.mt')->fillin_form({body => "hello"});
    like $res->body(), qr{<input type="text" name="body" value="hello" />};
    is $res->content_length, length($res->body);
};

done_testing;