You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

244 lines
8.0 KiB

/* /////////////////////////////////////////////////////////////////////////
* File: test/unit/test.unit.bec.COMErrorObject/test.unit.bec.COMErrorObject.cpp
*
* Purpose: Implementation file for the test.unit.be.COMErrorObject project.
*
* Created: 1st January 2008
* Updated: 22nd March 2010
*
* Status: Wizard-generated
*
* License: (Licensed under the Synesis Software Open License)
*
* Copyright (c) 2008-2010, Synesis Software Pty Ltd.
* All rights reserved.
*
* www: http://www.synesis.com.au/software
*
* ////////////////////////////////////////////////////////////////////// */
#include <pantheios/util/test/compiler_warnings_suppression.first_include.h>
/* Pantheios Header Files */
#include <pantheios/backends/bec.COMErrorObject.h>
#include <pantheios/init_codes.h>
/* xTests Header Files */
#include <xtests/xtests.h>
/* STLSoft Header Files */
#include <stlsoft/shims/access/string.hpp>
#include <comstl/error/errorinfo_desc.hpp>
#include <comstl/error/errorinfo_functions.h>
#include <comstl/util/initialisers.hpp>
/* Standard C++ Header Files */
#include <exception> // for std::exception
#include <new> // for std::bad_alloc
/* Standard C Header Files */
#include <stdio.h> // for fprintf()
#include <stdlib.h> // for exit codes
#include <pantheios/util/test/compiler_warnings_suppression.last_include.h>
/* /////////////////////////////////////////////////////////////////////////
* Macros
*/
#define PANTHEIOS_SEV_LEVELS_EQUAL(x, y) XTESTS_TEST_INTEGER_EQUAL(static_cast<int>(x), static_cast<int>(y))
/* /////////////////////////////////////////////////////////////////////////
* Character encoding
*/
#ifdef PANTHEIOS_USE_WIDE_STRINGS
# define XTESTS_TEST_STRING_EQUAL XTESTS_TEST_WIDE_STRING_EQUAL
#else /* ? PANTHEIOS_USE_WIDE_STRINGS */
# define XTESTS_TEST_STRING_EQUAL XTESTS_TEST_MULTIBYTE_STRING_EQUAL
#endif /* PANTHEIOS_USE_WIDE_STRINGS */
/* /////////////////////////////////////////////////////////////////////////
* Globals
*/
PANTHEIOS_EXTERN_C const PAN_CHAR_T PANTHEIOS_FE_PROCESS_IDENTITY[] = PANTHEIOS_LITERAL_STRING("test.unit.be.COMErrorObject");
/* ////////////////////////////////////////////////////////////////////// */
static int main_(int argc, char** argv)
{
int retCode = EXIT_SUCCESS;
int verbosity = 2;
static PAN_CHAR_T const* strings[] =
{
PANTHEIOS_LITERAL_STRING("abc")
, PANTHEIOS_LITERAL_STRING("ABC")
, PANTHEIOS_LITERAL_STRING("abcdefghijklmnopqrstuvwxyz")
, PANTHEIOS_LITERAL_STRING("ABCDEFGHIJKLMNOPQRSTUVWXYZ")
, PANTHEIOS_LITERAL_STRING("abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789")
};
static int severities[] =
{
PANTHEIOS_SEV_DEBUG
, PANTHEIOS_SEV_INFORMATIONAL
, PANTHEIOS_SEV_NOTICE
, PANTHEIOS_SEV_WARNING
, PANTHEIOS_SEV_ERROR
, PANTHEIOS_SEV_CRITICAL
, PANTHEIOS_SEV_ALERT
, PANTHEIOS_SEV_EMERGENCY
};
XTESTS_COMMANDLINE_PARSEVERBOSITY(argc, argv, &verbosity);
if(XTESTS_START_RUNNER("test.unit.be.COMErrorObject", verbosity))
{
/* Case 1 - verifying be.COMErrorObject, with flags 0 */
if(!XTESTS_CASE_BEGIN("case-1", "verifying be.COMErrorObject, with flags 0"))
{
retCode = EXIT_FAILURE;
}
else
{
pan_be_COMErrorObject_init_t init;
init.flags = 0
// | PANTHEIOS_BE_INIT_F_NO_PROCESS_ID
// | PANTHEIOS_BE_INIT_F_NO_THREAD_ID
| PANTHEIOS_BE_INIT_F_NO_SEVERITY
;
void* token;
int res = pantheios_be_COMErrorObject_init(PANTHEIOS_FE_PROCESS_IDENTITY, PANTHEIOS_BEID_ALL, &init, NULL, &token);
if(PANTHEIOS_INIT_RC_SUCCESS != res)
{
XTESTS_FAIL_WITH_QUALIFIER("failed to initialise bec.COMErrorObject", pantheios::getInitErrorString(res));
}
else
{
{ for(size_t i = 0; i != STLSOFT_NUM_ELEMENTS(severities); ++i)
{
{ for(size_t j = 0; j != STLSOFT_NUM_ELEMENTS(strings); ++j)
{
const int severity = severities[i];
pantheios_be_COMErrorObject_logEntry(NULL, token, severity, strings[j], stlsoft::c_str_len(strings[j]));
if( PANTHEIOS_SEV_DEBUG == severity ||
PANTHEIOS_SEV_INFORMATIONAL == severity)
{
; // be.COMErrorObject does not write out debug-level or informational-level messages
}
else
{
comstl::errorinfo_desc ed;
XTESTS_TEST_STRING_EQUAL(strings[j], ed);
}
}}
}}
pantheios_be_COMErrorObject_uninit(token);
}
XTESTS_CASE_END("");
}
/* Case 2 - verifying be.COMErrorObject, with PANTHEIOS_BE_COMERROROBJECT_F_DONT_OVERWRITE_EXISTING flag */
if(!XTESTS_CASE_BEGIN("case-2", "verifying be.COMErrorObject, with PANTHEIOS_BE_COMERROROBJECT_F_DONT_OVERWRITE_EXISTING flag"))
{
retCode = EXIT_FAILURE;
}
else
{
pan_be_COMErrorObject_init_t init;
init.flags = 0
// | PANTHEIOS_BE_INIT_F_NO_PROCESS_ID
// | PANTHEIOS_BE_INIT_F_NO_THREAD_ID
| PANTHEIOS_BE_INIT_F_NO_SEVERITY
| PANTHEIOS_BE_COMERROROBJECT_F_DONT_OVERWRITE_EXISTING
;
void* token;
int res = pantheios_be_COMErrorObject_init(PANTHEIOS_FE_PROCESS_IDENTITY, PANTHEIOS_BEID_ALL, &init, NULL, &token);
if(PANTHEIOS_INIT_RC_SUCCESS != res)
{
XTESTS_FAIL_WITH_QUALIFIER("failed to initialise bec.COMErrorObject", pantheios::getInitErrorString(res));
}
else
{
{ for(size_t i = 0; i != STLSOFT_NUM_ELEMENTS(severities); ++i)
{
{ for(size_t j = 0; j != STLSOFT_NUM_ELEMENTS(strings); ++j)
{
const int severity = severities[i];
comstl::set_error_info(L"the first string");
pantheios_be_COMErrorObject_logEntry(NULL, token, severity, strings[j], stlsoft::c_str_len(strings[j]));
if( PANTHEIOS_SEV_DEBUG == severity ||
PANTHEIOS_SEV_INFORMATIONAL == severity)
{
; // be.COMErrorObject does not write out debug-level or informational-level messages
}
else
{
comstl::errorinfo_desc ed;
XTESTS_TEST_MULTIBYTE_STRING_EQUAL("the first string", ed);
}
}}
}}
pantheios_be_COMErrorObject_uninit(token);
}
XTESTS_CASE_END("");
}
XTESTS_PRINT_RESULTS();
XTESTS_END_RUNNER_UPDATE_EXITCODE(&retCode);
}
return retCode;
}
int main(int argc, char** argv)
{
#ifdef STLSOFT_CF_EXCEPTION_SUPPORT
try
{
#endif /* STLSOFT_CF_EXCEPTION_SUPPORT */
comstl::com_initialiser coinit;
return main_(argc, argv);
#ifdef STLSOFT_CF_EXCEPTION_SUPPORT
}
catch(std::exception &x)
{
::fprintf(stderr, "Unhandled error: %s\n", x.what());
}
catch(...)
{
::fprintf(stderr, "Unhandled unknown error\n");
}
return EXIT_FAILURE;
#endif /* STLSOFT_CF_EXCEPTION_SUPPORT */
}
/* ////////////////////////////////////////////////////////////////////// */