The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use Test::More tests => 12;

package MyVal;

use Validation::Class;

package main;

my $v1 = MyVal->new(
    fields => {
        foobar => {
            min_length => 5
        }
    },
    params => {
        foobar => [
            join('', 1..4),
            join('', 1..5),
        ]
    }
);

# check that an array parameters is handled properly on-the-fly
ok ! $v1->validate('foobar'), 'validation does not pass';
ok $v1->error_count == 1, '1 errors set, 1 wrong element of the param array value';
ok $v1->errors_to_string =~ /#/, 'error message identifies the problem param array element';

my $v2 = MyVal->new(
    fields => {
        'foobar.barbaz' => {
            min_length => 5
        }
    },
    params => {
        foobar => {
            barbaz => [
                join('', 1..4),
                join('', 1..5),
            ]
        }
    }
);

ok ! $v2->validate('foobar.barbaz'), 'validation does not pass';
ok $v2->error_count == 1, '1 errors set, 1 wrong element of the param array value';
ok $v2->errors_to_string =~ /#/, 'error message identifies the problem param array element';

my $v3 = MyVal->new(
    fields => {
        'foobar.barbaz' => {
            min_length => 5
        }
    },
    params => {
        'foobar.barbaz:0' => join('', 1..4),
        'foobar.barbaz:1' => join('', 1..5)
    }
);

ok ! $v3->validate('foobar.barbaz'), 'validation does not pass';
ok $v3->error_count == 1, '1 errors set, 1 wrong element of the param array value';
ok $v3->errors_to_string =~ /#/, 'error message identifies the problem param array element';

my $v4 = MyVal->new(
    fields => {
        'foobar.barbaz' => {
            min_length => 5
        }
    },
    params => {
        'foobar.barbaz' => join('', 1..4)
    }
);

ok ! $v4->validate('foobar.barbaz'), 'validation does not pass';
ok $v4->error_count == 1, '1 errors set, 1 wrong element of the param array value';
ok $v4->errors_to_string !~ /#/, 'error message identifies the problem param in not an array element';