⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 stafexception.h

📁 Software Testing Automation Framework (STAF)的开发代码
💻 H
字号:
/*****************************************************************************//* Software Testing Automation Framework (STAF)                              *//* (C) Copyright IBM Corp. 2001                                              *//*                                                                           *//* This software is licensed under the Common Public License (CPL) V1.0.     *//*****************************************************************************/#ifndef STAF_Exception#define STAF_Exception#ifdef __cplusplus#include <string>#include <stdio.h>#include "STAF_iostream.h"#include "STAFError.h"/* The THROW_STAF_EXCEPTION macro is used to throw a STAFException or *//* one of its derivatives.  It also adds the location information to  *//* the exception.                                                     */#define THROW_STAF_EXCEPTION(e)\{ e.setLocation(__FILE__, __LINE__); throw e; }class STAFException{public:    STAFException(const char *text, unsigned int errorCode = 0,                  const char *name = "STAFException")        : fErrorCode(errorCode)    {        // Using strncpy to make sure don't exceed the size of fName        strncpy(fName, name, sizeof(fName) - 1);        fName[sizeof(fName) - 1] = 0;        // Using strncpy to make sure don't exceed the size of fText        strncpy(fText, text, sizeof(fText) - 1);        fText[sizeof(fText) - 1] = 0;        fLocation[0] = 0;    }    void setLocation(const char *filename, unsigned int lineNumber)    {        // Make sure don't exceed the size of fLocation.        // Note: The 16 is based on the lineNumber length being at most 13,        //       plus 2 for the size of "(" and ")" plus 1.        sprintf(fLocation, "%.*s(%u)", sizeof(fLocation) - 16,                filename, lineNumber);    }    void trace(const char *caughtWhere = 0);    void trace(unsigned int tracePoint, const char *caughtWhere = 0);    static void checkRC(STAFRC_t rc, const char *errorMessage,                         unsigned int osRC = 0);    inline void write(const char *caughtWhere = 0, ostream &os = cout)    {        if (caughtWhere) os << "In " << caughtWhere << ":" << endl;        os << "Caught STAFException" << endl           << "Name      : " << getName() << endl           << "Location  : " << getLocation() << endl           << "Text      : " << getText() << endl           << "Error code: " << getErrorCode() << endl;     }        const char *getName() { return fName; }    const char *getText() { return fText; }    const char *getLocation() { return fLocation; }    unsigned int getErrorCode() { return fErrorCode; }    ~STAFException() { /* Do Nothing */ }protected:    static void checkStandardExceptions(char *buffer, STAFRC_t rc,                                        const char *errorMessage,                                        unsigned int osRC);private:    char fName[128];    /* Note: If change size of fText, must change size of buffer */    char fText[512];    char fLocation[384];    unsigned int fErrorCode;};/* The STAF_EXCEPTION_DEFINITION macro is used to create new types of *//* STAF Exceptions.                                                 */#define STAF_EXCEPTION_DEFINITION(className, baseName)\class className : public baseName\{\public:\    className(const char *text, unsigned int errorCode = 0,\              const char *name = #className)\        : baseName(text, errorCode, name)\    { /* Do Nothing */ }\\    static void checkRC(STAFRC_t rc, const char *errorMessage, unsigned int osRC = 0)\    {\        if (rc != kSTAFOk)\        {\            /* Note the buffer size must be same as the fText size */\            char buffer[512] = { 0 };\            checkStandardExceptions(buffer, rc, errorMessage, osRC);\            sprintf(buffer, "%.*s", sizeof(buffer) - 1, errorMessage);\            THROW_STAF_EXCEPTION(className(buffer, rc));\        }\    }\\    ~className() { /* Do Nothing */ }\};STAF_EXCEPTION_DEFINITION(STAFOutOfBoundsException,   STAFException);STAF_EXCEPTION_DEFINITION(STAFInvalidObjectException, STAFException);STAF_EXCEPTION_DEFINITION(STAFInvalidParmException,   STAFException);STAF_EXCEPTION_DEFINITION(STAFBaseOSErrorException,   STAFException);inline void STAFException::checkRC(STAFRC_t rc, const char *errorMessage,                                   unsigned int osRC){    if (rc != kSTAFOk)    {        // Note the buffer size must be same as the fText size        char buffer[512] = { 0 };        checkStandardExceptions(buffer, rc, errorMessage, osRC);        // Makes sure no buffer overflow occurs if errorMessage        // exceeds size of buffer        sprintf(buffer, "%.*s", sizeof(buffer) - 1, errorMessage);        THROW_STAF_EXCEPTION(STAFException(buffer, rc));    }}inline void STAFException::checkStandardExceptions(char *buffer, STAFRC_t rc,                                                   const char *errorMessage,                                                   unsigned int osRC){    switch (rc)    {        case kSTAFBaseOSError:            // Makes sure no buffer overflow occurs             // Note: The 16 is based on the osRC length being at most 13,            //       plus 2 for the size of ": " plus 1.            sprintf(buffer, "%.*s: %u", sizeof(buffer) - 16,                    errorMessage, osRC);            THROW_STAF_EXCEPTION(STAFBaseOSErrorException(buffer, rc));        case kSTAFInvalidObject:            // Makes sure no buffer overflow occurs if errorMessage             // exceeds size of buffer            sprintf(buffer, "%.*s", sizeof(buffer) - 1, errorMessage);            THROW_STAF_EXCEPTION(STAFInvalidObjectException(buffer, rc));    case kSTAFInvalidParm:            // Makes sure no buffer overflow occurs if errorMessage             // exceeds size of buffer            sprintf(buffer, "%.*s", sizeof(buffer) - 1, errorMessage);            THROW_STAF_EXCEPTION(STAFInvalidParmException(buffer, rc));        default:            break;    }} #endif#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -