light/modules/test/private/mock.test.cpp
light7734 4ce413a1d7
Some checks are pending
continuous-integration/drone/pr Build is running
wip
2025-10-21 15:37:33 +03:30

52 lines
1 KiB
C++

#include <test/mock.hpp>
#include <test/test.hpp>
using namespace lt::test;
using namespace lt::test::mock;
class ExpensiveClass
{
private:
public:
virtual int expensive(std::string str, std::optional<int> opt)
{
return 0;
}
};
class MockClass: public ExpensiveClass
{
public:
int expensive(std::string str, std::optional<int> opt) override
{
return expensive_mock(str, opt);
};
Mock<int(std::string, std::optional<int>)> expensive_mock {};
};
class ExpensiveUser
{
public:
ExpensiveUser(ExpensiveClass &dependency)
{
dependency.expensive("", 10);
}
};
// problem #1: matcher functions should construct an invokable object to test against the indexed
// argument.
Suite raii = "mock_raii"_suite = [] {
Case { "happy path won't throw" } = [] {
auto a = std::function<int(int)> {};
auto expensive = MockClass {};
auto side_effect = false;
expensive.expensive_mock.expect("test", std::nullopt)
.apply([&](auto str, auto opt) { side_effect = true; })
.returns(69);
auto user = ExpensiveUser { expensive };
};
};