diff options
Diffstat (limited to 'chromium/components/exo/gaming_seat_unittest.cc')
-rw-r--r-- | chromium/components/exo/gaming_seat_unittest.cc | 80 |
1 files changed, 67 insertions, 13 deletions
diff --git a/chromium/components/exo/gaming_seat_unittest.cc b/chromium/components/exo/gaming_seat_unittest.cc index 6a04350f0de..4d763b60c18 100644 --- a/chromium/components/exo/gaming_seat_unittest.cc +++ b/chromium/components/exo/gaming_seat_unittest.cc @@ -3,9 +3,13 @@ // found in the LICENSE file. #include "components/exo/gaming_seat.h" + +#include <vector> + #include "ash/shell.h" #include "base/command_line.h" #include "base/run_loop.h" +#include "base/time/time.h" #include "components/exo/buffer.h" #include "components/exo/gamepad_delegate.h" #include "components/exo/gaming_seat_delegate.h" @@ -37,9 +41,9 @@ class MockGamepadDelegate : public GamepadDelegate { // Overridden from GamepadDelegate: MOCK_METHOD0(OnRemoved, void()); - MOCK_METHOD2(OnAxis, void(int, double)); - MOCK_METHOD2(OnButton, void(int, bool)); - MOCK_METHOD0(OnFrame, void()); + MOCK_METHOD3(OnAxis, void(int, double, base::TimeTicks)); + MOCK_METHOD3(OnButton, void(int, bool, base::TimeTicks)); + MOCK_METHOD1(OnFrame, void(base::TimeTicks)); }; class GamingSeatTest : public test::ExoTestBase { @@ -73,6 +77,15 @@ class GamingSeatTest : public test::ExoTestBase { } } + void SendButtonToGamepads(const std::vector<int>& gamepad_device_ids, + base::TimeTicks timestamp) { + for (auto& id : gamepad_device_ids) { + ui::GamepadEvent event(id, ui::GamepadEventType::BUTTON, 310, 1, + timestamp); + ui::GamepadProviderOzone::GetInstance()->DispatchGamepadEvent(event); + } + } + protected: std::unique_ptr<GamingSeat> gaming_seat_; @@ -104,19 +117,19 @@ TEST_F(GamingSeatTest, ConnectionChange) { .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); + EXPECT_CALL(gamepad_delegate[0], OnFrame(testing::_)).Times(1); + EXPECT_CALL(gamepad_delegate[1], OnFrame(testing::_)).Times(1); // Connect 3 more. EXPECT_CALL(*gaming_seat_delegate, GamepadAdded(testing::_)) .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); + EXPECT_CALL(gamepad_delegate[0], OnFrame(testing::_)).Times(1); + EXPECT_CALL(gamepad_delegate[1], OnFrame(testing::_)).Times(1); + EXPECT_CALL(gamepad_delegate[2], OnFrame(testing::_)).Times(1); + EXPECT_CALL(gamepad_delegate[3], OnFrame(testing::_)).Times(1); + EXPECT_CALL(gamepad_delegate[4], OnFrame(testing::_)).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); @@ -124,9 +137,9 @@ TEST_F(GamingSeatTest, ConnectionChange) { EXPECT_CALL(*gaming_seat_delegate, GamepadAdded(testing::_)) .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); + EXPECT_CALL(gamepad_delegate[1], OnFrame(testing::_)).Times(1); + EXPECT_CALL(gamepad_delegate[3], OnFrame(testing::_)).Times(1); + EXPECT_CALL(gamepad_delegate[5], OnFrame(testing::_)).Times(1); // disconnect other gamepads EXPECT_CALL(gamepad_delegate[1], OnRemoved()).Times(1); @@ -140,6 +153,47 @@ TEST_F(GamingSeatTest, ConnectionChange) { SendFrameToGamepads({0, 1, 2, 3, 4}); UpdateGamepadDevice({1, 3, 5}); SendFrameToGamepads({1, 2, 3, 4, 5}); + UpdateGamepadDevice({}); + DestroyGamingSeat(gaming_seat_delegate); +} + +TEST_F(GamingSeatTest, Timestamp) { + 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_delegate; + + base::TimeTicks expected_time = base::TimeTicks::Now(); + + { // Test sequence + testing::InSequence s; + + // Connect gamepad. + EXPECT_CALL(*gaming_seat_delegate, GamepadAdded(testing::_)) + .WillOnce(testing::Return(&gamepad_delegate)); + // Send button to connected gamepad. Expect correct timestamp. + EXPECT_CALL(gamepad_delegate, + OnButton(testing::_, testing::_, testing::Eq(expected_time))) + .Times(1); + // Disconnect gamepad. + EXPECT_CALL(gamepad_delegate, OnRemoved()).Times(1); + } + // Gamepad connected. + UpdateGamepadDevice({1}); + SendButtonToGamepads({1}, expected_time); + UpdateGamepadDevice({}); DestroyGamingSeat(gaming_seat_delegate); } |