mirror of
https://github.com/pocoproject/poco.git
synced 2025-07-04 01:27:11 +02:00
allow to select long tests to be run from cmdline
This commit is contained in:
parent
d658cc25e7
commit
22c3ae8d30
@ -200,7 +200,6 @@ option(POCO_UNBUNDLED
|
|||||||
"Set to OFF|ON (default is OFF) to control linking dependencies as external" OFF)
|
"Set to OFF|ON (default is OFF) to control linking dependencies as external" OFF)
|
||||||
|
|
||||||
if(ENABLE_TESTS)
|
if(ENABLE_TESTS)
|
||||||
option(ENABLE_LONG_RUNNING_TESTS "Enable long running test" ON)
|
|
||||||
include(CTest)
|
include(CTest)
|
||||||
enable_testing()
|
enable_testing()
|
||||||
message(STATUS "Building with unittests & samples")
|
message(STATUS "Building with unittests & samples")
|
||||||
|
@ -25,11 +25,19 @@ class TestResult;
|
|||||||
*/
|
*/
|
||||||
class CppUnit_API Test
|
class CppUnit_API Test
|
||||||
{
|
{
|
||||||
|
public:
|
||||||
|
enum Type {
|
||||||
|
Suite, // Only set on CppUnit::TestSuite
|
||||||
|
Normal, // Default TestCase always run
|
||||||
|
Long // Such TestCase will only be run if the `-long` command line argument is set
|
||||||
|
};
|
||||||
|
|
||||||
public:
|
public:
|
||||||
virtual ~Test() = 0;
|
virtual ~Test() = 0;
|
||||||
virtual void run(TestResult* result) = 0;
|
virtual void run(TestResult* result) = 0;
|
||||||
virtual int countTestCases() = 0;
|
virtual int countTestCases() const = 0;
|
||||||
virtual std::string toString() = 0;
|
virtual std::string toString() const = 0;
|
||||||
|
virtual Test::Type getType() const = 0;
|
||||||
|
|
||||||
void addSetup(const std::vector<std::string>& setup);
|
void addSetup(const std::vector<std::string>& setup);
|
||||||
const std::vector<std::string>& setup() const;
|
const std::vector<std::string>& setup() const;
|
||||||
@ -51,19 +59,26 @@ inline void Test::run(TestResult *result)
|
|||||||
|
|
||||||
|
|
||||||
// Counts the number of test cases that will be run by this test.
|
// Counts the number of test cases that will be run by this test.
|
||||||
inline int Test::countTestCases()
|
inline int Test::countTestCases() const
|
||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// Returns the name of the test instance.
|
// Returns the name of the test instance.
|
||||||
inline std::string Test::toString()
|
inline std::string Test::toString() const
|
||||||
{
|
{
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Returns the type of the test, see Test::Type
|
||||||
|
inline Test::Type Test::getType() const
|
||||||
|
{
|
||||||
|
return Test::Normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
inline void Test::addSetup(const std::vector<std::string>& setup)
|
inline void Test::addSetup(const std::vector<std::string>& setup)
|
||||||
{
|
{
|
||||||
_setup = setup;
|
_setup = setup;
|
||||||
|
@ -54,8 +54,8 @@ class TestCaller: public TestCase
|
|||||||
typedef void (Fixture::*TestMethod)();
|
typedef void (Fixture::*TestMethod)();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
TestCaller(const std::string& name, TestMethod test):
|
TestCaller(const std::string& name, TestMethod test, Test::Type testType = Test::Type::Normal):
|
||||||
TestCase(name),
|
TestCase(name, testType),
|
||||||
_test(test),
|
_test(test),
|
||||||
_fixture(new Fixture(name))
|
_fixture(new Fixture(name))
|
||||||
{
|
{
|
||||||
@ -95,7 +95,13 @@ private:
|
|||||||
#define CppUnit_addTest(suite, cls, mth) \
|
#define CppUnit_addTest(suite, cls, mth) \
|
||||||
suite->addTest(new CppUnit::TestCaller<cls>(#mth, &cls::mth))
|
suite->addTest(new CppUnit::TestCaller<cls>(#mth, &cls::mth))
|
||||||
|
|
||||||
|
#define CppUnit_addLongTest(suite, cls, mth) \
|
||||||
|
suite->addTest(new CppUnit::TestCaller<cls>(#mth, &cls::mth, CppUnit::Test::Long))
|
||||||
|
|
||||||
#define CppUnit_addQualifiedTest(suite, cls, mth) \
|
#define CppUnit_addQualifiedTest(suite, cls, mth) \
|
||||||
suite->addTest(new CppUnit::TestCaller<cls>(#cls"::"#mth, &cls::mth))
|
suite->addTest(new CppUnit::TestCaller<cls>(#cls"::"#mth, &cls::mth))
|
||||||
|
|
||||||
|
#define CppUnit_addLongQualifiedTest(suite, cls, mth) \
|
||||||
|
suite->addTest(new CppUnit::TestCaller<cls>(#cls"::"#mth, &cls::mth, CppUnit::Test::Long))
|
||||||
|
|
||||||
#endif // CppUnit_TestCaller_INCLUDED
|
#endif // CppUnit_TestCaller_INCLUDED
|
||||||
|
@ -87,14 +87,16 @@ class CppUnit_API TestCase: public Test
|
|||||||
REFERENCEOBJECT (TestCase)
|
REFERENCEOBJECT (TestCase)
|
||||||
|
|
||||||
public:
|
public:
|
||||||
TestCase(const std::string& Name);
|
TestCase(const std::string& Name, Test::Type testType = Test::Normal);
|
||||||
~TestCase();
|
~TestCase();
|
||||||
|
|
||||||
virtual void run(TestResult* result);
|
virtual void run(TestResult* result);
|
||||||
virtual TestResult* run();
|
virtual TestResult* run();
|
||||||
virtual int countTestCases();
|
virtual int countTestCases() const;
|
||||||
|
virtual std::string toString() const;
|
||||||
|
virtual Test::Type getType() const;
|
||||||
|
void setType(Test::Type testType);
|
||||||
const std::string& name() const;
|
const std::string& name() const;
|
||||||
std::string toString();
|
|
||||||
|
|
||||||
virtual void setUp();
|
virtual void setUp();
|
||||||
virtual void setUp(const std::vector<std::string>& setup);
|
virtual void setUp(const std::vector<std::string>& setup);
|
||||||
@ -169,12 +171,15 @@ protected:
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
const std::string _name;
|
const std::string _name;
|
||||||
|
Test::Type _type;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
// Constructs a test case
|
// Constructs a test case
|
||||||
inline TestCase::TestCase(const std::string& name): _name (name)
|
inline TestCase::TestCase(const std::string& name, Test::Type testType)
|
||||||
|
: _name (name)
|
||||||
{
|
{
|
||||||
|
setType(testType);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -185,7 +190,7 @@ inline TestCase::~TestCase()
|
|||||||
|
|
||||||
|
|
||||||
// Returns a count of all the tests executed
|
// Returns a count of all the tests executed
|
||||||
inline int TestCase::countTestCases()
|
inline int TestCase::countTestCases() const
|
||||||
{
|
{
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
@ -217,12 +222,23 @@ inline void TestCase::tearDown()
|
|||||||
|
|
||||||
|
|
||||||
// Returns the name of the test case instance
|
// Returns the name of the test case instance
|
||||||
inline std::string TestCase::toString()
|
inline std::string TestCase::toString() const
|
||||||
{
|
{
|
||||||
const std::type_info& thisClass = typeid(*this);
|
const std::type_info& thisClass = typeid(*this);
|
||||||
return std::string(thisClass.name()) + "." + name();
|
return std::string(thisClass.name()) + "." + name();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Returns the type of the test, see Test::Type
|
||||||
|
inline Test::Type TestCase::getType() const
|
||||||
|
{
|
||||||
|
return _type;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Set the type of the test, see Test::Type
|
||||||
|
inline void TestCase::setType(Test::Type testType)
|
||||||
|
{
|
||||||
|
_type = testType;
|
||||||
|
}
|
||||||
|
|
||||||
// A set of macros which allow us to get the line number
|
// A set of macros which allow us to get the line number
|
||||||
// and file name at the point of an error.
|
// and file name at the point of an error.
|
||||||
|
@ -33,7 +33,7 @@ class Test;
|
|||||||
*
|
*
|
||||||
* Here is the synopsis:
|
* Here is the synopsis:
|
||||||
*
|
*
|
||||||
* TestRunner [-all] [-print] [-wait] ExampleTestCase
|
* TestRunner [-all] [-long] [-print] [-wait] ExampleTestCase
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
class CppUnit_API TestRunner
|
class CppUnit_API TestRunner
|
||||||
@ -54,6 +54,7 @@ protected:
|
|||||||
void printBanner();
|
void printBanner();
|
||||||
void print(const std::string& name, Test* pTest, int indent);
|
void print(const std::string& name, Test* pTest, int indent);
|
||||||
Test* find(const std::string& name, Test* pTest, const std::string& testName);
|
Test* find(const std::string& name, Test* pTest, const std::string& testName);
|
||||||
|
int collectAllTestCases(Test* pTest, std::vector<Test*>& tests);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::ostream& _ostr;
|
std::ostream& _ostr;
|
||||||
|
@ -42,9 +42,10 @@ public:
|
|||||||
~TestSuite();
|
~TestSuite();
|
||||||
|
|
||||||
void run(TestResult* result);
|
void run(TestResult* result);
|
||||||
int countTestCases();
|
int countTestCases() const;
|
||||||
void addTest(Test* test);
|
void addTest(Test* test);
|
||||||
std::string toString();
|
std::string toString() const;
|
||||||
|
Test::Type getType() const;
|
||||||
|
|
||||||
virtual void deleteContents();
|
virtual void deleteContents();
|
||||||
|
|
||||||
@ -77,11 +78,16 @@ inline void TestSuite::addTest(Test* test)
|
|||||||
|
|
||||||
|
|
||||||
// Returns a std::string representation of the test suite.
|
// Returns a std::string representation of the test suite.
|
||||||
inline std::string TestSuite::toString()
|
inline std::string TestSuite::toString() const
|
||||||
{
|
{
|
||||||
return "suite " + _name;
|
return "suite " + _name;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Returns the type of the test, see Test::Type
|
||||||
|
inline Test::Type TestSuite::getType() const
|
||||||
|
{
|
||||||
|
return Test::Suite;
|
||||||
|
}
|
||||||
|
|
||||||
// Returns all tests
|
// Returns all tests
|
||||||
inline const std::vector<Test*> TestSuite::tests() const
|
inline const std::vector<Test*> TestSuite::tests() const
|
||||||
|
@ -35,7 +35,7 @@ TestRunner::~TestRunner()
|
|||||||
void TestRunner::printBanner()
|
void TestRunner::printBanner()
|
||||||
{
|
{
|
||||||
_ostr
|
_ostr
|
||||||
<< "Usage: driver [-all] [-print] [-wait] [name] ..." << std::endl
|
<< "Usage: driver [-all] [-long] [-print] [-wait] [name] ..." << std::endl
|
||||||
<< " where name is the name of a test case class" << std::endl;
|
<< " where name is the name of a test case class" << std::endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -48,8 +48,11 @@ bool TestRunner::run(const std::vector<std::string>& args)
|
|||||||
bool all = false;
|
bool all = false;
|
||||||
bool wait = false;
|
bool wait = false;
|
||||||
bool printed = false;
|
bool printed = false;
|
||||||
|
bool long_running = false;
|
||||||
|
|
||||||
std::vector<std::string> setup;
|
std::vector<std::string> setup;
|
||||||
|
|
||||||
|
std::vector<Test*> tests;
|
||||||
for (int i = 1; i < args.size(); i++)
|
for (int i = 1; i < args.size(); i++)
|
||||||
{
|
{
|
||||||
const std::string& arg = args[i];
|
const std::string& arg = args[i];
|
||||||
@ -63,6 +66,11 @@ bool TestRunner::run(const std::vector<std::string>& args)
|
|||||||
all = true;
|
all = true;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
else if (arg == "-long")
|
||||||
|
{
|
||||||
|
long_running = true;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
else if (arg == "-print")
|
else if (arg == "-print")
|
||||||
{
|
{
|
||||||
for (Mappings::iterator it = _mappings.begin(); it != _mappings.end(); ++it)
|
for (Mappings::iterator it = _mappings.begin(); it != _mappings.end(); ++it)
|
||||||
@ -96,11 +104,8 @@ bool TestRunner::run(const std::vector<std::string>& args)
|
|||||||
}
|
}
|
||||||
if (testToRun)
|
if (testToRun)
|
||||||
{
|
{
|
||||||
if (setup.size() > 0)
|
collectAllTestCases(testToRun, tests);
|
||||||
testToRun->addSetup(setup);
|
|
||||||
if (!run(testToRun)) success = false;
|
|
||||||
}
|
}
|
||||||
numberOfTests++;
|
|
||||||
|
|
||||||
if (!testToRun)
|
if (!testToRun)
|
||||||
{
|
{
|
||||||
@ -112,15 +117,24 @@ bool TestRunner::run(const std::vector<std::string>& args)
|
|||||||
|
|
||||||
if (all)
|
if (all)
|
||||||
{
|
{
|
||||||
|
tests.clear();
|
||||||
for (Mappings::iterator it = _mappings.begin(); it != _mappings.end(); ++it)
|
for (Mappings::iterator it = _mappings.begin(); it != _mappings.end(); ++it)
|
||||||
{
|
{
|
||||||
if (setup.size() > 0)
|
collectAllTestCases(it->second, tests);
|
||||||
it->second->addSetup(setup);
|
|
||||||
if (!run(it->second)) success = false;
|
|
||||||
numberOfTests++;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for (std::vector<Test*>::const_iterator it = tests.begin(); it != tests.end(); ++it)
|
||||||
|
{
|
||||||
|
Test* testToRun = *it;
|
||||||
|
if(testToRun->getType() == Test::Long && !long_running)
|
||||||
|
continue;
|
||||||
|
if (setup.size() > 0)
|
||||||
|
testToRun->addSetup(setup);
|
||||||
|
if (!run(testToRun)) success = false;
|
||||||
|
numberOfTests++;
|
||||||
|
}
|
||||||
|
|
||||||
if (numberOfTests == 0 && !printed)
|
if (numberOfTests == 0 && !printed)
|
||||||
{
|
{
|
||||||
printBanner();
|
printBanner();
|
||||||
@ -194,4 +208,29 @@ Test* TestRunner::find(const std::string& name, Test* pTest, const std::string&
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int TestRunner::collectAllTestCases(Test* pTest, std::vector<Test*>& testcases)
|
||||||
|
{
|
||||||
|
int added = 0;
|
||||||
|
if (pTest->getType() == Test::Suite)
|
||||||
|
{
|
||||||
|
TestSuite* pSuite = dynamic_cast<TestSuite*>(pTest);
|
||||||
|
|
||||||
|
if (pSuite)
|
||||||
|
{
|
||||||
|
const std::vector<Test*>& tests = pSuite->tests();
|
||||||
|
for (std::vector<Test*>::const_iterator it = tests.begin(); it != tests.end(); ++it)
|
||||||
|
{
|
||||||
|
added += collectAllTestCases(*it, testcases);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
testcases.push_back(pTest);
|
||||||
|
added = 1;
|
||||||
|
}
|
||||||
|
return added;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
} // namespace CppUnit
|
} // namespace CppUnit
|
||||||
|
@ -35,11 +35,11 @@ void TestSuite::run(TestResult *result)
|
|||||||
|
|
||||||
|
|
||||||
// Counts the number of test cases that will be run by this test.
|
// Counts the number of test cases that will be run by this test.
|
||||||
int TestSuite::countTestCases()
|
int TestSuite::countTestCases() const
|
||||||
{
|
{
|
||||||
int count = 0;
|
int count = 0;
|
||||||
|
|
||||||
for (std::vector<Test*>::iterator it = _tests.begin (); it != _tests.end (); ++it)
|
for (std::vector<Test*>::const_iterator it = _tests.begin (); it != _tests.end (); ++it)
|
||||||
count += (*it)->countTestCases();
|
count += (*it)->countTestCases();
|
||||||
|
|
||||||
return count;
|
return count;
|
||||||
|
@ -1,2 +1,2 @@
|
|||||||
add_executable(StringTokenizer src/StringTokenizer.cpp)
|
add_executable(StringTokenizer src/StringTokenizer.cpp)
|
||||||
target_link_libraries(StringTokenizer PUBLIC Poco::JSON Poco::XML Poco::Foundation)
|
target_link_libraries(StringTokenizer PUBLIC Poco::Foundation)
|
||||||
|
@ -1,2 +1,2 @@
|
|||||||
add_executable(URI src/URI.cpp)
|
add_executable(URI src/URI.cpp)
|
||||||
target_link_libraries(URI PUBLIC Poco::JSON Poco::XML Poco::Foundation )
|
target_link_libraries(URI PUBLIC Poco::Foundation )
|
||||||
|
@ -41,10 +41,6 @@ if(UNIX AND NOT ANDROID)
|
|||||||
target_link_libraries(Foundation-testrunner PUBLIC pthread)
|
target_link_libraries(Foundation-testrunner PUBLIC pthread)
|
||||||
endif(UNIX AND NOT ANDROID)
|
endif(UNIX AND NOT ANDROID)
|
||||||
|
|
||||||
if(ENABLE_LONG_RUNNING_TESTS)
|
|
||||||
target_compile_definitions(Foundation-testrunner PRIVATE ENABLE_LONG_RUNNING_TESTS)
|
|
||||||
endif(ENABLE_LONG_RUNNING_TESTS)
|
|
||||||
|
|
||||||
# TestApp
|
# TestApp
|
||||||
if(WINCE)
|
if(WINCE)
|
||||||
add_executable( TestApp src/TestApp_WINCE.cpp )
|
add_executable( TestApp src/TestApp_WINCE.cpp )
|
||||||
|
@ -74,14 +74,12 @@ void PBKDF2EngineTest::testPBKDF2c()
|
|||||||
void PBKDF2EngineTest::testPBKDF2d()
|
void PBKDF2EngineTest::testPBKDF2d()
|
||||||
{
|
{
|
||||||
// test vector 4 from RFC 6070
|
// test vector 4 from RFC 6070
|
||||||
#if defined(ENABLE_LONG_RUNNING_TESTS)
|
|
||||||
std::string p("password");
|
std::string p("password");
|
||||||
std::string s("salt");
|
std::string s("salt");
|
||||||
PBKDF2Engine<HMACEngine<SHA1Engine> > pbkdf2(s, 16777216, 20);
|
PBKDF2Engine<HMACEngine<SHA1Engine> > pbkdf2(s, 16777216, 20);
|
||||||
pbkdf2.update(p);
|
pbkdf2.update(p);
|
||||||
std::string dk = DigestEngine::digestToHex(pbkdf2.digest());
|
std::string dk = DigestEngine::digestToHex(pbkdf2.digest());
|
||||||
assertTrue (dk == "eefe3d61cd4da4e4e9945b3d6ba2158c2634e984");
|
assertTrue (dk == "eefe3d61cd4da4e4e9945b3d6ba2158c2634e984");
|
||||||
#endif // defined(ENABLE_LONG_RUNNING_TESTS)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -128,7 +126,7 @@ CppUnit::Test* PBKDF2EngineTest::suite()
|
|||||||
CppUnit_addTest(pSuite, PBKDF2EngineTest, testPBKDF2a);
|
CppUnit_addTest(pSuite, PBKDF2EngineTest, testPBKDF2a);
|
||||||
CppUnit_addTest(pSuite, PBKDF2EngineTest, testPBKDF2b);
|
CppUnit_addTest(pSuite, PBKDF2EngineTest, testPBKDF2b);
|
||||||
CppUnit_addTest(pSuite, PBKDF2EngineTest, testPBKDF2c);
|
CppUnit_addTest(pSuite, PBKDF2EngineTest, testPBKDF2c);
|
||||||
CppUnit_addTest(pSuite, PBKDF2EngineTest, testPBKDF2d);
|
CppUnit_addLongTest(pSuite, PBKDF2EngineTest, testPBKDF2d);
|
||||||
CppUnit_addTest(pSuite, PBKDF2EngineTest, testPBKDF2e);
|
CppUnit_addTest(pSuite, PBKDF2EngineTest, testPBKDF2e);
|
||||||
CppUnit_addTest(pSuite, PBKDF2EngineTest, testPBKDF2f);
|
CppUnit_addTest(pSuite, PBKDF2EngineTest, testPBKDF2f);
|
||||||
|
|
||||||
|
@ -131,7 +131,6 @@ RWLockTest::~RWLockTest()
|
|||||||
|
|
||||||
void RWLockTest::testLock()
|
void RWLockTest::testLock()
|
||||||
{
|
{
|
||||||
#if defined(ENABLE_LONG_RUNNING_TESTS)
|
|
||||||
RWLock lock;
|
RWLock lock;
|
||||||
int counter = 0;
|
int counter = 0;
|
||||||
RWLockRunnable r1(lock, counter);
|
RWLockRunnable r1(lock, counter);
|
||||||
@ -160,13 +159,11 @@ void RWLockTest::testLock()
|
|||||||
assertTrue (r3.ok());
|
assertTrue (r3.ok());
|
||||||
assertTrue (r4.ok());
|
assertTrue (r4.ok());
|
||||||
assertTrue (r5.ok());
|
assertTrue (r5.ok());
|
||||||
#endif // defined(ENABLE_LONG_RUNNING_TESTS)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void RWLockTest::testTryLock()
|
void RWLockTest::testTryLock()
|
||||||
{
|
{
|
||||||
#if defined(ENABLE_LONG_RUNNING_TESTS)
|
|
||||||
RWLock lock;
|
RWLock lock;
|
||||||
int counter = 0;
|
int counter = 0;
|
||||||
RWTryLockRunnable r1(lock, counter);
|
RWTryLockRunnable r1(lock, counter);
|
||||||
@ -195,7 +192,6 @@ void RWLockTest::testTryLock()
|
|||||||
assertTrue (r3.ok());
|
assertTrue (r3.ok());
|
||||||
assertTrue (r4.ok());
|
assertTrue (r4.ok());
|
||||||
assertTrue (r5.ok());
|
assertTrue (r5.ok());
|
||||||
#endif // defined(ENABLE_LONG_RUNNING_TESTS)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -213,8 +209,8 @@ CppUnit::Test* RWLockTest::suite()
|
|||||||
{
|
{
|
||||||
CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("RWLockTest");
|
CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("RWLockTest");
|
||||||
|
|
||||||
CppUnit_addTest(pSuite, RWLockTest, testLock);
|
CppUnit_addLongTest(pSuite, RWLockTest, testLock);
|
||||||
CppUnit_addTest(pSuite, RWLockTest, testTryLock);
|
CppUnit_addLongTest(pSuite, RWLockTest, testTryLock);
|
||||||
|
|
||||||
return pSuite;
|
return pSuite;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user