Data-FeatureFactory

 view release on metacpan or  search on metacpan

t/01-translate.t  view on Meta::CPAN

#!/usr/bin/perl -w

use strict;
use warnings;
use Test::More tests => 37;
use Carp qw(verbose);
use File::Temp;
use File::Basename;
my $PATH;
BEGIN { $PATH = &{ sub { dirname ( (caller)[1] ) } }; }
use lib $PATH;

my $WARNINGS;
sub catchwarn {
    my ($expected_warning, $how_many) = @_;
    if (not defined $expected_warning) {
        $expected_warning = qr/.*/;
    }
    if (not defined $how_many) {
        $how_many = 1;
    }
    my $n = 0;
    $WARNINGS = 0;
    if ($how_many == 0) {
        $SIG{__WARN__} = 'DEFAULT';
        return
    }
    $SIG{__WARN__} = sub {
        my ($warning) = @_;
        if ($warning =~ $expected_warning) {
            if (++$n >= $how_many) {
                $SIG{__WARN__} = 'DEFAULT';
            }
            $WARNINGS++;
        }
        else {
            print STDERR $warning;
        }
    };
}

# This is copied from List/MoreUtils.pm
sub zip {
    my $max = -1;
    $max < $#$_  &&  ($max = $#$_)  for @_;

    map { my $ix = $_; map $_->[$ix], @_; } 0..$max;
}

{
    package Basic;
    use base qw(Data::FeatureFactory);
    our @features = (
        { name => 'first_letter', 'values' => ['V' .. 'Z'], postproc => sub { return '_'.$_[0].'_' } },
        { name => 'second_letter', 'values' => ['m' .. 'q'], format => 'normal' },
        { name => 'num_letters', type => 'integer', range => '1 .. 5' },
        { name => 'bin_letters', type => 'integer', range => '1 .. 5', format => 'binary', code => \&num_letters },
        { name => 'upcase', type => 'boolean' },
        { name => 'id', label => 'skipped' },
    );
    sub first_letter {
        return uc substr $_[0], 0, 1
    }
    sub second_letter {
        return lc substr $_[0], 1, 1
    }
    sub num_letters {
        my $l = length $_[0];
        return $l <= 5 ? $l : undef
    }



( run in 1.575 second using v1.01-cache-2.11-cpan-6736b670a1e )