diff options
author | Jarkko Hietaniemi <jhi@iki.fi> | 2001-06-21 12:25:58 +0000 |
---|---|---|
committer | Jarkko Hietaniemi <jhi@iki.fi> | 2001-06-21 12:25:58 +0000 |
commit | 225a5dca523a9706687cc7849f9ef644967ae510 (patch) | |
tree | e8823f53fbf3b824544750b25db712cfb52a9d6d /NetWare/t | |
parent | 84037bb083599c663af466e6d56eeb23fdebad94 (diff) | |
download | perl-225a5dca523a9706687cc7849f9ef644967ae510.tar.gz |
NetWare tweaks from Guruprasad.
p4raw-id: //depot/perl@10775
Diffstat (limited to 'NetWare/t')
-rw-r--r-- | NetWare/t/NWModify.pl | 22 | ||||
-rw-r--r-- | NetWare/t/NWScripts.pl | 199 | ||||
-rw-r--r-- | NetWare/t/Readme.txt | 42 |
3 files changed, 177 insertions, 86 deletions
diff --git a/NetWare/t/NWModify.pl b/NetWare/t/NWModify.pl index 12521d7516..2b1d07beb8 100644 --- a/NetWare/t/NWModify.pl +++ b/NetWare/t/NWModify.pl @@ -5,28 +5,28 @@ print "\nModifying the '.t' files...\n\n"; use File::Basename; use File::Copy; -## Change the below line to the directory you want to process +## Change the below line to the folder you want to process $DirName = "/perl/scripts/t"; $FilesTotal = 0; $FilesRead = 0; $FilesModified = 0; -opendir(DIR, $DirName) or die "Unable to open the directory, $DirName for reading.\n"; +opendir(DIR, $DirName); @Dirs = readdir(DIR); foreach $DirItem(@Dirs) { $DirItem = $DirName."/".$DirItem; - push @DirNames, $DirItem; # All items under $DirName directory is copied into an array. + push @DirNames, $DirItem; # All items under $DirName folder is copied into an array. } foreach $FileName(@DirNames) { if(-d $FileName) - { # If an item is a directory, then open it further. + { # If an item is a folder, then open it further. - opendir(SUBDIR, $FileName) or die "Unable to open the directory, $FileName for reading.\n"; + opendir(SUBDIR, $FileName); @SubDirs = readdir(SUBDIR); close(SUBDIR); @@ -39,7 +39,7 @@ foreach $FileName(@DirNames) else { $SubFileName = $FileName."/".$SubFileName; - push @DirNames, $SubFileName; # If sub-directory, push it into the array. + push @DirNames, $SubFileName; # If sub-folder, push it into the array. } } } @@ -67,21 +67,19 @@ sub Process_File local($FileToProcess) = @_; # File name. local($Modified) = 0; - if(!(-w $FileToProcess)) { # If the file is a read-only file, then change its mode to read-write. chmod(0777, $FileToProcess); } - - $base = basename($FileToProcess); # Get the base name - $dir = dirname($FileToProcess); # Get the directory name - ($base, $dir, $ext) = fileparse($FileToProcess, '\..*'); # Get the extension of the file passed. - + ## For example: ## If the value of $FileToProcess is '/perl/scripts/t/pragma/warnings.t', then ## $dir = '/perl/scripts/t/pragma/' ## $base = 'warnings' ## $ext = '.t' + $dir = dirname($FileToProcess); # Get the folder name + $base = basename($FileToProcess); # Get the base name + ($base, $dir, $ext) = fileparse($FileToProcess, '\..*'); # Get the extension of the file passed. # Do the processing only if the file has '.t' extension. diff --git a/NetWare/t/NWScripts.pl b/NetWare/t/NWScripts.pl index 36ca8ecb25..dc43ddef22 100644 --- a/NetWare/t/NWScripts.pl +++ b/NetWare/t/NWScripts.pl @@ -9,99 +9,188 @@ use File::Copy; chdir '/perl/scripts/'; $DirName = "t"; - # These scripts have problems (either abend or hang) as of now (11 May 2001). # So, they are commented out in the corresponding auto scripts, io.pl and lib.pl -@ScriptsNotUsed = ("t/io/argv.t", "t/io/openpid.t", "t/lib/filehand.t"); +@ScriptsNotUsed = ("t/io/argv.t", "t/io/openpid.t", "t/lib/filehandle.t"); +opendir(DIR, $DirName); +@Dirs = readdir(DIR); +close(DIR); +foreach $DirItem(@Dirs) +{ + $DirItem1 = $DirName."/".$DirItem; + push @DirNames, $DirItem1; # All items under $DirName folder is copied into an array. -print "Generating t/auto.pl ...\n\n\n"; + if(-d $DirItem1) + { # If an item is a folder, then open it further. -open(FHWA, "> t/auto.pl") or die "Unable to open the file, t/auto.pl for writing.\n"; -seek(FHWA, 0 ,0); -flock(FHWA, LOCK_EX); # Lock the file for safety purposes. + # Intemediary automated script like base.pl, lib.pl, cmd.pl etc. + $IntAutoScript = "t/".$DirItem.".pl"; -$version = sprintf("%vd",$^V); -print FHWA "\n\nprint \"Automated Unit Testing of Perl$version\\n\\n\\n\"\;\n\n\n"; + # Open once in write mode since later files are opened in append mode, + # and if there already exists a file with the same name, all further opens + # will append to that file!! + open(FHW, "> $IntAutoScript") or die "Unable to open the file, $IntAutoScript for writing.\n"; + seek(FHW, 0, 0); # seek to the beginning of the file. + close FHW; # close the file. + } +} -opendir(DIR, $DirName) or die "Unable to open the directory, $DirName for reading.\n"; -@Dirs = readdir(DIR); +print "Generating t/nwauto.pl ...\n\n\n"; + +open(FHWA, "> t/nwauto.pl") or die "Unable to open the file, t/nwauto.pl for writing.\n"; +seek(FHWA, 0, 0); # seek to the beginning of the file. +flock(FHWA, LOCK_EX); # Lock the file for safety purposes. + +$version = sprintf("%vd",$^V); +print FHWA "\n\nprint \"Automated Unit Testing of Perl$version for NetWare\\n\\n\\n\"\;\n\n\n"; -foreach $DirItem(@Dirs) -{ - $DirItem = $DirName."/".$DirItem; - push @DirNames, $DirItem; # All items under $DirName directory is copied into an array. -} foreach $FileName(@DirNames) { + $index = 0; if(-d $FileName) - { # If an item is a directory, then open it further. + { # If an item is a folder, then open it further. - opendir(SUBDIR, $FileName) or die "Unable to open the directory, $FileName for reading.\n"; - @SubDirs = readdir(SUBDIR); - close(SUBDIR); - - - $base = basename($FileName); # Get the base name - $dir = dirname($FileName); # Get the directory name - ($base, $dir, $ext) = fileparse($FileName, '\..*'); # Get the extension of the file passed. - - # Intemediary automated script like base.pl, lib.pl, cmd.pl etc. - $IntAutoScript = "t/".$base.".pl"; + $dir = dirname($FileName); # Get the folder name + foreach $DirItem1(@Dirs) + { + $DirItem2 = $DirItem1; + if($FileName =~ m/$DirItem2/) + { + $DirItem = $DirItem1; - # Write into auto.pl - print FHWA "print \`perl $IntAutoScript\`\;\n"; - print FHWA "print \"\\n\\n\\n\"\;\n\n"; + # Intemediary automated script like base.pl, lib.pl, cmd.pl etc. + $IntAutoScript = "t/".$DirItem.".pl"; + } + } - - print "Generating $IntAutoScript...\n"; # Write into the intermediary auto script. - open(FHW, "> $IntAutoScript") or die "Unable to open the file, $IntAutoScript for writing.\n"; - seek(FHW, 0 ,0); + open(FHW, ">> $IntAutoScript") or die "Unable to open the file, $IntAutoScript for appending.\n"; + seek(FHW, 0, 2); # seek to the end of the file. flock(FHW, LOCK_EX); # Lock the file for safety purposes. - print FHW "\n\nprint \"Testing $base directory:\\n\\n\\n\"\;\n\n\n"; - + $pos = tell(FHW); + if($pos <= 0) + { + print "Generating $IntAutoScript...\n"; + print FHW "\n\nprint \"Testing $DirItem folder:\\n\\n\\n\"\;\n\n\n"; + } + opendir(SUBDIR, $FileName); + @SubDirs = readdir(SUBDIR); + close(SUBDIR); foreach $SubFileName(@SubDirs) { + $SubFileName = $FileName."/".$SubFileName; if(-d $SubFileName) { - $SubFileName = $FileName."/".$SubFileName; - push @DirNames, $SubFileName; # If sub-directory, push it into the array. + push @DirNames, $SubFileName; # If sub-folder, push it into the array. } else { - $SubFileName = $FileName."/".$SubFileName; &Process_File($SubFileName); # If file, process it. } - } - # Write into the intermediary auto script. - print FHW "\nprint \"Testing of $base directory done!\\n\\n\"\;\n\n"; + $index++; + } flock(FHW, LOCK_UN); # unlock the file. close FHW; # close the file. - print "$IntAutoScript Done!\n\n"; + + if($index <= 0) + { + # The folder is empty and delete the corresponding '.pl' file. + unlink($IntAutoScript); + print "Deleted $IntAutoScript since it corresponded to an empty folder.\n"; + } + else + { + if($pos <= 0) + { # This logic to make sure that it is written only once. + # Only if something is written into the intermediary auto script, + # only then make an entry of the intermediary auto script in nwauto.pl + print FHWA "print \`perl $IntAutoScript\`\;\n"; + print FHWA "print \"\\n\\n\\n\"\;\n\n"; + } + } + } + else + { + if(-f $FileName) + { + $dir = dirname($FileName); # Get the folder name + $base = basename($FileName); # Get the base name + ($base, $dir, $ext) = fileparse($FileName, '\..*'); # Get the extension of the file passed. + + # Do the processing only if the file has '.t' extension. + if($ext eq '.t') + { + print FHWA "print \`perl $FileName\`\;\n"; + print FHWA "print \"\\n\\n\\n\"\;\n\n"; + } + } } } + +## Below adds the ending comments into all the intermediary auto scripts: + +opendir(DIR, $DirName); +@Dirs = readdir(DIR); close(DIR); +foreach $DirItem(@Dirs) +{ + $index = 0; + + $FileName = $DirName."/".$DirItem; + if(-d $FileName) + { # If an item is a folder, then open it further. + opendir(SUBDIR, $FileName); + @SubDirs = readdir(SUBDIR); + close(SUBDIR); -# Write into auto.pl -print FHWA "\nprint \"Automated Unit Testing of Perl$version done!\\n\\n\"\;\n\n"; + # To not to write into the file if the corresponding folder was empty. + foreach $SubDir(@SubDirs) + { + $index++; + } + + if($index > 0) + { + # The folder not empty. + + # Intemediary automated script like base.pl, lib.pl, cmd.pl etc. + $IntAutoScript = "t/".$DirItem.".pl"; + + # Write into the intermediary auto script. + open(FHW, ">> $IntAutoScript") or die "Unable to open the file, $IntAutoScript for appending.\n"; + seek(FHW, 0, 2); # seek to the end of the file. + flock(FHW, LOCK_EX); # Lock the file for safety purposes. + + # Write into the intermediary auto script. + print FHW "\nprint \"Testing of $DirItem folder done!\\n\\n\"\;\n\n"; + + flock(FHW, LOCK_UN); # unlock the file. + close FHW; # close the file. + } + } +} + + +# Write into nwauto.pl +print FHWA "\nprint \"Automated Unit Testing of Perl$version for NetWare done!\\n\\n\"\;\n\n"; flock(FHWA, LOCK_UN); # unlock the file. close FHWA; # close the file. -print "\nt/auto.pl Done!\n\n"; +print "\n\nGeneration of t/nwauto.pl Done!\n\n"; +print "\nGeneration of automated scripts for NetWare DONE!\n"; -print "\nGeneration of automated scripts for NetWare DONE!\n"; @@ -112,23 +201,25 @@ sub Process_File local($Script) = 0; local($HeadCut) = 0; - - $base1 = basename($FileToProcess); # Get the base name - $dir1 = dirname($FileToProcess); # Get the directory name - ($base1, $dir1, $ext1) = fileparse($FileToProcess, '\..*'); # Get the extension of the file passed. - + ## For example: ## If the value of $FileToProcess is '/perl/scripts/t/pragma/warnings.t', then ## $dir1 = '/perl/scripts/t/pragma/' ## $base1 = 'warnings' ## $ext1 = '.t' - + $dir1 = dirname($FileToProcess); # Get the folder name + $base1 = basename($FileToProcess); # Get the base name + ($base1, $dir1, $ext1) = fileparse($FileToProcess, '\..*'); # Get the extension of the file passed. # Do the processing only if the file has '.t' extension. if($ext1 eq '.t') { foreach $Script(@ScriptsNotUsed) { - if($Script eq $FileToProcess) + # The variables are converted to lower case before they are compared. + # This is done to remove the case-sensitive comparison done by 'eq'. + $Script1 = lc($Script); + $FileToProcess1 = lc($FileToProcess); + if($Script1 eq $FileToProcess1) { $HeadCut = 1; } diff --git a/NetWare/t/Readme.txt b/NetWare/t/Readme.txt index 148fa2dbda..6f82a3f9c1 100644 --- a/NetWare/t/Readme.txt +++ b/NetWare/t/Readme.txt @@ -1,40 +1,45 @@ - Automated Testing of Perl5.6.1 Interpreter for NetWare. + Automated Testing of Perl5 Interpreter for NetWare. -A set of Standard Unit Test Scripts to test all the functionalities of Perl 5.6.1 Interpreter are available along with the CPAN download. They are all located under 't' folder. These include sub-folders under 't' folder: 'base', 'cmd', 'comp', 'io', lib', 'op', 'pod', 'pragma', 'run'. Each of these sub-folders contain few test scripts ('.t' files) under them. +A set of Standard Unit Test Scripts to test all the functionalities of Perl5 Interpreter are available along with the CPAN download. They are all located under 't' folder. These include sub-folders under 't' such as: 'base', 'cmd', 'comp', 'io', lib', 'op', 'pod', 'pragma' and 'run'. Each of these sub-folders contain few test scripts ('.t' files) under them. Executing these test scripts on NetWare can be automated as per the following: -1. Automated scripts, 'base.pl', 'cmd.pl', 'comp.pl', 'io.pl', 'lib.pl', 'op.pl', 'pod.pl', 'pragma.pl', 'run.pl' can be generated that are used to execute all the test scripts ('.t' files) under the corresponding folder. -For example, 'base.pl' tests all the test scripts under 'sys:\perl\scripts\t\base' folder, 'comp.pl' test all scripts under 'sys:\perl\scripts\t\comp' folder and so on. +1. Generate automated scripts like 'base.pl', 'cmd.pl', 'comp.pl', 'io.pl', 'lib.pl', 'op.pl', 'pod.pl', 'pragma.pl', 'run.pl' that execute all the test scripts ('.t' files) under the corresponding folder. +For example, 'base.pl' to test all the scripts under 'sys:\perl\scripts\t\base' folder, + 'comp.pl' to test all the scripts under 'sys:\perl\scripts\t\comp' folder and so on. -2. An automated script, 'auto.pl' can also be generated that executes all the above mentioned '.pl' automated scripts, thus executing all the '.t' scripts. +2. Generate an automated script, 'nwauto.pl' that executes all the above mentioned '.pl' automated scripts, thus in turn executing all the '.t' scripts. -There is a script 'NWScripts.pl' available under the 'NetWare\t' folder of the CPAN download. This is written to generate these automated scripts when executed on a NetWare server. It generates the automated scripts, 'base.pl', 'cmd.pl', 'comp.pl', 'io.pl', 'lib.pl', 'op.pl', 'pod.pl', 'pragma.pl', 'run.pl' and also 'auto.pl' by including all the corresponding '.t' scripts in them. For example, all the scripts that are under 't\base' folder will be entered in 'base.pl' and so on. 'auto.pl will include all these '.pl' scripts like 'base.pl', 'comp.pl' etc. +The script, 'NWScripts.pl' available under the 'NetWare\t' folder of the CPAN download, is written to generate these automated scripts when executed on a NetWare server. It generates 'base.pl', 'cmd.pl', 'comp.pl', 'io.pl', 'lib.pl', 'op.pl', 'pod.pl', 'pragma.pl', 'run.pl' and also 'nwauto.pl' by including all the corresponding '.t' scripts in them in backtick operators. +For example, all the scripts that are under 't\base' folder will be entered in 'base.pl' and so on. 'nwauto.pl' includes all these '.pl' scripts like 'base.pl', 'comp.pl' etc. The following steps elicits the procedure for executing the automated scripts: -1. Copy the 't' folder from the CPAN download to 'sys:\perl\scripts' folder on the NetWare server. +1. Make sure that your NetWare server is mapped to "i:". -2. Copy all the files from 'NetWare\t' folder of the CPAN download into 'sys:\perl\scripts\t' folder. +2. Execute "nmake nwinstall" (after complete build) in the 'NetWare' folder of the CPAN download. This installs all the library files, perl modules and all the 't' scripts in appropriate folders onto your server. -3. Execute the command "perl t\NWModify.pl" on the console command prompt. This script replaces +3. Copy all the files from 'NetWare\t' folder of the CPAN download into 'sys:\perl\scripts\t' folder. + +4. Execute the command "perl t\NWModify.pl" on the console command prompt of your server. This script replaces "@INC = " with "unshift @INC, " and "push @INC, " with "unshift @INC, " from all the scripts under 'sys:\perl\scripts\t' folder. This is done to include the correct path for libraries into the scripts when executed on NetWare. If this is not done, some of the scripts will not get executed since they cannot locate the corresponding libraries. -4. Execute the command "perl t\NWScripts.pl" on the console command prompt to generate the automated scripts mentioned above under the 'sys:\perl\scripts\t' folder. - (See above for details). +5. Execute the command "perl t\NWScripts.pl" on the console command prompt to generate the automated scripts mentioned above under the 'sys:\perl\scripts\t' folder. + +6. Execute the command "perl t\nwauto.pl" on the server console command prompt. This runs all the standard test scripts. If you desire to redirect or save the results into a file, say 'nwauto.txt', then the console command to execute is: "perl t\nwauto.pl > nwauto.txt". -5. Execute 'auto.pl' script using the server console command, "perl t\auto.pl" to run all the standard test scripts. If you want the results to be redirected into a file, say 'auto.txt', then the console command is: "perl t\auto.pl > auto.txt" +7. If you wish to execute only a certain set of scripts, then run the corresponding '.pl' file. +For example, if you wish to execute only the 'lib' scripts, then execute 'lib.pl' through the server console command, "perl t\lib.pl'. To redirect the results into a file, the console command is, "perl t\lib.pl > lib.txt". -6. If you want to execute certain set of scripts, then run the corresponding '.pl' file. For example, if you want to execute only the 'lib' scripts, then execute 'run.pl' through the server console command, "perl t\run.pl'. To redirect the results into a file, the console command could be, "perl t\run.pl > run.txt". Known Issues: @@ -43,16 +48,13 @@ The following scripts are commented out in the corresponding autoscript: 1. 'openpid.t' in 'sys:\perl\scripts\t\io.pl' script Reason: - This either hangs or abends the server when executing through auto scripts. - When run individually, the script execution goes through fine. + This either hangs or abends the server when executing through auto scripts. When run individually, the script execution goes through fine. 2. 'argv.t' in 'sys:\perl\scripts\t\io.pl' script Reason: - This either hangs or abends the server when executing through auto scripts. - When run individually, the script execution goes through fine. + This either hangs or abends the server when executing through auto scripts. When run individually, the script execution goes through fine. -3. 'filehand.t' in 'sys:\perl\scripts\t\lib.pl' script +3. 'filehandle.t' in 'sys:\perl\scripts\t\lib.pl' script Reason: - This hangs in the last test case where it uses FileHandle::Pipe whether run individually - or through an auto script. + This hangs in the last test case where it uses FileHandle::Pipe whether run individually or through an auto script. |