windows-nt/Source/XPSP1/NT/admin/wmi/wbem/cppunit/testrunner.cpp
2020-09-26 16:20:57 +08:00

212 lines
4.1 KiB
C++

/*
* A command line based tool to run tests.
* TestRunner expects as its only argument the name of a TestCase class.
* TestRunner prints out a trace as the tests are executed followed by a
* summary at the end.
*
* You can add to the tests that the TestRunner knows about by
* making additional calls to "addTest (...)" in main.
*
* Here is the synopsis:
*
* TestRunner [-wait] ExampleTestCase
*
*/
#include <iostream>
#include <vector>
#include "TestRunner.h"
#include "MulticasterTest.h"
#include "CHStringtest.h"
#include "autoptrtest.h"
#include <WQLParserTest.h>
#include <wbemcomn\testlib\maintest.h>
#include <maintest.h>
#include <windows.h>
TestAllocator::TestAllocator():size_(0),mem_(HeapCreate(0,0,0)),freze_(false){} ;
TestAllocator::~TestAllocator(){ HeapDestroy(mem_);} ;
TestAllocator * TestAllocator::instance()
{
static TestAllocator tmp;
return &tmp;
}
void * TestAllocator::allocate(size_t n){
if (freze_ && size_< n )
return 0;
void * p = HeapAlloc(mem_,0,n);
if (p!=0)
size_+=n;
return p;
};
void TestAllocator::deallocate(void *p){
if (p == 0)
{
return;
}
size_-=HeapSize(mem_,0,p);
HeapFree(mem_,0,p);
}
/*
void* __cdecl operator new(size_t n)
{
return TestAllocator::instance()->allocate(n);
}
void* __cdecl operator new(size_t n, std::nothrow_t&)
{
return TestAllocator::instance()->allocate(n);
}
void __cdecl operator delete(void *p)
{
return TestAllocator::instance()->deallocate(p);
}
void __cdecl operator delete(void *p, std::nothrow_t&)
{
return TestAllocator::instance()->deallocate(p);
}
void* __cdecl operator new[](size_t n)
{
return TestAllocator::instance()->allocate(n);
}
void* __cdecl operator new[](size_t n, std::nothrow_t&)
{
return TestAllocator::instance()->allocate(n);
}
void __cdecl operator delete[](void *p)
{
return TestAllocator::instance()->deallocate(p);
}
void __cdecl operator delete[](void *p, std::nothrow_t&)
{
return TestAllocator::instance()->deallocate(p);
}
*/
TestRunner::TestRunner ():allocator(TestAllocator::instance()),m_wait (false)
{
}
void TestRunner::printBanner ()
{
cout << "Usage: driver [ -wait ] testName, where name is the name of a test case class" << endl;
}
void TestRunner::run (int ac, char **av)
{
string testCase;
int numberOfTests = 0;
for (int i = 1; i < ac; i++) {
if (string (av [i]) == "-wait") {
m_wait = true;
continue;
}
testCase = av [i];
Test *testToRun = NULL;
if (testCase == "*") {
for (mappings::iterator it = m_mappings.begin ();
it != m_mappings.end ();
++it) {
testToRun = (*it).second;
run (testToRun);
}
return;
}
if (testCase == "/?" || testCase == "-?" ) {
printBanner ();
return;
}
for (mappings::iterator it = m_mappings.begin ();
it != m_mappings.end ();
++it) {
if ((*it).first == testCase) {
testToRun = (*it).second;
run (testToRun);
}
}
numberOfTests++;
if (!testToRun) {
cout << "Test " << testCase << " not found." << endl;
return;
}
}
if (numberOfTests == 0) {
printBanner ();
return;
}
if (m_wait) {
cout << "<RETURN> to continue" << endl;
cin.get ();
}
}
TestRunner::~TestRunner ()
{
for (mappings::iterator it = m_mappings.begin ();
it != m_mappings.end ();
++it)
it->second->Delete();
}
void TestRunner::run (Test *test)
{
TextTestResult result;
if (test)
test->run (&result);
cout << result << endl;
}
void
populateRunner(TestRunner& runner)
{
runner.addTest ("MulticasterTest", MulticasterTest::suite ());
runner.addTest ("CHStringTest", CHStringTestCase::suite ());
runner.addTest ("AutoBuffer", autobufferTest::suite());
runner.addTest ("WQLParserTest", WQLParserTest::suite());
runner.addTest ("CoreDllTest", CoreTest::suite());
runner.addTest ("WBEMCommonTest", WBEMCommonTest::suite());
}