| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 #ifndef USE_BRLAPI | 5 #ifndef USE_BRLAPI |
| 6 #error This test requires brlapi. | 6 #error This test requires brlapi. |
| 7 #endif | 7 #endif |
| 8 | 8 |
| 9 #include <deque> | 9 #include <deque> |
| 10 | 10 |
| (...skipping 24 matching lines...) Expand all Loading... |
| 35 using content::BrowserThread; | 35 using content::BrowserThread; |
| 36 | 36 |
| 37 namespace extensions { | 37 namespace extensions { |
| 38 namespace api { | 38 namespace api { |
| 39 namespace braille_display_private { | 39 namespace braille_display_private { |
| 40 | 40 |
| 41 namespace { | 41 namespace { |
| 42 | 42 |
| 43 const char kTestUserName[] = "owner@invalid.domain"; | 43 const char kTestUserName[] = "owner@invalid.domain"; |
| 44 | 44 |
| 45 // Used to make ReadKeys return an error. |
| 46 brlapi_keyCode_t kErrorKeyCode = BRLAPI_KEY_MAX; |
| 47 |
| 45 } // namespace | 48 } // namespace |
| 46 | 49 |
| 47 // Data maintained by the mock BrlapiConnection. This data lives throughout | 50 // Data maintained by the mock BrlapiConnection. This data lives throughout |
| 48 // a test, while the api implementation takes ownership of the connection | 51 // a test, while the api implementation takes ownership of the connection |
| 49 // itself. | 52 // itself. |
| 50 struct MockBrlapiConnectionData { | 53 struct MockBrlapiConnectionData { |
| 51 bool connected; | 54 bool connected; |
| 52 size_t display_size; | 55 size_t display_size; |
| 53 brlapi_error_t error; | 56 brlapi_error_t error; |
| 54 std::vector<std::string> written_content; | 57 std::vector<std::string> written_content; |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 107 | 110 |
| 108 virtual bool WriteDots(const unsigned char* cells) OVERRIDE { | 111 virtual bool WriteDots(const unsigned char* cells) OVERRIDE { |
| 109 std::string written(reinterpret_cast<const char*>(cells), | 112 std::string written(reinterpret_cast<const char*>(cells), |
| 110 data_->display_size); | 113 data_->display_size); |
| 111 data_->written_content.push_back(written); | 114 data_->written_content.push_back(written); |
| 112 return true; | 115 return true; |
| 113 } | 116 } |
| 114 | 117 |
| 115 virtual int ReadKey(brlapi_keyCode_t* key_code) OVERRIDE { | 118 virtual int ReadKey(brlapi_keyCode_t* key_code) OVERRIDE { |
| 116 if (!data_->pending_keys.empty()) { | 119 if (!data_->pending_keys.empty()) { |
| 117 int queued_key_code = data_->pending_keys.front(); | 120 brlapi_keyCode_t queued_key_code = data_->pending_keys.front(); |
| 118 data_->pending_keys.pop_front(); | 121 data_->pending_keys.pop_front(); |
| 119 if (queued_key_code < 0) { | 122 if (queued_key_code == kErrorKeyCode) { |
| 120 data_->error.brlerrno = BRLAPI_ERROR_EOF; | 123 data_->error.brlerrno = BRLAPI_ERROR_EOF; |
| 121 return -1; // Signal error. | 124 return -1; // Signal error. |
| 122 } | 125 } |
| 123 *key_code = queued_key_code; | 126 *key_code = queued_key_code; |
| 124 return 1; | 127 return 1; |
| 125 } else { | 128 } else { |
| 126 return 0; | 129 return 0; |
| 127 } | 130 } |
| 128 } | 131 } |
| 129 | 132 |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 187 ASSERT_EQ(std::string( | 190 ASSERT_EQ(std::string( |
| 188 connection_data_.display_size, | 191 connection_data_.display_size, |
| 189 static_cast<char>(i)), | 192 static_cast<char>(i)), |
| 190 connection_data_.written_content[i]) | 193 connection_data_.written_content[i]) |
| 191 << "String " << i << " doesn't match"; | 194 << "String " << i << " doesn't match"; |
| 192 } | 195 } |
| 193 } | 196 } |
| 194 | 197 |
| 195 IN_PROC_BROWSER_TEST_F(BrailleDisplayPrivateApiTest, KeyEvents) { | 198 IN_PROC_BROWSER_TEST_F(BrailleDisplayPrivateApiTest, KeyEvents) { |
| 196 connection_data_.display_size = 11; | 199 connection_data_.display_size = 11; |
| 200 |
| 201 // Braille navigation commands. |
| 197 connection_data_.pending_keys.push_back(BRLAPI_KEY_TYPE_CMD | | 202 connection_data_.pending_keys.push_back(BRLAPI_KEY_TYPE_CMD | |
| 198 BRLAPI_KEY_CMD_LNUP); | 203 BRLAPI_KEY_CMD_LNUP); |
| 199 connection_data_.pending_keys.push_back(BRLAPI_KEY_TYPE_CMD | | 204 connection_data_.pending_keys.push_back(BRLAPI_KEY_TYPE_CMD | |
| 200 BRLAPI_KEY_CMD_LNDN); | 205 BRLAPI_KEY_CMD_LNDN); |
| 201 connection_data_.pending_keys.push_back(BRLAPI_KEY_TYPE_CMD | | 206 connection_data_.pending_keys.push_back(BRLAPI_KEY_TYPE_CMD | |
| 202 BRLAPI_KEY_CMD_FWINLT); | 207 BRLAPI_KEY_CMD_FWINLT); |
| 203 connection_data_.pending_keys.push_back(BRLAPI_KEY_TYPE_CMD | | 208 connection_data_.pending_keys.push_back(BRLAPI_KEY_TYPE_CMD | |
| 204 BRLAPI_KEY_CMD_FWINRT); | 209 BRLAPI_KEY_CMD_FWINRT); |
| 205 connection_data_.pending_keys.push_back(BRLAPI_KEY_TYPE_CMD | | 210 connection_data_.pending_keys.push_back(BRLAPI_KEY_TYPE_CMD | |
| 206 BRLAPI_KEY_CMD_TOP); | 211 BRLAPI_KEY_CMD_TOP); |
| 207 connection_data_.pending_keys.push_back(BRLAPI_KEY_TYPE_CMD | | 212 connection_data_.pending_keys.push_back(BRLAPI_KEY_TYPE_CMD | |
| 208 BRLAPI_KEY_CMD_BOT); | 213 BRLAPI_KEY_CMD_BOT); |
| 209 connection_data_.pending_keys.push_back(BRLAPI_KEY_TYPE_CMD | | 214 connection_data_.pending_keys.push_back(BRLAPI_KEY_TYPE_CMD | |
| 210 BRLAPI_KEY_CMD_ROUTE | 5); | 215 BRLAPI_KEY_CMD_ROUTE | 5); |
| 211 // Space (0) and all combinations of dots. | 216 |
| 217 // Braille display standard keyboard emulation. |
| 218 |
| 219 // An ascii character. |
| 220 connection_data_.pending_keys.push_back(BRLAPI_KEY_TYPE_SYM | 'A'); |
| 221 // A non-ascii 'latin1' character. Small letter a with ring above. |
| 222 connection_data_.pending_keys.push_back(BRLAPI_KEY_TYPE_SYM | 0xE5); |
| 223 // A non-latin1 Unicode character. LATIN SMALL LETTER A WITH MACRON. |
| 224 connection_data_.pending_keys.push_back( |
| 225 BRLAPI_KEY_TYPE_SYM | BRLAPI_KEY_SYM_UNICODE | 0x100); |
| 226 // A Unicode character outside the BMP. CAT FACE WITH TEARS OF JOY. |
| 227 // With anticipation for the first emoji-enabled braille display. |
| 228 connection_data_.pending_keys.push_back( |
| 229 BRLAPI_KEY_TYPE_SYM | BRLAPI_KEY_SYM_UNICODE | 0x1F639); |
| 230 // Invalid Unicode character. |
| 231 connection_data_.pending_keys.push_back( |
| 232 BRLAPI_KEY_TYPE_SYM | BRLAPI_KEY_SYM_UNICODE | 0x110000); |
| 233 |
| 234 // Non-alphanumeric function keys. |
| 235 |
| 236 // Backspace. |
| 237 connection_data_.pending_keys.push_back( |
| 238 BRLAPI_KEY_TYPE_SYM | BRLAPI_KEY_SYM_BACKSPACE); |
| 239 // Shift+Tab. |
| 240 connection_data_.pending_keys.push_back( |
| 241 BRLAPI_KEY_TYPE_SYM | BRLAPI_KEY_FLG_SHIFT | BRLAPI_KEY_SYM_TAB); |
| 242 // Alt+F3. (0-based). |
| 243 connection_data_.pending_keys.push_back( |
| 244 BRLAPI_KEY_TYPE_SYM | BRLAPI_KEY_FLG_META | |
| 245 (BRLAPI_KEY_SYM_FUNCTION + 2)); |
| 246 |
| 247 // ctrl+dot1+dot2. |
| 248 connection_data_.pending_keys.push_back( |
| 249 BRLAPI_KEY_TYPE_CMD | BRLAPI_KEY_FLG_CONTROL | BRLAPI_KEY_CMD_PASSDOTS | |
| 250 BRLAPI_DOT1 | BRLAPI_DOT2); |
| 251 |
| 252 // Braille dot keys, all combinations including space (0). |
| 212 for (int i = 0; i < 256; ++i) { | 253 for (int i = 0; i < 256; ++i) { |
| 213 connection_data_.pending_keys.push_back(BRLAPI_KEY_TYPE_CMD | | 254 connection_data_.pending_keys.push_back(BRLAPI_KEY_TYPE_CMD | |
| 214 BRLAPI_KEY_CMD_PASSDOTS | i); | 255 BRLAPI_KEY_CMD_PASSDOTS | i); |
| 215 } | 256 } |
| 257 |
| 216 ASSERT_TRUE(RunComponentExtensionTest("braille_display_private/key_events")); | 258 ASSERT_TRUE(RunComponentExtensionTest("braille_display_private/key_events")); |
| 217 } | 259 } |
| 218 | 260 |
| 219 IN_PROC_BROWSER_TEST_F(BrailleDisplayPrivateApiTest, DisplayStateChanges) { | 261 IN_PROC_BROWSER_TEST_F(BrailleDisplayPrivateApiTest, DisplayStateChanges) { |
| 220 connection_data_.display_size = 11; | 262 connection_data_.display_size = 11; |
| 221 connection_data_.pending_keys.push_back(-1); | 263 connection_data_.pending_keys.push_back(kErrorKeyCode); |
| 222 connection_data_.reappear_on_disconnect = true; | 264 connection_data_.reappear_on_disconnect = true; |
| 223 ASSERT_TRUE(RunComponentExtensionTest( | 265 ASSERT_TRUE(RunComponentExtensionTest( |
| 224 "braille_display_private/display_state_changes")); | 266 "braille_display_private/display_state_changes")); |
| 225 } | 267 } |
| 226 | 268 |
| 227 class BrailleDisplayPrivateAPIUserTest : public BrailleDisplayPrivateApiTest { | 269 class BrailleDisplayPrivateAPIUserTest : public BrailleDisplayPrivateApiTest { |
| 228 public: | 270 public: |
| 229 virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE { | 271 virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE { |
| 230 command_line->AppendSwitch(chromeos::switches::kLoginManager); | 272 command_line->AppendSwitch(chromeos::switches::kLoginManager); |
| 231 command_line->AppendSwitchASCII(chromeos::switches::kLoginProfile, | 273 command_line->AppendSwitchASCII(chromeos::switches::kLoginProfile, |
| (...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 321 DismissLockScreen(tester.get()); | 363 DismissLockScreen(tester.get()); |
| 322 signin_api.OnBrailleKeyEvent(key_event); | 364 signin_api.OnBrailleKeyEvent(key_event); |
| 323 user_api.OnBrailleKeyEvent(key_event); | 365 user_api.OnBrailleKeyEvent(key_event); |
| 324 EXPECT_EQ(1, signin_delegate->GetEventCount()); | 366 EXPECT_EQ(1, signin_delegate->GetEventCount()); |
| 325 EXPECT_EQ(2, user_delegate->GetEventCount()); | 367 EXPECT_EQ(2, user_delegate->GetEventCount()); |
| 326 } | 368 } |
| 327 | 369 |
| 328 } // namespace braille_display_private | 370 } // namespace braille_display_private |
| 329 } // namespace api | 371 } // namespace api |
| 330 } // namespace extensions | 372 } // namespace extensions |
| OLD | NEW |