blob: ffd08cd6f7ae4e4dc0b8d7b1613a4188bba6ba7c [file] [log] [blame]
#include "sensors/pluggable.hpp"
#include "test/readinterface_mock.hpp"
#include "test/writeinterface_mock.hpp"
#include <chrono>
#include <gmock/gmock.h>
#include <gtest/gtest.h>
namespace pid_control
{
namespace
{
using ::testing::Invoke;
TEST(PluggableSensorTest, BoringConstructorTest)
{
// Build a boring Pluggable Sensor.
int64_t min = 0;
int64_t max = 255;
std::unique_ptr<ReadInterface> ri = std::make_unique<ReadInterfaceMock>();
std::unique_ptr<WriteInterface> wi =
std::make_unique<WriteInterfaceMock>(min, max);
std::string name = "name";
int64_t timeout = 1;
PluggableSensor p(name, timeout, std::move(ri), std::move(wi));
// Successfully created it.
}
TEST(PluggableSensorTest, TryReadingTest)
{
// Verify calling read, calls the ReadInterface.
int64_t min = 0;
int64_t max = 255;
std::unique_ptr<ReadInterface> ri = std::make_unique<ReadInterfaceMock>();
std::unique_ptr<WriteInterface> wi =
std::make_unique<WriteInterfaceMock>(min, max);
std::string name = "name";
int64_t timeout = 1;
ReadInterfaceMock* rip = reinterpret_cast<ReadInterfaceMock*>(ri.get());
PluggableSensor p(name, timeout, std::move(ri), std::move(wi));
ReadReturn r;
r.value = 0.1;
r.updated = std::chrono::high_resolution_clock::now();
EXPECT_CALL(*rip, read()).WillOnce(Invoke([&](void) { return r; }));
// TODO(venture): Implement comparison operator for ReadReturn.
ReadReturn v = p.read();
EXPECT_EQ(r.value, v.value);
EXPECT_EQ(r.updated, v.updated);
}
TEST(PluggableSensorTest, TryWritingTest)
{
// Verify calling write, calls the WriteInterface.
int64_t min = 0;
int64_t max = 255;
std::unique_ptr<ReadInterface> ri = std::make_unique<ReadInterfaceMock>();
std::unique_ptr<WriteInterface> wi =
std::make_unique<WriteInterfaceMock>(min, max);
std::string name = "name";
int64_t timeout = 1;
WriteInterfaceMock* wip = reinterpret_cast<WriteInterfaceMock*>(wi.get());
PluggableSensor p(name, timeout, std::move(ri), std::move(wi));
double value = 0.303;
EXPECT_CALL(*wip, write(value));
p.write(value);
}
} // namespace
} // namespace pid_control