Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Merge branch 'master' of scm.gforge.inria.fr:/gitroot/simgrid/simgrid
[simgrid.git] / tools / sg_unit_extractor.pl
index 031329a..e626e3d 100755 (executable)
@@ -1,6 +1,9 @@
-#! /usr/bin/perl
+#! /usr/bin/env perl
 
-use strict;
+# Copyright (c) 2005-2012, 2014. The SimGrid Team. All rights reserved.
+
+# This program is free software; you can redistribute it and/or modify it
+# under the terms of the license (GNU LGPL) which comes with this package.
 
 use strict;
 use Getopt::Long qw(GetOptions);
@@ -10,11 +13,12 @@ my $progname="sg_unit_extractor";
 
 sub usage($) {
     my $ret;
-    print "USAGE: $progname [--root=part/to/cut] [--path=where/to/search NOT WORKING] [--outdir=where/to/generate/files] infile [infile+]\n";
+    print "USAGE: $progname [--root=part/to/cut] [--outdir=where/to/generate/files] infile [infile+]\n\n";
+    print "This program is in charge of extracting the unit tests out of the SimGrid source code.\n";
+    print "See http://simgrid.gforge.inria.fr/doc/latest/inside_tests.html for more details.\n";
     exit $ret;
 }
 
-my $path=undef;
 my $outdir=undef;
 my $root;
 my $help;
@@ -23,7 +27,6 @@ Getopt::Long::config('permute','no_getopt_compat', 'no_auto_abbrev');
 GetOptions(
         'help|h'                => sub {usage(0)},
         'root=s' =>\$root,
-        'path=s' =>\$path,
         'outdir=s' =>\$outdir) or usage(1);
 
 usage(1) if (scalar @ARGV == 0);
@@ -38,6 +41,7 @@ sub process_one($) {
     
     $outfile =  $infile;
     $outfile =~ s/\.c$/_unit.c/;
+    $outfile =~ s/\.cpp$/_unit.cpp/;
     $outfile =~ s|.*/([^/]*)$|$1| if $outfile =~ m|/|;
     $outfile = "$outdir$outfile";
     
@@ -130,8 +134,10 @@ sub process_one($) {
 int main(int argc, char *argv[]) {
   xbt_test_suite_t suite; 
   char selection[1024];
-  int i;\n
-  int res;\n
+  int verbosity = 0;
+  int i;
+  int res;
+
   /* SGU: BEGIN SUITES DECLARATION */
   /* SGU: END SUITES DECLARATION */
       
@@ -143,11 +149,13 @@ int main(int argc, char *argv[]) {
       if (!strncmp(argv[i],\"--tests=\",strlen(\"--tests=\"))) {
         char *p=strchr(argv[i],'=')+1;
         if (selection[0] == '\\0') {
-          strcpy(selection, p);
+          strncpy(selection,p,1024);
         } else {
-          strcat(selection, \",\");
-          strcat(selection, p);
+          strncat(selection, \",\",1);
+          strncat(selection, p, 1023);
         }
+      } else if (!strcmp(argv[i], \"--verbose\")) {
+        verbosity++;
       } else if (!strcmp(argv[i], \"--dump-only\")||
                  !strcmp(argv[i], \"--dump\")) {
         xbt_test_dump(selection);
@@ -156,6 +164,7 @@ int main(int argc, char *argv[]) {
          printf(
              "Usage: testall [--help] [--tests=selection] [--dump-only]\\n\\n"
              "--help: display this help\\n"
+             "--verbose: print the name for each running test\\n"
              "--dump-only: don't run the tests, but display some debuging info about the tests\\n"
              "--tests=selection: Use argument to select which suites/units/tests to run\\n"
              "                   --tests can be used more than once, and selection may be a comma\\n"
@@ -180,7 +189,7 @@ int main(int argc, char *argv[]) {
     }
   /* Got all my tests to do */
       
-  res = xbt_test_run(selection);
+  res = xbt_test_run(selection, verbosity);
   xbt_test_exit();
   return res;
 }