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

📄 testmarshalling.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 "STAF.h"
#include "STAF_iostream.h"
#include "STAFDataTypes.h"
#include "STAFTimestamp.h"

void printOutput(const STAFString &output);

int main(void)
{
    // First without any map-class

    STAFObjectPtr logList = STAFObject::createList();

    for (int i = 1; i < 31; ++i)
    {
        STAFObjectPtr logRecord = STAFObject::createMap();

        logRecord->put("level", "info");
        logRecord->put("message", STAFString("Message #") + i);
        logRecord->put("machine", "crankin3.austin.ibm.com");
        logRecord->put("timestamp", STAFTimestamp::now().asString());

        logList->append(logRecord);
    }

    STAFString output;
    logList->marshall(output);

    cout << "Output:" << endl;
    cout << output << endl << endl;
    cout << endl;

    // Now with a map-class

    // Construct the map-class

    STAFMapClassDefinitionPtr logRecordClass =
        STAFMapClassDefinition::create("STAF/Test/LogRecord");

    logRecordClass->addKey("timestamp", "Date-Time");
    logRecordClass->addKey("level", "Level");
    logRecordClass->addKey("machine", "Machine");
    logRecordClass->addKey("message", "Message");

    // Create the marshalling context

    STAFObjectPtr mc = STAFObject::createMarshallingContext();
    mc->setMapClassDefinition(logRecordClass);

    // Populate the list

    STAFObjectPtr logList2 = STAFObject::createList();

    for (int j = 1; j < 31; ++j)
    {
        STAFObjectPtr logRecord = logRecordClass->createInstance();

        logRecord->put("level", "info");
        logRecord->put("message", STAFString("Message #") + j);
        logRecord->put("machine", "crankin3.austin.ibm.com");
        logRecord->put("timestamp", STAFTimestamp::now().asString());

        logList2->append(logRecord);
    }

    mc->setRootObject(logList2);

    STAFString output2 = mc->marshall();

    cout << "Output MC:" << endl;
    cout << output2 << endl << endl;

    printOutput(output2);

    return 0;
}


void printOutput(const STAFString &output)
{
    STAFObjectPtr outputContext = STAFObject::unmarshall(output);
    STAFObjectPtr outputList = outputContext->getRootObject();

    STAFObjectIteratorPtr iter = outputList->iterate();
    int itemNumber = 1;

    while (iter->hasNext())
    {
        STAFObjectPtr logRecord = iter->next();

        cout << "Log Record #" << itemNumber++ << endl;;

        if (logRecord->hasKey("staf-map-class-name"))
        {
            STAFMapClassDefinitionPtr mapClass =
                outputContext->getMapClassDefinition(
                    logRecord->get("staf-map-class-name")->asString());
            STAFObjectIteratorPtr keyIter = mapClass->keyIterator();

            while (keyIter->hasNext())
            {
                STAFObjectPtr key = keyIter->next();

                cout << key->get("display-name")->asString() << ": "
                     << logRecord->get(key->get("key")->asString())->asString()
                     << endl;;
            }

            cout << endl;
        }
        else
        {
            cout << "Level  : " << logRecord->get("level")->asString() << endl;
            cout << "Message: " << logRecord->get("message")->asString() << endl;
            cout << "Machine: " << logRecord->get("machine")->asString() << endl;
            cout << endl;
        }
    }
}

⌨️ 快捷键说明

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