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?…
==============================================================================
--- 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/CSimpleExcept…
==============================================================================
--- 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/CSimpleExcept…
==============================================================================
--- 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/CTestExceptio…
==============================================================================
--- 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(a)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;