Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Redo a simple tesh.pl
authornavarrop <navarrop@48e7efb5-ca39-0410-a469-dd3cf9ba447f>
Wed, 15 Dec 2010 15:53:14 +0000 (15:53 +0000)
committernavarrop <navarrop@48e7efb5-ca39-0410-a469-dd3cf9ba447f>
Wed, 15 Dec 2010 15:53:14 +0000 (15:53 +0000)
git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/simgrid/simgrid/trunk@9253 48e7efb5-ca39-0410-a469-dd3cf9ba447f

buildtools/Cmake/tesh.pl

index a1ec8af..3b185ba 100755 (executable)
-#! /usr/bin/perl -w\r
-\r
-use strict;\r
-\r
-if($#ARGV!=2){die "Usage: tesh.pl --cd <directory> <teshfile.tesh>\n";}\r
-my($line1);\r
-my($line2);\r
-my($execline);\r
-my($ok)=0;\r
-my($nb_arg)=0;\r
-\r
-do{\r
-       if($ARGV[$nb_arg] =~ /^--cd$/)\r
-       {\r
-               $nb_arg++;\r
-               my($directory)=$ARGV[$nb_arg];\r
-               chdir("$directory");\r
-               print "Change directory to \"$directory\"\n";   \r
-       }\r
-       $nb_arg++;\r
-}while(($nb_arg-1)!=$#ARGV);\r
-\r
-my($file)=$ARGV[$nb_arg-1];\r
-open SH_LIGNE, $file or die "Unable to open $file. $!\n";\r
-\r
-while(defined($line1=<SH_LIGNE>))\r
-{\r
-               if($line1 =~ /^\$/){    #command line\r
-                       $ok = 1;\r
-                       $line1 =~ s/\$\{srcdir\:\=\.\}/./g;\r
-                       $line1 =~ s/\$SG_TEST_EXENV//g;\r
-                       $line1 =~ s/\$SG_EXENV_TEST//g;\r
-                       $line1 =~ s/\$EXEEXT//g;\r
-                       $line1 =~ s/\${EXEEXT:=}//g;\r
-                       $line1 =~ s/^\$\ *//g;\r
-                       $line1 =~ s/^.\/lua/lua/g;\r
-                       $line1 =~ s/^.\/ruby/ruby/g;\r
-                       \r
-                       $line1 =~ s/\(%i:%P@%h\)/\\\(%i:%P@%h\\\)/g;\r
-                       chomp $line1;\r
-                       $execline = $line1;\r
-                       print "$execline\n";\r
-                       system "$execline 1>output_tesh.txt 2>output_tesh_err.txt";\r
-                       close(FILE_ERR);\r
-                       close(FILE);\r
-                       open (FILE, "output_tesh.txt");\r
-                       open (FILE_ERR, "output_tesh_err.txt");}\r
-                       \r
-               if($line1 =~ /^\>/){    #expected result line\r
-                       if($ok == 0){die "No command line$!";}\r
-                       $line1 =~ s/^\> //g;\r
-                       $line1 =~ s/\r//g;\r
-                       chomp $line1;\r
-                       \r
-                       if($line1 =~ /^.*\[.*\].*\[.*\/INFO\].*$/)\r
-                               {if(!defined($line2=<FILE_ERR>))\r
-                                       {       print "- $line1\n";\r
-                                               die;}}\r
-                       elsif($line1 =~ /^.*\[.*\].*\[.*\/WARNING\].*$/)\r
-                               {if(!defined($line2=<FILE_ERR>))\r
-                                       {       print "- $line1\n";\r
-                                               die;}}\r
-                       elsif($line1 =~ /^.*\[.*\].*\[.*\/CRITICAL\].*$/)\r
-                               {if(!defined($line2=<FILE_ERR>))\r
-                                       {       print "- $line1\n";\r
-                                               die;}}\r
-                       elsif($line1 =~ /^.*\[.*\].*\[.*\/DEBUG\].*$/)\r
-                               {if(!defined($line2=<FILE_ERR>))\r
-                                       {       print "- $line1\n";\r
-                                               die;}}\r
-                       elsif($line1 =~ /^.*\[.*\].*\[0\:\@\].*$/)\r
-                               {if(!defined($line2=<FILE_ERR>))\r
-                                       {       print "- $line1\n";\r
-                                               die;}}\r
-                       elsif($line1 =~ /^.*\[.*\].*\(0\:\@\).*$/)\r
-                               {if(!defined($line2=<FILE_ERR>))\r
-                                       {       print "- $line1\n";\r
-                                               die;}}\r
-                       else{if(!defined($line2=<FILE>))\r
-                                       {       print "- $line1\n";\r
-                                               die;}}          \r
-                       $line2 =~ s/\r//g;                                                      \r
-                       chomp $line2;\r
-                       \r
-                       if($line2 eq $line1){}\r
-                       else\r
-                       {       print "- $line1\n";\r
-                               print "+ $line2\n";\r
-                               die;}}  \r
-}\r
-if($ok == 1){\r
-       print "Test of \"$file\" OK\n";\r
-       $ok = 0;}\r
-       \r
-close(SH_LIGNE);\r
-close(FILE_ERR);\r
-close(FILE);
\ No newline at end of file
+#! /usr/bin/perl -w
+
+use strict;
+
+if($#ARGV<0){die "Usage: tesh.pl <options> <teshfile.tesh>\n";}
+my($line1);
+my($line2);
+my($execline);
+my($ok)=0;
+my($ok1)=0;
+my($nb_arg)=0;
+my($result);
+my(@list1)=();
+my(@list2)=();
+
+#options
+do{
+       if($ARGV[$nb_arg] =~ /^--cd$/)
+       {
+               $nb_arg++;
+               if(!$ARGV[$nb_arg] or $ARGV[$nb_arg] =~ /^--/){die "Usage: tesh.pl --cd <directory>\n";}
+               my($directory)=$ARGV[$nb_arg];
+               if( -e $directory) 
+               {
+                       chdir("$directory");
+                       print "-- Tesh options   : Change directory to \"$directory\"\n";
+               }
+               else
+               {
+                       die "Directory not found : \"$directory\"\n";
+               }
+               $nb_arg++;      
+       }
+       elsif($ARGV[$nb_arg] =~ /^--setenv$/)
+       {
+               $nb_arg++;
+               if(!$ARGV[$nb_arg] or $ARGV[$nb_arg] =~ /^--/){die "Usage: tesh.pl --setenv environment_variable\n";}
+               if(!$ARGV[$nb_arg+1] or $ARGV[$nb_arg+1] =~ /^--/){die "Usage: tesh.pl --setenv environment_variable\n";}
+               $ENV{$ARGV[$nb_arg]} = "$ENV{$ARGV[$nb_arg]}:$ARGV[$nb_arg+1]";
+               print "-- Tesh options   : export $ARGV[$nb_arg]=\"$ENV{$ARGV[$nb_arg]}\"\n";
+               $nb_arg++;
+               $nb_arg++;
+       }
+       else
+       {
+               print "-- Tesh options   : Unrecognized option : $ARGV[$nb_arg]\n";
+               $nb_arg++;
+       }
+}while(($nb_arg) < $#ARGV);
+
+#Add current directory to path
+$ENV{PATH} = "$ENV{PATH}:.";
+
+#tesh file
+if(!$ARGV[$nb_arg]){die "tesh.pl <options> <teshfile.tesh>\n";}
+print "-- Tesh load file : $ARGV[$nb_arg]\n";
+my($file)=$ARGV[$nb_arg];
+open SH_LIGNE, $file or die "Unable to open $file. $!\n";
+print "\n";
+while(defined($line1=<SH_LIGNE>))
+{
+               if($line1 =~ /^\$/){    #command line
+                       $ok = 1;
+                       $line1 =~ s/\$\{srcdir\:\=\.\}/./g;
+                       $line1 =~ s/\$SG_TEST_EXENV//g;
+                       $line1 =~ s/\$SG_EXENV_TEST//g;
+                       $line1 =~ s/\$EXEEXT//g;
+                       $line1 =~ s/\${EXEEXT:=}//g;
+                       $line1 =~ s/^\$\ *//g;
+                       $line1 =~ s/^.\/lua/lua/g;
+                       $line1 =~ s/^.\/ruby/ruby/g;
+                       $line1 =~ s/^.\///g;
+                       $line1 =~ s/\(%i:%P@%h\)/\\\(%i:%P@%h\\\)/g;
+                       chomp $line1;
+                       $execline = $line1;
+                       print "-- Tesh exec_line : $execline\n";
+                       $result=`$execline 2>&1`;
+                       @list1 = split(/\n/,$result);
+                       
+               }               
+               elsif($line1 =~ /^\>/){ #expected result line
+                       if($ok == 0){die "No command line$!";}
+                       $ok1 = 1;
+                       $line1 =~ s/^\> //g;
+                       $line1 =~ s/\r//g;
+                       chomp $line1;
+                       push @list2, $line1;
+               }
+               elsif($ok == 1 and $ok1 == 1)
+               {
+                       while(@list1 or @list2)
+                       {
+                               $line1 = shift (@list1);
+                               $line2 = shift (@list2);
+                               if($line1 eq $line2){}
+                               else
+                               {       print "- $line1\n";
+                                       print "+ $line2\n";
+                                       die;}
+                       }
+                       $ok = 0;
+                       $ok1= 0;
+                       @list1=();
+                       @list2=();
+               }
+}
+
+if($ok == 1 and $ok1 == 1)
+{
+       while(@list1 or @list2)
+       {
+               $line1 = shift (@list1);
+               $line2 = shift (@list2);
+               if($line1 eq $line2){}
+               else
+               {       print "- $line1\n";
+                       print "+ $line2\n";
+                       die;}
+       }
+       $ok = 0;
+       $ok1= 0;
+       @list1=();
+       @list2=();
+}
\ No newline at end of file