mirror of
https://github.com/Laupetin/OpenAssetTools.git
synced 2025-04-21 00:25:44 +00:00
Implement asset struct tests rendering
This commit is contained in:
parent
d4a98b7c52
commit
a2029da1d5
@ -43,7 +43,7 @@ bool CodeGenerator::GenerateCodeForTemplate(RenderingContext* context, ICodeTemp
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
codeTemplate->RenderFile(stream, codeFile.m_tag);
|
codeTemplate->RenderFile(stream, codeFile.m_tag, context);
|
||||||
|
|
||||||
stream.close();
|
stream.close();
|
||||||
}
|
}
|
||||||
|
@ -30,5 +30,5 @@ public:
|
|||||||
ICodeTemplate& operator=(ICodeTemplate&& other) noexcept = default;
|
ICodeTemplate& operator=(ICodeTemplate&& other) noexcept = default;
|
||||||
|
|
||||||
virtual std::vector<CodeTemplateFile> GetFilesToRender(RenderingContext* context) = 0;
|
virtual std::vector<CodeTemplateFile> GetFilesToRender(RenderingContext* context) = 0;
|
||||||
virtual void RenderFile(std::ostream& stream, int fileTag) = 0;
|
virtual void RenderFile(std::ostream& stream, int fileTag, RenderingContext* context) = 0;
|
||||||
};
|
};
|
||||||
|
@ -1,7 +1,85 @@
|
|||||||
#include "AssetStructTestsTemplate.h"
|
#include "AssetStructTestsTemplate.h"
|
||||||
|
|
||||||
|
#include <iostream>
|
||||||
#include <sstream>
|
#include <sstream>
|
||||||
|
|
||||||
|
#include "Domain/Computations/StructureComputations.h"
|
||||||
|
|
||||||
|
#define LINE(x) DoIntendation(); m_out << x << "\n"
|
||||||
|
|
||||||
|
class AssetStructTestsTemplate::Internal
|
||||||
|
{
|
||||||
|
static constexpr const char* INTENDATION = " ";
|
||||||
|
|
||||||
|
std::ostream& m_out;
|
||||||
|
RenderingContext& m_env;
|
||||||
|
unsigned m_intendation;
|
||||||
|
|
||||||
|
void DoIntendation() const
|
||||||
|
{
|
||||||
|
for (auto i = 0u; i < m_intendation; i++)
|
||||||
|
m_out << INTENDATION;
|
||||||
|
}
|
||||||
|
|
||||||
|
void TestMethod(StructureInformation* structure)
|
||||||
|
{
|
||||||
|
if (structure->m_non_embedded_reference_exists)
|
||||||
|
{
|
||||||
|
LINE("TEST_METHOD(Test_"<<structure->m_definition->m_name<<")");
|
||||||
|
LINE("{");
|
||||||
|
m_intendation++;
|
||||||
|
LINE("Assert::AreEqual("<<structure->m_definition->GetSize()<<"u, sizeof("<<structure->m_definition->GetFullName()<<"));");
|
||||||
|
LINE("Assert::AreEqual("<<structure->m_definition->GetAlignment()<<"u, alignof("<<structure->m_definition->GetFullName()<<"));");
|
||||||
|
m_intendation--;
|
||||||
|
LINE("}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public:
|
||||||
|
Internal(std::ostream& stream, RenderingContext* context)
|
||||||
|
: m_out(stream),
|
||||||
|
m_env(*context),
|
||||||
|
m_intendation(0u)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void Source()
|
||||||
|
{
|
||||||
|
LINE("// ====================================================================");
|
||||||
|
LINE("// This file has been generated by ZoneCodeGenerator.");
|
||||||
|
LINE("// Do not modify.");
|
||||||
|
LINE("// Any changes will be discarded when regenerating.");
|
||||||
|
LINE("// ====================================================================");
|
||||||
|
LINE("");
|
||||||
|
LINE("#include \"CppUnitTest.h\"");
|
||||||
|
LINE("#include \"Game/" << m_env.m_game << "/" << m_env.m_game << ".h\"");
|
||||||
|
LINE("");
|
||||||
|
LINE("using namespace Microsoft::VisualStudio::CppUnitTestFramework;");
|
||||||
|
LINE("using namespace " << m_env.m_game << ";");
|
||||||
|
LINE("");
|
||||||
|
LINE("namespace ZoneCommonTests");
|
||||||
|
LINE("{");
|
||||||
|
m_intendation++;
|
||||||
|
LINE("TEST_CLASS(AssetStructTest_"<<m_env.m_asset->m_definition->m_name<<")");
|
||||||
|
LINE("{");
|
||||||
|
LINE("public:");
|
||||||
|
m_intendation++;
|
||||||
|
|
||||||
|
TestMethod(m_env.m_asset);
|
||||||
|
for (auto* structure : m_env.m_used_structures)
|
||||||
|
{
|
||||||
|
StructureComputations computations(structure->m_info);
|
||||||
|
if (!structure->m_info->m_definition->m_anonymous && !computations.IsAsset())
|
||||||
|
TestMethod(structure->m_info);
|
||||||
|
}
|
||||||
|
|
||||||
|
m_intendation--;
|
||||||
|
LINE("};");
|
||||||
|
m_intendation--;
|
||||||
|
LINE("}");
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
std::vector<CodeTemplateFile> AssetStructTestsTemplate::GetFilesToRender(RenderingContext* context)
|
std::vector<CodeTemplateFile> AssetStructTestsTemplate::GetFilesToRender(RenderingContext* context)
|
||||||
{
|
{
|
||||||
std::vector<CodeTemplateFile> files;
|
std::vector<CodeTemplateFile> files;
|
||||||
@ -19,6 +97,12 @@ std::vector<CodeTemplateFile> AssetStructTestsTemplate::GetFilesToRender(Renderi
|
|||||||
return files;
|
return files;
|
||||||
}
|
}
|
||||||
|
|
||||||
void AssetStructTestsTemplate::RenderFile(std::ostream& stream, int fileTag)
|
void AssetStructTestsTemplate::RenderFile(std::ostream& stream, const int fileTag, RenderingContext* context)
|
||||||
{
|
{
|
||||||
|
Internal internal(stream, context);
|
||||||
|
|
||||||
|
if (fileTag == TAG_SOURCE)
|
||||||
|
internal.Source();
|
||||||
|
else
|
||||||
|
std::cout << "Invalid tag in AssetStructTestsTemplate\n";
|
||||||
}
|
}
|
||||||
|
@ -5,7 +5,9 @@ class AssetStructTestsTemplate final : public ICodeTemplate
|
|||||||
{
|
{
|
||||||
static constexpr int TAG_SOURCE = 1;
|
static constexpr int TAG_SOURCE = 1;
|
||||||
|
|
||||||
|
class Internal;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
std::vector<CodeTemplateFile> GetFilesToRender(RenderingContext* context) override;
|
std::vector<CodeTemplateFile> GetFilesToRender(RenderingContext* context) override;
|
||||||
void RenderFile(std::ostream& stream, int fileTag) override;
|
void RenderFile(std::ostream& stream, int fileTag, RenderingContext* context) override;
|
||||||
};
|
};
|
||||||
|
@ -25,7 +25,7 @@ std::vector<CodeTemplateFile> ZoneLoadTemplate::GetFilesToRender(RenderingContex
|
|||||||
return files;
|
return files;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ZoneLoadTemplate::RenderFile(std::ostream& stream, const int fileTag)
|
void ZoneLoadTemplate::RenderFile(std::ostream& stream, const int fileTag, RenderingContext* context)
|
||||||
{
|
{
|
||||||
if (fileTag == TAG_HEADER)
|
if (fileTag == TAG_HEADER)
|
||||||
{
|
{
|
||||||
|
@ -8,5 +8,5 @@ class ZoneLoadTemplate final : public ICodeTemplate
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
std::vector<CodeTemplateFile> GetFilesToRender(RenderingContext* context) override;
|
std::vector<CodeTemplateFile> GetFilesToRender(RenderingContext* context) override;
|
||||||
void RenderFile(std::ostream& stream, int fileTag) override;
|
void RenderFile(std::ostream& stream, int fileTag, RenderingContext* context) override;
|
||||||
};
|
};
|
||||||
|
@ -25,6 +25,6 @@ std::vector<CodeTemplateFile> ZoneWriteTemplate::GetFilesToRender(RenderingConte
|
|||||||
return files;
|
return files;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ZoneWriteTemplate::RenderFile(std::ostream& stream, const int fileTag)
|
void ZoneWriteTemplate::RenderFile(std::ostream& stream, const int fileTag, RenderingContext* context)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
@ -8,5 +8,5 @@ class ZoneWriteTemplate final : public ICodeTemplate
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
std::vector<CodeTemplateFile> GetFilesToRender(RenderingContext* context) override;
|
std::vector<CodeTemplateFile> GetFilesToRender(RenderingContext* context) override;
|
||||||
void RenderFile(std::ostream& stream, int fileTag) override;
|
void RenderFile(std::ostream& stream, int fileTag, RenderingContext* context) override;
|
||||||
};
|
};
|
||||||
|
Loading…
x
Reference in New Issue
Block a user