|
Packit |
9002b2 |
use strict;
|
|
Packit |
9002b2 |
use warnings;
|
|
Packit |
9002b2 |
|
|
Packit |
9002b2 |
use Test::More;
|
|
Packit |
9002b2 |
|
|
Packit |
9002b2 |
use DateTime::Format::Builder;
|
|
Packit |
9002b2 |
|
|
Packit |
9002b2 |
my %parsers = (
|
|
Packit |
9002b2 |
parsers => {
|
|
Packit |
9002b2 |
parse_datetime => {
|
|
Packit |
9002b2 |
length => 8,
|
|
Packit |
9002b2 |
regex => qr/^abcdef$/,
|
|
Packit |
9002b2 |
params => [qw( year month day )],
|
|
Packit |
9002b2 |
}
|
|
Packit |
9002b2 |
}
|
|
Packit |
9002b2 |
);
|
|
Packit |
9002b2 |
|
|
Packit |
9002b2 |
# Verify constructor (non-)creation
|
|
Packit |
9002b2 |
|
|
Packit |
9002b2 |
# Ensure we don't build a constructor when one isn't asked for
|
|
Packit |
9002b2 |
{
|
|
Packit |
9002b2 |
my $class = 'SampleClass1';
|
|
Packit |
9002b2 |
eval q[
|
|
Packit |
9002b2 |
package SampleClass1;
|
|
Packit |
9002b2 |
use DateTime::Format::Builder
|
|
Packit |
9002b2 |
constructor => undef,
|
|
Packit |
9002b2 |
%parsers;
|
|
Packit |
9002b2 |
1;
|
|
Packit |
9002b2 |
];
|
|
Packit |
9002b2 |
ok( !$@, "No errors when creating the class." );
|
|
Packit |
9002b2 |
|
|
Packit |
9002b2 |
diag $@ if $@;
|
|
Packit |
9002b2 |
|
|
Packit |
9002b2 |
{
|
|
Packit |
9002b2 |
no strict 'refs';
|
|
Packit |
9002b2 |
ok( !( *{"${class}::new"}{CV} ), "There is indeed no 'new'" );
|
|
Packit |
9002b2 |
}
|
|
Packit |
9002b2 |
|
|
Packit |
9002b2 |
my $parser = eval { $class->new() };
|
|
Packit |
9002b2 |
ok( $@, "Error when trying to instantiate (no new)" );
|
|
Packit |
9002b2 |
like(
|
|
Packit |
9002b2 |
$@, qr/^Can't locate object method "new" via package "$class"/,
|
|
Packit |
9002b2 |
"Right error"
|
|
Packit |
9002b2 |
);
|
|
Packit |
9002b2 |
}
|
|
Packit |
9002b2 |
|
|
Packit |
9002b2 |
# Ensure we don't have people wiping out their constructors
|
|
Packit |
9002b2 |
{
|
|
Packit |
9002b2 |
my $class = 'SampleClassHasNew';
|
|
Packit |
9002b2 |
sub SampleClassHasNew::new { return "4" }
|
|
Packit |
9002b2 |
eval q[
|
|
Packit |
9002b2 |
package SampleClassHasNew;
|
|
Packit |
9002b2 |
use DateTime::Format::Builder
|
|
Packit |
9002b2 |
constructor => 1,
|
|
Packit |
9002b2 |
%parsers;
|
|
Packit |
9002b2 |
1;
|
|
Packit |
9002b2 |
];
|
|
Packit |
9002b2 |
ok( $@, "Error when creating class." );
|
|
Packit |
9002b2 |
}
|
|
Packit |
9002b2 |
|
|
Packit |
9002b2 |
# Ensure we're not accidentally overriding when we don't itnend to.
|
|
Packit |
9002b2 |
{
|
|
Packit |
9002b2 |
my $class = 'SampleClassDont';
|
|
Packit |
9002b2 |
sub SampleClassDont::new { return "5" }
|
|
Packit |
9002b2 |
eval q[
|
|
Packit |
9002b2 |
package SampleClassDont;
|
|
Packit |
9002b2 |
use DateTime::Format::Builder
|
|
Packit |
9002b2 |
constructor => 0,
|
|
Packit |
9002b2 |
%parsers;
|
|
Packit |
9002b2 |
1;
|
|
Packit |
9002b2 |
];
|
|
Packit |
9002b2 |
ok( !$@, "No error when creating class." );
|
|
Packit |
9002b2 |
diag $@ if $@;
|
|
Packit |
9002b2 |
|
|
Packit |
9002b2 |
my $parser = eval { $class->new() };
|
|
Packit |
9002b2 |
is( $parser => 5, "Didn't override new()" );
|
|
Packit |
9002b2 |
}
|
|
Packit |
9002b2 |
|
|
Packit |
9002b2 |
# Ensure we use the given constructor
|
|
Packit |
9002b2 |
{
|
|
Packit |
9002b2 |
my $class = 'SampleClassGiven';
|
|
Packit |
9002b2 |
eval q[
|
|
Packit |
9002b2 |
package SampleClassGiven;
|
|
Packit |
9002b2 |
use DateTime::Format::Builder
|
|
Packit |
9002b2 |
constructor => sub { return "6" },
|
|
Packit |
9002b2 |
%parsers;
|
|
Packit |
9002b2 |
1;
|
|
Packit |
9002b2 |
];
|
|
Packit |
9002b2 |
ok( !$@, "No error when creating class." );
|
|
Packit |
9002b2 |
diag $@ if $@;
|
|
Packit |
9002b2 |
|
|
Packit |
9002b2 |
my $parser = eval { $class->new() };
|
|
Packit |
9002b2 |
is( $parser => 6, "Used given new()" );
|
|
Packit |
9002b2 |
}
|
|
Packit |
9002b2 |
|
|
Packit |
9002b2 |
done_testing();
|