📄 testmarshalling.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 + -