libvalidation-class-perl/t/05-filters-usage.t

132 lines
3.5 KiB
Perl

use FindBin;
use Test::More;
use utf8;
use strict;
use warnings;
{
package TestClass::FiltersUsage;
use Validation::Class;
filter 'flatten' => sub {
$_[0] =~ s/[\t\r\n]+/ /g;
return $_[0];
};
field 'biography' => {
filters => ['trim', 'strip', 'flatten'],
alias => ['bio']
};
1;
package main;
my $biography = <<'TEXT';
1. In arcu mi, sagittis vel pretium sit amet, tempor ac risus.
2. Integer facilisis, ante ac tincidunt euismod, metus tortor.
3. Suscipit erat, nec porta arcu urna eu nisl.
TEXT
my $self;
my $class = "TestClass::FiltersUsage";
$self = $class->new(biography => $biography);
ok $class eq ref $self, "$class instantiated";
is_deeply $self->fields->biography->filters, ['trim', 'strip', 'flatten'],
"$class has biography field with filters trim, strip and flatten";
ok $self->params->get('biography') =~ /^[^\n]+$/,
"$class biography filter executed as expected";
$self = $class->new(bio => $biography);
ok $class eq ref $self, "$class instantiated";
is_deeply $self->fields->biography->filters, ['trim', 'strip', 'flatten'],
"$class has biography field with filters trim, strip and flatten";
ok $self->params->get('biography') =~ /^[^\n]+$/,
"$class biography filter executed as expected";
}
{
package TestClass::FiltersAliasUsage::A;
use Validation::Class;
field 'full_name' => {
filters => ['trim', 'strip', 'titlecase'],
alias => ['name']
};
1;
package main;
my $self;
my $class = "TestClass::FiltersAliasUsage::A";
$self = $class->new(full_name => 'elliot ');
ok $class eq ref $self, "$class instantiated";
is_deeply $self->fields->full_name->filters, ['trim', 'strip', 'titlecase'],
"$class has full_name field with filters trim, strip and titlecase";
ok $self->param('full_name') =~ /^Elliot$/,
"$class full_name filter executed as expected";
$self = $class->new(name => ' elliot ');
ok $class eq ref $self, "$class instantiated";
is_deeply $self->fields->full_name->filters, ['trim', 'strip', 'titlecase'],
"$class has full_name field with filters trim, strip and titlecase";
ok $self->param('full_name') =~ /^Elliot$/,
"$class full_name filter executed as expected";
}
{
package TestClass::FiltersAliasUsage::B;
use Validation::Class;
field 'full_name' => {
filters => ['trim', 'strip', 'titlecase'],
alias => ['name']
};
1;
package main;
my $self;
my $class = "TestClass::FiltersAliasUsage::B";
$self = $class->new;
$self->params->add({name => 'elliot '});
$self->prototype->normalize($self);
ok $class eq ref $self, "$class instantiated";
is_deeply $self->fields->full_name->filters, ['trim', 'strip', 'titlecase'],
"$class has full_name field with filters trim, strip and titlecase";
ok $self->full_name =~ /^Elliot$/,
"$class full_name filter executed as expected";
$self = $class->new;
$self->params->add({name => ' elliot '});
$self->prototype->normalize($self);
ok $class eq ref $self, "$class instantiated";
is_deeply $self->fields->full_name->filters, ['trim', 'strip', 'titlecase'],
"$class has full_name field with filters trim, strip and titlecase";
ok $self->full_name =~ /^Elliot$/,
"$class full_name filter executed as expected";
}
done_testing;