#ifndef LINUX_API_MOCK_H #define LINUX_API_MOCK_H #include #include #include using ::testing::_; using ::testing::Action; using ::testing::ActionInterface; using ::testing::Assign; using ::testing::ByMove; using ::testing::ByRef; using ::testing::DefaultValue; using ::testing::DoAll; using ::testing::DoDefault; using ::testing::IgnoreResult; using ::testing::Invoke; using ::testing::InvokeWithoutArgs; using ::testing::MakePolymorphicAction; using ::testing::PolymorphicAction; using ::testing::Return; using ::testing::ReturnNew; using ::testing::ReturnNull; using ::testing::ReturnPointee; using ::testing::ReturnRef; using ::testing::ReturnRefOfCopy; using ::testing::ReturnRoundRobin; using ::testing::SaveArg; using ::testing::SetArgPointee; using ::testing::SetArgumentPointee; using ::testing::Unused; using ::testing::WithArgs; using ::testing::internal::BuiltInDefaultValue; constexpr int INVALID_HANDLE = -1; class LinuxApiMock { public: LinuxApiMock() = default; virtual ~LinuxApiMock() = default; static std::shared_ptr &GetInstance(std::shared_ptr *impl = nullptr) { static auto instance = std::make_shared(); if (impl) { // The non-thread-safe changing is only for gtest. instance = *impl; } return instance; } virtual void Init() {} virtual void UnInit() {} virtual int fx_open(const char *pathname, int flags); virtual int fx_tcgetattr(int fd, struct termios *termios_p); virtual int fx_tcsetattr(int fd, int optional_actions, const struct termios *termios_p); virtual ssize_t fx_write(int fd, const void *buf, size_t count); public: /** * @brief * */ // virtual void ApiLock(void) {} /** * @brief * */ // virtual void ApiUnlock(void) {} }; /** * A simulation interface class used for automated testing in Ubuntu systems, implementing the function of piling on * some Linux standard interfaces. */ class LinuxTest : public LinuxApiMock, public std::enable_shared_from_this { public: LinuxTest() = default; virtual ~LinuxTest() = default; MOCK_METHOD2(fx_open, int(const char *, int)); MOCK_METHOD2(fx_tcgetattr, int(int, struct termios *)); MOCK_METHOD3(fx_tcsetattr, int(int, int, const struct termios *)); MOCK_METHOD3(fx_write, ssize_t(int, const void *, size_t)); public: /** * @brief Get the Handle For Mock object * * @return int */ virtual int GetHandleForMock(void) { return INVALID_HANDLE; } public: static std::shared_ptr CreateLinuxTest(void); }; #endif