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:
@@ -95,6 +95,39 @@ private:
|
|||||||
sal_uInt32 m_nStartTime;
|
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"
|
//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
|
//which knows about uno exceptions, so it can print the content of the
|
||||||
//exception before falling over and dying
|
//exception before falling over and dying
|
||||||
@@ -144,6 +177,10 @@ public:
|
|||||||
result.addListener(&timer);
|
result.addListener(&timer);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef UNX
|
||||||
|
EyecatcherListener eye;
|
||||||
|
result.addListener(&eye);
|
||||||
|
#endif
|
||||||
for (size_t i = 0; i < protectors.size(); ++i)
|
for (size_t i = 0; i < protectors.size(); ++i)
|
||||||
result.pushProtector(protectors[i]);
|
result.pushProtector(protectors[i]);
|
||||||
|
|
||||||
|
@@ -184,8 +184,18 @@ void CreateTempName_Impl( OUString& rName, bool bKeep, bool bDir = true )
|
|||||||
// 36 ** 6 == 2176782336
|
// 36 ** 6 == 2176782336
|
||||||
unsigned const nRadix = 36;
|
unsigned const nRadix = 36;
|
||||||
unsigned long const nMax = (nRadix*nRadix*nRadix*nRadix*nRadix*nRadix);
|
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 = "";
|
rName = "";
|
||||||
static unsigned long u = Time::GetSystemTicks() % nMax;
|
static unsigned long u = Time::GetSystemTicks() % nMax;
|
||||||
for ( unsigned long nSeed = u; ++u != nSeed; )
|
for ( unsigned long nSeed = u; ++u != nSeed; )
|
||||||
|
Reference in New Issue
Block a user