decorate tempfile name's to help identify leaks' author

unottols TempFile class check in debug bod for
and env variable LO_TESTNAME.. if present it use that as the root
for the tempfile filename.

cppunitteset framework is augmented so that it export such
LO_TESNAME using the cppunit testName(), after replacement of
non-alphnum characters by _

Change-Id: Iebb9545d3bd789083afbeaf4c64eab086b56049a
This commit is contained in:
Norbert Thiebaud 2014-03-30 20:20:23 -05:00
parent 2996f24c69
commit c176cb8907
2 changed files with 49 additions and 2 deletions

View File

@ -95,6 +95,39 @@ private:
sal_uInt32 m_nStartTime;
};
#ifdef UNX
#include <stdlib.h>
// Setup an env variable so that temp file (or other) can
// have a usefull value to identify the source
class EyecatcherListener
: public CppUnit::TestListener
, private boost::noncopyable
{
public:
void startTest( CppUnit::Test* test) SAL_OVERRIDE
{
char* tn = new char [ test->getName().length() + 2 ];
strcpy(tn, test->getName().c_str());
int len = strlen(tn);
for(int i = 0; i < len; i++)
{
if(!isalnum(tn[i]))
{
tn[i] = '_';
}
tn[len] = '_';
tn[len + 1] = 0;
}
setenv("LO_TESTNAME", tn, true);
delete[] tn;
}
void endTest( CppUnit::Test* /* test */ ) SAL_OVERRIDE
{
}
};
#endif
//Allow the whole uniting testing framework to be run inside a "Protector"
//which knows about uno exceptions, so it can print the content of the
//exception before falling over and dying
@ -144,6 +177,10 @@ public:
result.addListener(&timer);
#endif
#ifdef UNX
EyecatcherListener eye;
result.addListener(&eye);
#endif
for (size_t i = 0; i < protectors.size(); ++i)
result.pushProtector(protectors[i]);

View File

@ -184,8 +184,18 @@ void CreateTempName_Impl( OUString& rName, bool bKeep, bool bDir = true )
// 36 ** 6 == 2176782336
unsigned const nRadix = 36;
unsigned long const nMax = (nRadix*nRadix*nRadix*nRadix*nRadix*nRadix);
OUString aName = rName + "lu";
OUString aName;
OUString aEyeCatcher = "lu";
#ifdef DBG_UTIL
#ifdef UNX
const char* eye = getenv("LO_TESTNAME");
if(eye)
{
aEyeCatcher = OUString(eye, strlen(eye), RTL_TEXTENCODING_ASCII_US);
}
#endif
#endif
aName = rName + aEyeCatcher;
rName = "";
static unsigned long u = Time::GetSystemTicks() % nMax;
for ( unsigned long nSeed = u; ++u != nSeed; )