mirror of
https://github.com/WerWolv/ImHex.git
synced 2026-03-30 21:05:56 -05:00
tests: Added initial test structure
This commit is contained in:
@@ -1,8 +1,39 @@
|
||||
//
|
||||
// Created by werwo on 11/09/2021.
|
||||
//
|
||||
#pragma once
|
||||
|
||||
#ifndef IMHEX_TEST_PATTERN_HPP
|
||||
#define IMHEX_TEST_PATTERN_HPP
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
#endif //IMHEX_TEST_PATTERN_HPP
|
||||
#include <hex/pattern_language/pattern_data.hpp>
|
||||
|
||||
namespace hex::test {
|
||||
|
||||
class TestPattern {
|
||||
public:
|
||||
TestPattern() = default;
|
||||
virtual ~TestPattern() {
|
||||
for (auto &pattern : this->m_patterns)
|
||||
delete pattern;
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
static T* createVariablePattern(u64 offset, size_t size, const std::string &typeName, const std::string &varName) {
|
||||
auto pattern = new T(offset, size);
|
||||
pattern->setTypeName(typeName);
|
||||
pattern->setVariableName(varName);
|
||||
|
||||
return pattern;
|
||||
}
|
||||
|
||||
virtual std::string getSourceCode() const = 0;
|
||||
|
||||
[[nodiscard]]
|
||||
virtual const std::vector<pl::PatternData*>& getPatterns() const final { return this->m_patterns; }
|
||||
virtual void addPattern(pl::PatternData *pattern) final {
|
||||
this->m_patterns.push_back(pattern);
|
||||
}
|
||||
|
||||
private:
|
||||
std::vector<pl::PatternData*> m_patterns;
|
||||
};
|
||||
|
||||
}
|
||||
@@ -1,30 +1,23 @@
|
||||
#pragma once
|
||||
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
#include <hex/pattern_language/pattern_data.hpp>
|
||||
#include "test_pattern.hpp"
|
||||
|
||||
namespace hex::test {
|
||||
|
||||
class TestPattern {
|
||||
class TestPatternExample : public TestPattern {
|
||||
public:
|
||||
TestPattern() = default;
|
||||
virtual TestPattern() {
|
||||
for (auto &pattern : this->m_patterns)
|
||||
delete pattern;
|
||||
}
|
||||
TestPatternExample() {
|
||||
|
||||
virtual std::string getSourceCode() = 0;
|
||||
}
|
||||
~TestPatternExample() override = default;
|
||||
|
||||
[[nodiscard]]
|
||||
virtual const std::vector<pl::PatternData*>& getPatterns() const final { return this->m_patterns; }
|
||||
virtual void addPattern(pl::PatternData *pattern) final {
|
||||
this->m_patterns.push_back(pattern);
|
||||
std::string getSourceCode() const override {
|
||||
return R"(
|
||||
|
||||
)";
|
||||
}
|
||||
|
||||
private:
|
||||
std::vector<pl::PatternData*> m_patterns;
|
||||
};
|
||||
|
||||
}
|
||||
@@ -4,20 +4,29 @@
|
||||
|
||||
namespace hex::test {
|
||||
|
||||
class TestPatternExample : public TestPattern {
|
||||
class TestPatternPlacement : public TestPattern {
|
||||
public:
|
||||
TestPatternExample() {
|
||||
auto placementTest = new pl::PatternDataSigned(0x00, sizeof(u32));
|
||||
placementTest->setTypeName("u32");
|
||||
placementTest->setVariableName("placementTest");
|
||||
addPattern(placementTest);
|
||||
TestPatternPlacement() {
|
||||
// placementVar
|
||||
{
|
||||
addPattern(createVariablePattern<pl::PatternDataUnsigned>(0x00, sizeof(u32), "u32", "placementVar"));
|
||||
}
|
||||
|
||||
// placementArray
|
||||
{
|
||||
auto placementArray = createVariablePattern<pl::PatternDataStaticArray>(0x10, sizeof(u8) * 10, "u8", "placementArray");
|
||||
placementArray->setEntries(createVariablePattern<pl::PatternDataUnsigned>(0x10, sizeof(u8), "u8", ""), 10);
|
||||
addPattern(placementArray);
|
||||
}
|
||||
|
||||
}
|
||||
~TestPatternExample() override = default;
|
||||
~TestPatternPlacement() override = default;
|
||||
|
||||
[[nodiscard]]
|
||||
std::string getSourceCode() const override {
|
||||
return R"(
|
||||
u32 placementTest @ 0x00;
|
||||
u32 placementVar @ 0x00;
|
||||
u8 placementArray[10] @ 0x10;
|
||||
)";
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user