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@reactos.org + * COPYRIGHT: Copyright 2008-2009 Colin Finck colin@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); }
/**