Mercurial > repos > cpt > cpt_psm_comparison_table
comparison lib/CPT/GenerateTests.pm @ 1:f093e08f21f3 draft default tip
planemo upload commit 94b0cd1fff0826c6db3e7dc0c91c0c5a8be8bb0c
| author | cpt |
|---|---|
| date | Mon, 05 Jun 2023 02:47:24 +0000 |
| parents | |
| children |
comparison
equal
deleted
inserted
replaced
| 0:b8b8b52904a5 | 1:f093e08f21f3 |
|---|---|
| 1 package CPT::GenerateTests; | |
| 2 use Moose; | |
| 3 use strict; | |
| 4 use warnings; | |
| 5 use autodie; | |
| 6 | |
| 7 | |
| 8 sub gen { | |
| 9 my ( $self, @tests ) = @_; | |
| 10 | |
| 11 my $test_count = 0; | |
| 12 | |
| 13 # Header | |
| 14 my @outtext = ( | |
| 15 '#!/usr/bin/env perl', | |
| 16 'use strict;', | |
| 17 'use warnings;', | |
| 18 'use Test::More tests => 0;', | |
| 19 'use IPC::Run3 qw(run3);', | |
| 20 '', | |
| 21 'my ( @base, @cmd, $in, $out, $err );', | |
| 22 '', | |
| 23 sprintf("%s = ('perl', '%s');", '@base', $0), | |
| 24 'my %result_files = (', | |
| 25 ); | |
| 26 my %test_names; | |
| 27 # Loop across tests | |
| 28 foreach my $test_ref(@tests){ | |
| 29 my %test = %{$test_ref}; | |
| 30 my %params = %{$test{params}}; | |
| 31 my $command_line = ""; | |
| 32 foreach(sort(keys(%params))){ | |
| 33 $command_line .= "--$_ $params{$_} "; | |
| 34 } | |
| 35 my %outputs = %{$test{outputs}}; | |
| 36 | |
| 37 $test_names{$test{test_name}}++; | |
| 38 if($test_names{$test{test_name}} > 1){ | |
| 39 printf STDERR "Duplicate test found: %s. This will cause fewer tests to be run than expected\n", $test{test_name}; | |
| 40 } | |
| 41 push(@outtext, sprintf(' "%s" => {', $test{test_name})); | |
| 42 push(@outtext, sprintf(' command_line => "%s",', $command_line)); | |
| 43 push(@outtext, ' outputs => {'); | |
| 44 | |
| 45 foreach my $key(keys %outputs){ | |
| 46 push(@outtext, sprintf(' "%s" => ["%s", "%s"],', $key, @{$outputs{$key}})); | |
| 47 # Add another test | |
| 48 $test_count++; | |
| 49 $test_count++; | |
| 50 } | |
| 51 push(@outtext, ' },'); | |
| 52 push(@outtext, ' },'); | |
| 53 }; | |
| 54 push(@outtext, ');'); | |
| 55 push(@outtext,''); | |
| 56 | |
| 57 push(@outtext, 'foreach ( keys(%result_files) ) {'); | |
| 58 push(@outtext, ' # run with the command line'); | |
| 59 push(@outtext, ' my @cmd1 = ( @base, split( / /, $result_files{$_}{command_line} ) );'); | |
| 60 push(@outtext, ' run3 \@cmd1, \$in, \$out, \$err;'); | |
| 61 push(@outtext, ' if($err){ print STDERR "Exec STDERR: $err"; }'); | |
| 62 push(@outtext, ' if($out){ print STDERR "Exec STDOUT $out"; }'); | |
| 63 push(@outtext, ' # and now compare files'); | |
| 64 push(@outtext, ' foreach my $file_cmp ( keys( %{$result_files{$_}{outputs}} ) ) {'); | |
| 65 push(@outtext, ' my ($gen, $static) = @{$result_files{$_}{outputs}{$file_cmp}};'); | |
| 66 push(@outtext, ' my @diff = ( "diff", $gen, $static );'); | |
| 67 push(@outtext, ' my ($in_g, $out_g, $err_g);'); | |
| 68 push(@outtext, ' run3 \@diff, \$in_g, \$out_g, \$err_g;'); | |
| 69 push(@outtext, ' if($err_g) { print STDERR "err_g $err_g\n"; }'); | |
| 70 push(@outtext, ' if($out_g) { print STDOUT "out_g $out_g\n"; }'); | |
| 71 push(@outtext, ' chomp $out_g;'); | |
| 72 push(@outtext, ' is( -e $gen, 1, "[$_] Output file must exist"); '); | |
| 73 push(@outtext, ' is( length($out_g), 0, "[$_] Checking validity of output \'$file_cmp\'" );'); | |
| 74 push(@outtext, ' unlink $gen;'); | |
| 75 push(@outtext, ' }'); | |
| 76 push(@outtext, '}'); | |
| 77 | |
| 78 # Update test counts | |
| 79 $outtext[3] = "use Test::More tests => $test_count;"; | |
| 80 if($test_count == 0){ | |
| 81 return $self->gen_empty(); | |
| 82 } | |
| 83 | |
| 84 return join("\n", @outtext); | |
| 85 } | |
| 86 | |
| 87 sub gen_empty { | |
| 88 my ( $self ) = @_; | |
| 89 | |
| 90 my $test_count = 0; | |
| 91 | |
| 92 my @outtext = ( | |
| 93 '#!/usr/bin/env perl', | |
| 94 'use strict;', | |
| 95 'use warnings;', | |
| 96 'use Test::More skip_all => "No tests defined for ' . $0 .'"', | |
| 97 ); | |
| 98 return join("\n", @outtext); | |
| 99 } | |
| 100 | |
| 101 | |
| 102 no Moose; | |
| 103 1; | |
| 104 | |
| 105 __END__ | |
| 106 | |
| 107 =pod | |
| 108 | |
| 109 =encoding UTF-8 | |
| 110 | |
| 111 =head1 NAME | |
| 112 | |
| 113 CPT::GenerateTests | |
| 114 | |
| 115 =head1 VERSION | |
| 116 | |
| 117 version 1.99.4 | |
| 118 | |
| 119 =head2 gen | |
| 120 | |
| 121 require CPT::GenerateTests; | |
| 122 my $tgen = CPT::GenerateTests->new(); | |
| 123 $tgen->gen( | |
| 124 { | |
| 125 test_name => "Default", | |
| 126 params => { | |
| 127 'file' => 't/test-files/aa.gbk', | |
| 128 'chromosome' => 'test', | |
| 129 'color' => 'red', | |
| 130 'intensity' => 'vvvvl', | |
| 131 }, | |
| 132 outputs => { | |
| 133 'result_name' => ['circos_k.txt', 'test-data/circos_k.txt'], | |
| 134 } | |
| 135 }, | |
| 136 ); | |
| 137 exit 1; | |
| 138 | |
| 139 =head1 AUTHOR | |
| 140 | |
| 141 Eric Rasche <rasche.eric@yandex.ru> | |
| 142 | |
| 143 =head1 COPYRIGHT AND LICENSE | |
| 144 | |
| 145 This software is Copyright (c) 2014 by Eric Rasche. | |
| 146 | |
| 147 This is free software, licensed under: | |
| 148 | |
| 149 The GNU General Public License, Version 3, June 2007 | |
| 150 | |
| 151 =cut |
