BEGIN {
use FindBin;
use lib $FindBin::Bin . "/myapp/lib";
}
use utf8;
use Test::More;
{
package MyApp;
use Validation::Class;
fld name => {
required => 1
};
mth print_name => {
input => ['name'],
using => sub {
my ($self) = @_;
return "my name is " . $self->name;
}
};
package main;
my $class = "MyApp";
my $self = $class->new();
ok $class eq ref $self, "$class instantiated";
ok !$self->print_name, "no name printed because the name field is null";
$self->name("echo");
ok "my name is echo" eq $self->print_name, "name printed as intended";
}
{
package MyApp2;
use Validation::Class;
fld name => {
required => 1
};
pro has_name => sub {
shift->validate('name')
};
mth print_name => {
input => 'has_name',
using => sub {
my ($self) = @_;
return "my name is " . $self->name;
}
};
package main;
my $class = "MyApp2";
my $self = $class->new();
ok $class eq ref $self, "$class instantiated";
ok !$self->print_name, "no name printed because the name field is null";
$self->name("echo");
ok "my name is echo" eq $self->print_name, "name printed as intended";
}
{
package MyApp3;
use Validation::Class;
fld name => {
required => 1
};
pro has_name => sub {
shift->validate('name')
};
mth print_name => {
input => 'has_name',
output => 'has_name',
using => sub {
my ($self) = @_;
return "my name is " . $self->name;
}
};
mth die_name => {
input => 'has_name',
output => 'has_name',
using => sub {
shift->name(undef)
}
};
package main;
my $class = "MyApp3";
my $self = $class->new();
ok $class eq ref $self, "$class instantiated";
ok !$self->print_name, "no name printed because the name field is null";
$self->name("echo");
ok "my name is echo" eq $self->print_name, "name printed as intended";
eval { $self->die_name };
ok $@, "die_name method died as expected because name could not be validated on output";
}
{
package MyApp4;
use Validation::Class;
fld name => {
required => 1
};
mth print_name => {
input => ['name'],
output => ['name'],
using => sub {
my ($self) = @_;
return "my name is " . $self->name;
}
};
mth build_name => {
input => 'print_name',
using => sub {
shift->print_name . ", the 2nd"
}
};
package main;
my $class = "MyApp4";
my $self = $class->new();
ok $class eq ref $self, "$class instantiated";
ok !$self->build_name, "no name printed because the name field is null";
$self->name("echo");
ok "my name is echo, the 2nd" eq $self->build_name, "name printed as intended";
}
{
package MyApp5;
use Validation::Class;
fld name => {
required => 1
};
mth print_name => {
input => ['name'],
output => ['name']
};
sub _print_name {
my ($self) = @_;
return "my name is " . $self->name;
}
package main;
my $class = "MyApp5";
my $self = $class->new();
ok $class eq ref $self, "$class instantiated";
ok !$self->print_name, "no name printed because the name field is null";
$self->name("echo");
ok "my name is echo" eq $self->print_name, "name printed as intended";
}
done_testing;