1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167
|
use strict;
use warnings;
use HTML::Mason::Tests;
{
package HTML::Mason::Request::Test;
@HTML::Mason::Request::Test::ISA = 'HTML::Mason::Request';
__PACKAGE__->valid_params( foo_val => { parse => 'string', type => Params::Validate::SCALAR } );
# shuts up 5.00503 warnings
1 if $HTML::Mason::ApacheHandler::VERSION;
1 if $HTML::Mason::CGIHandler::VERSION;
sub new
{
my $class = shift;
$class->alter_superclass( $HTML::Mason::ApacheHandler::VERSION ?
'HTML::Mason::Request::ApacheHandler' :
$HTML::Mason::CGIHandler::VERSION ?
'HTML::Mason::Request::CGI' :
'HTML::Mason::Request' );
my $self = $class->SUPER::new(@_);
}
sub foo_val { $_[0]->{foo_val} }
}
{
package HTML::Mason::Request::Test::Subclass;
@HTML::Mason::Request::Test::Subclass::ISA = 'HTML::Mason::Request::Test';
__PACKAGE__->valid_params( bar_val => { parse => 'string', type => Params::Validate::SCALAR } );
sub bar_val { $_[0]->{bar_val} }
}
{
package HTML::Mason::Lexer::Test;
@HTML::Mason::Lexer::Test::ISA = 'HTML::Mason::Lexer';
__PACKAGE__->valid_params( bar_val => { parse => 'string', type => Params::Validate::SCALAR } );
sub bar_val { $_[0]->{bar_val} }
}
{
package HTML::Mason::Compiler::ToObject::Test;
@HTML::Mason::Compiler::ToObject::Test::ISA = 'HTML::Mason::Compiler::ToObject';
__PACKAGE__->valid_params( baz_val => { parse => 'string', type => Params::Validate::SCALAR } );
sub baz_val { $_[0]->{baz_val} }
sub compiled_component
{
my $self = shift;
my $comp = $self->SUPER::compiled_component(@_);
$$comp =~ s/!!BAZ!!/$self->{baz_val}/g;
return $comp;
}
}
my $tests = make_tests();
$tests->run;
sub make_tests
{
my $group = HTML::Mason::Tests->tests_class->new( name => 'subclass',
description => 'Test use of subclasses for various core classes' );
#------------------------------------------------------------
$group->add_test( name => 'request_subclass',
description => 'use a HTML::Mason::Request subclass',
interp_params => { request_class => 'HTML::Mason::Request::Test',
foo_val => 77 },
component => <<'EOF',
% if ( $m->can('foo_val') ) {
foo_val is <% $m->foo_val %>
% } else {
this request cannot ->foo_val!
% }
EOF
expect => <<'EOF',
foo_val is 77
EOF
);
#------------------------------------------------------------
$group->add_test( name => 'request_subclass_of_subclass',
description => 'use a HTML::Mason::Request grandchild',
interp_params =>
{ request_class => 'HTML::Mason::Request::Test::Subclass',
foo_val => 77,
bar_val => 42,
},
component => <<'EOF',
% if ( $m->can('foo_val') ) {
foo_val is <% $m->foo_val %>
% } else {
this request cannot ->foo_val!
% }
% if ( $m->can('bar_val') ) {
bar_val is <% $m->bar_val %>
% } else {
this request cannot ->bar_val!
% }
EOF
expect => <<'EOF',
foo_val is 77
bar_val is 42
EOF
);
#------------------------------------------------------------
$group->add_test( name => 'lexer_subclass',
description => 'use a HTML::Mason::Lexer subclass',
interp_params => { lexer_class => 'HTML::Mason::Lexer::Test',
bar_val => 76 },
component => <<'EOF',
% my $lex = $m->interp->compiler->lexer;
% if ( $lex->can('bar_val') ) {
bar_val is <% $lex->bar_val %>
% } else {
this lexer cannot ->bar_val!
% }
EOF
expect => <<'EOF',
bar_val is 76
EOF
);
#------------------------------------------------------------
# We don't use object files, because we want to catch the output
# of compiled_component() instead of writing it to a file
$group->add_test( name => 'compiler_subclass',
description => 'use a HTML::Mason::Compiler subclass',
interp_params => { compiler_class => 'HTML::Mason::Compiler::ToObject::Test',
use_object_files => 0,
baz_val => 75 },
component => <<'EOF',
baz is !!BAZ!!
EOF
expect => <<'EOF',
baz is 75
EOF
);
#------------------------------------------------------------
return $group;
}
|