develooper Front page | perl.cvs.parrot | Postings from January 2009

[svn:parrot] r35578 - in trunk: languages/t lib/Parrot/Harness t

From:
fperrad
Date:
January 15, 2009 01:47
Subject:
[svn:parrot] r35578 - in trunk: languages/t lib/Parrot/Harness t
Message ID:
20090115094655.98D18CB9AE@x12.develooper.com
Author: fperrad
Date: Thu Jan 15 01:46:49 2009
New Revision: 35578

Modified:
   trunk/languages/t/harness
   trunk/lib/Parrot/Harness/Smoke.pm
   trunk/t/harness

Log:
[harness]
- restore --html option

Modified: trunk/languages/t/harness
==============================================================================
--- trunk/languages/t/harness	(original)
+++ trunk/languages/t/harness	Thu Jan 15 01:46:49 2009
@@ -57,8 +57,10 @@
 
 
 # Step 0: handle command line args
+my $do_gen_html;       # smoke testing
 my $languages_list;    # select a subset of languages
-my $result = GetOptions( 'languages=s'   => \$languages_list );
+my $result = GetOptions( 'html'          => \$do_gen_html,
+                         'languages=s'   => \$languages_list );
 
 # Step 1: find harness files for testable languages
 
@@ -111,7 +113,74 @@
 chomp(@tests);
 
 # Step 3: test.
-Test::Harness::runtests(@tests);
+
+if ( ! $do_gen_html ) {
+    Test::Harness::runtests(@tests);
+}
+else {
+    my $html_fn = "languages_smoke.html";
+    my @smoke_config_vars = qw(
+      osname archname cc build_dir cpuarch revision VERSION optimize DEVEL
+    );
+
+    eval {
+        require Test::TAP::HTMLMatrix;
+        require Test::TAP::Model::Visual;
+    };
+    die "You must have Test::TAP::HTMLMatrix installed.\n\n$@"
+        if $@;
+
+    {
+        no warnings qw/redefine once/;
+        *Test::TAP::Model::run_tests = sub {
+            my $self = shift;
+
+            $self->_init;
+            $self->{meat}{start_time} = time();
+
+            my %stats;
+
+            foreach my $file (@_) {
+                my $data;
+                print STDERR "- $file\n";
+                $data = $self->run_test($file);
+                $stats{tests} += $data->{results}{max} || 0;
+                $stats{ok}    += $data->{results}{ok}  || 0;
+            }
+
+            printf STDERR "%s OK from %s tests (%.2f%% ok)\n\n",
+            $stats{ok},
+            $stats{tests},
+            $stats{ok} / $stats{tests} * 100;
+
+            $self->{meat}{end_time} = time();
+        };
+
+        my $start = time();
+        my $model = Test::TAP::Model::Visual->new_with_tests(@tests);
+        my $end   = time();
+
+        my $duration = $end - $start;
+        my $languages = join( q{ }, @unified_testable_languages );
+        my $v = Test::TAP::HTMLMatrix->new(
+            $model,
+            join("\n",
+                 "languages: $languages",
+                 "duration: $duration",
+                 "branch: unknown",
+                 "harness_args: languages",
+                 map { "$_: $PConfig{$_}" } sort @smoke_config_vars),
+        );
+
+        $v->has_inline_css(1); # no separate css file
+
+        open HTML, '>', $html_fn;
+        print HTML $v->html();
+        close HTML;
+
+        print "$html_fn has been generated.\n";
+    }
+}
 
 # Local Variables:
 #   mode: cperl

Modified: trunk/lib/Parrot/Harness/Smoke.pm
==============================================================================
--- trunk/lib/Parrot/Harness/Smoke.pm	(original)
+++ trunk/lib/Parrot/Harness/Smoke.pm	Thu Jan 15 01:46:49 2009
@@ -12,6 +12,12 @@
 
 Following subroutines are supported:
 
+    generate_html_smoke_report (
+        tests       => \@tests,
+        args        => $args,
+        file        => 'smoke.html',
+    );
+
     my %env_data = collect_test_environment_data();
 
     send_archive_to_smolder( %env_data );
@@ -27,6 +33,7 @@
 use Parrot::Config qw/%PConfig/;
 use base qw( Exporter );
 our @EXPORT_OK = qw(
+    generate_html_smoke_report
     collect_test_environment_data
     send_archive_to_smolder
 );
@@ -114,6 +121,73 @@
     return $compiler;
 }
 
+sub generate_html_smoke_report {
+    my $argsref = shift;
+    my $html_fn = $argsref->{file};
+    my @smoke_config_vars = qw(
+        osname archname cc build_dir cpuarch revision VERSION optimize DEVEL
+    );
+
+    eval {
+        require Test::TAP::HTMLMatrix;
+        require Test::TAP::Model::Visual;
+    };
+    die "You must have Test::TAP::HTMLMatrix installed.\n\n$@"
+        if $@;
+
+    {
+      no warnings qw/redefine once/;
+      *Test::TAP::Model::run_tests = sub {
+        my $self = shift;
+
+        $self->_init;
+        $self->{meat}{start_time} = time();
+
+        my %stats;
+
+        foreach my $file (@_) {
+            my $data;
+            print STDERR "- $file\n";
+            $data = $self->run_test($file);
+            $stats{tests} += $data->{results}{max} || 0;
+            $stats{ok}    += $data->{results}{ok}  || 0;
+        }
+
+        printf STDERR "%s OK from %s tests (%.2f%% ok)\n\n",
+            $stats{ok},
+            $stats{tests},
+            $stats{ok} / $stats{tests} * 100;
+
+        $self->{meat}{end_time} = time();
+      };
+
+      my $start = time();
+      my $model = Test::TAP::Model::Visual->new();
+      $model->run_tests( @{ $argsref->{tests} } );
+
+      my $end = time();
+
+      my $duration = $end - $start;
+
+      my $v = Test::TAP::HTMLMatrix->new(
+        $model,
+        join("\n",
+             "duration: $duration",
+             "branch: unknown",
+             "harness_args: " . (($argsref->{args}) ? $argsref->{args} : "N/A"),
+             map { "$_: $PConfig{$_}" } sort @smoke_config_vars),
+      );
+
+      $v->has_inline_css(1); # no separate css file
+
+      open my $HTML, '>', $html_fn;
+      print {$HTML} $v->html();
+      close $HTML;
+
+      print "$html_fn has been generated.\n";
+    }
+}
+
 1;
 
 # Local Variables:

Modified: trunk/t/harness
==============================================================================
--- trunk/t/harness	(original)
+++ trunk/t/harness	Thu Jan 15 01:46:49 2009
@@ -22,6 +22,7 @@
     Usage
 );
 use Parrot::Harness::Smoke qw(
+    generate_html_smoke_report
     send_archive_to_smolder
     collect_test_environment_data
 );
@@ -92,6 +93,15 @@
     send_archive_to_smolder(%env_data) if $longopts->{send_to_smolder};
 
 }
+elsif ($longopts->{html}) {
+    generate_html_smoke_report(
+        {
+            tests => \@tests,
+            args  => $args,
+            file  => 'smoke.html',
+        }
+    );
+}
 else {
     eval { require TAP::Harness };
     if ($@) {
@@ -186,6 +196,10 @@
 
 Invoke parrot with '--gc-debug'.
 
+=item C<--html>
+
+Emit a C<smoke.html> file instead of displaying results.
+
 =item C<--code-tests>
 
 Run only the file metadata and basic coding standards tests.



nntp.perl.org: Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at ask@perl.org | Group listing | About