Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(533)

Unified Diff: components/exo/gaming_seat_unittest.cc

Issue 2900773003: Allow gaming_seat to use ozone gamepad as back-end (Closed)
Patch Set: Allow gaming_seat to use ozone gamepad as backend Created 3 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « components/exo/gaming_seat_ozone.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: components/exo/gaming_seat_unittest.cc
diff --git a/components/exo/gaming_seat_unittest.cc b/components/exo/gaming_seat_unittest.cc
index 5a7893deb616c1828d6a5966fd64ff6932893924..74adde898e2ca29c9701caaeed6a647690e810d1 100644
--- a/components/exo/gaming_seat_unittest.cc
+++ b/components/exo/gaming_seat_unittest.cc
@@ -6,7 +6,6 @@
#include "ash/shell.h"
#include "base/command_line.h"
#include "base/run_loop.h"
-#include "base/test/test_simple_task_runner.h"
#include "components/exo/buffer.h"
#include "components/exo/gamepad_delegate.h"
#include "components/exo/gaming_seat_delegate.h"
@@ -18,6 +17,7 @@
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "ui/aura/client/focus_client.h"
+#include "ui/events/ozone/gamepad/gamepad_provider_ozone.h"
namespace exo {
namespace {
@@ -45,54 +45,36 @@ class MockGamepadDelegate : public GamepadDelegate {
class GamingSeatTest : public test::ExoTestBase {
public:
GamingSeatTest() {}
-
- std::unique_ptr<device::GamepadDataFetcher> MockDataFetcherFactory() {
- device::Gamepads initial_data;
- std::unique_ptr<device::MockGamepadDataFetcher> fetcher(
- new device::MockGamepadDataFetcher(initial_data));
- mock_data_fetcher_ = fetcher.get();
- return std::move(fetcher);
- }
-
void InitializeGamingSeat(MockGamingSeatDelegate* delegate) {
- polling_task_runner_ = new base::TestSimpleTaskRunner();
- gaming_seat_.reset(
- new GamingSeat(delegate, polling_task_runner_.get(),
- base::Bind(&GamingSeatTest::MockDataFetcherFactory,
- base::Unretained(this))));
- // Run the polling task runner to have it create the data fetcher.
- polling_task_runner_->RunPendingTasks();
+ gaming_seat_.reset(new GamingSeat(delegate, nullptr));
}
void DestroyGamingSeat(MockGamingSeatDelegate* delegate) {
EXPECT_CALL(*delegate, Die()).Times(1);
- mock_data_fetcher_ = nullptr;
gaming_seat_.reset();
- // Process tasks until polling is shut down.
- polling_task_runner_->RunPendingTasks();
- polling_task_runner_ = nullptr;
}
- void SetDataAndPostToDelegate(const device::Gamepads& new_data) {
- ASSERT_TRUE(mock_data_fetcher_ != nullptr);
- mock_data_fetcher_->SetTestData(new_data);
- // Run one polling cycle, which will post a task to the origin task runner.
- polling_task_runner_->RunPendingTasks();
- // Run origin task runner to invoke delegate.
- base::RunLoop().RunUntilIdle();
+ void UpdateGamepadDevice(const std::vector<int>& gamepad_device_ids) {
+ std::vector<ui::InputDevice> gamepad_devices;
+ for (auto& id : gamepad_device_ids) {
+ gamepad_devices.push_back(ui::InputDevice(
+ id, ui::InputDeviceType::INPUT_DEVICE_EXTERNAL, "gamepad"));
+ }
+ ui::GamepadProviderOzone::GetInstance()->DispatchGamepadDevicesUpdated(
+ gamepad_devices);
+ }
+
+ void SendFrameToGamepads(const std::vector<int>& gamepad_device_ids) {
+ for (auto& id : gamepad_device_ids) {
+ ui::GamepadEvent event(id, ui::GamepadEventType::FRAME, 0, 0,
+ base::TimeTicks());
+ ui::GamepadProviderOzone::GetInstance()->DispatchGamepadEvent(event);
+ }
}
protected:
std::unique_ptr<GamingSeat> gaming_seat_;
- // Task runner to simulate the polling thread.
- scoped_refptr<base::TestSimpleTaskRunner> polling_task_runner_;
-
- // Weak reference to the mock data fetcher provided by MockDataFetcherFactory.
- // This instance is valid until both gamepad_ and polling_task_runner_ are
- // shut down.
- device::MockGamepadDataFetcher* mock_data_fetcher_;
-
DISALLOW_COPY_AND_ASSIGN(GamingSeatTest);
};
@@ -112,212 +94,51 @@ TEST_F(GamingSeatTest, ConnectionChange) {
.WillOnce(testing::Return(true));
InitializeGamingSeat(gaming_seat_delegate);
- testing::StrictMock<MockGamepadDelegate> gamepad_delegate0;
- testing::StrictMock<MockGamepadDelegate> gamepad_delegate1;
- testing::StrictMock<MockGamepadDelegate> gamepad_delegate2;
+ testing::StrictMock<MockGamepadDelegate> gamepad_delegate[6];
{ // Test sequence
testing::InSequence s;
- // connect gamepad 0
- // connect gamepad 2
- // connect gamepad 1
+ // Connect 2 gamepads.
+ EXPECT_CALL(*gaming_seat_delegate, GamepadAdded())
+ .WillOnce(testing::Return(&gamepad_delegate[0]))
+ .WillOnce(testing::Return(&gamepad_delegate[1]));
+ // Send frame to connected gamepad.
+ EXPECT_CALL(gamepad_delegate[0], OnFrame()).Times(1);
+ EXPECT_CALL(gamepad_delegate[1], OnFrame()).Times(1);
+ // Connect 3 more.
+ EXPECT_CALL(*gaming_seat_delegate, GamepadAdded())
+ .WillOnce(testing::Return(&gamepad_delegate[2]))
+ .WillOnce(testing::Return(&gamepad_delegate[3]))
+ .WillOnce(testing::Return(&gamepad_delegate[4]));
+ // Send frame to all gamepads.
+ EXPECT_CALL(gamepad_delegate[0], OnFrame()).Times(1);
+ EXPECT_CALL(gamepad_delegate[1], OnFrame()).Times(1);
+ EXPECT_CALL(gamepad_delegate[2], OnFrame()).Times(1);
+ EXPECT_CALL(gamepad_delegate[3], OnFrame()).Times(1);
+ EXPECT_CALL(gamepad_delegate[4], OnFrame()).Times(1);
+ // Disconnect gamepad 0 and gamepad 2 and connect a new gamepad.
+ EXPECT_CALL(gamepad_delegate[0], OnRemoved()).Times(1);
+ EXPECT_CALL(gamepad_delegate[2], OnRemoved()).Times(1);
+ EXPECT_CALL(gamepad_delegate[4], OnRemoved()).Times(1);
EXPECT_CALL(*gaming_seat_delegate, GamepadAdded())
- .WillOnce(testing::Return(&gamepad_delegate0))
- .WillOnce(testing::Return(&gamepad_delegate2))
- .WillOnce(testing::Return(&gamepad_delegate1));
- // disconnect gamepad 1
- EXPECT_CALL(gamepad_delegate1, OnRemoved()).Times(1);
+ .WillOnce(testing::Return(&gamepad_delegate[5]));
+ // Send frame to all gamepads.
+ EXPECT_CALL(gamepad_delegate[1], OnFrame()).Times(1);
+ EXPECT_CALL(gamepad_delegate[3], OnFrame()).Times(1);
+ EXPECT_CALL(gamepad_delegate[5], OnFrame()).Times(1);
+
// disconnect other gamepads
- EXPECT_CALL(gamepad_delegate0, OnRemoved()).Times(1);
- EXPECT_CALL(gamepad_delegate2, OnRemoved()).Times(1);
+ EXPECT_CALL(gamepad_delegate[1], OnRemoved()).Times(1);
+ EXPECT_CALL(gamepad_delegate[3], OnRemoved()).Times(1);
+ EXPECT_CALL(gamepad_delegate[5], OnRemoved()).Times(1);
}
// Gamepad connected.
- device::Gamepads gamepad_connected;
- gamepad_connected.items[0].connected = true;
- gamepad_connected.items[0].timestamp = 1;
- SetDataAndPostToDelegate(gamepad_connected);
-
- gamepad_connected.items[2].connected = true;
- gamepad_connected.items[2].timestamp = 1;
- SetDataAndPostToDelegate(gamepad_connected);
-
- gamepad_connected.items[1].connected = true;
- gamepad_connected.items[1].timestamp = 1;
- SetDataAndPostToDelegate(gamepad_connected);
-
- // Gamepad 1 is dis connected
- gamepad_connected.items[1].connected = false;
- gamepad_connected.items[1].timestamp = 2;
-
- SetDataAndPostToDelegate(gamepad_connected);
-
- // Gamepad disconnected.
- device::Gamepads all_disconnected;
- SetDataAndPostToDelegate(all_disconnected);
-
- DestroyGamingSeat(gaming_seat_delegate);
-}
-
-TEST_F(GamingSeatTest, OnAxis) {
- std::unique_ptr<Surface> surface(new Surface);
- std::unique_ptr<ShellSurface> shell_surface(new ShellSurface(surface.get()));
- gfx::Size buffer_size(10, 10);
- std::unique_ptr<Buffer> buffer(
- new Buffer(exo_test_helper()->CreateGpuMemoryBuffer(buffer_size)));
- surface->Attach(buffer.get());
- surface->Commit();
-
- testing::StrictMock<MockGamingSeatDelegate>* gaming_seat_delegate =
- new testing::StrictMock<MockGamingSeatDelegate>();
- EXPECT_CALL(*gaming_seat_delegate,
- CanAcceptGamepadEventsForSurface(testing::_))
- .WillOnce(testing::Return(true));
-
- InitializeGamingSeat(gaming_seat_delegate);
- testing::StrictMock<MockGamepadDelegate> gamepad_delegate0;
- testing::StrictMock<MockGamepadDelegate> gamepad_delegate2;
-
- // connect gamepad 0 and 2
- EXPECT_CALL(*gaming_seat_delegate, GamepadAdded())
- .WillOnce(testing::Return(&gamepad_delegate0))
- .WillOnce(testing::Return(&gamepad_delegate2));
-
- device::Gamepads gamepad_connected;
- gamepad_connected.items[0].connected = true;
- gamepad_connected.items[0].timestamp = 1;
- SetDataAndPostToDelegate(gamepad_connected);
-
- gamepad_connected.items[2].connected = true;
- gamepad_connected.items[2].timestamp = 1;
- SetDataAndPostToDelegate(gamepad_connected);
-
- // send axis event to 2 and then 0
- device::Gamepads axis_moved;
- axis_moved.items[0].connected = true;
- axis_moved.items[0].timestamp = 1;
- axis_moved.items[2].connected = true;
- axis_moved.items[2].timestamp = 2;
- axis_moved.items[2].axes_length = 1;
- axis_moved.items[2].axes[0] = 1.0;
-
- EXPECT_CALL(gamepad_delegate2, OnAxis(0, 1.0)).Times(1);
- EXPECT_CALL(gamepad_delegate2, OnFrame()).Times(1);
- SetDataAndPostToDelegate(axis_moved);
-
- axis_moved.items[0].timestamp = 2;
- axis_moved.items[0].axes_length = 1;
- axis_moved.items[0].axes[0] = 2.0;
-
- EXPECT_CALL(gamepad_delegate0, OnAxis(0, 2.0)).Times(1);
- EXPECT_CALL(gamepad_delegate0, OnFrame()).Times(1);
- SetDataAndPostToDelegate(axis_moved);
-
- EXPECT_CALL(gamepad_delegate0, OnRemoved()).Times(1);
- EXPECT_CALL(gamepad_delegate2, OnRemoved()).Times(1);
- DestroyGamingSeat(gaming_seat_delegate);
-}
-
-TEST_F(GamingSeatTest, OnButton) {
- std::unique_ptr<Surface> surface(new Surface);
- std::unique_ptr<ShellSurface> shell_surface(new ShellSurface(surface.get()));
- gfx::Size buffer_size(10, 10);
- std::unique_ptr<Buffer> buffer(
- new Buffer(exo_test_helper()->CreateGpuMemoryBuffer(buffer_size)));
- surface->Attach(buffer.get());
- surface->Commit();
-
- testing::StrictMock<MockGamingSeatDelegate>* gaming_seat_delegate =
- new testing::StrictMock<MockGamingSeatDelegate>();
- EXPECT_CALL(*gaming_seat_delegate,
- CanAcceptGamepadEventsForSurface(testing::_))
- .WillOnce(testing::Return(true));
-
- InitializeGamingSeat(gaming_seat_delegate);
- testing::StrictMock<MockGamepadDelegate> gamepad_delegate0;
- testing::StrictMock<MockGamepadDelegate> gamepad_delegate2;
-
- // connect gamepad 0 and 2
- EXPECT_CALL(*gaming_seat_delegate, GamepadAdded())
- .WillOnce(testing::Return(&gamepad_delegate0))
- .WillOnce(testing::Return(&gamepad_delegate2));
-
- device::Gamepads gamepad_connected;
- gamepad_connected.items[0].connected = true;
- gamepad_connected.items[0].timestamp = 1;
- SetDataAndPostToDelegate(gamepad_connected);
-
- gamepad_connected.items[2].connected = true;
- gamepad_connected.items[2].timestamp = 1;
- SetDataAndPostToDelegate(gamepad_connected);
-
- // send axis event to 2 and then 0
- device::Gamepads axis_moved;
- axis_moved.items[0].connected = true;
- axis_moved.items[0].timestamp = 1;
- axis_moved.items[2].connected = true;
- axis_moved.items[2].timestamp = 2;
-
- axis_moved.items[2].buttons_length = 1;
- axis_moved.items[2].buttons[0].pressed = true;
- axis_moved.items[2].buttons[0].value = 1.0;
-
- EXPECT_CALL(gamepad_delegate2, OnButton(0, true, 1.0)).Times(1);
- EXPECT_CALL(gamepad_delegate2, OnFrame()).Times(1);
- SetDataAndPostToDelegate(axis_moved);
-
- axis_moved.items[0].timestamp = 2;
- axis_moved.items[0].buttons_length = 1;
- axis_moved.items[0].buttons[0].pressed = true;
- axis_moved.items[0].buttons[0].value = 2.0;
-
- EXPECT_CALL(gamepad_delegate0, OnButton(0, true, 2.0)).Times(1);
- EXPECT_CALL(gamepad_delegate0, OnFrame()).Times(1);
- SetDataAndPostToDelegate(axis_moved);
-
- EXPECT_CALL(gamepad_delegate0, OnRemoved()).Times(1);
- EXPECT_CALL(gamepad_delegate2, OnRemoved()).Times(1);
-
- DestroyGamingSeat(gaming_seat_delegate);
-}
-
-TEST_F(GamingSeatTest, OnWindowFocused) {
- // Create surface and move focus to it.
- std::unique_ptr<Surface> surface(new Surface);
- std::unique_ptr<ShellSurface> shell_surface(new ShellSurface(surface.get()));
- gfx::Size buffer_size(10, 10);
- std::unique_ptr<Buffer> buffer(
- new Buffer(exo_test_helper()->CreateGpuMemoryBuffer(buffer_size)));
- surface->Attach(buffer.get());
- surface->Commit();
-
- testing::StrictMock<MockGamingSeatDelegate>* gaming_seat_delegate =
- new testing::StrictMock<MockGamingSeatDelegate>();
- EXPECT_CALL(*gaming_seat_delegate,
- CanAcceptGamepadEventsForSurface(testing::_))
- .WillOnce(testing::Return(true));
-
- InitializeGamingSeat(gaming_seat_delegate);
-
- // In focus. Should be polling indefinitely, check a couple of time that the
- // poll task is re-posted.
- for (size_t i = 0; i < 5; ++i) {
- polling_task_runner_->RunPendingTasks();
- ASSERT_TRUE(polling_task_runner_->HasPendingTask());
- }
-
- // Remove focus from window.
- aura::client::FocusClient* focus_client =
- aura::client::GetFocusClient(ash::Shell::GetPrimaryRootWindow());
- focus_client->FocusWindow(nullptr);
-
- // Run EnablePolling and OnPoll task, no more polls should be scheduled.
- // In the first round of RunPendingTasks we will execute
- // EnablePollingOnPollingThread, which will cause the polling to stop being
- // scheduled in the next round.
- polling_task_runner_->RunPendingTasks();
- polling_task_runner_->RunPendingTasks();
- ASSERT_FALSE(polling_task_runner_->HasPendingTask());
-
+ UpdateGamepadDevice({0, 1});
+ SendFrameToGamepads({0, 1});
+ UpdateGamepadDevice({0, 1, 2, 3, 4});
+ SendFrameToGamepads({0, 1, 2, 3, 4});
+ UpdateGamepadDevice({1, 3, 5});
+ SendFrameToGamepads({1, 2, 3, 4, 5});
DestroyGamingSeat(gaming_seat_delegate);
}
« no previous file with comments | « components/exo/gaming_seat_ozone.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698