1
0
mirror of https://github.com/VCMP-SqMod/SqMod.git synced 2024-11-15 04:07:17 +01:00
SqMod/vendor/POCO/Foundation/testsuite/src/DynamicFactoryTest.cpp

117 lines
1.8 KiB
C++
Raw Normal View History

//
// DynamicFactoryTest.cpp
//
// Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH.
// and Contributors.
//
// SPDX-License-Identifier: BSL-1.0
//
#include "DynamicFactoryTest.h"
#include "CppUnit/TestCaller.h"
#include "CppUnit/TestSuite.h"
#include "Poco/DynamicFactory.h"
#include "Poco/Exception.h"
#include <memory>
using Poco::DynamicFactory;
using Poco::Instantiator;
namespace
{
class Base
{
public:
Base()
{
}
virtual ~Base()
{
}
};
class A: public Base
{
};
class B: public Base
{
};
}
DynamicFactoryTest::DynamicFactoryTest(const std::string& name): CppUnit::TestCase(name)
{
}
DynamicFactoryTest::~DynamicFactoryTest()
{
}
void DynamicFactoryTest::testDynamicFactory()
{
DynamicFactory<Base> dynFactory;
dynFactory.registerClass<A>("A");
dynFactory.registerClass<B>("B");
assertTrue (dynFactory.isClass("A"));
assertTrue (dynFactory.isClass("B"));
assertTrue (!dynFactory.isClass("C"));
std::unique_ptr<A> a(dynamic_cast<A*>(dynFactory.createInstance("A")));
std::unique_ptr<B> b(dynamic_cast<B*>(dynFactory.createInstance("B")));
assertNotNull(a.get());
assertNotNull(b.get());
try
{
dynFactory.registerClass<A>("A");
fail("already registered - must throw");
}
catch (Poco::ExistsException&)
{
}
dynFactory.unregisterClass("B");
assertTrue (dynFactory.isClass("A"));
assertTrue (!dynFactory.isClass("B"));
try
{
std::unique_ptr<B> b(dynamic_cast<B*>(dynFactory.createInstance("B")));
fail("unregistered - must throw");
}
catch (Poco::NotFoundException&)
{
}
}
void DynamicFactoryTest::setUp()
{
}
void DynamicFactoryTest::tearDown()
{
}
CppUnit::Test* DynamicFactoryTest::suite()
{
CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("DynamicFactoryTest");
CppUnit_addTest(pSuite, DynamicFactoryTest, testDynamicFactory);
return pSuite;
}