summaryrefslogtreecommitdiff
path: root/t/lib/PVTests/With.pm
diff options
context:
space:
mode:
Diffstat (limited to 't/lib/PVTests/With.pm')
-rw-r--r--t/lib/PVTests/With.pm125
1 files changed, 125 insertions, 0 deletions
diff --git a/t/lib/PVTests/With.pm b/t/lib/PVTests/With.pm
new file mode 100644
index 0000000..e7ef350
--- /dev/null
+++ b/t/lib/PVTests/With.pm
@@ -0,0 +1,125 @@
+package PVTests::With;
+
+use strict;
+use warnings;
+
+use Params::Validate qw(:all);
+
+use PVTests;
+use Test::More;
+
+sub run_tests {
+ eval { validate_with( params => ['foo'], spec => [SCALAR], ); };
+ is( $@, q{} );
+
+ eval {
+ validate_with(
+ params => {
+ foo => 5,
+ bar => {}
+ },
+ spec => {
+ foo => SCALAR,
+ bar => HASHREF
+ },
+ );
+ };
+ is( $@, q{} );
+
+ eval {
+ validate_with(
+ params => [],
+ spec => [SCALAR],
+ called => 'Yo::Mama',
+ );
+ };
+ if ( $ENV{PERL_NO_VALIDATION} ) {
+ is( $@, q{} );
+ }
+ else {
+ like( $@, qr/Yo::Mama/ );
+ }
+
+ {
+ my %p;
+ eval {
+ %p = validate_with(
+ params => [],
+ spec => {
+ a => { default => 3 },
+ b => { default => 'x' }
+ },
+ );
+ };
+
+ ok( exists $p{a} );
+ is( $p{a}, 3 );
+ ok( exists $p{b} );
+ is( $p{b}, 'x' );
+ }
+
+ {
+ my @p;
+ eval {
+ @p = validate_with(
+ params => [],
+ spec => [
+ { default => 3 },
+ { default => 'x' }
+ ],
+ );
+ };
+
+ is( $p[0], 3 );
+ is( $p[1], 'x' );
+ }
+
+ {
+
+ package Testing::X;
+ use Params::Validate qw(:all);
+ validation_options( allow_extra => 1 );
+
+ eval {
+ validate_with(
+ params => [ a => 1, b => 2, c => 3 ],
+ spec => { a => 1, b => 1 },
+ );
+ };
+ PVTests::With::is( $@, q{} );
+
+ eval {
+ validate_with(
+ params => [ a => 1, b => 2, c => 3 ],
+ spec => { a => 1, b => 1 },
+ allow_extra => 0,
+ );
+ };
+ if ( $ENV{PERL_NO_VALIDATION} ) {
+ PVTests::With::is( $@, q{} );
+ }
+ else {
+ PVTests::With::like( $@, qr/was not listed/ );
+ }
+ }
+
+ {
+
+ # Bug 2791 on rt.cpan.org
+ my %p;
+ eval {
+ my @p = { foo => 1 };
+ %p = validate_with(
+ params => \@p,
+ spec => { foo => 1 },
+ );
+ };
+
+ is( $@, q{} );
+ is( $p{foo}, 1 );
+ }
+
+ done_testing();
+}
+
+1;