--- El vie 12-sep-08, Rafael Sanchez <[EMAIL PROTECTED]> escribió: De:: Rafael Sanchez <[EMAIL PROTECTED]> Asunto: Re: [perl #44457] [TODO] make sure files match test files for DYNPMCs and DYNOPs etc A: "Christoph Otto" <[EMAIL PROTECTED]> Cc: [EMAIL PROTECTED] Fecha: viernes, 12 septiembre, 2008, 2:49 pm
--- El vie 12-sep-08, Christoph Otto <[EMAIL PROTECTED]> escribió: De:: Christoph Otto <[EMAIL PROTECTED]> Asunto: Re: [perl #44457] [TODO] make sure files match test files for DYNPMCs and DYNOPs etc A: [EMAIL PROTECTED], [EMAIL PROTECTED] Fecha: viernes, 12 septiembre, 2008, 6:56 am [EMAIL PROTECTED] via RT wrote: > > --- El mié 10-sep-08, Rafael Sanchez <[EMAIL PROTECTED]> escribió: > De:: Rafael Sanchez <[EMAIL PROTECTED]> > Asunto: Re: [perl #44457] [TODO] make sure files match test files for DYNPMCs and DYNOPs etc > A: "Christoph Otto via RT" <[EMAIL PROTECTED]> > Cc: [EMAIL PROTECTED] > Fecha: miércoles, 10 septiembre, 2008, 6:26 pm > On Mon Aug 06 06:08:54 2007, pcoch wrote: >> In the file t/distro/test_file_coverage.t there is the todo item: >> >> # TODO: DYNPMC, DYNOPS, etc >> >> This is in the context of making sure that the files match the test >> files. This needs to be implemented. > > Is this as simple as writing a test to make sure every src/dynpmc/*.pmc > and src/dynoplibs/*.ops has a matching > t/dynpmc/*.t and t/dynoplibs/*.t ? If so, this would be an ideal task > for one of our recent volunteers, since the code would be pure Perl. > >> Also, the test will fail without an exception for src/dynpmc/rotest.pmc. >> I don't know if a test should be written for this PMC or not. > >> I'm working in the script. > >> Igor > > I have a working script(with testing variables only). > > I have to filter de input (there are other types of files), and improbe the reporting part. > > I don't know if I forgeting something. > > Igor > > The script is: > > #!/usr/bin/perl -w > > # Copyright (C) 2007-2008, The Perl Foundation. > # $Id: Match.pl 2008-09-10 igor $ > > =head1 NAME > > Match.pl > > =head1 DESCRIPTION > > Reports if doesn't mach a pmc file with a test file, there is not test file > > =cut > > sub find_files { > my ($base_dir,$dirpmc,$dirtest) = @_; > opendir(DIRPMC, $base_dir.$dirpmc); > opendir(DIRTEST,$base_dir.$dirtest); > > my @filespmc = grep { $_ ne '.' and $_ ne '..' } readdir DIRPMC; > my @filest = grep { $_ ne '.' and $_ ne '..' } readdir DIRTEST; > > my @pmc_values = @{strip_ext([EMAIL PROTECTED])}; > my @t_values = @{strip_ext([EMAIL PROTECTED])}; > > my %hash_t = map { $_ => $_ } @t_values; > > for (0 .. $#pmc_values) { > if ( exists $hash_t{ $pmc_values[$_] } ) { > print "element exist ".$pmc_values[$_]."\n"; > } else { > print "element do not exist ".$pmc_values[$_]."\n"; > } > } > > } > > sub strip_ext { > my @ref_t = @{$_[0]}; > my @arr_stripped = (); > for (my $i=0;$i<$#ref_t+1; $i++) { > if ($ref_t[$i] =~ m/(\w+)[.]\w+/) { #Obtain names of files without extension > $arr_stripped[$i] = $1; > } else { > print "error"; > } > } > return [EMAIL PROTECTED]; > } > > my $base_dir = "/home/raf/parrot/"; > my $dirpmc = "src/dynpmc/"; > my $dirtest = "t/dynpmc/"; > > #find_files($base_dir,$dirpmc,$dirtest); > >Hi Igor, >First, thank you for taking the time to write this script. >Unfortunately, the test needs to be added to t/distro/test_file_coverage.t in >Parrot. This ensures that it is run every time Parrot's test suite is run >via >make test. It should be fairly easy to copy and modify the existing code in >t/distro/test_file_coverage.t to make it match dynpmc and dynops source code >to test files, but I'll be glad to help if you run into any issues. >While you're working on the test, you can run it directly as a Perl script >or >with prove. Note that you have to run perl Configure.pl before this test will >work. >To learn how to contribute, I highly recommend the documentation in >docs/project, especially cage_cleaners_guide.pod and committer_guide.pod. >When modifying existing tests, it's best to work against svn trunk and >update >often. This avoids conflicts and makes it easy to generate patches. >Once you have t/distro/test_file_coverage.t updated and working, create a diff: >svn diff >dynpmc_dynops_test_coverage.patch >and attach that to a reply to this thread. You should also generally run make >codingstd_tests before submitting a patch, but I'll remember if you >don't. ;) >Again, thank you for contributing. I hope at least some of this information >is new to you. >Christoph >Hi Christoph, >Actually all information you gave me is new to me, >here in Mexico programmers(in companiies I've worked), >don't use any testing software, In my last job we couldn't >install subversion in a linux server(don't ask me why, "they had >installed a windows server"), and in some gobernment >offices is not possible to install free software >on windows. >I'm going to install parrot again, making all tests indicated >in parrot wiki, and read all tests pods and install all test >software. >And in some days, I expect to send you my first patch. >Sincerely, >Igor Hi Christoph, I send you the patch attached. Sincerely, Igor __________________________________________________ Correo Yahoo! Espacio para todos tus mensajes, antivirus y antispam ¡gratis! Regístrate ya - http://correo.yahoo.com.mx/ __________________________________________________ Correo Yahoo! Espacio para todos tus mensajes, antivirus y antispam ¡gratis! Regístrate ya - http://correo.yahoo.com.mx/
Index: test_file_coverage.t =================================================================== --- test_file_coverage.t (revision 31278) +++ test_file_coverage.t (working copy) @@ -12,7 +12,8 @@ use File::Spec::Functions qw( catdir catfile ); use Parrot::Config; - +#my $base_dir = "/home/raf/parrot"; +my $base_dir = $PConfig{build_dir}; =head1 NAME t/distro/test_file_coverage.t - make sure source files have matching tests @@ -24,50 +25,195 @@ =head1 DESCRIPTION Makes sure that specific source files have matching test files. +And discard files that are not meant to match =cut ## make sure PMC files match test files -PMC: { - my $pmc_dir = 'src/pmc'; - my $pmc_suffix = '.pmc'; +# remember to change the number of tests :-) +#BEGIN { plan tests => 2; } - my $test_dir = 't/pmc'; - my $test_suffix = '.t'; +=head1 SET PARAMETERS +Parameters for matching are set in %tests hash where: + + +my %tests = ( + 'dynpmc' => #Hash dynpmc is an identifier can be anyone + ['src/dynpmc', #Directory for PMC files + '.pmc', #extension for pmc files + 'PMC1', #Text in output + 't/dynpmc', #Directory for test files + '.t', #extension for test files + 'test' #Text in output + ], + ); + +=cut + +my %match_test = ( + dynpmc => ['src/dynpmc','.pmc','PMC1','t/dynpmc','.t','test1'], + dynoplibs => ['src/dynoplibs','.pmc','PMC2','t/dynoplibs','.t','test2'], +); + +my $num = keys %match_test; +plan tests => $num * 2; + +=head1 DISCARDED FILES + + +Discarded files(matching is not needed) are set in %dis_hash hash where + +my %dis_hash = ( + 'dynpmc' => { 'pmc' => ['digest'],}, #for digest file, pmc extension, dynpmc test + 'dynpmc' => { 'test' => ['rotest'],}, #for rotest file, test extension, dynpmc test + 'dynoplibs => { 'pmc' => ['dan','myops']}, #for dan and myops files, pmc extension, dynoplibs test +); + +=cut + + + +my %dis_hash = ( +# 'dynpmc' => { 'pmc' => ['digest'],}, +# 'dynoplibs' => { 'pmc' => ['dan'],}, +); + + + +# Discard function +# +# Discard files not used in testing, use %dis_hash +# If tesre are not discarded files is better not to use this function +# + +sub discard { +my @temp_pmc = @{$_[0]}; +my @temp_test = @{$_[1]}; +my $dis_key = $_[2]; + +my @result_array_pmc = (); +my @result_array_test = (); + + if (exists $dis_hash{$dis_key}{'pmc'}) { + my %vals_pmc = (); + %vals_pmc = map { $_ => 1 } @{$dis_hash{$dis_key}{'pmc'}}; + my $i = $#temp_pmc; + my $pmc_cont = 0; + + for (0 .. $i) { + if (!exists $vals_pmc{$temp_pmc[$_]}) { + $result_array_pmc[$pmc_cont] = $temp_pmc[$_]; + $pmc_cont += 1; + } + } + } else { + @result_array_pmc = @temp_pmc; + } + + if (exists $dis_hash{$dis_key}{'test'}) { + my %vals_test = (); + %vals_test = map { $_ => 1 } @{$dis_hash{$dis_key}{'test'}}; + my $j = $#temp_test; + my $test_cont = 0; + + for (0 .. $j) { + if (!exists $vals_test{$temp_test[$_]}) { + $result_array_test[$test_cont] = $temp_test[$_]; + $test_cont += 1; + } + } + } else { + @result_array_test = @temp_test; + } + return ([EMAIL PROTECTED],[EMAIL PROTECTED]); +} + + +#function get_files +# +# Obtains the result of te match +#if is used the third parameter return the text of the comparison +#if is not used third parameters resturns a 1 or a 0 depending +#on te array result +#Array empty = all files match = 1 +#Array with elements = some file(s) don't match = 0 +sub get_files { + my $test_key = $_[0]; + my @tests_array = @{ $match_test{$test_key} }; + #my $test_key = $_[1]; + my $test_type = $_[1]; + my $out_type = $_[2]; + #my $out_type = $_[3]; + my $pmc_dir = $tests_array[0]; + my $pmc_suffix = $tests_array[1]; + my $pmc_string = $tests_array[2]; + my $test_dir = $tests_array[3]; + my $test_suffix = $tests_array[4]; + my $test_string = $tests_array[5]; + + my $text = ""; my ( @pmc_files, @test_files ); # find pmc files find { no_chdir => 1, wanted => sub { files_of_type( [EMAIL PROTECTED], $pmc_suffix ) }, - } => catdir( $PConfig{build_dir}, $pmc_dir ); + } => catdir( $base_dir, $pmc_dir ); # find test files find { no_chdir => 1, wanted => sub { files_of_type( [EMAIL PROTECTED], $test_suffix ) }, - } => catdir( $PConfig{build_dir}, $test_dir ); + } => catdir( $base_dir, $test_dir ); my ( $pmc_miss, $test_miss ) = list_diff( [EMAIL PROTECTED], [EMAIL PROTECTED] ); + +# Used with discard function + my ($temp_pmc,$temp_test) = discard($pmc_miss,$test_miss,$test_key); + my @result_array_pmc = @{$temp_pmc}; + my @result_array_test = @{$temp_test}; +# Used without discard function +# my @result_array_pmc = @{$pmc_miss}; +# my @result_array_test = @{$test_miss}; + local $" = "\n\t"; - -TODO: { - local $TODO = "not yet implemented"; - ok( [EMAIL PROTECTED], "there are test files for all PMC files in $pmc_dir" ) - or diag "files in $test_dir but not in PMC dir:[EMAIL PROTECTED]"; + if ($test_type eq 'pmc') { + if (@result_array_pmc) { + if (defined $out_type) { + $text = "files in $test_dir but not in $pmc_string dir:[EMAIL PROTECTED]"; + } else { + $text = 0; + } + } else { + if (defined $out_type) { + $text = "there are $pmc_string files for all $test_string files in $test_dir"; + } else { + $text = 1; + } + } + } else { + if (@result_array_test) { + if (defined $out_type) { + $text = "files in $pmc_dir but not in $test_string dir:[EMAIL PROTECTED]"; + } else { + $text = 0; + } + } else { + if (defined $out_type) { + $text = "there are $pmc_string files for all $test_string files in $test_dir"; + } else { + $text = 1; + } + } } - ok( [EMAIL PROTECTED], "there are PMC files for all test files in $test_dir" ) - or diag "files in $pmc_dir but not in test dir:[EMAIL PROTECTED]"; + return $text; +} +#} # PMC -} # PMC - # RT#44457: DYNPMC, DYNOPS, etc. -# remember to change the number of tests :-) -BEGIN { plan tests => 2; } - sub files_of_type { my ( $listref, $ext ) = @_; @@ -89,6 +235,36 @@ ); } +#Main loop +=pod + print get_files('dynpmc','pmc','print')."\n"; + print get_files('dynpmc','test','print')."\n"; + print get_files('dynoplibs','pmc','print')."\n"; + print get_files('dynoplibs','test','print')."\n"; + + + print get_files('dynpmc','pmc')."\n"; + print get_files('dynpmc','test')."\n"; + print get_files('dynoplibs','pmc')."\n"; + print get_files('dynoplibs','test')."\n"; +=cut + + #ok( get_files('dynpmc','pmc') , get_files('dynpmc','pmc','print') ); + #ok( get_files('dynpmc','test') , get_files('dynpmc','test','print') ); + #ok( get_files('dynoplibs','pmc') , get_files('dynoplibs','pmc','print') ); + #ok( get_files('dynoplibs','test') , get_files('dynoplibs','test','print') ); + +#TODO: { +# local $TODO = 'Not yet implemented'; + + foreach (keys %match_test) { + ok( get_files($_,'pmc') , get_files($_,'pmc','print') ); + ok( get_files($_,'test') , get_files($_,'test','print') ); + } + +#} + + # Local Variables: # mode: cperl # cperl-indent-level: 4