| // Copyright 2024 The ChromiumOS Authors | |
| // Use of this source code is governed by a BSD-style license that can be | |
| // found in the LICENSE file. | |
| #include "libtouchraw/reader.h" | |
| #include <utility> | |
| #include <base/test/task_environment.h> | |
| #include <gtest/gtest.h> | |
| #include "libtouchraw/consumer_interface.h" | |
| #include "libtouchraw/mock_consumers.h" | |
| namespace touchraw { | |
| // Test buffer size. | |
| constexpr int kTestSize = 10; | |
| class ReaderTest : public testing::Test { | |
| protected: | |
| void SetUp() override { | |
| auto mock_consumer = | |
| std::make_unique<testing::StrictMock<MockHIDDataConsumer>>(); | |
| mock_consumer_ = mock_consumer.get(); | |
| reader_ = | |
| std::make_unique<Reader>(std::move(fd_), std::move(mock_consumer)); | |
| } | |
| base::test::TaskEnvironment task_environment_{ | |
| base::test::TaskEnvironment::TimeSource::MOCK_TIME}; | |
| MockHIDDataConsumer* mock_consumer_; | |
| std::unique_ptr<Reader> reader_; | |
| // TODO: b/275615279 - Possible way to mock fd? | |
| base::ScopedFD fd_; // Invalid file descriptor. | |
| }; | |
| // TODO: b/275615279 - Add unit tests for Start function. | |
| /* TEST_F(ReaderTest, StartSucceeded) { | |
| EXPECT_TRUE(reader_->Start().ok()); | |
| } */ | |
| TEST_F(ReaderTest, StopSucceeded) { | |
| reader_->Stop(); | |
| EXPECT_EQ(reader_->watcher_, nullptr); | |
| } | |
| TEST_F(ReaderTest, ReadFailed) { | |
| reader_->OnFileCanReadWithoutBlocking(fd_.get()); | |
| EXPECT_EQ(reader_->watcher_, nullptr); | |
| } | |
| TEST_F(ReaderTest, EmptyBuffer) { | |
| uint8_t buf[kTestSize] = {}; | |
| reader_->ProcessData(buf, 0); | |
| task_environment_.RunUntilIdle(); | |
| } | |
| TEST_F(ReaderTest, ValidBufferOneByte) { | |
| EXPECT_CALL(*mock_consumer_, Push(testing::_)) | |
| .WillOnce([&](std::unique_ptr<const HIDData> hd) { | |
| EXPECT_EQ(hd->report_id, 10); | |
| EXPECT_EQ(hd->payload.size(), 0); | |
| }); | |
| uint8_t buf[kTestSize] = {10}; | |
| reader_->ProcessData(buf, 1); | |
| task_environment_.RunUntilIdle(); | |
| } | |
| TEST_F(ReaderTest, ValidBufferFiveBytes) { | |
| EXPECT_CALL(*mock_consumer_, Push(testing::_)) | |
| .WillOnce([&](std::unique_ptr<const HIDData> hd) { | |
| EXPECT_EQ(hd->report_id, 10); | |
| EXPECT_EQ(hd->payload.size(), 4); | |
| EXPECT_EQ(hd->payload[0], 11); | |
| EXPECT_EQ(hd->payload[1], 12); | |
| EXPECT_EQ(hd->payload[2], 13); | |
| EXPECT_EQ(hd->payload[3], 14); | |
| }); | |
| uint8_t buf[kTestSize] = {10, 11, 12, 13, 14}; | |
| reader_->ProcessData(buf, 5); | |
| task_environment_.RunUntilIdle(); | |
| } | |
| } // namespace touchraw |