summaryrefslogtreecommitdiff
path: root/chromium/components/exo/gaming_seat_unittest.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/components/exo/gaming_seat_unittest.cc')
-rw-r--r--chromium/components/exo/gaming_seat_unittest.cc80
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);
}