use Config ();
+=head1 NAME
+
+VPIT::TestHelpers
+
+=head1 SYNTAX
+
+ use VPIT::TestHelpers (
+ feature1 => \@feature1_args,
+ feature2 => \@feature2_args,
+ );
+
+=cut
+
sub export_to_pkg {
my ($subs, $pkg) = @_;
return $loaded;
}
+=head1 FEATURES
+
+=head2 C<run_perl>
+
+=over 4
+
+=item *
+
+Import :
+
+ use VPIT::TestHelpers run_perl => [ $p ]
+
+where :
+
+=over 8
+
+=item -
+
+C<$p> is prefixed to the constants exported by this feature (defaults to C<''>).
+
+=back
+
+=item *
+
+Dependencies : none
+
+=item *
+
+Exports :
+
+=over 8
+
+=item -
+
+C<run_perl $code>
+
+=item -
+
+C<RUN_PERL_FAILED> (possibly prefixed by C<$p>)
+
+=back
+
+=back
+
+=cut
+
sub fresh_perl_env (&) {
my $handler = shift;
};
}
+=head2 C<capture>
+
+=over 4
+
+=item *
+
+Import :
+
+ use VPIT::TestHelpers 'capture'
+
+=item *
+
+Dependencies :
+
+=over 8
+
+=item -
+
+Not VMS
+
+=item -
+
+L<IO::Handle>, L<IO::Select>, L<IPC::Open3>
+
+=item -
+
+On MSWin32 : L<Socket>
+
+=back
+
+=item *
+
+Exports :
+
+=over 8
+
+=item -
+
+C<capture @command>
+
+=item -
+
+C<capture_perl $code>
+
+=back
+
+=back
+
+=cut
+
sub init_capture {
skip_all 'Cannot capture output on VMS' if $^O eq 'VMS';
};
}
+=head2 C<threads>
+
+=over 4
+
+=item *
+
+Import :
+
+ use VPIT::TestHelpers threads => [
+ $pkg, $is_threadsafe, $force_var
+ ];
+
+where :
+
+=over 8
+
+=item -
+
+C<$pkg> is the target package name to be used in error messages (defaults to C<'package'>) ;
+
+=item -
+
+C<$is_threadsafe> is a boolean telling whether the target module is thread-safe (not tested if C<undef>) ;
+
+=item -
+
+C<$force_var> is the name of the environment variable that can be used to force the thread tests (defaults to C<PERL_FORCE_TEST_THREADS>).
+
+=back
+
+=item *
+
+Dependencies :
+
+=over 8
+
+=item -
+
+C<perl> 5.13.4
+
+=item -
+
+L<threads> 1.67
+
+=item -
+
+L<threads::shared> 1.14
+
+=item -
+
+L<Test::Leaner>
+
+=back
+
+=item *
+
+Exports :
+
+=over 8
+
+=item -
+
+C<spawn $coderef>
+
+=back
+
+=back
+
+=cut
+
sub init_threads {
my ($pkg, $threadsafe, $force_var) = @_;
return spawn => \&spawn;
}
+sub spawn {
+ local $@;
+ my @diag;
+ my $thread = eval {
+ local $SIG{__WARN__} = sub { push @diag, "Thread creation warning: @_" };
+ threads->create(@_);
+ };
+ push @diag, "Thread creation error: $@" if $@;
+ diag @diag;
+ return $thread ? $thread : ();
+}
+
+=head2 C<usleep>
+
+=over 4
+
+=item *
+
+Import :
+
+ use VPIT::TestHelpers 'usleep'
+
+=item *
+
+Dependencies : none
+
+=item *
+
+Exports :
+
+=over 8
+
+=item -
+
+C<usleep $microseconds>
+
+=back
+
+=back
+
+=cut
+
sub init_usleep {
my $usleep;
return usleep => $usleep;
}
-sub spawn {
- local $@;
- my @diag;
- my $thread = eval {
- local $SIG{__WARN__} = sub { push @diag, "Thread creation warning: @_" };
- threads->create(@_);
- };
- push @diag, "Thread creation error: $@" if $@;
- diag @diag;
- return $thread ? $thread : ();
-}
+=head1 CLASSES
+
+=head2 C<VPIT::TestHelpers::Guard>
+
+Syntax :
+
+ {
+ my $guard = VPIT::TestHelpers::Guard->new($coderef);
+ ...
+ } # $codref called here
+
+=cut
package VPIT::TestHelpers::Guard;
sub DESTROY { $_[0]->{code}->() }
+=head1 AUTHOR
+
+Vincent Pit, C<< <perl at profvince.com> >>, L<http://www.profvince.com>.
+
+=head1 COPYRIGHT & LICENSE
+
+Copyright 2012,2013,2014,2015 Vincent Pit, all rights reserved.
+
+This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
+
+=cut
+
1;