The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use warnings;
use strict;

package TestApp::UI;
use base qw/Template::Declare/;
use Template::Declare::Tags;

template content => sub {
    with( id => 'body' ), div {
        outs('This is my content');
    };

};

template content_curly => sub {
    div {
        { id is 'body' }
        outs('This is my content');
    }
};

template content_explicit => sub {
    div {
        attr { id is 'body' }
        outs('This is my content');
    }

};

template content_mixed1 => sub {
    div {
        { class is 'text' }
        attr { style => 'red', id is 'body' }
        outs('This is my red body text');
    }
};

template content_mixed2 => sub {
    with( class => 'text' ), div {
        { id is 'body' }
        attr { style => 'red' };    # Semicolon is intentional here
        outs('This is my red body text');
    }
};

template content_withs => sub {
    with( class => 'text', id => 'body', style => 'red' ), div {
        outs('This is my red body text');
    }
};

template content_curlies => sub {
    div {
        { class is 'text', id is 'body', style is 'red' }
        outs('This is my red body text');
    }
};

template content_attrs => sub {
    div {
        attr { class => 'text', id => 'body', style => 'red' }
        outs('This is my red body text');
    }
};

use Test::More tests => 39;
require "t/utils.pl";

Template::Declare->init(roots => ['TestApp::UI']);

for (qw(content content_curly content_explicit)) {
Template::Declare->buffer->clear;
    ok_content( show_page($_), $_ );
}

for (
    qw(content_mixed1 content_mixed2 content_attrs content_withs content_curlies)
  )
{
Template::Declare->buffer->clear;
    ok_multicontent( show_page($_), $_ );
}

sub ok_multicontent {
    my $simple = shift;
    my $test   = shift;
    like( $simple, qr{This is my red body text},                        $test );
    like( $simple, qr{^<div (.*?)>This is my red body text\s*</div>$}m, $test );
    like( $simple, qr{class="text"},                                    $test );
    like( $simple, qr{style="red"},                                     $test );
    like( $simple, qr{id="body"},                                       $test );

    #diag ($simple);
    ok_lint($simple);
}

sub ok_content {
    my $simple = shift;
    my $test   = shift;

    like( $simple, qr{This is my content},                         $test );
    like( $simple, qr{<div id="body">This is my content\s*</div>}, $test );

    #diag ($simple);
    ok_lint($simple);
}

1;