Author: tfaber
Date: Tue Jun 23 09:54:46 2015
New Revision: 68245
URL:
http://svn.reactos.org/svn/reactos?rev=68245&view=rev
Log:
[ROSAUTOTEST]
- Revert r66855 to make the upcoming commit's diff show my actual changes.
ROSTESTS-178 ROSTESTS-158
Modified:
trunk/rostests/rosautotest/CWineTest.cpp
trunk/rostests/rosautotest/precomp.h
trunk/rostests/rosautotest/tools.cpp
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] Tue Jun 23 09:54:46 2015
@@ -276,6 +276,7 @@
stringstream ss, ssFinish;
DWORD StartTime;
float TotalTime;
+ string tailString;
CPipe Pipe;
char Buffer[1024];
@@ -294,7 +295,7 @@
{
/* Output text through StringOut, even while the test is still running */
Buffer[BytesAvailable] = 0;
- StringOut(string(Buffer));
+ tailString = StringOut(tailString.append(string(Buffer)), false);
if(Configuration.DoSubmit())
TestInfo->Log += Buffer;
@@ -304,9 +305,16 @@
}
catch(CTestException& e)
{
+ if(!tailString.empty())
+ StringOut(tailString);
+ tailString.clear();
StringOut(e.GetMessage());
TestInfo->Log += e.GetMessage();
}
+
+ /* Print what's left */
+ if(!tailString.empty())
+ StringOut(tailString);
TotalTime = ((float)GetTickCount() - StartTime)/1000;
ssFinish << "Test " << TestInfo->Test << "
completed in ";
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] Tue Jun 23 09:54:46 2015
@@ -69,7 +69,7 @@
string EscapeString(const string& Input);
string GetINIValue(PCWCH AppName, PCWCH KeyName, PCWCH FileName);
bool IsNumber(const char* Input);
-void StringOut(const string& InputString);
+string StringOut(const string& String, bool forcePrint = true);
string UnicodeToAscii(PCWSTR UnicodeString);
string UnicodeToAscii(const wstring& UnicodeString);
Modified: trunk/rostests/rosautotest/tools.cpp
URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/rosautotest/tools.cpp?rev…
==============================================================================
--- trunk/rostests/rosautotest/tools.cpp [iso-8859-1] (original)
+++ trunk/rostests/rosautotest/tools.cpp [iso-8859-1] Tue Jun 23 09:54:46 2015
@@ -2,11 +2,12 @@
* PROJECT: ReactOS Automatic Testing Utility
* LICENSE: GNU GPLv2 or any later version as published by the Free Software
Foundation
* PURPOSE: Various helper functions
- * COPYRIGHT: Copyright 2008-2015 Colin Finck <colin(a)reactos.org>
+ * COPYRIGHT: Copyright 2008-2009 Colin Finck <colin(a)reactos.org>
*/
#include "precomp.h"
+#define DBGPRINT_BUFSIZE 511
static const char HexCharacters[] = "0123456789ABCDEF";
/**
@@ -86,43 +87,85 @@
/**
* Outputs a string through the standard output and the debug output.
- * The input string may have LF or CRLF line endings.
- *
- * @param InputString
+ * The string may have LF or CRLF line endings.
+ *
+ * @param String
* The std::string to output
*/
-void
-StringOut(const string& InputString)
-{
- const char* pInput = InputString.c_str();
- char* OutputString = new char[InputString.size() + 1];
- char* pOutput = OutputString;
+string
+StringOut(const string& String, bool forcePrint)
+{
+ char DbgString[DBGPRINT_BUFSIZE + 1];
+ size_t i, start = 0, last_newline = 0, size = 0, curr_pos = 0;
+ string NewString;
/* Unify the line endings (the piped output of the tests may use CRLF) */
- while (*pInput)
+ for(i = 0; i < String.size(); i++)
{
/* If this is a CRLF line-ending, only copy a \n to the new string and skip the
next character */
- if (*pInput == '\r' && *(pInput + 1) == '\n')
- {
- *pOutput = '\n';
- ++pInput;
+ if(String[i] == '\r' && String[i + 1] == '\n')
+ {
+ NewString += '\n';
+ ++i;
}
else
{
- *pOutput = *pInput;
- }
-
- ++pInput;
- ++pOutput;
- }
-
- *pOutput = 0;
- OutputDebugStringA(OutputString);
-
- if (Configuration.DoPrint())
- cout << OutputString << flush;
-
- delete[] OutputString;
+ /* Otherwise copy the string */
+ NewString += String[i];
+ }
+
+ curr_pos = NewString.size();
+
+ /* Try to print whole lines but obey the 512 bytes chunk size limit*/
+ if(NewString[curr_pos - 1] == '\n' || (curr_pos - start) ==
DBGPRINT_BUFSIZE)
+ {
+ if((curr_pos - start) >= DBGPRINT_BUFSIZE)
+ {
+ /* No newlines so far, or the string just fits */
+ if(last_newline <= start || ((curr_pos - start == DBGPRINT_BUFSIZE)
&& NewString[curr_pos - 1] == '\n'))
+ {
+ size = curr_pos - start;
+ memcpy(DbgString, NewString.c_str() + start, size);
+ start = curr_pos;
+ }
+ else
+ {
+ size = last_newline - start;
+ memcpy(DbgString, NewString.c_str() + start, size);
+ start = last_newline;
+ }
+
+ DbgString[size] = 0;
+ OutputDebugStringA(DbgString);
+ }
+
+ last_newline = curr_pos;
+ }
+ }
+
+ size = curr_pos - start;
+
+ /* Only print if forced to or if the rest is a whole line */
+ if(forcePrint == true || NewString[curr_pos - 1] == '\n')
+ {
+ /* Output the whole string */
+ if(Configuration.DoPrint())
+ cout << NewString;
+
+ memcpy(DbgString, NewString.c_str() + start, size);
+ DbgString[size] = 0;
+ OutputDebugStringA(DbgString);
+
+ NewString.clear();
+ return NewString;
+ }
+
+ /* Output full lines only */
+ if(Configuration.DoPrint())
+ cout << NewString.substr(0, start);
+
+ /* Return the remaining chunk */
+ return NewString.substr(start, size);
}
/**