Author: tfaber Date: Sat Feb 28 21:12:25 2015 New Revision: 66504
URL: http://svn.reactos.org/svn/reactos?rev=66504&view=rev Log: [ROSAUTOTEST] - Continue the testing process in case a test fails to execute ONLINE-441
Added: trunk/rostests/rosautotest/CTestException.h (with props) Modified: trunk/rostests/rosautotest/CProcess.cpp trunk/rostests/rosautotest/CSimpleException.cpp trunk/rostests/rosautotest/CSimpleException.h trunk/rostests/rosautotest/CWineTest.cpp trunk/rostests/rosautotest/precomp.h
Modified: trunk/rostests/rosautotest/CProcess.cpp URL: http://svn.reactos.org/svn/reactos/trunk/rostests/rosautotest/CProcess.cpp?r... ============================================================================== --- trunk/rostests/rosautotest/CProcess.cpp [iso-8859-1] (original) +++ trunk/rostests/rosautotest/CProcess.cpp [iso-8859-1] Sat Feb 28 21:12:25 2015 @@ -23,7 +23,7 @@ wcscpy(CommandLinePtr, CommandLine.c_str());
if(!CreateProcessW(NULL, CommandLinePtr, NULL, NULL, TRUE, NORMAL_PRIORITY_CLASS, NULL, NULL, StartupInfo, &m_ProcessInfo)) - FATAL("CreateProcessW failed\n"); + TESTEXCEPTION("CreateProcessW failed\n"); }
/**
Modified: trunk/rostests/rosautotest/CSimpleException.cpp URL: http://svn.reactos.org/svn/reactos/trunk/rostests/rosautotest/CSimpleExcepti... ============================================================================== --- trunk/rostests/rosautotest/CSimpleException.cpp [iso-8859-1] (original) +++ trunk/rostests/rosautotest/CSimpleException.cpp [iso-8859-1] Sat Feb 28 21:12:25 2015 @@ -12,9 +12,9 @@ * You should always use the EXCEPTION or SSEXCEPTION macro for throwing this exception. * * @param Message - * Constant pointer to a char array containing a short message about the exception + * String containing a short message about the exception */ -CSimpleException::CSimpleException(const char* Message) +CSimpleException::CSimpleException(const string& Message) : m_Message(Message) { }
Modified: trunk/rostests/rosautotest/CSimpleException.h URL: http://svn.reactos.org/svn/reactos/trunk/rostests/rosautotest/CSimpleExcepti... ============================================================================== --- trunk/rostests/rosautotest/CSimpleException.h [iso-8859-1] (original) +++ trunk/rostests/rosautotest/CSimpleException.h [iso-8859-1] Sat Feb 28 21:12:25 2015 @@ -11,7 +11,7 @@ string m_Message;
public: - CSimpleException(const char* Message); + CSimpleException(const string& Message);
const string& GetMessage() const { return m_Message; } };
Added: trunk/rostests/rosautotest/CTestException.h URL: http://svn.reactos.org/svn/reactos/trunk/rostests/rosautotest/CTestException... ============================================================================== --- trunk/rostests/rosautotest/CTestException.h (added) +++ trunk/rostests/rosautotest/CTestException.h [iso-8859-1] Sat Feb 28 21:12:25 2015 @@ -0,0 +1,12 @@ +/* + * PROJECT: ReactOS Automatic Testing Utility + * LICENSE: GNU GPLv2 or any later version as published by the Free Software Foundation + * PURPOSE: Simple exception during test execution that can be skipped over + * COPYRIGHT: Copyright 2015 Thomas Faber thomas.faber@reactos.org + */ + +class CTestException : public CSimpleException +{ +public: + CTestException(const string& Message) : CSimpleException(Message) { } +};
Propchange: trunk/rostests/rosautotest/CTestException.h ------------------------------------------------------------------------------ svn:eol-style = native
Modified: trunk/rostests/rosautotest/CWineTest.cpp URL: http://svn.reactos.org/svn/reactos/trunk/rostests/rosautotest/CWineTest.cpp?... ============================================================================== --- trunk/rostests/rosautotest/CWineTest.cpp [iso-8859-1] (original) +++ trunk/rostests/rosautotest/CWineTest.cpp [iso-8859-1] Sat Feb 28 21:12:25 2015 @@ -121,12 +121,12 @@
/* Wait till this process ended */ if(WaitForSingleObject(Process.GetProcessHandle(), ListTimeout) == WAIT_FAILED) - FATAL("WaitForSingleObject failed for the test list\n"); + TESTEXCEPTION("WaitForSingleObject failed for the test list\n"); }
/* Read the output data into a buffer */ if(!Pipe.Peek(NULL, 0, NULL, &BytesAvailable)) - FATAL("CPipe::Peek failed for the test list\n"); + TESTEXCEPTION("CPipe::Peek failed for the test list\n");
/* Check if we got any */ if(!BytesAvailable) @@ -134,14 +134,14 @@ stringstream ss;
ss << "The --list command did not return any data for " << UnicodeToAscii(m_CurrentFile) << endl; - SSEXCEPTION; + TESTEXCEPTION(ss.str()); }
/* Read the data */ m_ListBuffer = new char[BytesAvailable];
if(!Pipe.Read(m_ListBuffer, BytesAvailable, &Temp)) - FATAL("CPipe::Read failed\n"); + TESTEXCEPTION("CPipe::Read failed\n");
return BytesAvailable; } @@ -208,40 +208,49 @@ { while(!m_CurrentFile.empty() || GetNextFile()) { - while(GetNextTest()) - { - /* If the user specified a test through the command line, check this here */ - if(!Configuration.GetTest().empty() && Configuration.GetTest() != m_CurrentTest) - continue; - + try + { + while(GetNextTest()) { - auto_ptr<CTestInfo> TestInfo(new CTestInfo()); - size_t UnderscorePosition; - - /* Build the command line */ - TestInfo->CommandLine = m_TestPath; - TestInfo->CommandLine += m_CurrentFile; - TestInfo->CommandLine += ' '; - TestInfo->CommandLine += AsciiToUnicode(m_CurrentTest); - - /* Store the Module name */ - UnderscorePosition = m_CurrentFile.find_last_of('_'); - - if(UnderscorePosition == m_CurrentFile.npos) + /* If the user specified a test through the command line, check this here */ + if(!Configuration.GetTest().empty() && Configuration.GetTest() != m_CurrentTest) + continue; + { - stringstream ss; - - ss << "Invalid test file name: " << UnicodeToAscii(m_CurrentFile) << endl; - SSEXCEPTION; + auto_ptr<CTestInfo> TestInfo(new CTestInfo()); + size_t UnderscorePosition; + + /* Build the command line */ + TestInfo->CommandLine = m_TestPath; + TestInfo->CommandLine += m_CurrentFile; + TestInfo->CommandLine += ' '; + TestInfo->CommandLine += AsciiToUnicode(m_CurrentTest); + + /* Store the Module name */ + UnderscorePosition = m_CurrentFile.find_last_of('_'); + + if(UnderscorePosition == m_CurrentFile.npos) + { + stringstream ss; + + ss << "Invalid test file name: " << UnicodeToAscii(m_CurrentFile) << endl; + SSEXCEPTION; + } + + TestInfo->Module = UnicodeToAscii(m_CurrentFile.substr(0, UnderscorePosition)); + + /* Store the test */ + TestInfo->Test = m_CurrentTest; + + return TestInfo.release(); } - - TestInfo->Module = UnicodeToAscii(m_CurrentFile.substr(0, UnderscorePosition)); - - /* Store the test */ - TestInfo->Test = m_CurrentTest; - - return TestInfo.release(); } + } + catch(CTestException& e) + { + delete[] m_ListBuffer; + StringOut(e.GetMessage()); + m_CurrentFile.clear(); } }
@@ -271,6 +280,7 @@
StartTime = GetTickCount();
+ try { /* Execute the test */ CPipedProcess Process(TestInfo->CommandLine, Pipe); @@ -286,7 +296,15 @@ TestInfo->Log += Buffer; } if(GetLastError() != ERROR_BROKEN_PIPE) - FATAL("CPipe::Read failed for the test run\n"); + TESTEXCEPTION("CPipe::Read failed for the test run\n"); + } + catch(CTestException& e) + { + if(!tailString.empty()) + StringOut(tailString); + tailString.clear(); + StringOut(e.GetMessage()); + TestInfo->Log += e.GetMessage(); }
/* Print what's left */ @@ -297,6 +315,7 @@ ssFinish << "Test " << TestInfo->Test << " completed in "; ssFinish << setprecision(2) << fixed << TotalTime << " seconds." << endl; StringOut(ssFinish.str()); + TestInfo->Log += ssFinish.str(); }
/**
Modified: trunk/rostests/rosautotest/precomp.h URL: http://svn.reactos.org/svn/reactos/trunk/rostests/rosautotest/precomp.h?rev=... ============================================================================== --- trunk/rostests/rosautotest/precomp.h [iso-8859-1] (original) +++ trunk/rostests/rosautotest/precomp.h [iso-8859-1] Sat Feb 28 21:12:25 2015 @@ -34,6 +34,7 @@ #include "CProcess.h" #include "CPipedProcess.h" #include "CSimpleException.h" +#include "CTestException.h" #include "CTestInfo.h" #include "CTest.h" #include "CTestList.h" @@ -45,9 +46,10 @@ #include <rosautotestmsg.h>
/* Useful macros */ -#define EXCEPTION(Message) throw CSimpleException(Message) -#define FATAL(Message) throw CFatalException(__FILE__, __LINE__, Message) -#define SSEXCEPTION throw CSimpleException(ss.str().c_str()) +#define EXCEPTION(Message) throw CSimpleException(Message) +#define FATAL(Message) throw CFatalException(__FILE__, __LINE__, Message) +#define SSEXCEPTION throw CSimpleException(ss.str()) +#define TESTEXCEPTION(Message) throw CTestException(Message)
/* main.c */ extern CConfiguration Configuration;