Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2758)

Unified Diff: ash/magnifier/partial_magnification_controller_unittest.cc

Issue 2269383002: Magnifier border is now more visible on light backgrounds. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@lkgr
Patch Set: Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: ash/magnifier/partial_magnification_controller_unittest.cc
diff --git a/ash/magnifier/partial_magnification_controller_unittest.cc b/ash/magnifier/partial_magnification_controller_unittest.cc
new file mode 100644
index 0000000000000000000000000000000000000000..7e6e3aa3cbf16002bb46503187404a99a1321ec6
--- /dev/null
+++ b/ash/magnifier/partial_magnification_controller_unittest.cc
@@ -0,0 +1,166 @@
+// Copyright 2016 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "ash/display/display_manager.h"
+#include "ash/magnifier/magnification_controller.h"
+#include "ash/magnifier/partial_magnification_controller.h"
+#include "ash/shell.h"
+#include "ash/test/ash_test_base.h"
+#include "ui/events/test/event_generator.h"
+#include "ui/views/widget/widget.h"
+
+namespace ash {
+
+// Wrapper for PartialMagnificationController that exposes internal state to
+// test functions.
+class PartialMagnificationControllerTestApi {
+ public:
+ explicit PartialMagnificationControllerTestApi(
+ PartialMagnificationController* controller)
+ : controller_(controller) {}
+ ~PartialMagnificationControllerTestApi() {}
+
+ bool is_enabled() const { return controller_->is_enabled_; }
+ bool is_active() const { return controller_->is_active_; }
+ views::Widget* host_widget() const { return controller_->host_widget_; }
+
+ gfx::Point GetWidgetOrigin() const {
+ return host_widget()->GetWindowBoundsInScreen().origin();
+ }
+
+ private:
+ PartialMagnificationController* controller_;
+
+ DISALLOW_ASSIGN(PartialMagnificationControllerTestApi);
+};
+
+class PartialMagnificationControllerTest : public test::AshTestBase {
+ public:
+ PartialMagnificationControllerTest() {}
+ ~PartialMagnificationControllerTest() override {}
+
+ void SetUp() override {
+ AshTestBase::SetUp();
+ Shell::GetInstance()->display_manager()->UpdateDisplays();
+ }
+
+ protected:
+ PartialMagnificationController* GetController() const {
+ return Shell::GetInstance()->partial_magnification_controller();
+ }
+
+ PartialMagnificationControllerTestApi GetTestApi() const {
+ return PartialMagnificationControllerTestApi(
+ Shell::GetInstance()->partial_magnification_controller());
+ }
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(PartialMagnificationControllerTest);
+};
+
+// The magnifier should not show up immediately after being enabled.
+TEST_F(PartialMagnificationControllerTest, InactiveByDefault) {
+ GetController()->SetEnabled(true);
+ EXPECT_FALSE(GetTestApi().is_active());
+ EXPECT_FALSE(GetTestApi().host_widget());
+}
+
+// The magnifier should show up only after a pointer is pressed while enabled.
+TEST_F(PartialMagnificationControllerTest, ActiveOnPointerDown) {
+ GetEventGenerator().EnterPenPointerMode();
+
+ // While disabled no magnifier shows up.
+ GetEventGenerator().PressLeftButton();
+ EXPECT_FALSE(GetTestApi().is_active());
+ EXPECT_FALSE(GetTestApi().host_widget());
+ GetEventGenerator().ReleaseLeftButton();
+
+ // While enabled the magnifier is only active while the pointer is down.
+ GetController()->SetEnabled(true);
+ GetEventGenerator().PressLeftButton();
+ EXPECT_TRUE(GetTestApi().is_active());
+ EXPECT_TRUE(GetTestApi().host_widget());
+ GetEventGenerator().ReleaseLeftButton();
+ EXPECT_FALSE(GetTestApi().is_active());
+ EXPECT_FALSE(GetTestApi().host_widget());
+}
+
+// Verifies that nothing bad happens if a second display is disconnected while
+// the magnifier is active.
+TEST_F(PartialMagnificationControllerTest, MultipleDisplays) {
+ if (!SupportsMultipleDisplays())
+ return;
+ GetEventGenerator().EnterPenPointerMode();
+
+ // Active magnifier with two displays, move it to the second display.
+ UpdateDisplay("800x600,800x600");
+ GetController()->SetEnabled(true);
+ GetEventGenerator().PressLeftButton();
+ GetEventGenerator().MoveMouseTo(gfx::Point(1200, 300));
+ EXPECT_TRUE(GetTestApi().is_active());
+ EXPECT_TRUE(GetTestApi().host_widget());
+
+ // Disconnect the second display, verify that magnifier is still active.
+ UpdateDisplay("800x600");
+ GetController()->SwitchTargetRootWindowIfNeeded(nullptr);
+ EXPECT_TRUE(GetTestApi().is_active());
+ EXPECT_TRUE(GetTestApi().host_widget());
+}
+
+// Turning the magnifier off while it is active destroys the window.
+TEST_F(PartialMagnificationControllerTest, DisablingDisablesActive) {
+ GetEventGenerator().EnterPenPointerMode();
+
+ GetController()->SetEnabled(true);
+ GetEventGenerator().PressLeftButton();
+ EXPECT_TRUE(GetTestApi().is_active());
+
+ GetController()->SetEnabled(false);
+ EXPECT_FALSE(GetTestApi().is_active());
+ EXPECT_FALSE(GetTestApi().host_widget());
+}
+
+// The magnifier only activates for pointer events.
+TEST_F(PartialMagnificationControllerTest, ActivatesOnlyForPointer) {
+ GetController()->SetEnabled(true);
+ GetEventGenerator().PressRightButton();
+ GetEventGenerator().PressTouch();
+ EXPECT_FALSE(GetTestApi().is_active());
+}
+
+// The magnifier is always located at pointer.
+TEST_F(PartialMagnificationControllerTest, MagnifierFollowsPointer) {
+ GetEventGenerator().EnterPenPointerMode();
+ GetController()->SetEnabled(true);
+
+ // The window does not have to be centered on the press; compute the initial
+ // window placement offset. Use a Vector2d for the + operator overload.
+ GetEventGenerator().PressLeftButton();
+ gfx::Vector2d offset(GetTestApi().GetWidgetOrigin().x(),
+ GetTestApi().GetWidgetOrigin().y());
+
+ // Move the pointer around, make sure the window follows it.
+ GetEventGenerator().MoveMouseTo(gfx::Point(32, 32));
+ EXPECT_EQ(GetEventGenerator().current_location() + offset,
+ GetTestApi().GetWidgetOrigin());
+
+ GetEventGenerator().MoveMouseTo(gfx::Point(0, 10));
+ EXPECT_EQ(GetEventGenerator().current_location() + offset,
+ GetTestApi().GetWidgetOrigin());
+
+ GetEventGenerator().MoveMouseTo(gfx::Point(10, 0));
+ EXPECT_EQ(GetEventGenerator().current_location() + offset,
+ GetTestApi().GetWidgetOrigin());
+
+ GetEventGenerator().ReleaseLeftButton();
+
+ // Make sure the window is initially placed correctly.
+ GetEventGenerator().set_current_location(gfx::Point(50, 20));
+ EXPECT_FALSE(GetTestApi().is_active());
+ GetEventGenerator().PressLeftButton();
+ EXPECT_EQ(GetEventGenerator().current_location() + offset,
+ GetTestApi().GetWidgetOrigin());
+}
+
+} // namespace ash

Powered by Google App Engine
This is Rietveld 408576698