Blame t/nocon.t

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();