Author: [email protected]
Date: Thu Feb 5 05:46:52 2009
New Revision: 680
Added:
trunk/t/lib/
trunk/t/lib/NYTProfTest.pm
trunk/t/test01.t
trunk/t/test02.t
trunk/t/test03.t
trunk/t/test05.t
trunk/t/test06.t
trunk/t/test07.t
trunk/t/test08.t
trunk/t/test09.t
trunk/t/test10.t
trunk/t/test11.t
trunk/t/test12.t
trunk/t/test13.t
trunk/t/test14.t
trunk/t/test16.t
trunk/t/test20-streval.t
trunk/t/test21-streval3.t
trunk/t/test22-strevala.t
trunk/t/test30-fork.0.t
trunk/t/test40pmc.t
trunk/t/test50-disable.t
trunk/t/test51-enable.t
trunk/t/test60-subname.t
trunk/t/test61-submerge.t
trunk/t/test70-subexcl.t
trunk/t/test80-recurs.t
Modified:
trunk/HACKING
trunk/MANIFEST
trunk/t/20.runtests.t
Log:
Rewrite test system: Each test now has its own .t file (using
t/lib/NYTProfTest.pm). Next steps: Remove 20.runtests.t and update HACKING
to reflect the new test system.
Modified: trunk/HACKING
==============================================================================
--- trunk/HACKING (original)
+++ trunk/HACKING Thu Feb 5 05:46:52 2009
@@ -98,7 +98,7 @@
Refactor the subs in t/20.runtests.t into a library of subs in a
t/lib/NYTProfTest.pm module. We should aim to be able to write new tests as
traditional t/*.t files that use NYTProfTest and call the subs to do the
work.
-This will free us from the consraints imposed by the current harness.
+This will free us from the constraints imposed by the current harness.
Specifically there's no way to directly test the data model methods.
Once refactored we'd be able to simply add
is $profile->foo, bar, 'foo should be bar';
Modified: trunk/MANIFEST
==============================================================================
--- trunk/MANIFEST (original)
+++ trunk/MANIFEST Thu Feb 5 05:46:52 2009
@@ -44,59 +44,77 @@
t/91.pod_coverage.t
t/test01.p
t/test01.rdt
+t/test01.t
t/test01.x
t/test02.p
t/test02.rdt
+t/test02.t
t/test02.x
t/test03.p
t/test03.rdt
+t/test03.t
t/test03.x
t/test05.p
t/test05.rdt
+t/test05.t
t/test05.x
t/test06.p
t/test06.rdt
+t/test06.t
t/test06.x
t/test07.p
t/test07.rdt
+t/test07.t
t/test07.x
t/test08.p
t/test08.rdt
+t/test08.t
t/test08.x
t/test09.p
t/test09.rdt
+t/test09.t
t/test09.x
t/test10.p
t/test10.rdt
+t/test10.t
t/test10.x
t/test11.p
t/test11.rdt
+t/test11.t
t/test11.x
t/test12.p
t/test12.pl
t/test12.rdt
+t/test12.t
t/test12.x
t/test13.p
t/test13.rdt
+t/test13.t
t/test13.x
t/test14.p
t/test14.pm
t/test14.pm.x
t/test14.rdt
+t/test14.t
t/test14.x
t/test16.p
t/test16.rdt
+t/test16.t
t/test16.x
t/test20-streval.p
t/test20-streval.rdt
+t/test20-streval.t
t/test20-streval.x
t/test21-streval3.p
t/test21-streval3.rdt
+t/test21-streval3.t
t/test21-streval3.x
t/test22-strevala.p
t/test22-strevala.rdt
+t/test22-strevala.p
t/test30-fork.0.p
t/test30-fork.0.rdt
+t/test30-fork.0.t
t/test30-fork.0.x
t/test30-fork.1.rdt
t/test30-fork.1.x
@@ -105,20 +123,27 @@
t/test40pmc.pm.x
t/test40pmc.pmc
t/test40pmc.rdt
+t/test40pmc.t
t/test40pmc.x
t/test50-disable.p
t/test50-disable.rdt
+t/test50-disable.t
t/test50-disable.x
t/test51-enable.p
-t/test51-enable.x
t/test51-enable.rdt
+t/test51-enable.t
+t/test51-enable.x
t/test60-subname.p
t/test60-subname.rdt
+t/test60-subname.t
t/test61-submerge.p
t/test61-submerge.rdt
+t/test61-submerge.t
t/test70-subexcl.p
+t/test70-subexcl.t
t/test80-recurs.p
t/test80-recurs.rdt
+t/test80-recurs.t
typemap
xt/test45-overload.p
xt/test71-while.p
Modified: trunk/t/20.runtests.t
==============================================================================
--- trunk/t/20.runtests.t (original)
+++ trunk/t/20.runtests.t Thu Feb 5 05:46:52 2009
@@ -143,6 +143,8 @@
skip "$basename: $SKIP_TESTS{$basename}", number_of_tests($test)
if $SKIP_TESTS{$basename};
+ skip "each test now has it's own .t file", number_of_tests($test);
+
my $test_datafile =
(profile_datafiles($profile_datafile))[$fork_seqn];
if ($type eq 'p') {
Added: trunk/t/lib/NYTProfTest.pm
==============================================================================
--- (empty file)
+++ trunk/t/lib/NYTProfTest.pm Thu Feb 5 05:46:52 2009
@@ -0,0 +1,387 @@
+package NYTProfTest;
+
+use strict;
+use warnings;
+
+use Carp;
+use Config;
+use ExtUtils::testlib;
+use Getopt::Long;
+use Test::More;
+
+use base qw(Exporter);
+our @EXPORT = qw(run_test_group);
+
+use Devel::NYTProf::Reader;
+use Devel::NYTProf::Util qw(strip_prefix_from_paths);
+
+
+my %opts = (
+ profperlopts => '-d:NYTProf',
+ html => $ENV{NYTPROF_TEST_HTML},
+);
+GetOptions(\%opts, qw/p=s I=s v|verbose d|debug html open profperlopts=s
leave=i use_db_sub=i/)
+ or exit 1;
+
+$opts{v} ||= $opts{d};
+$opts{html} ||= $opts{open};
+
+my $opt_perl = $opts{p};
+my $opt_include = $opts{I};
+my $opt_leave = $opts{leave};
+my $opt_use_db_sub = $opts{use_db_sub};
+my $profile_datafile = 'nytprof_t.out'; # non-default to test override
works
+
+# note some env vars that might impact the tests
+$ENV{$_} && warn "$_=$ENV{$_}\n" for qw(PERL5DB PERL5OPT PERL_UNICODE
PERLIO);
+
+if ($ENV{NYTPROF}) { # avoid external interference
+ warn "Existing NYTPROF env var value ($ENV{NYTPROF}) ignored for
tests. Use NYTPROF_TEST env var if need be.\n";
+ $ENV{NYTPROF} = '';
+}
+
+# options the user wants to override when running tests
+my %NYTPROF_TEST = map { split /=/, $_, 2 } split /:/, $ENV{NYTPROF_TEST} |
| '';
+
+# but we'll force a specific test data file
+$NYTPROF_TEST{file} = $profile_datafile;
+
+chdir('t') if -d 't';
+
+my $tests_per_extn = {p => 1, rdt => 1, x => 3};
+
+my $path_sep = $Config{path_sep} || ':';
+if (-d '../blib') {
+ unshift @INC, '../blib/arch', '../blib/lib';
+}
+my $bindir = (grep {-d} qw(./bin ../bin))[0];
+my $nytprofcsv = "$bindir/nytprofcsv";
+my $nytprofhtml = "$bindir/nytprofhtml";
+
+my $perl5lib = $opt_include || join($path_sep, @INC);
+my $perl = $opt_perl || $^X;
+
+# turn ./perl into ../perl, because of chdir(t) above.
+$perl = ".$perl" if $perl =~ m|^\./|;
+
+my @test_opt_leave = (defined $opt_leave) ? ($opt_leave) :
(1, 0);
+my @test_opt_use_db_sub = (defined $opt_use_db_sub) ? ($opt_use_db_sub) :
(0, 1);
+
+# build @env_combinations
+my @env_combinations;
+for my $leave (@test_opt_leave) {
+ for my $use_db_sub (@test_opt_use_db_sub) {
+ push @env_combinations, {
+ start => 'init',
+ leave => $leave,
+ use_db_sub => $use_db_sub,
+ }
+ }
+}
+
+
+sub run_test_group {
+ my ($group) = @_;
+
+ unless ($group) {
+ # obtain group from file name
+ my $file = (caller)[1];
+ if ($file =~ /([^\/\\]+)\.t$/) {
+ $group = $1;
+ } else {
+ croak "Can't determine test group";
+ }
+ }
+
+ my @tests = grep { -f $_ } map { join('.', $group, $_) }
keys %$tests_per_extn;
+
+ if ($opts{v}) {
+ print "tests: @tests\n";
+ print "perl: $perl\n";
+ print "perl5lib: $perl5lib\n";
+ print "nytprofcvs: $nytprofcsv\n";
+ }
+
+ # Windows emulates the executable bit based on file extension only
+ ok($^O eq "MSWin32" ? -f $nytprofcsv : -x $nytprofcsv, "Found
nytprofcsv as $nytprofcsv");
+
+ for my $env (@env_combinations) {
+ for my $test (@tests) {
+ run_test_with_env($test, $env);
+ }
+ }
+}
+
+sub run_test_with_env {
+ my ($test, $env) = @_;
+
+ my %env = (%$env, %NYTPROF_TEST);
+ local $ENV{NYTPROF} = join ":", map {"$_=$env{$_}"} sort keys %env;
+
+ #print $test . '.'x (20 - length $test);
+ $test =~ / (.+?) \. (?:(\d)\.)? (\w+) $/x or do {
+ warn "Can't parse test filename '$test'";
+ return;
+ };
+ my ($basename, $fork_seqn, $type) = ($1, $2 || 0, $3);
+
+ my $test_datafile = (profile_datafiles($profile_datafile))[$fork_seqn];
+
+ if ($type eq 'p') {
+ unlink_old_profile_datafiles($profile_datafile);
+ profile($test, $profile_datafile);
+ }
+ elsif ($type eq 'rdt') {
+ verify_data($test, $test_datafile);
+ }
+ elsif ($type eq 'x') {
+ my $outdir = "$basename.outdir";
+ mkdir $outdir or die "mkdir($outdir): $!" unless -d $outdir;
+ unlink <$outdir/*>;
+
+ verify_csv_report($test, $test_datafile, $outdir);
+
+ if ($opts{html}) {
+ my $cmd = "$perl $nytprofhtml --file=$profile_datafile
--out=$outdir";
+ $cmd .= " --open" if $opts{open};
+ run_command($cmd);
+ }
+ }
+ elsif ($type =~ /^(?:pl|pm|new|outdir)$/) {
+ # skip; handy for "test.pl t/test01.*"
+ }
+ else {
+ warn "Unrecognized extension '$type' on test file '$test'\n";
+ }
+}
+
+sub run_command {
+ my ($cmd) = @_;
+ warn "NYTPROF=$ENV{NYTPROF}\n" if $opts{v} && $ENV{NYTPROF};
+ local $ENV{PERL5LIB} = $perl5lib;
+ warn "$cmd\n" if $opts{v};
+ local *RV;
+ open(RV, "$cmd |") or die "Can't execute $cmd: $!\n";
+ my @results = <RV>;
+ my $ok = close RV;
+ warn "Error status $? from $cmd!\n\n" if not $ok;
+ return $ok;
+}
+
+
+sub profile {
+ my ($test, $profile_datafile) = @_;
+
+ my $cmd = "$perl $opts{profperlopts} $test";
+ ok run_command($cmd), "$test runs ok under the profiler";
+}
+
+
+sub verify_data {
+ my ($test, $profile_datafile) = @_;
+
+ my $profile = eval { Devel::NYTProf::Data->new({filename =>
$profile_datafile}) };
+ if ($@) {
+ diag($@);
+ fail($test);
+ return;
+ }
+
+ $profile->normalize_variables;
+ dump_profile_to_file($profile, "$test.new");
+ my @got = slurp_file("$test.new");
+ my @expected = slurp_file($test);
+
+ is_deeply(\...@got, \...@expected, "$test match generated profile data")
+ ? unlink("$test.new")
+ : diff_files($test, "$test.new");
+}
+
+
+sub dump_data_to_file {
+ my ($profile, $file) = @_;
+ open my $fh, ">", $file or croak "Can't open $file: $!";
+ local $Data::Dumper::Indent = 1;
+ local $Data::Dumper::Sortkeys = 1;
+ print $fh Data::Dumper->Dump([$profile], ['expected']);
+ return;
+}
+
+
+sub dump_profile_to_file {
+ my ($profile, $file) = @_;
+ open my $fh, ">", $file or croak "Can't open $file: $!";
+ $profile->dump_profile_data(
+ { filehandle => $fh,
+ separator => "\t",
+ skip_stdlib => 1,
+ }
+ );
+ return;
+}
+
+
+sub diff_files {
+
+ # we don't care if this fails, it's just an aid to debug test failures
+ my @opts = split / /, $ENV{NYTPROF_DIFF_OPTS} || ''; # e.g. '-y'
+ @opts = ('-u') unless @opts;
+ system("diff @opts @_ 1>&2");
+}
+
+
+sub verify_csv_report {
+ my ($test, $profile_datafile, $outdir) = @_;
+
+ # generate and parse/check csv report
+
+ # determine the name of the generated csv file
+ my $csvfile = $test;
+
+ # fork tests will still report using the original script name
+ $csvfile =~ s/\.\d\./.0./;
+
+ # foo.p => foo.p.csv is tested by foo.x
+ # foo.pm => foo.pm.csv is tested by foo.pm.x
+ $csvfile =~ s/\.x//;
+ $csvfile .= ".p" unless $csvfile =~ /\.p/;
+ $csvfile = "$outdir/${csvfile}-line.csv";
+ unlink $csvfile;
+
+ my $cmd = "$perl $nytprofcsv --file=$profile_datafile --out=$outdir";
+ ok run_command($cmd), "nytprofcsv runs ok";
+
+ my @got = slurp_file($csvfile);
+ my @expected = slurp_file($test);
+
+ if ($opts{d}) {
+ print "GOT:\n";
+ print @got;
+ print "EXPECTED:\n";
+ print @expected;
+ print "\n";
+ }
+
+ my $index = 0;
+ foreach (@expected) {
+ if ($expected[$index++] =~ m/^# Version/) {
+ splice @expected, $index - 1, 1;
+ }
+ }
+
+ # if it was slower than expected then we're very generous, to allow for
+ # slow systems, e.g. cpan-testers running in cpu-starved virtual
machines.
+ my $max_time_overrun_percentage = ($ENV{AUTOMATED_TESTING}) ? 300 :
200;
+ my $max_time_underrun_percentage = 95;
+
+ my @accuracy_errors;
+ $index = 0;
+ my $limit = scalar(@got) - 1;
+ while ($index < $limit) {
+ $_ = shift @got;
+
+ next if m/^# Version/; # Ignore version numbers
+
+ s/^([0-9.]+),([0-9.]+),([0-9.]+),(.*)$/0,$2,0,$4/o;
+ my $t0 = $1;
+ my $c0 = $2;
+ my $tc0 = $3;
+
+ if ( defined $expected[$index]
+ and 0 != $expected[$index] =~ s/^~([0-9.]+)/0/
+ and $c0 # protect against div-by-0 in some error
situations
+ )
+ {
+ my $expected = $1;
+ my $percent = int(($t0 / $expected) * 100); # <100 if
faster, >100 if slower
+
+ # Test aproximate times
+ push @accuracy_errors,
+ "$test line $index: got $t0 expected approx $expected
for time ($percent%)"
+ if ($percent < $max_time_underrun_percentage)
+ or ($percent > $max_time_overrun_percentage);
+
+ my $tc = $t0 / $c0;
+ push @accuracy_errors, "$test line $index: got $tc0 expected
~$tc for time/calls"
+ if abs($tc - $tc0) > 0.00002; # expected to be very
close (rounding errors only)
+ }
+
+ push @got, $_;
+ $index++;
+ }
+
+ if ($opts{d}) {
+ print "TRANSFORMED TO:\n";
+ print @got;
+ print "\n";
+ }
+
+ is_deeply(\...@got, \...@expected, "$test match generated CSV data") or do
{
+ spit_file("$test.new", join("", @got));
+ diff_files($test, "$test.new");
+ };
+ is(join("\n", @accuracy_errors), '', "$test times should be
reasonable");
+}
+
+
+sub pop_times {
+ my $hash = shift || return;
+
+ foreach my $key (keys %$hash) {
+ shift @{$hash->{$key}};
+ pop_times($hash->{$key}->[1]);
+ }
+}
+
+
+sub number_of_tests {
+ my $total_tests = 0;
+ for (@_) {
+ next unless m/\.(\w+)$/;
+ my $tests = $tests_per_extn->{$1};
+ warn "Unknown test type '$1' for test file '$_'\n" if not defined
$tests;
+ $total_tests += $tests if $tests;
+ }
+ return $total_tests;
+}
+
+
+sub slurp_file { # individual lines in list context, entire file in
scalar context
+ my ($file) = @_;
+ open my $fh, "<", $file or croak "Can't open $file: $!";
+ return <$fh> if wantarray;
+ local $/ = undef; # slurp;
+ return <$fh>;
+}
+
+
+sub spit_file {
+ my ($file, $content) = @_;
+ open my $fh, ">", $file or croak "Can't open $file: $!";
+ print $fh $content;
+ close $fh or die "Error closing $file: $!";
+}
+
+
+sub profile_datafiles {
+ my ($filename) = @_;
+ croak "No filename specified" unless $filename;
+ my @profile_datafiles = glob("$filename*");
+
+ # sort to ensure datafile without pid suffix is first
+ @profile_datafiles = sort @profile_datafiles;
+ return @profile_datafiles; # count in scalar context
+}
+
+sub unlink_old_profile_datafiles {
+ my ($filename) = @_;
+ my @profile_datafiles = profile_datafiles($filename);
+ print "Unlinking old @profile_datafiles\n"
+ if @profile_datafiles and $opts{v};
+ 1 while unlink @profile_datafiles;
+}
+
+
+1;
+
+# vim:ts=8:sw=2
Added: trunk/t/test01.t
==============================================================================
--- (empty file)
+++ trunk/t/test01.t Thu Feb 5 05:46:52 2009
@@ -0,0 +1,6 @@
+use strict;
+use Test::More qw(no_plan);
+use lib qw(t/lib);
+use NYTProfTest;
+
+run_test_group;
Added: trunk/t/test02.t
==============================================================================
--- (empty file)
+++ trunk/t/test02.t Thu Feb 5 05:46:52 2009
@@ -0,0 +1,6 @@
+use strict;
+use Test::More qw(no_plan);
+use lib qw(t/lib);
+use NYTProfTest;
+
+run_test_group;
Added: trunk/t/test03.t
==============================================================================
--- (empty file)
+++ trunk/t/test03.t Thu Feb 5 05:46:52 2009
@@ -0,0 +1,6 @@
+use strict;
+use Test::More qw(no_plan);
+use lib qw(t/lib);
+use NYTProfTest;
+
+run_test_group;
Added: trunk/t/test05.t
==============================================================================
--- (empty file)
+++ trunk/t/test05.t Thu Feb 5 05:46:52 2009
@@ -0,0 +1,6 @@
+use strict;
+use Test::More qw(no_plan);
+use lib qw(t/lib);
+use NYTProfTest;
+
+run_test_group;
Added: trunk/t/test06.t
==============================================================================
--- (empty file)
+++ trunk/t/test06.t Thu Feb 5 05:46:52 2009
@@ -0,0 +1,6 @@
+use strict;
+use Test::More qw(no_plan);
+use lib qw(t/lib);
+use NYTProfTest;
+
+run_test_group;
Added: trunk/t/test07.t
==============================================================================
--- (empty file)
+++ trunk/t/test07.t Thu Feb 5 05:46:52 2009
@@ -0,0 +1,6 @@
+use strict;
+use Test::More qw(no_plan);
+use lib qw(t/lib);
+use NYTProfTest;
+
+run_test_group;
Added: trunk/t/test08.t
==============================================================================
--- (empty file)
+++ trunk/t/test08.t Thu Feb 5 05:46:52 2009
@@ -0,0 +1,6 @@
+use strict;
+use Test::More qw(no_plan);
+use lib qw(t/lib);
+use NYTProfTest;
+
+run_test_group;
Added: trunk/t/test09.t
==============================================================================
--- (empty file)
+++ trunk/t/test09.t Thu Feb 5 05:46:52 2009
@@ -0,0 +1,6 @@
+use strict;
+use Test::More qw(no_plan);
+use lib qw(t/lib);
+use NYTProfTest;
+
+run_test_group;
Added: trunk/t/test10.t
==============================================================================
--- (empty file)
+++ trunk/t/test10.t Thu Feb 5 05:46:52 2009
@@ -0,0 +1,6 @@
+use strict;
+use Test::More qw(no_plan);
+use lib qw(t/lib);
+use NYTProfTest;
+
+run_test_group;
Added: trunk/t/test11.t
==============================================================================
--- (empty file)
+++ trunk/t/test11.t Thu Feb 5 05:46:52 2009
@@ -0,0 +1,6 @@
+use strict;
+use Test::More qw(no_plan);
+use lib qw(t/lib);
+use NYTProfTest;
+
+run_test_group;
Added: trunk/t/test12.t
==============================================================================
--- (empty file)
+++ trunk/t/test12.t Thu Feb 5 05:46:52 2009
@@ -0,0 +1,6 @@
+use strict;
+use Test::More qw(no_plan);
+use lib qw(t/lib);
+use NYTProfTest;
+
+run_test_group;
Added: trunk/t/test13.t
==============================================================================
--- (empty file)
+++ trunk/t/test13.t Thu Feb 5 05:46:52 2009
@@ -0,0 +1,6 @@
+use strict;
+use Test::More qw(no_plan);
+use lib qw(t/lib);
+use NYTProfTest;
+
+run_test_group;
Added: trunk/t/test14.t
==============================================================================
--- (empty file)
+++ trunk/t/test14.t Thu Feb 5 05:46:52 2009
@@ -0,0 +1,6 @@
+use strict;
+use Test::More qw(no_plan);
+use lib qw(t/lib);
+use NYTProfTest;
+
+run_test_group;
Added: trunk/t/test16.t
==============================================================================
--- (empty file)
+++ trunk/t/test16.t Thu Feb 5 05:46:52 2009
@@ -0,0 +1,8 @@
+use strict;
+use Test::More qw(no_plan);
+use lib qw(t/lib);
+use NYTProfTest;
+
+plan skip_all => "needs perl >= 5.10" unless $] >= 5.010;
+
+run_test_group;
Added: trunk/t/test20-streval.t
==============================================================================
--- (empty file)
+++ trunk/t/test20-streval.t Thu Feb 5 05:46:52 2009
@@ -0,0 +1,6 @@
+use strict;
+use Test::More qw(no_plan);
+use lib qw(t/lib);
+use NYTProfTest;
+
+run_test_group;
Added: trunk/t/test21-streval3.t
==============================================================================
--- (empty file)
+++ trunk/t/test21-streval3.t Thu Feb 5 05:46:52 2009
@@ -0,0 +1,6 @@
+use strict;
+use Test::More qw(no_plan);
+use lib qw(t/lib);
+use NYTProfTest;
+
+run_test_group;
Added: trunk/t/test22-strevala.t
==============================================================================
--- (empty file)
+++ trunk/t/test22-strevala.t Thu Feb 5 05:46:52 2009
@@ -0,0 +1,6 @@
+use strict;
+use Test::More qw(no_plan);
+use lib qw(t/lib);
+use NYTProfTest;
+
+run_test_group;
Added: trunk/t/test30-fork.0.t
==============================================================================
--- (empty file)
+++ trunk/t/test30-fork.0.t Thu Feb 5 05:46:52 2009
@@ -0,0 +1,8 @@
+use strict;
+use Test::More qw(no_plan);
+use lib qw(t/lib);
+use NYTProfTest;
+
+plan skip_all => "doesn't work with fork() emulation" if $^O eq "MSWin32";
+
+run_test_group;
Added: trunk/t/test40pmc.t
==============================================================================
--- (empty file)
+++ trunk/t/test40pmc.t Thu Feb 5 05:46:52 2009
@@ -0,0 +1,6 @@
+use strict;
+use Test::More qw(no_plan);
+use lib qw(t/lib);
+use NYTProfTest;
+
+run_test_group;
Added: trunk/t/test50-disable.t
==============================================================================
--- (empty file)
+++ trunk/t/test50-disable.t Thu Feb 5 05:46:52 2009
@@ -0,0 +1,6 @@
+use strict;
+use Test::More qw(no_plan);
+use lib qw(t/lib);
+use NYTProfTest;
+
+run_test_group;
Added: trunk/t/test51-enable.t
==============================================================================
--- (empty file)
+++ trunk/t/test51-enable.t Thu Feb 5 05:46:52 2009
@@ -0,0 +1,6 @@
+use strict;
+use Test::More qw(no_plan);
+use lib qw(t/lib);
+use NYTProfTest;
+
+run_test_group;
Added: trunk/t/test60-subname.t
==============================================================================
--- (empty file)
+++ trunk/t/test60-subname.t Thu Feb 5 05:46:52 2009
@@ -0,0 +1,6 @@
+use strict;
+use Test::More qw(no_plan);
+use lib qw(t/lib);
+use NYTProfTest;
+
+run_test_group;
Added: trunk/t/test61-submerge.t
==============================================================================
--- (empty file)
+++ trunk/t/test61-submerge.t Thu Feb 5 05:46:52 2009
@@ -0,0 +1,6 @@
+use strict;
+use Test::More qw(no_plan);
+use lib qw(t/lib);
+use NYTProfTest;
+
+run_test_group;
Added: trunk/t/test70-subexcl.t
==============================================================================
--- (empty file)
+++ trunk/t/test70-subexcl.t Thu Feb 5 05:46:52 2009
@@ -0,0 +1,6 @@
+use strict;
+use Test::More qw(no_plan);
+use lib qw(t/lib);
+use NYTProfTest;
+
+run_test_group;
Added: trunk/t/test80-recurs.t
==============================================================================
--- (empty file)
+++ trunk/t/test80-recurs.t Thu Feb 5 05:46:52 2009
@@ -0,0 +1,6 @@
+use strict;
+use Test::More qw(no_plan);
+use lib qw(t/lib);
+use NYTProfTest;
+
+run_test_group;
--~--~---------~--~----~------------~-------~--~----~
You've received this message because you are subscribed to
the Devel::NYTProf Development User group.
Group hosted at: http://groups.google.com/group/develnytprof-dev
Project hosted at: http://perl-devel-nytprof.googlecode.com
CPAN distribution: http://search.cpan.org/dist/Devel-NYTProf
To post, email: [email protected]
To unsubscribe, email: [email protected]
-~----------~----~----~----~------~----~------~--~---