Play-/tools/McServTest/GameTestSheet.cpp
Jean-Philip Desjardins 51c77f2444 Cleanup.
2023-12-20 09:40:59 -05:00

85 lines
2.5 KiB
C++

#include <string.h>
#include <assert.h>
#include <memory>
#include "GameTestSheet.h"
#include "xml/Parser.h"
#include "xml/Utils.h"
CGameTestSheet::CGameTestSheet(Framework::CStream& stream)
{
ParseSheet(stream);
}
CGameTestSheet::ENVIRONMENT CGameTestSheet::GetEnvironment(uint32 id) const
{
auto environmentIterator = m_environments.find(id);
if(environmentIterator == std::end(m_environments))
{
return ENVIRONMENT();
}
else
{
return environmentIterator->second;
}
}
const CGameTestSheet::TestArray& CGameTestSheet::GetTests() const
{
return m_tests;
}
void CGameTestSheet::ParseSheet(Framework::CStream& stream)
{
auto document = Framework::Xml::CParser::ParseDocument(stream);
//Environments
{
auto environmentNodes = document->SelectNodes("Game/Environments/Environment");
for(const auto& environmentNode : environmentNodes)
{
auto id = Framework::Xml::GetAttributeIntValue(environmentNode, "Id");
EnvironmentActionArray actions;
for(const auto& actionNode : environmentNode->GetChildren())
{
if(!actionNode->IsTag()) continue;
auto actionType = actionNode->GetText();
auto actionName = Framework::Xml::GetAttributeStringValue(actionNode.get(), "Name");
int actionSize = 0;
Framework::Xml::GetAttributeIntValue(actionNode.get(), "Size", &actionSize);
ENVIRONMENT_ACTION action;
action.name = actionName;
action.size = actionSize;
if(!strcmp(actionType, "Directory"))
{
action.type = ENVIRONMENT_ACTION_CREATE_DIRECTORY;
}
else if(!strcmp(actionType, "File"))
{
action.type = ENVIRONMENT_ACTION_CREATE_FILE;
}
actions.push_back(action);
}
assert(m_environments.find(id) == std::end(m_environments));
m_environments.insert(std::make_pair(id, actions));
}
}
//Tests
{
auto testNodes = document->SelectNodes("Game/Tests/Test");
for(const auto& testNode : testNodes)
{
TEST test;
test.query = Framework::Xml::GetAttributeStringValue(testNode, "Query");
test.environmentId = Framework::Xml::GetAttributeIntValue(testNode, "EnvironmentId");
test.maxEntries = Framework::Xml::GetAttributeIntValue(testNode, "MaxEntries");
test.result = Framework::Xml::GetAttributeIntValue(testNode, "Result");
Framework::Xml::GetAttributeStringValue(testNode, "CurrentDirectory", &test.currentDirectory);
auto entryNodes = testNode->SelectNodes("Entry");
for(const auto& entryNode : entryNodes)
{
auto entryName = Framework::Xml::GetAttributeStringValue(entryNode, "Name");
test.entries.push_back(entryName);
}
m_tests.push_back(test);
}
}
}