mirror of
https://github.com/reactos/reactos.git
synced 2025-06-20 07:36:05 +00:00
[ROSAUTOTEST]
Make outputting a string as easy as it should be. Now that our StringOut internally uses OutputDebugStringA instead of DbgPrint, we don't need to output in 512 byte chunks anymore. Additionally, do an explicit flush when using std::cout to not lose debug output. ROSTESTS-158 #resolve #comment Committed in r66855 svn path=/trunk/; revision=66855
This commit is contained in:
parent
d2bc21c312
commit
40da1525c9
3 changed files with 22 additions and 73 deletions
|
@ -276,7 +276,6 @@ CWineTest::RunTest(CTestInfo* TestInfo)
|
|||
stringstream ss, ssFinish;
|
||||
DWORD StartTime;
|
||||
float TotalTime;
|
||||
string tailString;
|
||||
CPipe Pipe;
|
||||
char Buffer[1024];
|
||||
|
||||
|
@ -295,7 +294,7 @@ CWineTest::RunTest(CTestInfo* TestInfo)
|
|||
{
|
||||
/* Output text through StringOut, even while the test is still running */
|
||||
Buffer[BytesAvailable] = 0;
|
||||
tailString = StringOut(tailString.append(string(Buffer)), false);
|
||||
StringOut(string(Buffer));
|
||||
|
||||
if(Configuration.DoSubmit())
|
||||
TestInfo->Log += Buffer;
|
||||
|
@ -305,17 +304,10 @@ CWineTest::RunTest(CTestInfo* TestInfo)
|
|||
}
|
||||
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 ";
|
||||
ssFinish << setprecision(2) << fixed << TotalTime << " seconds." << endl;
|
||||
|
|
|
@ -69,7 +69,7 @@ string EscapeString(const char* Input);
|
|||
string EscapeString(const string& Input);
|
||||
string GetINIValue(PCWCH AppName, PCWCH KeyName, PCWCH FileName);
|
||||
bool IsNumber(const char* Input);
|
||||
string StringOut(const string& String, bool forcePrint = true);
|
||||
void StringOut(const string& InputString);
|
||||
string UnicodeToAscii(PCWSTR UnicodeString);
|
||||
string UnicodeToAscii(const wstring& UnicodeString);
|
||||
|
||||
|
|
|
@ -2,12 +2,11 @@
|
|||
* 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-2009 Colin Finck <colin@reactos.org>
|
||||
* COPYRIGHT: Copyright 2008-2015 Colin Finck <colin@reactos.org>
|
||||
*/
|
||||
|
||||
#include "precomp.h"
|
||||
|
||||
#define DBGPRINT_BUFSIZE 511
|
||||
static const char HexCharacters[] = "0123456789ABCDEF";
|
||||
|
||||
/**
|
||||
|
@ -87,85 +86,43 @@ IsNumber(const char* Input)
|
|||
|
||||
/**
|
||||
* Outputs a string through the standard output and the debug output.
|
||||
* The string may have LF or CRLF line endings.
|
||||
* The input string may have LF or CRLF line endings.
|
||||
*
|
||||
* @param String
|
||||
* @param InputString
|
||||
* The std::string to output
|
||||
*/
|
||||
string
|
||||
StringOut(const string& String, bool forcePrint)
|
||||
void
|
||||
StringOut(const string& InputString)
|
||||
{
|
||||
char DbgString[DBGPRINT_BUFSIZE + 1];
|
||||
size_t i, start = 0, last_newline = 0, size = 0, curr_pos = 0;
|
||||
string NewString;
|
||||
const char* pInput = InputString.c_str();
|
||||
char* OutputString = new char[InputString.size() + 1];
|
||||
char* pOutput = OutputString;
|
||||
|
||||
/* Unify the line endings (the piped output of the tests may use CRLF) */
|
||||
for(i = 0; i < String.size(); i++)
|
||||
while (*pInput)
|
||||
{
|
||||
/* If this is a CRLF line-ending, only copy a \n to the new string and skip the next character */
|
||||
if(String[i] == '\r' && String[i + 1] == '\n')
|
||||
if (*pInput == '\r' && *(pInput + 1) == '\n')
|
||||
{
|
||||
NewString += '\n';
|
||||
++i;
|
||||
*pOutput = '\n';
|
||||
++pInput;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Otherwise copy the string */
|
||||
NewString += String[i];
|
||||
*pOutput = *pInput;
|
||||
}
|
||||
|
||||
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;
|
||||
++pInput;
|
||||
++pOutput;
|
||||
}
|
||||
|
||||
DbgString[size] = 0;
|
||||
OutputDebugStringA(DbgString);
|
||||
}
|
||||
*pOutput = 0;
|
||||
OutputDebugStringA(OutputString);
|
||||
|
||||
last_newline = curr_pos;
|
||||
}
|
||||
}
|
||||
if (Configuration.DoPrint())
|
||||
cout << OutputString << flush;
|
||||
|
||||
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);
|
||||
delete[] OutputString;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue