123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134 |
- package
- Mock; # do not index
- use strict;
- BEGIN {
- unshift @INC, 't';
- }
- =head1 NAME
- Mock lengthy compiler tests. Replay from TAP.
- =head1 DESCRIPTION
- Replay results from stored log files to test the result of the
- current TODO status.
- Currently perl compiler tests are stored in two formats:
- 1. log.test-$arch-$perlversion
- 2. log.modules-$perlversion
- When running the Mock tests the actual tests are not executed,
- instead the results from log file are used instead. A typical
- perl-compiler testrun lasts several hours to days, with Mock
- several seconds.
- =head1 SYNOPSIS
- perlall="5.6.2 5.8.9 5.10.1 5.12.1 5.13.4"
- # actual tests
- for p in perl$perlall; do
- perl$p Makefile.PL && make && \
- make test TEST_VERBOSE=1 2>&1 > log.test-`uname -s`-$p
- done
- # fixup TODO's
- # check tests
- for p in perl$perlall; do
- perl$p t/mock t/*.t
- done
- =cut
- require "test.pl";
- use Test::More;
- use TAP::Parser;
- use Test::Harness::Straps;
- use Config;
- use Cwd;
- use Exporter;
- our $details;
- our @ISA = qw(Exporter);
- our @EXPORT = qw(find_modules_report find_test_report
- mock_harness run_cc_test ctest ctestok ccompileok
- );
- # log.test or log.modules
- # check only the latest version, and match revision and perlversion
- sub find_test_report ($;$) {
- my $logdir = shift;
- my $arch = shift || `uname -s`;
- #log.test-$arch-$versuffix
- my $tmpl = "$logdir/log.test-*-5.*";
- my @f = latest_files($tmpl);
- }
- sub find_modules_report {
- my $logdir = shift;
- #log.modules-$ver$suffix
- latest_files("$logdir/log.modules-5.*");
- }
- # check date, max diff one day from youngest
- sub latest_files {
- my $tmpl = shift;
- my @f = glob $tmpl;
- my @fdates = sort{$a->[1]<=>$b->[1]} map { [$_ => -M $_] } @f;
- my $latest = $fdates[0]->[1];
- my @ret;
- for (@fdates) {
- if ($_->[1]-$latest < 1.2) {
- push @ret, $_->[0];
- } else {
- last;
- }
- }
- @ret;
- }
- sub parse_report {
- my ($log, $t) = @_;
- my $straps = Test::Harness::Straps->new;
- open my $fh, "<", $log;
- my $result = $straps->analyze_fh($t, $fh);
- close $fh;
- # XXX replay only the part for the given test
- $result;
- }
- sub result ($) {
- my $parse = shift;
- }
- # 1, "C", "require LWP::UserAgent;\nprint q(ok);", "ok",0,1,"#TODO issue 27"
- sub run_cc_test {
- my ($cnt, $backend, $script, $expect, $keep_c, $keep_c_fail, $todo) = @_;
- print @_;
- }
- # 1, "ok", "CC", "ccode37i", $script, $todo
- sub ctest {
- my ($num, $expected, $backend, $base, $script, $todo) = @_;
- print @_;
- }
- # 1, "CC", "ccode37i", $script, $todo
- #sub ctestok {
- #}
- # 1, "CC", "ccode36i", $script, $todo
- sub ccompileok {
- my ($num, $backend, $base, $script, $todo) = @_;
- print @_;
- }
- sub mock_harness {
- my ($log, $t) = @_;
- my $rpt = parse_report($log, $t);
- $details = $rpt->details;
- # execute the real tests with mock_harness (overridden test)
- my $X = $^X =~ m/\s/ ? qq{"$^X"} : $^X;
- my $dbg = $^P ? "-d" : "";
- system("$X $dbg -It -MMock -MExtUtils::Command::MM -e\"test_harness(1, 'blib/lib', 'blib/arch')\" $t");
- }
- 1;
|