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

📄 tclstaf.cpp

📁 Software Testing Automation Framework (STAF)的开发代码
💻 CPP
字号:
/*****************************************************************************//* Software Testing Automation Framework (STAF)                              *//* (C) Copyright IBM Corp. 2001                                              *//*                                                                           *//* This software is licensed under the Common Public License (CPL) V1.0.     *//*****************************************************************************/#include "STAFOSTypes.h"#include <tcl.h>#include "STAF.h"#include "STAFString.h"static STAFString registerString(STAFString("STAF::Register") + kUTF8_NULL);static STAFString submitString(STAFString("STAF::Submit") + kUTF8_NULL);static STAFString unregisterString(STAFString("STAF::UnRegister") + kUTF8_NULL);static STAFString handleString(STAFString("STAF::Handle") + kUTF8_NULL);static STAFString rcString(STAFString("STAF::RC") + kUTF8_NULL);static STAFString resultString(STAFString("STAF::Result") + kUTF8_NULL);static STAFString addPrivacyDelimitersString(    STAFString("STAF::AddPrivacyDelimiters") + kUTF8_NULL);static STAFString escapePrivacyDelimitersString(    STAFString("STAF::EscapePrivacyDelimiters") + kUTF8_NULL);static STAFString maskPrivateDataString(    STAFString("STAF::MaskPrivateData") + kUTF8_NULL);static STAFString removePrivacyDelimitersString(    STAFString("STAF::RemovePrivacyDelimiters") + kUTF8_NULL);static inline char *getBuffer(const STAFString &string){ return const_cast<char *>(string.buffer()); }extern "C"{#if defined(STAF_OS_NAME_HPUX) && !defined(__ia64)    void _main();#endif/****************************************//*  Tcl Wrappers for libSTAF functions  *//****************************************/int RegisterCmd(ClientData clientData, Tcl_Interp *interp, int objc,                Tcl_Obj *CONST objv[]);int SubmitCmd(ClientData clientData, Tcl_Interp *interp, int objc,              Tcl_Obj *CONST objv[]);int UnRegisterCmd(ClientData clientData, Tcl_Interp *interp, int objc,                  Tcl_Obj *CONST objv[]);int AddPrivacyDelimitersCmd(ClientData clientData, Tcl_Interp *interp,                            int objc, Tcl_Obj *CONST objv[]);int EscapePrivacyDelimitersCmd(ClientData clientData, Tcl_Interp *interp,                               int objc, Tcl_Obj *CONST objv[]);int MaskPrivateDataCmd(ClientData clientData, Tcl_Interp *interp,                       int objc, Tcl_Obj *CONST objv[]);int RemovePrivacyDelimitersCmd(ClientData clientData, Tcl_Interp *interp,                               int objc, Tcl_Obj *CONST objv[]);/********************************************************************//* Initialization Procedure called when package is loaded in script *//********************************************************************/int Tclstaf_Init(Tcl_Interp *interp) {    #if defined(STAF_OS_NAME_HPUX) && !defined(__ia64)        _main();    #endif    /* Register STAFRegister() */    Tcl_CreateObjCommand(interp, getBuffer(registerString), RegisterCmd,                         (ClientData)NULL, (Tcl_CmdDeleteProc *)NULL);    /* Register STAFSubmit() */    Tcl_CreateObjCommand(interp, getBuffer(submitString), SubmitCmd,                         (ClientData)NULL, (Tcl_CmdDeleteProc *)NULL);        /* Register STAFUnRegister() */    Tcl_CreateObjCommand(interp, getBuffer(unregisterString), UnRegisterCmd,                         (ClientData)NULL, (Tcl_CmdDeleteProc *)NULL);    /* Register STAFAddPrivacyDelimiters() */    Tcl_CreateObjCommand(interp, getBuffer(addPrivacyDelimitersString),                         AddPrivacyDelimitersCmd, (ClientData)NULL,                         (Tcl_CmdDeleteProc *)NULL);    /* Register STAFEscapePrivacyDelimiters() */    Tcl_CreateObjCommand(interp, getBuffer(escapePrivacyDelimitersString),                         EscapePrivacyDelimitersCmd, (ClientData)NULL,                         (Tcl_CmdDeleteProc *)NULL);    /* Register STAFMaskPrivateData() */    Tcl_CreateObjCommand(interp, getBuffer(maskPrivateDataString),                         MaskPrivateDataCmd, (ClientData)NULL,                         (Tcl_CmdDeleteProc *)NULL);    /* Register STAFRemovePrivacyDelimiters() */    Tcl_CreateObjCommand(interp, getBuffer(removePrivacyDelimitersString),                         RemovePrivacyDelimitersCmd, (ClientData)NULL,                         (Tcl_CmdDeleteProc *)NULL);    Tcl_PkgProvide(interp, "TCLSTAF", "1.0");    return TCL_OK;}/******************************************//* Implementation of Wrappers             *//******************************************/// XXX: In serveral places below, I use Tcl_NewStringObj, but I don't know//      how to get rid of the new strings, or, even if I need toint RegisterCmd(ClientData clientData, Tcl_Interp *interp, int objc,                Tcl_Obj *CONST objv[]){      if (objc != 2)    {        STAFString usage("Usage: STAF::Register processName");        usage += kUTF8_NULL;        Tcl_WrongNumArgs(interp, 1, objv, getBuffer(usage));           return TCL_ERROR;    }        STAFHandle_t handle = 0;    unsigned int rc = STAFRegisterUTF8(Tcl_GetStringFromObj(objv[1], 0),                                       &handle);      Tcl_ObjSetVar2(interp, Tcl_NewStringObj(getBuffer(rcString), -1), 0,                   Tcl_NewIntObj(static_cast<int>(rc)), 0);    if (rc == 0)    {        Tcl_ObjSetVar2(interp, Tcl_NewStringObj(getBuffer(handleString), -1), 0,                       Tcl_NewIntObj(static_cast<int>(handle)), 0);    }        Tcl_SetIntObj(Tcl_GetObjResult(interp), static_cast<int>(rc));              return TCL_OK;}int SubmitCmd (ClientData clientData, Tcl_Interp *interp, int objc,               Tcl_Obj *CONST objv[]){    if (objc != 4)    {        STAFString usage("Usage: STAF::Register location service request");        usage += kUTF8_NULL;        Tcl_WrongNumArgs(interp, 1, objv, getBuffer(usage));           return TCL_ERROR;    }        STAFHandle_t handle = 0;    Tcl_Obj *handleObj =            Tcl_ObjGetVar2(interp, Tcl_NewStringObj(getBuffer(handleString),                           -1), 0, TCL_LEAVE_ERR_MSG);    if (handleObj == 0) return TCL_ERROR;    if (Tcl_GetIntFromObj(interp, handleObj,                          reinterpret_cast<int *>(&handle)) != TCL_OK)    {        return TCL_ERROR;    }    int requestLength = 0;    char *request = Tcl_GetStringFromObj(objv[3], &requestLength);    unsigned int resultLength = 0;    char *result = 0;    unsigned int rc = STAFSubmitUTF8(handle, Tcl_GetStringFromObj(objv[1], 0),                                     Tcl_GetStringFromObj(objv[2], 0),                                     request, requestLength,                                     &result, &resultLength);      Tcl_ObjSetVar2(interp, Tcl_NewStringObj(getBuffer(rcString), -1), 0,                   Tcl_NewIntObj(static_cast<int>(rc)), 0);    Tcl_ObjSetVar2(interp, Tcl_NewStringObj(getBuffer(resultString), -1), 0,                   Tcl_NewStringObj(result, static_cast<int>(resultLength)), 0);        STAFFree(handle, result);    Tcl_SetIntObj(Tcl_GetObjResult(interp), static_cast<int>(rc));    return TCL_OK;}int UnRegisterCmd(ClientData clientData, Tcl_Interp *interp, int objc,                  Tcl_Obj *CONST objv[]){    if (objc != 1)    {        STAFString usage("Usage: STAF::UnRegister");        usage += kUTF8_NULL;        Tcl_WrongNumArgs(interp, 1, objv, getBuffer(usage));        return TCL_ERROR;    }        STAFHandle_t handle = 0;    Tcl_Obj *handleObj =            Tcl_ObjGetVar2(interp, Tcl_NewStringObj(getBuffer(handleString),                           -1), 0, TCL_LEAVE_ERR_MSG);    if (handleObj == 0) return TCL_ERROR;    if (Tcl_GetIntFromObj(interp, handleObj,                          reinterpret_cast<int *>(&handle)) != TCL_OK)    {        return TCL_ERROR;    }    unsigned int rc = STAFUnRegister(handle);    Tcl_ObjSetVar2(interp, Tcl_NewStringObj(getBuffer(rcString), -1), 0,                   Tcl_NewIntObj(static_cast<int>(rc)), 0);    Tcl_UnsetVar(interp, getBuffer(handleString), TCL_LEAVE_ERR_MSG);    Tcl_SetIntObj(Tcl_GetObjResult(interp), static_cast<int>(rc));    return TCL_OK;}int AddPrivacyDelimitersCmd(ClientData clientData, Tcl_Interp *interp,                            int objc, Tcl_Obj *CONST objv[]){    if (objc != 2)    {        STAFString usage("Usage: STAF::AddPrivacyDelimiters data");        usage += kUTF8_NULL;        Tcl_WrongNumArgs(interp, 1, objv, getBuffer(usage));        return TCL_ERROR;    }        /* Get data argument (type String) and convert to type STAFString_t */    int dataLength = 0;    char *dataPtr = Tcl_GetStringFromObj(objv[1], &dataLength);    STAFString_t data = 0;    STAFStringConstruct(&data, dataPtr, dataLength, 0);    STAFString_t result = 0;    STAFAddPrivacyDelimiters(data, &result);    /* Convert result to a Tcl string object */    unsigned int resultLength = 0;    const char *resultBuffer = 0;        STAFStringGetBuffer(result, &resultBuffer, &resultLength, 0);    Tcl_SetStringObj(Tcl_GetObjResult(interp),                     const_cast<char *>(resultBuffer),                     static_cast<int>(resultLength));    STAFStringDestruct(&data, 0);    STAFStringDestruct(&result, 0);    return TCL_OK;}int EscapePrivacyDelimitersCmd(ClientData clientData, Tcl_Interp *interp,                               int objc, Tcl_Obj *CONST objv[]){    if (objc != 2)    {        STAFString usage("Usage: STAF::EscapePrivacyDelimiters data");        usage += kUTF8_NULL;        Tcl_WrongNumArgs(interp, 1, objv, getBuffer(usage));        return TCL_ERROR;    }        /* Get data argument (type String) and convert to type STAFString_t */    int dataLength = 0;    char *dataPtr = Tcl_GetStringFromObj(objv[1], &dataLength);    STAFString_t data = 0;    STAFStringConstruct(&data, dataPtr, dataLength, 0);    STAFString_t result = 0;    STAFEscapePrivacyDelimiters(data, &result);    /* Convert result to a Tcl string object */    unsigned int resultLength = 0;    const char *resultBuffer = 0;        STAFStringGetBuffer(result, &resultBuffer, &resultLength, 0);    Tcl_SetStringObj(Tcl_GetObjResult(interp),                     const_cast<char *>(resultBuffer),                     static_cast<int>(resultLength));    STAFStringDestruct(&data, 0);    STAFStringDestruct(&result, 0);    return TCL_OK;}int MaskPrivateDataCmd(ClientData clientData, Tcl_Interp *interp,                       int objc, Tcl_Obj *CONST objv[]){    if (objc != 2)    {        STAFString usage("Usage: STAF::MaskPrivateData data");        usage += kUTF8_NULL;        Tcl_WrongNumArgs(interp, 1, objv, getBuffer(usage));        return TCL_ERROR;    }        /* Get data argument (type String) and convert to type STAFString_t */    int dataLength = 0;    char *dataPtr = Tcl_GetStringFromObj(objv[1], &dataLength);    STAFString_t data = 0;    STAFStringConstruct(&data, dataPtr, dataLength, 0);    STAFString_t result = 0;    STAFMaskPrivateData(data, &result);    /* Convert result to a Tcl string object */    unsigned int resultLength = 0;    const char *resultBuffer = 0;        STAFStringGetBuffer(result, &resultBuffer, &resultLength, 0);    Tcl_SetStringObj(Tcl_GetObjResult(interp),                     const_cast<char *>(resultBuffer),                     static_cast<int>(resultLength));    STAFStringDestruct(&data, 0);    STAFStringDestruct(&result, 0);    return TCL_OK;}int RemovePrivacyDelimitersCmd(ClientData clientData, Tcl_Interp *interp,                               int objc, Tcl_Obj *CONST objv[]){    if (objc != 2 && objc != 3)    {        STAFString usage(            "Usage: STAF::RemovePrivacyDelimiters data [numLevels]");        usage += kUTF8_NULL;        Tcl_WrongNumArgs(interp, 1, objv, getBuffer(usage));        return TCL_ERROR;    }        /* Get data argument (type String) and convert to type STAFString_t */    int dataLength = 0;    char *dataPtr = Tcl_GetStringFromObj(objv[1], &dataLength);    STAFString_t data = 0;    STAFStringConstruct(&data, dataPtr, dataLength, 0);    /* The numLevels argument is optional.  Defaults to 0 */    int numLevels = 0;        if (objc == 3)    {        Tcl_GetIntFromObj(interp, objv[2], &numLevels);    }    STAFString_t result = 0;    STAFRemovePrivacyDelimiters(data, numLevels, &result);    /* Convert result to a Tcl string object */    unsigned int resultLength = 0;    const char *resultBuffer = 0;        STAFStringGetBuffer(result, &resultBuffer, &resultLength, 0);    Tcl_SetStringObj(Tcl_GetObjResult(interp),                     const_cast<char *>(resultBuffer),                     static_cast<int>(resultLength));    STAFStringDestruct(&data, 0);    STAFStringDestruct(&result, 0);    return TCL_OK;}static char sInfoBuffer[256] = { 0 };static int sInfoBufferInited = 0;char *STAFGetInformation(){   if (!sInfoBufferInited)   {       sprintf(sInfoBuffer, "%s STAF Tcl support library version 1.0",               #ifdef NDEBUG                   "Retail");               #else                   "Debug");               #endif       sInfoBufferInited = 1;   }   return sInfoBuffer;}} // end extern "C"

⌨️ 快捷键说明

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