Index: chrome/browser/chromeos/accessibility/select_to_speak_event_handler_unittest.cc |
diff --git a/chrome/browser/chromeos/accessibility/select_to_speak_event_handler_unittest.cc b/chrome/browser/chromeos/accessibility/select_to_speak_event_handler_unittest.cc |
index 79d31f9fe22a076e7b8361533059967cd22a9d7c..d3a986547fecb526b8ecdaddbac2a45ab2e96593 100644 |
--- a/chrome/browser/chromeos/accessibility/select_to_speak_event_handler_unittest.cc |
+++ b/chrome/browser/chromeos/accessibility/select_to_speak_event_handler_unittest.cc |
@@ -11,12 +11,14 @@ |
#include "ash/test/ash_test_helper.h" |
#include "ash/test/ash_test_views_delegate.h" |
#include "base/macros.h" |
+#include "chrome/browser/chromeos/accessibility/speech_monitor.h" |
#include "chrome/browser/ui/aura/accessibility/automation_manager_aura.h" |
#include "chrome/test/base/testing_profile.h" |
#include "ui/aura/window.h" |
#include "ui/events/event.h" |
#include "ui/events/event_constants.h" |
#include "ui/events/test/event_generator.h" |
+#include "ui/views/views_delegate.h" |
using chromeos::SelectToSpeakEventHandler; |
@@ -50,27 +52,28 @@ |
DISALLOW_COPY_AND_ASSIGN(EventCapturer); |
}; |
-class SelectToSpeakMouseEventDelegate |
- : public chromeos::SelectToSpeakForwardedEventDelegateForTesting { |
+class SelectToSpeakAccessibilityEventDelegate |
+ : public ash::test::TestAccessibilityEventDelegate { |
public: |
- SelectToSpeakMouseEventDelegate() {} |
+ SelectToSpeakAccessibilityEventDelegate() {} |
+ ~SelectToSpeakAccessibilityEventDelegate() override {} |
void Reset() { events_captured_.clear(); } |
- bool CapturedMouseEvent(ui::EventType event_type) { |
+ bool CapturedAXEvent(ui::AXEvent event_type) { |
return events_captured_.find(event_type) != events_captured_.end(); |
} |
- // Overriden from SelectToSpeakForwardedEventDelegateForTesting |
- void OnForwardEventToSelectToSpeakExtension( |
- const ui::MouseEvent& event) override { |
- events_captured_.insert(event.type()); |
+ // Overriden from TestAccessibilityEventDelegate. |
+ void NotifyAccessibilityEvent(views::View* view, |
+ ui::AXEvent event_type) override { |
+ events_captured_.insert(event_type); |
} |
private: |
- std::set<ui::EventType> events_captured_; |
- |
- DISALLOW_COPY_AND_ASSIGN(SelectToSpeakMouseEventDelegate); |
+ std::set<ui::AXEvent> events_captured_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(SelectToSpeakAccessibilityEventDelegate); |
}; |
class SelectToSpeakEventHandlerTest : public ash::test::AshTestBase { |
@@ -81,9 +84,10 @@ |
void SetUp() override { |
ash::test::AshTestBase::SetUp(); |
- mouse_event_delegate_.reset(new SelectToSpeakMouseEventDelegate()); |
- select_to_speak_event_handler_->CaptureForwardedEventsForTesting( |
- mouse_event_delegate_.get()); |
+ event_delegate_.reset(new SelectToSpeakAccessibilityEventDelegate()); |
+ ash_test_helper() |
+ ->test_views_delegate() |
+ ->set_test_accessibility_event_delegate(event_delegate_.get()); |
generator_ = &AshTestBase::GetEventGenerator(); |
CurrentContext()->AddPreTargetHandler(select_to_speak_event_handler_.get()); |
CurrentContext()->AddPreTargetHandler(&event_capturer_); |
@@ -102,7 +106,7 @@ |
ui::test::EventGenerator* generator_; |
EventCapturer event_capturer_; |
TestingProfile profile_; |
- std::unique_ptr<SelectToSpeakMouseEventDelegate> mouse_event_delegate_; |
+ std::unique_ptr<SelectToSpeakAccessibilityEventDelegate> event_delegate_; |
private: |
std::unique_ptr<SelectToSpeakEventHandler> select_to_speak_event_handler_; |
@@ -131,27 +135,25 @@ |
EXPECT_FALSE(event_capturer_.last_key_event()->handled()); |
} |
-// Note: when running these tests locally on desktop Linux, you may need |
-// to use xvfb-run, otherwise simulating the Search key press may not work. |
TEST_F(SelectToSpeakEventHandlerTest, SearchPlusClick) { |
// If the user holds the Search key and then clicks the mouse button, |
- // the mouse events and the key release event get handled by the |
- // SelectToSpeakEventHandler, and mouse events are forwarded to the extension. |
- |
- generator_->PressKey(ui::VKEY_LWIN, ui::EF_COMMAND_DOWN); |
- ASSERT_TRUE(event_capturer_.last_key_event()); |
- EXPECT_FALSE(event_capturer_.last_key_event()->handled()); |
- |
- generator_->set_current_location(gfx::Point(100, 12)); |
- generator_->PressLeftButton(); |
- EXPECT_FALSE(event_capturer_.last_mouse_event()); |
- |
- EXPECT_TRUE(mouse_event_delegate_->CapturedMouseEvent(ui::ET_MOUSE_PRESSED)); |
- |
- generator_->ReleaseLeftButton(); |
- EXPECT_FALSE(event_capturer_.last_mouse_event()); |
- |
- EXPECT_TRUE(mouse_event_delegate_->CapturedMouseEvent(ui::ET_MOUSE_RELEASED)); |
+ // the mouse events and the key release event get hancled by the |
+ // SelectToSpeakEventHandler, and accessibility events are generated. |
+ |
+ generator_->PressKey(ui::VKEY_LWIN, ui::EF_COMMAND_DOWN); |
+ ASSERT_TRUE(event_capturer_.last_key_event()); |
+ EXPECT_FALSE(event_capturer_.last_key_event()->handled()); |
+ |
+ generator_->set_current_location(gfx::Point(100, 12)); |
+ generator_->PressLeftButton(); |
+ EXPECT_FALSE(event_capturer_.last_mouse_event()); |
+ |
+ EXPECT_TRUE(event_delegate_->CapturedAXEvent(ui::AX_EVENT_MOUSE_PRESSED)); |
+ |
+ generator_->ReleaseLeftButton(); |
+ EXPECT_FALSE(event_capturer_.last_mouse_event()); |
+ |
+ EXPECT_TRUE(event_delegate_->CapturedAXEvent(ui::AX_EVENT_MOUSE_RELEASED)); |
event_capturer_.Reset(); |
generator_->ReleaseKey(ui::VKEY_LWIN, ui::EF_COMMAND_DOWN); |
@@ -168,15 +170,15 @@ |
generator_->PressLeftButton(); |
EXPECT_FALSE(event_capturer_.last_mouse_event()); |
- EXPECT_TRUE(mouse_event_delegate_->CapturedMouseEvent(ui::ET_MOUSE_PRESSED)); |
- |
- generator_->PressKey(ui::VKEY_LWIN, ui::EF_COMMAND_DOWN); |
- generator_->PressKey(ui::VKEY_LWIN, ui::EF_COMMAND_DOWN); |
- |
- generator_->ReleaseLeftButton(); |
- EXPECT_FALSE(event_capturer_.last_mouse_event()); |
- |
- EXPECT_TRUE(mouse_event_delegate_->CapturedMouseEvent(ui::ET_MOUSE_RELEASED)); |
+ EXPECT_TRUE(event_delegate_->CapturedAXEvent(ui::AX_EVENT_MOUSE_PRESSED)); |
+ |
+ generator_->PressKey(ui::VKEY_LWIN, ui::EF_COMMAND_DOWN); |
+ generator_->PressKey(ui::VKEY_LWIN, ui::EF_COMMAND_DOWN); |
+ |
+ generator_->ReleaseLeftButton(); |
+ EXPECT_FALSE(event_capturer_.last_mouse_event()); |
+ |
+ EXPECT_TRUE(event_delegate_->CapturedAXEvent(ui::AX_EVENT_MOUSE_RELEASED)); |
event_capturer_.Reset(); |
generator_->ReleaseKey(ui::VKEY_LWIN, ui::EF_COMMAND_DOWN); |
@@ -194,24 +196,23 @@ |
generator_->set_current_location(gfx::Point(100, 12)); |
generator_->PressLeftButton(); |
EXPECT_FALSE(event_capturer_.last_mouse_event()); |
- EXPECT_TRUE(mouse_event_delegate_->CapturedMouseEvent(ui::ET_MOUSE_PRESSED)); |
- |
- generator_->ReleaseLeftButton(); |
- EXPECT_FALSE(event_capturer_.last_mouse_event()); |
- EXPECT_TRUE(mouse_event_delegate_->CapturedMouseEvent(ui::ET_MOUSE_RELEASED)); |
- |
- mouse_event_delegate_->Reset(); |
- EXPECT_FALSE(mouse_event_delegate_->CapturedMouseEvent(ui::ET_MOUSE_PRESSED)); |
- EXPECT_FALSE( |
- mouse_event_delegate_->CapturedMouseEvent(ui::ET_MOUSE_RELEASED)); |
- |
- generator_->PressLeftButton(); |
- EXPECT_FALSE(event_capturer_.last_mouse_event()); |
- EXPECT_TRUE(mouse_event_delegate_->CapturedMouseEvent(ui::ET_MOUSE_PRESSED)); |
- |
- generator_->ReleaseLeftButton(); |
- EXPECT_FALSE(event_capturer_.last_mouse_event()); |
- EXPECT_TRUE(mouse_event_delegate_->CapturedMouseEvent(ui::ET_MOUSE_RELEASED)); |
+ EXPECT_TRUE(event_delegate_->CapturedAXEvent(ui::AX_EVENT_MOUSE_PRESSED)); |
+ |
+ generator_->ReleaseLeftButton(); |
+ EXPECT_FALSE(event_capturer_.last_mouse_event()); |
+ EXPECT_TRUE(event_delegate_->CapturedAXEvent(ui::AX_EVENT_MOUSE_RELEASED)); |
+ |
+ event_delegate_->Reset(); |
+ EXPECT_FALSE(event_delegate_->CapturedAXEvent(ui::AX_EVENT_MOUSE_PRESSED)); |
+ EXPECT_FALSE(event_delegate_->CapturedAXEvent(ui::AX_EVENT_MOUSE_RELEASED)); |
+ |
+ generator_->PressLeftButton(); |
+ EXPECT_FALSE(event_capturer_.last_mouse_event()); |
+ EXPECT_TRUE(event_delegate_->CapturedAXEvent(ui::AX_EVENT_MOUSE_PRESSED)); |
+ |
+ generator_->ReleaseLeftButton(); |
+ EXPECT_FALSE(event_capturer_.last_mouse_event()); |
+ EXPECT_TRUE(event_delegate_->CapturedAXEvent(ui::AX_EVENT_MOUSE_RELEASED)); |
event_capturer_.Reset(); |
generator_->ReleaseKey(ui::VKEY_LWIN, ui::EF_COMMAND_DOWN); |
@@ -236,14 +237,13 @@ |
ASSERT_TRUE(event_capturer_.last_mouse_event()); |
EXPECT_FALSE(event_capturer_.last_mouse_event()->handled()); |
- EXPECT_FALSE(mouse_event_delegate_->CapturedMouseEvent(ui::ET_MOUSE_PRESSED)); |
+ EXPECT_FALSE(event_delegate_->CapturedAXEvent(ui::AX_EVENT_MOUSE_PRESSED)); |
generator_->ReleaseLeftButton(); |
ASSERT_TRUE(event_capturer_.last_mouse_event()); |
EXPECT_FALSE(event_capturer_.last_mouse_event()->handled()); |
- EXPECT_FALSE( |
- mouse_event_delegate_->CapturedMouseEvent(ui::ET_MOUSE_RELEASED)); |
+ EXPECT_FALSE(event_delegate_->CapturedAXEvent(ui::AX_EVENT_MOUSE_RELEASED)); |
event_capturer_.Reset(); |
generator_->ReleaseKey(ui::VKEY_I, ui::EF_COMMAND_DOWN); |
@@ -256,4 +256,36 @@ |
EXPECT_FALSE(event_capturer_.last_key_event()->handled()); |
} |
+TEST_F(SelectToSpeakEventHandlerTest, TappingControlStopsSpeech) { |
+ SpeechMonitor monitor; |
+ EXPECT_FALSE(monitor.DidStop()); |
+ generator_->PressKey(ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN); |
+ generator_->ReleaseKey(ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN); |
+ EXPECT_TRUE(monitor.DidStop()); |
+} |
+ |
+TEST_F(SelectToSpeakEventHandlerTest, TappingSearchStopsSpeech) { |
+ SpeechMonitor monitor; |
+ EXPECT_FALSE(monitor.DidStop()); |
+ generator_->PressKey(ui::VKEY_LWIN, ui::EF_COMMAND_DOWN); |
+ generator_->ReleaseKey(ui::VKEY_LWIN, ui::EF_COMMAND_DOWN); |
+ EXPECT_TRUE(monitor.DidStop()); |
+} |
+ |
+TEST_F(SelectToSpeakEventHandlerTest, TappingShiftDoesNotStopSpeech) { |
+ SpeechMonitor monitor; |
+ generator_->PressKey(ui::VKEY_SHIFT, ui::EF_SHIFT_DOWN); |
+ generator_->ReleaseKey(ui::VKEY_SHIFT, ui::EF_SHIFT_DOWN); |
+ EXPECT_FALSE(monitor.DidStop()); |
+} |
+ |
+TEST_F(SelectToSpeakEventHandlerTest, PressingControlZDoesNotStopSpeech) { |
+ SpeechMonitor monitor; |
+ generator_->PressKey(ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN); |
+ generator_->PressKey(ui::VKEY_Z, ui::EF_CONTROL_DOWN); |
+ generator_->ReleaseKey(ui::VKEY_Z, ui::EF_CONTROL_DOWN); |
+ generator_->ReleaseKey(ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN); |
+ EXPECT_FALSE(monitor.DidStop()); |
+} |
+ |
} // namespace chromeos |