| #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 |