summaryrefslogtreecommitdiff
path: root/chromium/ash/magnifier/magnification_controller_unittest.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/ash/magnifier/magnification_controller_unittest.cc')
-rw-r--r--chromium/ash/magnifier/magnification_controller_unittest.cc442
1 files changed, 442 insertions, 0 deletions
diff --git a/chromium/ash/magnifier/magnification_controller_unittest.cc b/chromium/ash/magnifier/magnification_controller_unittest.cc
new file mode 100644
index 00000000000..9e32759067e
--- /dev/null
+++ b/chromium/ash/magnifier/magnification_controller_unittest.cc
@@ -0,0 +1,442 @@
+// Copyright (c) 2013 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/magnifier/magnification_controller.h"
+#include "ash/magnifier/magnifier_constants.h"
+#include "ash/shell.h"
+#include "ash/test/ash_test_base.h"
+#include "base/strings/stringprintf.h"
+#include "ui/aura/client/aura_constants.h"
+#include "ui/aura/env.h"
+#include "ui/aura/root_window.h"
+#include "ui/aura/test/event_generator.h"
+#include "ui/gfx/rect_conversions.h"
+#include "ui/gfx/screen.h"
+
+namespace ash {
+namespace internal {
+namespace {
+
+const int kRootHeight = 600;
+const int kRootWidth = 800;
+
+} // namespace
+
+class MagnificationControllerTest: public test::AshTestBase {
+ public:
+ MagnificationControllerTest() {}
+ virtual ~MagnificationControllerTest() {}
+
+ virtual void SetUp() OVERRIDE {
+ AshTestBase::SetUp();
+ UpdateDisplay(base::StringPrintf("%dx%d", kRootWidth, kRootHeight));
+
+ aura::Window* root = GetRootWindow();
+ gfx::Rect root_bounds(root->bounds());
+
+#if defined(OS_WIN)
+ // RootWindow and Display can't resize on Windows Ash.
+ // http://crbug.com/165962
+ EXPECT_EQ(kRootHeight, root_bounds.height());
+ EXPECT_EQ(kRootWidth, root_bounds.width());
+#endif
+ }
+
+ virtual void TearDown() OVERRIDE {
+ AshTestBase::TearDown();
+ }
+
+ protected:
+ aura::Window* GetRootWindow() const {
+ return Shell::GetPrimaryRootWindow();
+ }
+
+ std::string GetHostMouseLocation() {
+ gfx::Point point;
+ GetRootWindow()->GetDispatcher()->host()->QueryMouseLocation(&point);
+ return point.ToString();
+ }
+
+ ash::MagnificationController* GetMagnificationController() const {
+ return ash::Shell::GetInstance()->magnification_controller();
+ }
+
+ gfx::Rect GetViewport() const {
+ gfx::RectF bounds(0, 0, kRootWidth, kRootHeight);
+ GetRootWindow()->layer()->transform().TransformRectReverse(&bounds);
+ return gfx::ToEnclosingRect(bounds);
+ }
+
+ std::string CurrentPointOfInterest() const {
+ return GetMagnificationController()->
+ GetPointOfInterestForTesting().ToString();
+ }
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(MagnificationControllerTest);
+};
+
+TEST_F(MagnificationControllerTest, EnableAndDisable) {
+ // Confirms the magnifier is disabled.
+ EXPECT_TRUE(GetRootWindow()->layer()->transform().IsIdentity());
+ EXPECT_EQ(1.0f, GetMagnificationController()->GetScale());
+ EXPECT_EQ("0,0 800x600", GetViewport().ToString());
+
+ // Enables magnifier.
+ GetMagnificationController()->SetEnabled(true);
+ EXPECT_FALSE(GetRootWindow()->layer()->transform().IsIdentity());
+ EXPECT_EQ(2.0f, GetMagnificationController()->GetScale());
+ EXPECT_EQ("200,150 400x300", GetViewport().ToString());
+
+ // Disables magnifier.
+ GetMagnificationController()->SetEnabled(false);
+ EXPECT_TRUE(GetRootWindow()->layer()->transform().IsIdentity());
+ EXPECT_EQ(1.0f, GetMagnificationController()->GetScale());
+ EXPECT_EQ("0,0 800x600", GetViewport().ToString());
+
+ // Confirms the the scale can't be changed.
+ GetMagnificationController()->SetScale(4.0f, false);
+ EXPECT_TRUE(GetRootWindow()->layer()->transform().IsIdentity());
+ EXPECT_EQ(1.0f, GetMagnificationController()->GetScale());
+ EXPECT_EQ("0,0 800x600", GetViewport().ToString());
+}
+
+TEST_F(MagnificationControllerTest, MagnifyAndUnmagnify) {
+ // Enables magnifier and confirms the default scale is 2.0x.
+ GetMagnificationController()->SetEnabled(true);
+ EXPECT_FALSE(GetRootWindow()->layer()->transform().IsIdentity());
+ EXPECT_EQ(2.0f, GetMagnificationController()->GetScale());
+ EXPECT_EQ("200,150 400x300", GetViewport().ToString());
+ EXPECT_EQ("400,300", CurrentPointOfInterest());
+
+ // Changes the scale.
+ GetMagnificationController()->SetScale(4.0f, false);
+ EXPECT_EQ(4.0f, GetMagnificationController()->GetScale());
+ EXPECT_EQ("300,225 200x150", GetViewport().ToString());
+ EXPECT_EQ("400,300", CurrentPointOfInterest());
+
+ GetMagnificationController()->SetScale(1.0f, false);
+ EXPECT_EQ(1.0f, GetMagnificationController()->GetScale());
+ EXPECT_EQ("0,0 800x600", GetViewport().ToString());
+ EXPECT_EQ("400,300", CurrentPointOfInterest());
+
+ GetMagnificationController()->SetScale(3.0f, false);
+ EXPECT_EQ(3.0f, GetMagnificationController()->GetScale());
+ EXPECT_EQ("266,200 267x200", GetViewport().ToString());
+ EXPECT_EQ("400,300", CurrentPointOfInterest());
+}
+
+TEST_F(MagnificationControllerTest, MoveWindow) {
+ // Enables magnifier and confirm the viewport is at center.
+ GetMagnificationController()->SetEnabled(true);
+ EXPECT_EQ(2.0f, GetMagnificationController()->GetScale());
+ EXPECT_EQ("200,150 400x300", GetViewport().ToString());
+
+ // Move the viewport.
+ GetMagnificationController()->MoveWindow(0, 0, false);
+ EXPECT_EQ("0,0 400x300", GetViewport().ToString());
+
+ GetMagnificationController()->MoveWindow(200, 300, false);
+ EXPECT_EQ("200,300 400x300", GetViewport().ToString());
+
+ GetMagnificationController()->MoveWindow(400, 0, false);
+ EXPECT_EQ("400,0 400x300", GetViewport().ToString());
+
+ GetMagnificationController()->MoveWindow(400, 300, false);
+ EXPECT_EQ("400,300 400x300", GetViewport().ToString());
+
+ // Confirms that the viewport can't across the top-left border.
+ GetMagnificationController()->MoveWindow(-100, 0, false);
+ EXPECT_EQ("0,0 400x300", GetViewport().ToString());
+
+ GetMagnificationController()->MoveWindow(0, -100, false);
+ EXPECT_EQ("0,0 400x300", GetViewport().ToString());
+
+ GetMagnificationController()->MoveWindow(-100, -100, false);
+ EXPECT_EQ("0,0 400x300", GetViewport().ToString());
+
+ // Confirms that the viewport can't across the bittom-right border.
+ GetMagnificationController()->MoveWindow(800, 0, false);
+ EXPECT_EQ("400,0 400x300", GetViewport().ToString());
+
+ GetMagnificationController()->MoveWindow(0, 400, false);
+ EXPECT_EQ("0,300 400x300", GetViewport().ToString());
+
+ GetMagnificationController()->MoveWindow(200, 400, false);
+ EXPECT_EQ("200,300 400x300", GetViewport().ToString());
+
+ GetMagnificationController()->MoveWindow(1000, 1000, false);
+ EXPECT_EQ("400,300 400x300", GetViewport().ToString());
+}
+
+TEST_F(MagnificationControllerTest, PointOfInterest) {
+ aura::test::EventGenerator generator(Shell::GetPrimaryRootWindow());
+
+ generator.MoveMouseToInHost(gfx::Point(0, 0));
+ EXPECT_EQ("0,0", CurrentPointOfInterest());
+
+ generator.MoveMouseToInHost(gfx::Point(799, 599));
+ EXPECT_EQ("799,599", CurrentPointOfInterest());
+
+ generator.MoveMouseToInHost(gfx::Point(400, 300));
+ EXPECT_EQ("400,300", CurrentPointOfInterest());
+
+ GetMagnificationController()->SetEnabled(true);
+ EXPECT_EQ("400,300", CurrentPointOfInterest());
+
+ generator.MoveMouseToInHost(gfx::Point(500, 400));
+ EXPECT_EQ("450,350", CurrentPointOfInterest());
+}
+
+TEST_F(MagnificationControllerTest, PanWindow2xLeftToRight) {
+ const aura::Env* env = aura::Env::GetInstance();
+ aura::test::EventGenerator generator(Shell::GetPrimaryRootWindow());
+
+ generator.MoveMouseToInHost(gfx::Point(0, 0));
+ EXPECT_EQ(1.f, GetMagnificationController()->GetScale());
+ EXPECT_EQ("0,0 800x600", GetViewport().ToString());
+ EXPECT_EQ("0,0", env->last_mouse_location().ToString());
+
+ // Enables magnifier and confirm the viewport is at center.
+ GetMagnificationController()->SetEnabled(true);
+ EXPECT_EQ(2.0f, GetMagnificationController()->GetScale());
+
+ GetMagnificationController()->MoveWindow(0, 0, false);
+ generator.MoveMouseToInHost(gfx::Point(0, 0));
+ EXPECT_EQ("0,0", env->last_mouse_location().ToString());
+ EXPECT_EQ("0,0 400x300", GetViewport().ToString());
+
+ generator.MoveMouseToInHost(gfx::Point(300, 150));
+ EXPECT_EQ("150,75", env->last_mouse_location().ToString());
+ EXPECT_EQ("0,0 400x300", GetViewport().ToString());
+
+ generator.MoveMouseToInHost(gfx::Point(700, 150));
+ EXPECT_EQ("350,75", env->last_mouse_location().ToString());
+ EXPECT_EQ("0,0 400x300", GetViewport().ToString());
+
+ generator.MoveMouseToInHost(gfx::Point(701, 150));
+ EXPECT_EQ("350,75", env->last_mouse_location().ToString());
+ EXPECT_EQ("0,0 400x300", GetViewport().ToString());
+
+ generator.MoveMouseToInHost(gfx::Point(702, 150));
+ EXPECT_EQ("351,75", env->last_mouse_location().ToString());
+ EXPECT_EQ("1,0 400x300", GetViewport().ToString());
+
+ generator.MoveMouseToInHost(gfx::Point(703, 150));
+ EXPECT_EQ("352,75", env->last_mouse_location().ToString());
+ EXPECT_EQ("2,0 400x300", GetViewport().ToString());
+
+ generator.MoveMouseToInHost(gfx::Point(704, 150));
+ EXPECT_EQ("354,75", env->last_mouse_location().ToString());
+ EXPECT_EQ("4,0 400x300", GetViewport().ToString());
+
+ generator.MoveMouseToInHost(gfx::Point(712, 150));
+ EXPECT_EQ("360,75", env->last_mouse_location().ToString());
+ EXPECT_EQ("10,0 400x300", GetViewport().ToString());
+
+ generator.MoveMouseToInHost(gfx::Point(600, 150));
+ EXPECT_EQ("310,75", env->last_mouse_location().ToString());
+ EXPECT_EQ("10,0 400x300", GetViewport().ToString());
+
+ generator.MoveMouseToInHost(gfx::Point(720, 150));
+ EXPECT_EQ("370,75", env->last_mouse_location().ToString());
+ EXPECT_EQ("20,0 400x300", GetViewport().ToString());
+
+ generator.MoveMouseToInHost(gfx::Point(780, 150));
+ EXPECT_EQ("410,75", env->last_mouse_location().ToString());
+ EXPECT_EQ("410,75", CurrentPointOfInterest());
+ EXPECT_EQ("60,0 400x300", GetViewport().ToString());
+
+ generator.MoveMouseToInHost(gfx::Point(799, 150));
+ EXPECT_EQ("459,75", env->last_mouse_location().ToString());
+ EXPECT_EQ("109,0 400x300", GetViewport().ToString());
+
+ generator.MoveMouseToInHost(gfx::Point(702, 150));
+ EXPECT_EQ("460,75", env->last_mouse_location().ToString());
+ EXPECT_EQ("110,0 400x300", GetViewport().ToString());
+
+ generator.MoveMouseToInHost(gfx::Point(780, 150));
+ EXPECT_EQ("500,75", env->last_mouse_location().ToString());
+ EXPECT_EQ("150,0 400x300", GetViewport().ToString());
+
+ generator.MoveMouseToInHost(gfx::Point(780, 150));
+ EXPECT_EQ("540,75", env->last_mouse_location().ToString());
+ EXPECT_EQ("190,0 400x300", GetViewport().ToString());
+
+ generator.MoveMouseToInHost(gfx::Point(780, 150));
+ EXPECT_EQ("580,75", env->last_mouse_location().ToString());
+ EXPECT_EQ("230,0 400x300", GetViewport().ToString());
+
+ generator.MoveMouseToInHost(gfx::Point(780, 150));
+ EXPECT_EQ("620,75", env->last_mouse_location().ToString());
+ EXPECT_EQ("270,0 400x300", GetViewport().ToString());
+
+ generator.MoveMouseToInHost(gfx::Point(780, 150));
+ EXPECT_EQ("660,75", env->last_mouse_location().ToString());
+ EXPECT_EQ("310,0 400x300", GetViewport().ToString());
+
+ generator.MoveMouseToInHost(gfx::Point(780, 150));
+ EXPECT_EQ("700,75", env->last_mouse_location().ToString());
+ EXPECT_EQ("350,0 400x300", GetViewport().ToString());
+
+ generator.MoveMouseToInHost(gfx::Point(780, 150));
+ EXPECT_EQ("740,75", env->last_mouse_location().ToString());
+ EXPECT_EQ("390,0 400x300", GetViewport().ToString());
+
+ generator.MoveMouseToInHost(gfx::Point(780, 150));
+ EXPECT_EQ("780,75", env->last_mouse_location().ToString());
+ EXPECT_EQ("400,0 400x300", GetViewport().ToString());
+
+ generator.MoveMouseToInHost(gfx::Point(799, 150));
+ EXPECT_EQ("799,75", env->last_mouse_location().ToString());
+ EXPECT_EQ("400,0 400x300", GetViewport().ToString());
+}
+
+TEST_F(MagnificationControllerTest, PanWindow2xRightToLeft) {
+ const aura::Env* env = aura::Env::GetInstance();
+ aura::test::EventGenerator generator(Shell::GetPrimaryRootWindow());
+
+ generator.MoveMouseToInHost(gfx::Point(799, 300));
+ EXPECT_EQ(1.f, GetMagnificationController()->GetScale());
+ EXPECT_EQ("0,0 800x600", GetViewport().ToString());
+ EXPECT_EQ("799,300", env->last_mouse_location().ToString());
+
+ // Enables magnifier and confirm the viewport is at center.
+ GetMagnificationController()->SetEnabled(true);
+
+ generator.MoveMouseToInHost(gfx::Point(799, 300));
+ EXPECT_EQ("798,300", env->last_mouse_location().ToString());
+ EXPECT_EQ("400,150 400x300", GetViewport().ToString());
+
+ generator.MoveMouseToInHost(gfx::Point(0, 300));
+ EXPECT_EQ("400,300", env->last_mouse_location().ToString());
+ EXPECT_EQ("350,150 400x300", GetViewport().ToString());
+
+ generator.MoveMouseToInHost(gfx::Point(0, 300));
+ EXPECT_EQ("350,300", env->last_mouse_location().ToString());
+ EXPECT_EQ("300,150 400x300", GetViewport().ToString());
+
+ generator.MoveMouseToInHost(gfx::Point(0, 300));
+ EXPECT_EQ("300,300", env->last_mouse_location().ToString());
+ EXPECT_EQ("250,150 400x300", GetViewport().ToString());
+
+ generator.MoveMouseToInHost(gfx::Point(0, 300));
+ EXPECT_EQ("250,300", env->last_mouse_location().ToString());
+ EXPECT_EQ("200,150 400x300", GetViewport().ToString());
+
+ generator.MoveMouseToInHost(gfx::Point(0, 300));
+ EXPECT_EQ("200,300", env->last_mouse_location().ToString());
+ EXPECT_EQ("150,150 400x300", GetViewport().ToString());
+
+ generator.MoveMouseToInHost(gfx::Point(0, 300));
+ EXPECT_EQ("150,300", env->last_mouse_location().ToString());
+ EXPECT_EQ("100,150 400x300", GetViewport().ToString());
+
+ generator.MoveMouseToInHost(gfx::Point(0, 300));
+ EXPECT_EQ("100,300", env->last_mouse_location().ToString());
+ EXPECT_EQ("50,150 400x300", GetViewport().ToString());
+
+ generator.MoveMouseToInHost(gfx::Point(0, 300));
+ EXPECT_EQ("50,300", env->last_mouse_location().ToString());
+ EXPECT_EQ("0,150 400x300", GetViewport().ToString());
+
+ generator.MoveMouseToInHost(gfx::Point(0, 300));
+ EXPECT_EQ("0,300", env->last_mouse_location().ToString());
+ EXPECT_EQ("0,150 400x300", GetViewport().ToString());
+}
+
+TEST_F(MagnificationControllerTest, PanWindowToRight) {
+ const aura::Env* env = aura::Env::GetInstance();
+ aura::test::EventGenerator generator(Shell::GetPrimaryRootWindow());
+
+ generator.MoveMouseToInHost(gfx::Point(400, 300));
+ EXPECT_EQ(1.f, GetMagnificationController()->GetScale());
+ EXPECT_EQ("0,0 800x600", GetViewport().ToString());
+ EXPECT_EQ("400,300", env->last_mouse_location().ToString());
+
+ float scale = 2.f;
+
+ // Enables magnifier and confirm the viewport is at center.
+ GetMagnificationController()->SetEnabled(true);
+ EXPECT_FLOAT_EQ(2.f, GetMagnificationController()->GetScale());
+
+ scale *= kMagnificationScaleFactor;
+ GetMagnificationController()->SetScale(scale, false);
+ EXPECT_FLOAT_EQ(2.3784142, GetMagnificationController()->GetScale());
+ generator.MoveMouseToInHost(gfx::Point(400, 300));
+ EXPECT_EQ("400,300", env->last_mouse_location().ToString());
+ generator.MoveMouseToInHost(gfx::Point(799, 300));
+ EXPECT_EQ("566,299", env->last_mouse_location().ToString());
+ EXPECT_EQ("705,300", GetHostMouseLocation());
+
+ scale *= kMagnificationScaleFactor;
+ GetMagnificationController()->SetScale(scale, false);
+ EXPECT_FLOAT_EQ(2.8284268, GetMagnificationController()->GetScale());
+ generator.MoveMouseToInHost(gfx::Point(799, 300));
+ EXPECT_EQ("599,299", env->last_mouse_location().ToString());
+ EXPECT_EQ("702,300", GetHostMouseLocation());
+
+ scale *= kMagnificationScaleFactor;
+ GetMagnificationController()->SetScale(scale, false);
+ EXPECT_FLOAT_EQ(3.3635852, GetMagnificationController()->GetScale());
+ generator.MoveMouseToInHost(gfx::Point(799, 300));
+ EXPECT_EQ("627,298", env->last_mouse_location().ToString());
+ EXPECT_EQ("707,300", GetHostMouseLocation());
+
+ scale *= kMagnificationScaleFactor;
+ GetMagnificationController()->SetScale(scale, false);
+ EXPECT_FLOAT_EQ(4.f, GetMagnificationController()->GetScale());
+ generator.MoveMouseToInHost(gfx::Point(799, 300));
+ EXPECT_EQ("649,298", env->last_mouse_location().ToString());
+ EXPECT_EQ("704,300", GetHostMouseLocation());
+}
+
+TEST_F(MagnificationControllerTest, PanWindowToLeft) {
+ const aura::Env* env = aura::Env::GetInstance();
+ aura::test::EventGenerator generator(Shell::GetPrimaryRootWindow());
+
+ generator.MoveMouseToInHost(gfx::Point(400, 300));
+ EXPECT_EQ(1.f, GetMagnificationController()->GetScale());
+ EXPECT_EQ("0,0 800x600", GetViewport().ToString());
+ EXPECT_EQ("400,300", env->last_mouse_location().ToString());
+
+ float scale = 2.f;
+
+ // Enables magnifier and confirm the viewport is at center.
+ GetMagnificationController()->SetEnabled(true);
+ EXPECT_FLOAT_EQ(2.f, GetMagnificationController()->GetScale());
+
+ scale *= kMagnificationScaleFactor;
+ GetMagnificationController()->SetScale(scale, false);
+ EXPECT_FLOAT_EQ(2.3784142, GetMagnificationController()->GetScale());
+ generator.MoveMouseToInHost(gfx::Point(400, 300));
+ EXPECT_EQ("400,300", env->last_mouse_location().ToString());
+ generator.MoveMouseToInHost(gfx::Point(0, 300));
+ EXPECT_EQ("231,299", env->last_mouse_location().ToString());
+ EXPECT_EQ("100,300", GetHostMouseLocation());
+
+ scale *= kMagnificationScaleFactor;
+ GetMagnificationController()->SetScale(scale, false);
+ EXPECT_FLOAT_EQ(2.8284268, GetMagnificationController()->GetScale());
+ generator.MoveMouseToInHost(gfx::Point(0, 300));
+ EXPECT_EQ("194,299", env->last_mouse_location().ToString());
+ EXPECT_EQ("99,300", GetHostMouseLocation());
+
+ scale *= kMagnificationScaleFactor;
+ GetMagnificationController()->SetScale(scale, false);
+ EXPECT_FLOAT_EQ(3.3635852, GetMagnificationController()->GetScale());
+ generator.MoveMouseToInHost(gfx::Point(0, 300));
+ EXPECT_EQ("164,298", env->last_mouse_location().ToString());
+ EXPECT_EQ("98,300", GetHostMouseLocation());
+
+ scale *= kMagnificationScaleFactor;
+ GetMagnificationController()->SetScale(scale, false);
+ EXPECT_FLOAT_EQ(4.f, GetMagnificationController()->GetScale());
+ generator.MoveMouseToInHost(gfx::Point(0, 300));
+ EXPECT_EQ("139,298", env->last_mouse_location().ToString());
+ EXPECT_EQ("100,300", GetHostMouseLocation());
+}
+
+} // namespace internal
+} // namespace ash