浏览代码

BUG: change directory before running test and remember test number

Andy Cedilnik 21 年之前
父节点
当前提交
157b239905
共有 2 个文件被更改,包括 18 次插入12 次删除
  1. 13 9
      Source/cmCTest.cxx
  2. 5 3
      Source/cmCTest.h

+ 13 - 9
Source/cmCTest.cxx

@@ -1948,9 +1948,9 @@ void cmCTest::GetListOfTests(tm_ListOfTests* testlist, bool memcheck)
         }
 
       cmCTestTestProperties test;
-      test.Name = testname;
-      test.Args = args;
-      test.Directory = cmSystemTools::GetCurrentWorkingDirectory();
+      test.m_Name = testname;
+      test.m_Args = args;
+      test.m_Directory = cmSystemTools::GetCurrentWorkingDirectory();
       testlist->push_back(test);
       }
     }
@@ -1960,6 +1960,7 @@ void cmCTest::ProcessDirectory(cmCTest::tm_VectorOfStrings &passed,
                              cmCTest::tm_VectorOfStrings &failed,
                              bool memcheck)
 {
+  std::string current_dir = cmSystemTools::GetCurrentWorkingDirectory();
   cmsys::RegularExpression dartStuff("(<DartMeasurement.*/DartMeasurement[a-zA-Z]*>)");
   tm_ListOfTests testlist;
   this->GetListOfTests(&testlist, memcheck);
@@ -1989,19 +1990,21 @@ void cmCTest::ProcessDirectory(cmCTest::tm_VectorOfStrings &passed,
   for ( it = testlist.begin(); it != testlist.end(); it ++ )
     {
     cnt ++;
-    const std::string& testname = it->Name;
-    tm_VectorOfListFileArgs& args = it->Args;
+    const std::string& testname = it->m_Name;
+    tm_VectorOfListFileArgs& args = it->m_Args;
     cmCTestTestResult cres;
     cres.m_Status = cmCTest::NOT_RUN;
+    cres.m_TestCount = cnt;
 
-    if (last_directory != it->Directory)
+    if (last_directory != it->m_Directory)
       {
       if ( m_Verbose )
         {
         std::cerr << "Changing directory into " 
-          << it->Directory.c_str() << "\n";
+          << it->m_Directory.c_str() << "\n";
         }
-      last_directory = it->Directory;
+      last_directory = it->m_Directory;
+      cmSystemTools::ChangeDirectory(last_directory.c_str());
       }
     cres.m_Name = testname;
     if ( m_ShowOnly )
@@ -2085,7 +2088,7 @@ void cmCTest::ProcessDirectory(cmCTest::tm_VectorOfStrings &passed,
         }
       *olog 
         << std::endl 
-        << "Directory: " << it->Directory << std::endl 
+        << "Directory: " << it->m_Directory << std::endl 
         << "\"" << testname.c_str() << "\" start time: " 
         << ::CurrentTime() << std::endl
         << "Output:" << std::endl 
@@ -2207,6 +2210,7 @@ void cmCTest::ProcessDirectory(cmCTest::tm_VectorOfStrings &passed,
     {
     *olog << "End testing: " << m_EndTest << std::endl;
     }
+  cmSystemTools::ChangeDirectory(current_dir.c_str());
 }
 
 bool cmCTest::InitializeMemoryChecking()

+ 5 - 3
Source/cmCTest.h

@@ -230,6 +230,7 @@ private:
     std::string m_CompletionStatus;
     std::string m_Output;
     std::string m_RegressionImages;
+    int         m_TestCount;
   };
 
   struct cmCTestBuildErrorWarning
@@ -246,10 +247,11 @@ private:
 
   struct cmCTestTestProperties
     {
-    cmStdString Name;
-    cmStdString Directory;
-    tm_VectorOfListFileArgs Args;
+    cmStdString m_Name;
+    cmStdString m_Directory;
+    tm_VectorOfListFileArgs m_Args;
     };
+
   typedef std::vector<cmCTestTestProperties> tm_ListOfTests;
 
   // Some structures needed for cvs update