File: dates_closure.t

package info (click to toggle)
libdata-formvalidator-perl 4.66-1%2Bsqueeze1
  • links: PTS, VCS
  • area: main
  • in suites: squeeze
  • size: 588 kB
  • ctags: 127
  • sloc: perl: 2,756; makefile: 2
file content (101 lines) | stat: -rw-r--r-- 3,611 bytes parent folder | download | duplicates (4)
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
#!/usr/bin/perl -w
use Test::More;

eval { require Date::Calc; };
if( $@ ) {
    plan skip_all => 'Date::Calc required for date testing';
}
else {
    plan 'no_plan';
}

require Data::FormValidator::Constraints::Dates;

use strict;

use strict;

my $format = Data::FormValidator::Constraints::Dates::_prepare_date_format('MM/DD/YYYY hh?:mm:ss pp');

my ($date,$year, $month, $day, $hour, $min, $sec) = Data::FormValidator::Constraints::Dates::_parse_date_format($format, '12/02/2003 1:01:03 PM');
ok ($date eq '12/02/2003 1:01:03 PM','returning untainted date');
ok ($year == 2003, 'basic date prepare and parse test');
ok ($month == 12);
ok ($day == 2);
ok ($hour == 13);
ok ($min == 1);
ok ($sec == 3); 

# Now try again, leaving out PM, which may trigger a warning when it shouldn't
$format = Data::FormValidator::Constraints::Dates::_prepare_date_format('MM/DD/YYYY hh?:mm:ss');
($date,$year, $month, $day, $hour, $min, $sec) = Data::FormValidator::Constraints::Dates::_parse_date_format($format, '12/02/2003 1:01:03');
is($date,'12/02/2003 1:01:03','returning untainted date');
ok ($year == 2003, 'basic date prepare and parse test');
ok ($month == 12, 'month');
ok ($day == 2,'day');
ok ($hour == 1,'hour');
ok ($min == 1,'min');
ok ($sec == 3,'sec'); 

use Data::FormValidator;
use Data::FormValidator::Constraints::Dates qw( date_and_time );

my $simple_profile = {
	required => [qw/date_and_time_field_bad date_and_time_field_good/],
	validator_packages => [qw/Data::FormValidator::Constraints::Dates/],
	constraint_methods => {
		'date_and_time_field_good' => date_and_time('MM/DD/YYYY hh:mm pp'),
		'date_and_time_field_bad'  => date_and_time('MM/DD/YYYY hh:mm pp'),
	},
	untaint_constraint_fields=>[qw/date_and_time_field/],
};

my $simple_data = {
	date_and_time_field_good => '12/04/2003 02:00 PM',
	date_and_time_field_bad  => 'slug',
};	


my $validator = new Data::FormValidator({
		simple  => $simple_profile,
	});

my ($valids, $missings, $invalids, $unknowns) = ({},[],{},[]);
eval{
	($valids, $missings, $invalids, $unknowns) = $validator->validate($simple_data, 'simple');
};
ok ((not $@), 'eval') or
   diag $@;
ok ($valids->{date_and_time_field_good}, 'expecting date_and_time success');
ok ((grep /date_and_time_field_bad/, @$invalids), 'expecting date_and_time failure');

{
    my $r = Data::FormValidator->check({
        # Testing leap years
        date_and_time_field_good    => '02/29/2008',
        date_and_time_field_bad_pat => '02/29/2008',
        leap_seventy_six            => '02/29/1976',
    },	
    {
        required => [qw/date_and_time_field_good date_and_time_field_bad_pat/],
        constraint_methods => {
            'date_and_time_field_good'    => date_and_time('MM/DD/YY(?:YY)?'),
            # This pattern actually tests with a 3 digit year, not a four digit year, and fails
            # on the date 02/29/2008, because 02/29/200 doesn't exist. 
            'date_and_time_field_bad_pat' => date_and_time('MM/DD/YYY?Y?'),
            'leap_seventy_six'            => date_and_time('MM/DD/YY(?:YY)?'),
        },
   });
   my $valid = $r->valid;
   ok ($valid->{date_and_time_field_good}, '02/29/2008 should pass MM/DD/YY(?:YY)?');

   TODO: {
       local $TODO = "leap year bug?";
       ok ($valid->{leap_seventy_six},         '02/29/1976 should pass MM/DD/YY(?:YY)?');
    };

   # This one fails not because the date is bad, but because the pattern is not sensible
   # It would be better to detect that the pattern was bad and fail that way, of course.
   ok ( $r->invalid('date_and_time_field_bad_pat'), "02/29/2008 should fail MM/DD/YYY?Y?" );

}