tests: Added initial test structure

This commit is contained in:
WerWolv
2021-09-11 14:41:18 +02:00
parent 71b06f4b20
commit 8396e40fa0
11 changed files with 387 additions and 37 deletions

View File

@@ -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;
};
}

View File

@@ -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;
};
}

View File

@@ -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;
)";
}