Perl-ToPerl6
view release on metacpan or search on metacpan
lib/Perl/ToPerl6/TestUtils.pm view on Meta::CPAN
if ( /^#-->/ ) {
$original_done = 1;
next;
}
elsif ( $original_done ) {
push @sample, $_;
}
else {
push @original, $_;
}
}
return (\@original, \@sample);
}
sub _finalize_subtest {
my $subtest = shift;
if ( $subtest->{code} ) {
my $code = delete $subtest->{code};
@{$subtest}{qw(original sample)} = _split_subtest($code);
delete $subtest->{code};
}
else {
throw_internal "$subtest->{name} has no code lines";
}
if ( !defined $subtest->{failures} ) {
throw_internal "$subtest->{name} does not specify failures";
}
if ($subtest->{parms}) {
$subtest->{parms} = eval $subtest->{parms};
if ($EVAL_ERROR) {
throw_internal
"$subtest->{name} has an error in the 'parms' property:\n"
. $EVAL_ERROR;
}
if ('HASH' ne ref $subtest->{parms}) {
throw_internal
"$subtest->{name} 'parms' did not evaluate to a hashref";
}
} else {
$subtest->{parms} = {};
}
if (defined $subtest->{error}) {
if ( $subtest->{error} =~ m{ \A / (.*) / \z }xms) {
$subtest->{error} = eval {qr/$1/};
if ($EVAL_ERROR) {
throw_internal
"$subtest->{name} 'error' has a malformed regular expression";
}
}
}
return $subtest;
}
sub bundled_transformer_names {
require ExtUtils::Manifest;
my $manifest = ExtUtils::Manifest::maniread();
my @transformer_paths = map {m{\A lib/(Perl/ToPerl6/Transformer/.*).pm \z}xms} keys %{$manifest};
my @transformers = map { join q{::}, split m{/}xms } @transformer_paths;
my @sorted_transformers = sort @transformers;
return @sorted_transformers;
}
sub names_of_transformers_willing_to_work {
my %configuration = @_;
my @transformers_willing_to_work =
Perl::ToPerl6::Config
->new( %configuration )
->transformers();
return map { ref } @transformers_willing_to_work;
}
1;
__END__
#-----------------------------------------------------------------------------
=pod
=for stopwords RCS subtest subtests
=head1 NAME
Perl::ToPerl6::TestUtils - Utility functions for testing new Transformers.
=head1 INTERFACE SUPPORT
This is considered to be a public module. Any changes to its
interface will go through a deprecation cycle.
=head1 SYNOPSIS
use Perl::ToPerl6::TestUtils qw(transform ptransform ftransform);
my $code = '<<END_CODE';
package Foo::Bar;
$foo = frobulator();
$baz = $foo ** 2;
1;
END_CODE
# Critique code against all loaded transformers...
my $perl_mogrify_config = { -necessity => 2 };
my $transformation_count = transform( \$code, $perl_mogrify_config);
# Critique code against one transformer...
my $custom_transformer = 'Miscellanea::ProhibitFrobulation'
my $transformation_count = ptransform( $custom_transformer, \$code );
# Critique code against one filename-related transformer...
my $custom_transformer = 'Modules::RequireFilenameMatchesPackage'
my $transformation_count = ftransform( $custom_transformer, \$code, 'Foo/Bar.pm' );
( run in 1.398 second using v1.01-cache-2.11-cpan-71847e10f99 )