| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "device/gamepad/gamepad_provider.h" | 5 #include "device/gamepad/gamepad_provider.h" |
| 6 | 6 |
| 7 #include <memory> | 7 #include <memory> |
| 8 | 8 |
| 9 #include "base/macros.h" | 9 #include "base/macros.h" |
| 10 #include "base/memory/weak_ptr.h" | 10 #include "base/memory/weak_ptr.h" |
| 11 #include "base/run_loop.h" | 11 #include "base/run_loop.h" |
| 12 #include "build/build_config.h" | 12 #include "build/build_config.h" |
| 13 #include "device/gamepad/gamepad_data_fetcher.h" | 13 #include "device/gamepad/gamepad_data_fetcher.h" |
| 14 #include "device/gamepad/gamepad_test_helpers.h" | 14 #include "device/gamepad/gamepad_test_helpers.h" |
| 15 #include "testing/gtest/include/gtest/gtest.h" | 15 #include "testing/gtest/include/gtest/gtest.h" |
| 16 | 16 |
| 17 namespace device { | 17 namespace device { |
| 18 | 18 |
| 19 namespace { | 19 namespace { |
| 20 | 20 |
| 21 using blink::WebGamepads; | |
| 22 | |
| 23 // Helper class to generate and record user gesture callbacks. | 21 // Helper class to generate and record user gesture callbacks. |
| 24 class UserGestureListener { | 22 class UserGestureListener { |
| 25 public: | 23 public: |
| 26 UserGestureListener() : has_user_gesture_(false), weak_factory_(this) {} | 24 UserGestureListener() : has_user_gesture_(false), weak_factory_(this) {} |
| 27 | 25 |
| 28 base::Closure GetClosure() { | 26 base::Closure GetClosure() { |
| 29 return base::Bind(&UserGestureListener::GotUserGesture, | 27 return base::Bind(&UserGestureListener::GotUserGesture, |
| 30 weak_factory_.GetWeakPtr()); | 28 weak_factory_.GetWeakPtr()); |
| 31 } | 29 } |
| 32 | 30 |
| 33 bool has_user_gesture() const { return has_user_gesture_; } | 31 bool has_user_gesture() const { return has_user_gesture_; } |
| 34 | 32 |
| 35 private: | 33 private: |
| 36 void GotUserGesture() { has_user_gesture_ = true; } | 34 void GotUserGesture() { has_user_gesture_ = true; } |
| 37 | 35 |
| 38 bool has_user_gesture_; | 36 bool has_user_gesture_; |
| 39 base::WeakPtrFactory<UserGestureListener> weak_factory_; | 37 base::WeakPtrFactory<UserGestureListener> weak_factory_; |
| 40 }; | 38 }; |
| 41 | 39 |
| 42 // Main test fixture | 40 // Main test fixture |
| 43 class GamepadProviderTest : public testing::Test, public GamepadTestHelper { | 41 class GamepadProviderTest : public testing::Test, public GamepadTestHelper { |
| 44 public: | 42 public: |
| 45 GamepadProvider* CreateProvider(const WebGamepads& test_data) { | 43 GamepadProvider* CreateProvider(const Gamepads& test_data) { |
| 46 mock_data_fetcher_ = new MockGamepadDataFetcher(test_data); | 44 mock_data_fetcher_ = new MockGamepadDataFetcher(test_data); |
| 47 provider_.reset(new GamepadProvider( | 45 provider_.reset(new GamepadProvider( |
| 48 nullptr, std::unique_ptr<GamepadDataFetcher>(mock_data_fetcher_))); | 46 nullptr, std::unique_ptr<GamepadDataFetcher>(mock_data_fetcher_))); |
| 49 return provider_.get(); | 47 return provider_.get(); |
| 50 } | 48 } |
| 51 | 49 |
| 52 void ReadGamepadHardwareBuffer(GamepadHardwareBuffer* buffer, | 50 void ReadGamepadHardwareBuffer(GamepadHardwareBuffer* buffer, |
| 53 WebGamepads* output) { | 51 Gamepads* output) { |
| 54 memset(output, 0, sizeof(WebGamepads)); | 52 memset(output, 0, sizeof(Gamepads)); |
| 55 base::subtle::Atomic32 version; | 53 base::subtle::Atomic32 version; |
| 56 do { | 54 do { |
| 57 version = buffer->seqlock.ReadBegin(); | 55 version = buffer->seqlock.ReadBegin(); |
| 58 memcpy(output, &buffer->data, sizeof(WebGamepads)); | 56 memcpy(output, &buffer->data, sizeof(Gamepads)); |
| 59 } while (buffer->seqlock.ReadRetry(version)); | 57 } while (buffer->seqlock.ReadRetry(version)); |
| 60 } | 58 } |
| 61 | 59 |
| 62 protected: | 60 protected: |
| 63 GamepadProviderTest() {} | 61 GamepadProviderTest() {} |
| 64 | 62 |
| 65 std::unique_ptr<GamepadProvider> provider_; | 63 std::unique_ptr<GamepadProvider> provider_; |
| 66 | 64 |
| 67 // Pointer owned by the provider. | 65 // Pointer owned by the provider. |
| 68 MockGamepadDataFetcher* mock_data_fetcher_; | 66 MockGamepadDataFetcher* mock_data_fetcher_; |
| 69 | 67 |
| 70 DISALLOW_COPY_AND_ASSIGN(GamepadProviderTest); | 68 DISALLOW_COPY_AND_ASSIGN(GamepadProviderTest); |
| 71 }; | 69 }; |
| 72 | 70 |
| 73 // Test is flaky. crbug.com/705367 | 71 // Test is flaky. crbug.com/705367 |
| 74 TEST_F(GamepadProviderTest, DISABLED_PollingAccess) { | 72 TEST_F(GamepadProviderTest, DISABLED_PollingAccess) { |
| 75 WebGamepads test_data; | 73 Gamepads test_data; |
| 76 memset(&test_data, 0, sizeof(WebGamepads)); | 74 memset(&test_data, 0, sizeof(Gamepads)); |
| 77 test_data.items[0].connected = true; | 75 test_data.items[0].connected = true; |
| 78 test_data.items[0].timestamp = 0; | 76 test_data.items[0].timestamp = 0; |
| 79 test_data.items[0].buttons_length = 1; | 77 test_data.items[0].buttons_length = 1; |
| 80 test_data.items[0].axes_length = 2; | 78 test_data.items[0].axes_length = 2; |
| 81 test_data.items[0].buttons[0].value = 1.f; | 79 test_data.items[0].buttons[0].value = 1.f; |
| 82 test_data.items[0].buttons[0].pressed = true; | 80 test_data.items[0].buttons[0].pressed = true; |
| 83 test_data.items[0].axes[0] = -1.f; | 81 test_data.items[0].axes[0] = -1.f; |
| 84 test_data.items[0].axes[1] = .5f; | 82 test_data.items[0].axes[1] = .5f; |
| 85 | 83 |
| 86 GamepadProvider* provider = CreateProvider(test_data); | 84 GamepadProvider* provider = CreateProvider(test_data); |
| 87 provider->SetSanitizationEnabled(false); | 85 provider->SetSanitizationEnabled(false); |
| 88 provider->Resume(); | 86 provider->Resume(); |
| 89 | 87 |
| 90 base::RunLoop().RunUntilIdle(); | 88 base::RunLoop().RunUntilIdle(); |
| 91 | 89 |
| 92 mock_data_fetcher_->WaitForDataRead(); | 90 mock_data_fetcher_->WaitForDataRead(); |
| 93 | 91 |
| 94 // Renderer-side, pull data out of poll buffer. | 92 // Renderer-side, pull data out of poll buffer. |
| 95 base::SharedMemoryHandle handle = provider->GetSharedMemoryHandleForProcess( | 93 base::SharedMemoryHandle handle = provider->GetSharedMemoryHandleForProcess( |
| 96 base::GetCurrentProcessHandle()); | 94 base::GetCurrentProcessHandle()); |
| 97 std::unique_ptr<base::SharedMemory> shared_memory( | 95 std::unique_ptr<base::SharedMemory> shared_memory( |
| 98 new base::SharedMemory(handle, true)); | 96 new base::SharedMemory(handle, true)); |
| 99 EXPECT_TRUE(shared_memory->Map(sizeof(GamepadHardwareBuffer))); | 97 EXPECT_TRUE(shared_memory->Map(sizeof(GamepadHardwareBuffer))); |
| 100 | 98 |
| 101 GamepadHardwareBuffer* buffer = | 99 GamepadHardwareBuffer* buffer = |
| 102 static_cast<GamepadHardwareBuffer*>(shared_memory->memory()); | 100 static_cast<GamepadHardwareBuffer*>(shared_memory->memory()); |
| 103 WebGamepads output; | 101 Gamepads output; |
| 104 ReadGamepadHardwareBuffer(buffer, &output); | 102 ReadGamepadHardwareBuffer(buffer, &output); |
| 105 | 103 |
| 106 EXPECT_EQ(1u, output.items[0].buttons_length); | 104 EXPECT_EQ(1u, output.items[0].buttons_length); |
| 107 EXPECT_EQ(1.f, output.items[0].buttons[0].value); | 105 EXPECT_EQ(1.f, output.items[0].buttons[0].value); |
| 108 EXPECT_EQ(true, output.items[0].buttons[0].pressed); | 106 EXPECT_EQ(true, output.items[0].buttons[0].pressed); |
| 109 EXPECT_EQ(2u, output.items[0].axes_length); | 107 EXPECT_EQ(2u, output.items[0].axes_length); |
| 110 EXPECT_EQ(-1.f, output.items[0].axes[0]); | 108 EXPECT_EQ(-1.f, output.items[0].axes[0]); |
| 111 EXPECT_EQ(0.5f, output.items[0].axes[1]); | 109 EXPECT_EQ(0.5f, output.items[0].axes[1]); |
| 112 } | 110 } |
| 113 | 111 |
| 114 // Flaky on all platforms: http://crbug.com/692219 | 112 // Flaky on all platforms: http://crbug.com/692219 |
| 115 TEST_F(GamepadProviderTest, DISABLED_ConnectDisconnectMultiple) { | 113 TEST_F(GamepadProviderTest, DISABLED_ConnectDisconnectMultiple) { |
| 116 WebGamepads test_data; | 114 Gamepads test_data; |
| 117 test_data.items[0].connected = true; | 115 test_data.items[0].connected = true; |
| 118 test_data.items[0].timestamp = 0; | 116 test_data.items[0].timestamp = 0; |
| 119 test_data.items[0].axes_length = 2; | 117 test_data.items[0].axes_length = 2; |
| 120 test_data.items[0].axes[0] = -1.f; | 118 test_data.items[0].axes[0] = -1.f; |
| 121 test_data.items[0].axes[1] = .5f; | 119 test_data.items[0].axes[1] = .5f; |
| 122 | 120 |
| 123 test_data.items[1].connected = true; | 121 test_data.items[1].connected = true; |
| 124 test_data.items[1].timestamp = 0; | 122 test_data.items[1].timestamp = 0; |
| 125 test_data.items[1].axes_length = 2; | 123 test_data.items[1].axes_length = 2; |
| 126 test_data.items[1].axes[0] = 1.f; | 124 test_data.items[1].axes[0] = 1.f; |
| 127 test_data.items[1].axes[1] = -.5f; | 125 test_data.items[1].axes[1] = -.5f; |
| 128 | 126 |
| 129 WebGamepads test_data_onedisconnected; | 127 Gamepads test_data_onedisconnected; |
| 130 test_data_onedisconnected.items[1].connected = true; | 128 test_data_onedisconnected.items[1].connected = true; |
| 131 test_data_onedisconnected.items[1].timestamp = 0; | 129 test_data_onedisconnected.items[1].timestamp = 0; |
| 132 test_data_onedisconnected.items[1].axes_length = 2; | 130 test_data_onedisconnected.items[1].axes_length = 2; |
| 133 test_data_onedisconnected.items[1].axes[0] = 1.f; | 131 test_data_onedisconnected.items[1].axes[0] = 1.f; |
| 134 test_data_onedisconnected.items[1].axes[1] = -.5f; | 132 test_data_onedisconnected.items[1].axes[1] = -.5f; |
| 135 | 133 |
| 136 GamepadProvider* provider = CreateProvider(test_data); | 134 GamepadProvider* provider = CreateProvider(test_data); |
| 137 provider->SetSanitizationEnabled(false); | 135 provider->SetSanitizationEnabled(false); |
| 138 provider->Resume(); | 136 provider->Resume(); |
| 139 | 137 |
| 140 base::RunLoop().RunUntilIdle(); | 138 base::RunLoop().RunUntilIdle(); |
| 141 | 139 |
| 142 mock_data_fetcher_->WaitForDataRead(); | 140 mock_data_fetcher_->WaitForDataRead(); |
| 143 | 141 |
| 144 // Renderer-side, pull data out of poll buffer. | 142 // Renderer-side, pull data out of poll buffer. |
| 145 base::SharedMemoryHandle handle = provider->GetSharedMemoryHandleForProcess( | 143 base::SharedMemoryHandle handle = provider->GetSharedMemoryHandleForProcess( |
| 146 base::GetCurrentProcessHandle()); | 144 base::GetCurrentProcessHandle()); |
| 147 std::unique_ptr<base::SharedMemory> shared_memory( | 145 std::unique_ptr<base::SharedMemory> shared_memory( |
| 148 new base::SharedMemory(handle, true)); | 146 new base::SharedMemory(handle, true)); |
| 149 EXPECT_TRUE(shared_memory->Map(sizeof(GamepadHardwareBuffer))); | 147 EXPECT_TRUE(shared_memory->Map(sizeof(GamepadHardwareBuffer))); |
| 150 | 148 |
| 151 GamepadHardwareBuffer* buffer = | 149 GamepadHardwareBuffer* buffer = |
| 152 static_cast<GamepadHardwareBuffer*>(shared_memory->memory()); | 150 static_cast<GamepadHardwareBuffer*>(shared_memory->memory()); |
| 153 WebGamepads output; | 151 Gamepads output; |
| 154 ReadGamepadHardwareBuffer(buffer, &output); | 152 ReadGamepadHardwareBuffer(buffer, &output); |
| 155 | 153 |
| 156 EXPECT_EQ(2u, output.items[0].axes_length); | 154 EXPECT_EQ(2u, output.items[0].axes_length); |
| 157 EXPECT_EQ(-1.f, output.items[0].axes[0]); | 155 EXPECT_EQ(-1.f, output.items[0].axes[0]); |
| 158 EXPECT_EQ(0.5f, output.items[0].axes[1]); | 156 EXPECT_EQ(0.5f, output.items[0].axes[1]); |
| 159 EXPECT_EQ(2u, output.items[1].axes_length); | 157 EXPECT_EQ(2u, output.items[1].axes_length); |
| 160 EXPECT_EQ(1.f, output.items[1].axes[0]); | 158 EXPECT_EQ(1.f, output.items[1].axes[0]); |
| 161 EXPECT_EQ(-0.5f, output.items[1].axes[1]); | 159 EXPECT_EQ(-0.5f, output.items[1].axes[1]); |
| 162 | 160 |
| 163 mock_data_fetcher_->SetTestData(test_data_onedisconnected); | 161 mock_data_fetcher_->SetTestData(test_data_onedisconnected); |
| 164 mock_data_fetcher_->WaitForDataReadAndCallbacksIssued(); | 162 mock_data_fetcher_->WaitForDataReadAndCallbacksIssued(); |
| 165 ReadGamepadHardwareBuffer(buffer, &output); | 163 ReadGamepadHardwareBuffer(buffer, &output); |
| 166 | 164 |
| 167 EXPECT_EQ(0u, output.items[0].axes_length); | 165 EXPECT_EQ(0u, output.items[0].axes_length); |
| 168 EXPECT_EQ(2u, output.items[1].axes_length); | 166 EXPECT_EQ(2u, output.items[1].axes_length); |
| 169 EXPECT_EQ(1.f, output.items[1].axes[0]); | 167 EXPECT_EQ(1.f, output.items[1].axes[0]); |
| 170 EXPECT_EQ(-0.5f, output.items[1].axes[1]); | 168 EXPECT_EQ(-0.5f, output.items[1].axes[1]); |
| 171 } | 169 } |
| 172 | 170 |
| 173 // Tests that waiting for a user gesture works properly. | 171 // Tests that waiting for a user gesture works properly. |
| 174 TEST_F(GamepadProviderTest, UserGesture) { | 172 TEST_F(GamepadProviderTest, UserGesture) { |
| 175 WebGamepads no_button_data; | 173 Gamepads no_button_data; |
| 176 no_button_data.items[0].connected = true; | 174 no_button_data.items[0].connected = true; |
| 177 no_button_data.items[0].timestamp = 0; | 175 no_button_data.items[0].timestamp = 0; |
| 178 no_button_data.items[0].buttons_length = 1; | 176 no_button_data.items[0].buttons_length = 1; |
| 179 no_button_data.items[0].axes_length = 2; | 177 no_button_data.items[0].axes_length = 2; |
| 180 no_button_data.items[0].buttons[0].value = 0.f; | 178 no_button_data.items[0].buttons[0].value = 0.f; |
| 181 no_button_data.items[0].buttons[0].pressed = false; | 179 no_button_data.items[0].buttons[0].pressed = false; |
| 182 no_button_data.items[0].axes[0] = 0.f; | 180 no_button_data.items[0].axes[0] = 0.f; |
| 183 no_button_data.items[0].axes[1] = .4f; | 181 no_button_data.items[0].axes[1] = .4f; |
| 184 | 182 |
| 185 WebGamepads button_down_data = no_button_data; | 183 Gamepads button_down_data = no_button_data; |
| 186 button_down_data.items[0].buttons[0].value = 1.f; | 184 button_down_data.items[0].buttons[0].value = 1.f; |
| 187 button_down_data.items[0].buttons[0].pressed = true; | 185 button_down_data.items[0].buttons[0].pressed = true; |
| 188 | 186 |
| 189 UserGestureListener listener; | 187 UserGestureListener listener; |
| 190 GamepadProvider* provider = CreateProvider(no_button_data); | 188 GamepadProvider* provider = CreateProvider(no_button_data); |
| 191 provider->SetSanitizationEnabled(false); | 189 provider->SetSanitizationEnabled(false); |
| 192 provider->Resume(); | 190 provider->Resume(); |
| 193 | 191 |
| 194 provider->RegisterForUserGesture(listener.GetClosure()); | 192 provider->RegisterForUserGesture(listener.GetClosure()); |
| 195 mock_data_fetcher_->WaitForDataReadAndCallbacksIssued(); | 193 mock_data_fetcher_->WaitForDataReadAndCallbacksIssued(); |
| (...skipping 12 matching lines...) Expand all Loading... |
| 208 } | 206 } |
| 209 | 207 |
| 210 // Flaky on CrOS and Linux: http://crbug.com/640086, https://crbug.com/702712 | 208 // Flaky on CrOS and Linux: http://crbug.com/640086, https://crbug.com/702712 |
| 211 #if defined(OS_LINUX) || defined(OS_CHROMEOS) | 209 #if defined(OS_LINUX) || defined(OS_CHROMEOS) |
| 212 #define MAYBE_Sanitization DISABLED_Sanitization | 210 #define MAYBE_Sanitization DISABLED_Sanitization |
| 213 #else | 211 #else |
| 214 #define MAYBE_Sanitization Sanitization | 212 #define MAYBE_Sanitization Sanitization |
| 215 #endif | 213 #endif |
| 216 // Tests that waiting for a user gesture works properly. | 214 // Tests that waiting for a user gesture works properly. |
| 217 TEST_F(GamepadProviderTest, MAYBE_Sanitization) { | 215 TEST_F(GamepadProviderTest, MAYBE_Sanitization) { |
| 218 WebGamepads active_data; | 216 Gamepads active_data; |
| 219 active_data.items[0].connected = true; | 217 active_data.items[0].connected = true; |
| 220 active_data.items[0].timestamp = 0; | 218 active_data.items[0].timestamp = 0; |
| 221 active_data.items[0].buttons_length = 1; | 219 active_data.items[0].buttons_length = 1; |
| 222 active_data.items[0].axes_length = 1; | 220 active_data.items[0].axes_length = 1; |
| 223 active_data.items[0].buttons[0].value = 1.f; | 221 active_data.items[0].buttons[0].value = 1.f; |
| 224 active_data.items[0].buttons[0].pressed = true; | 222 active_data.items[0].buttons[0].pressed = true; |
| 225 active_data.items[0].axes[0] = -1.f; | 223 active_data.items[0].axes[0] = -1.f; |
| 226 | 224 |
| 227 WebGamepads zero_data; | 225 Gamepads zero_data; |
| 228 zero_data.items[0].connected = true; | 226 zero_data.items[0].connected = true; |
| 229 zero_data.items[0].timestamp = 0; | 227 zero_data.items[0].timestamp = 0; |
| 230 zero_data.items[0].buttons_length = 1; | 228 zero_data.items[0].buttons_length = 1; |
| 231 zero_data.items[0].axes_length = 1; | 229 zero_data.items[0].axes_length = 1; |
| 232 zero_data.items[0].buttons[0].value = 0.f; | 230 zero_data.items[0].buttons[0].value = 0.f; |
| 233 zero_data.items[0].buttons[0].pressed = false; | 231 zero_data.items[0].buttons[0].pressed = false; |
| 234 zero_data.items[0].axes[0] = 0.f; | 232 zero_data.items[0].axes[0] = 0.f; |
| 235 | 233 |
| 236 UserGestureListener listener; | 234 UserGestureListener listener; |
| 237 GamepadProvider* provider = CreateProvider(active_data); | 235 GamepadProvider* provider = CreateProvider(active_data); |
| 238 provider->SetSanitizationEnabled(true); | 236 provider->SetSanitizationEnabled(true); |
| 239 provider->Resume(); | 237 provider->Resume(); |
| 240 | 238 |
| 241 base::RunLoop().RunUntilIdle(); | 239 base::RunLoop().RunUntilIdle(); |
| 242 | 240 |
| 243 mock_data_fetcher_->WaitForDataRead(); | 241 mock_data_fetcher_->WaitForDataRead(); |
| 244 | 242 |
| 245 // Renderer-side, pull data out of poll buffer. | 243 // Renderer-side, pull data out of poll buffer. |
| 246 base::SharedMemoryHandle handle = provider->GetSharedMemoryHandleForProcess( | 244 base::SharedMemoryHandle handle = provider->GetSharedMemoryHandleForProcess( |
| 247 base::GetCurrentProcessHandle()); | 245 base::GetCurrentProcessHandle()); |
| 248 std::unique_ptr<base::SharedMemory> shared_memory( | 246 std::unique_ptr<base::SharedMemory> shared_memory( |
| 249 new base::SharedMemory(handle, true)); | 247 new base::SharedMemory(handle, true)); |
| 250 EXPECT_TRUE(shared_memory->Map(sizeof(GamepadHardwareBuffer))); | 248 EXPECT_TRUE(shared_memory->Map(sizeof(GamepadHardwareBuffer))); |
| 251 | 249 |
| 252 GamepadHardwareBuffer* buffer = | 250 GamepadHardwareBuffer* buffer = |
| 253 static_cast<GamepadHardwareBuffer*>(shared_memory->memory()); | 251 static_cast<GamepadHardwareBuffer*>(shared_memory->memory()); |
| 254 WebGamepads output; | 252 Gamepads output; |
| 255 ReadGamepadHardwareBuffer(buffer, &output); | 253 ReadGamepadHardwareBuffer(buffer, &output); |
| 256 | 254 |
| 257 // Initial data should all be zeroed out due to sanitization, even though the | 255 // Initial data should all be zeroed out due to sanitization, even though the |
| 258 // gamepad reported input | 256 // gamepad reported input |
| 259 EXPECT_EQ(1u, output.items[0].buttons_length); | 257 EXPECT_EQ(1u, output.items[0].buttons_length); |
| 260 EXPECT_EQ(0.f, output.items[0].buttons[0].value); | 258 EXPECT_EQ(0.f, output.items[0].buttons[0].value); |
| 261 EXPECT_FALSE(output.items[0].buttons[0].pressed); | 259 EXPECT_FALSE(output.items[0].buttons[0].pressed); |
| 262 EXPECT_EQ(1u, output.items[0].axes_length); | 260 EXPECT_EQ(1u, output.items[0].axes_length); |
| 263 EXPECT_EQ(0.f, output.items[0].axes[0]); | 261 EXPECT_EQ(0.f, output.items[0].axes[0]); |
| 264 | 262 |
| (...skipping 22 matching lines...) Expand all Loading... |
| 287 EXPECT_EQ(1u, output.items[0].buttons_length); | 285 EXPECT_EQ(1u, output.items[0].buttons_length); |
| 288 EXPECT_EQ(1.f, output.items[0].buttons[0].value); | 286 EXPECT_EQ(1.f, output.items[0].buttons[0].value); |
| 289 EXPECT_TRUE(output.items[0].buttons[0].pressed); | 287 EXPECT_TRUE(output.items[0].buttons[0].pressed); |
| 290 EXPECT_EQ(1u, output.items[0].axes_length); | 288 EXPECT_EQ(1u, output.items[0].axes_length); |
| 291 EXPECT_EQ(-1.f, output.items[0].axes[0]); | 289 EXPECT_EQ(-1.f, output.items[0].axes[0]); |
| 292 } | 290 } |
| 293 | 291 |
| 294 } // namespace | 292 } // namespace |
| 295 | 293 |
| 296 } // namespace device | 294 } // namespace device |
| OLD | NEW |