#pragma once

#include <memory>
#include <string>
#include <functional>

class TestCase
{
public:
    using TestCaseFunction = std::function<void()>;

    TestCase(const std::string& name, const std::string& tags, TestCaseFunction func)
        : mTestFunction(func),
          mName(name),
          mTags(tags)
    {

    };

    virtual ~TestCase() = default;

    const std::string& getName() const
    {
        return mName;
    }

    const std::string& getTags() const
    {
        return mTags;
    }

    virtual void run()
    {
        mTestFunction();
    };

public:
    TestCaseFunction mTestFunction{nullptr};

private:
    std::string mName;
    std::string mTags;

};
using TestCasePtr = std::unique_ptr<TestCase>;
