Files
pvData/testApp/misc/testBaseException.cpp
2016-07-22 15:56:43 +01:00

92 lines
2.0 KiB
C++

/* testBaseException.cpp */
/*
* Copyright information and license terms for this software can be
* found in the file LICENSE that is included with the distribution
*/
/* Author: Matej Sekoranja Date: 2010.10.18 */
#include <stddef.h>
#include <stdlib.h>
#include <stddef.h>
#include <string.h>
#include <stdio.h>
#include <epicsUnitTest.h>
#include <testMain.h>
#include <pv/epicsException.h>
using namespace epics::pvData;
struct Unroller
{
template <int N>
void unroll(double d) {
unroll<N-1>(d);
}
};
template<>
void Unroller::unroll<0>(double /*d*/) {
THROW_BASE_EXCEPTION("the root cause");
}
void internalTestBaseException(int /*unused*/ = 0)
{
try {
// NOTE: 5, 4, 3, 2, 1 calls will be optimized and not shown
Unroller().unroll<5>(42.0);
} catch (BaseException& be3) {
THROW_BASE_EXCEPTION_CAUSE("exception 1", be3);
}
}
void testBaseExceptionTest() {
printf("testBaseException... ");
try {
THROW_BASE_EXCEPTION("all is OK");
} catch (BaseException& be) {
printf("\n\n%s\n\n", be.what());
}
try {
try {
internalTestBaseException();
} catch (BaseException& be2) {
THROW_BASE_EXCEPTION_CAUSE("exception 2", be2);
}
} catch (BaseException& be) {
printf("\n\n%s\n\n", be.what());
}
testPass("testBaseException");
}
void testLogicException() {
try {
THROW_EXCEPTION(std::logic_error("There is a logic_error"));
} catch (std::logic_error& be) {
printf("\n\n%s\n\n", be.what());
PRINT_EXCEPTION2(be, stdout);
}
try {
THROW_EXCEPTION2(std::logic_error, "There is another logic_error");
} catch (std::logic_error& be) {
printf("\n\n%s\n\n", be.what());
printf("%s\n", SHOW_EXCEPTION(be).c_str());
}
testPass("testLogicException");
}
MAIN(testBaseException)
{
testPlan(2);
testDiag("Tests base exception");
testLogicException();
testBaseExceptionTest();
return testDone();
}