12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright (c) 2013 The Chromium Authors. All rights reserved.
22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file.
42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ash/magnifier/magnification_controller.h"
65d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
7c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "ash/magnifier/magnifier_constants.h"
82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ash/shell.h"
92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ash/test/ash_test_base.h"
10868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/stringprintf.h"
112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/aura/client/aura_constants.h"
12c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "ui/aura/env.h"
135c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "ui/aura/test/aura_test_utils.h"
1423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#include "ui/aura/window_tree_host.h"
155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "ui/events/test/event_generator.h"
162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/gfx/rect_conversions.h"
172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/gfx/screen.h"
182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace ash {
202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace {
212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const int kRootHeight = 600;
232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const int kRootWidth = 800;
242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}  // namespace
262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class MagnificationControllerTest: public test::AshTestBase {
282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public:
292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  MagnificationControllerTest() {}
302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual ~MagnificationControllerTest() {}
312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void SetUp() OVERRIDE {
332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    AshTestBase::SetUp();
342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    UpdateDisplay(base::StringPrintf("%dx%d", kRootWidth, kRootHeight));
352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
361e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)    aura::Window* root = GetRootWindow();
372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    gfx::Rect root_bounds(root->bounds());
382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(OS_WIN)
402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    // RootWindow and Display can't resize on Windows Ash.
412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    // http://crbug.com/165962
422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    EXPECT_EQ(kRootHeight, root_bounds.height());
432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    EXPECT_EQ(kRootWidth, root_bounds.width());
442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif
452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void TearDown() OVERRIDE {
482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    AshTestBase::TearDown();
492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) protected:
521e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  aura::Window* GetRootWindow() const {
532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return Shell::GetPrimaryRootWindow();
542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
56c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  std::string GetHostMouseLocation() {
575c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    const gfx::Point& location =
585c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu        aura::test::QueryLatestMousePositionRequestInHost(
595c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu            GetRootWindow()->GetHost());
605c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    return location.ToString();
61c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
62c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
63c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  ash::MagnificationController* GetMagnificationController() const {
642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return ash::Shell::GetInstance()->magnification_controller();
652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
67c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  gfx::Rect GetViewport() const {
682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    gfx::RectF bounds(0, 0, kRootWidth, kRootHeight);
692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    GetRootWindow()->layer()->transform().TransformRectReverse(&bounds);
702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return gfx::ToEnclosingRect(bounds);
712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
73c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  std::string CurrentPointOfInterest() const {
74c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    return GetMagnificationController()->
75c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        GetPointOfInterestForTesting().ToString();
76c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
77c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private:
792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(MagnificationControllerTest);
802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(MagnificationControllerTest, EnableAndDisable) {
832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Confirms the magnifier is disabled.
842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(GetRootWindow()->layer()->transform().IsIdentity());
852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(1.0f, GetMagnificationController()->GetScale());
862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ("0,0 800x600", GetViewport().ToString());
872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Enables magnifier.
892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  GetMagnificationController()->SetEnabled(true);
902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(GetRootWindow()->layer()->transform().IsIdentity());
912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(2.0f, GetMagnificationController()->GetScale());
922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ("200,150 400x300", GetViewport().ToString());
932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Disables magnifier.
952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  GetMagnificationController()->SetEnabled(false);
962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(GetRootWindow()->layer()->transform().IsIdentity());
972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(1.0f, GetMagnificationController()->GetScale());
982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ("0,0 800x600", GetViewport().ToString());
992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Confirms the the scale can't be changed.
1012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  GetMagnificationController()->SetScale(4.0f, false);
1022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(GetRootWindow()->layer()->transform().IsIdentity());
1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(1.0f, GetMagnificationController()->GetScale());
1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ("0,0 800x600", GetViewport().ToString());
1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(MagnificationControllerTest, MagnifyAndUnmagnify) {
1082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Enables magnifier and confirms the default scale is 2.0x.
1092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  GetMagnificationController()->SetEnabled(true);
1102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(GetRootWindow()->layer()->transform().IsIdentity());
1112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(2.0f, GetMagnificationController()->GetScale());
1122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ("200,150 400x300", GetViewport().ToString());
113c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_EQ("400,300", CurrentPointOfInterest());
1142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Changes the scale.
1162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  GetMagnificationController()->SetScale(4.0f, false);
1172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(4.0f, GetMagnificationController()->GetScale());
1182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ("300,225 200x150", GetViewport().ToString());
119c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_EQ("400,300", CurrentPointOfInterest());
1202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  GetMagnificationController()->SetScale(1.0f, false);
1222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(1.0f, GetMagnificationController()->GetScale());
1232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ("0,0 800x600", GetViewport().ToString());
124c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_EQ("400,300", CurrentPointOfInterest());
1252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  GetMagnificationController()->SetScale(3.0f, false);
1272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(3.0f, GetMagnificationController()->GetScale());
128c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_EQ("266,200 267x200", GetViewport().ToString());
129c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_EQ("400,300", CurrentPointOfInterest());
1302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(MagnificationControllerTest, MoveWindow) {
1332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Enables magnifier and confirm the viewport is at center.
1342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  GetMagnificationController()->SetEnabled(true);
1352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(2.0f, GetMagnificationController()->GetScale());
1362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ("200,150 400x300", GetViewport().ToString());
1372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Move the viewport.
1392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  GetMagnificationController()->MoveWindow(0, 0, false);
1402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ("0,0 400x300", GetViewport().ToString());
1412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  GetMagnificationController()->MoveWindow(200, 300, false);
1432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ("200,300 400x300", GetViewport().ToString());
1442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  GetMagnificationController()->MoveWindow(400, 0, false);
1462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ("400,0 400x300", GetViewport().ToString());
1472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  GetMagnificationController()->MoveWindow(400, 300, false);
1492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ("400,300 400x300", GetViewport().ToString());
1502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Confirms that the viewport can't across the top-left border.
1522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  GetMagnificationController()->MoveWindow(-100, 0, false);
1532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ("0,0 400x300", GetViewport().ToString());
1542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  GetMagnificationController()->MoveWindow(0, -100, false);
1562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ("0,0 400x300", GetViewport().ToString());
1572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  GetMagnificationController()->MoveWindow(-100, -100, false);
1592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ("0,0 400x300", GetViewport().ToString());
1602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Confirms that the viewport can't across the bittom-right border.
1622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  GetMagnificationController()->MoveWindow(800, 0, false);
1632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ("400,0 400x300", GetViewport().ToString());
1642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  GetMagnificationController()->MoveWindow(0, 400, false);
1662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ("0,300 400x300", GetViewport().ToString());
1672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  GetMagnificationController()->MoveWindow(200, 400, false);
1692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ("200,300 400x300", GetViewport().ToString());
1702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  GetMagnificationController()->MoveWindow(1000, 1000, false);
1722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ("400,300 400x300", GetViewport().ToString());
1732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
175c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST_F(MagnificationControllerTest, PointOfInterest) {
1765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  ui::test::EventGenerator generator(Shell::GetPrimaryRootWindow());
177b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)
178b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  generator.MoveMouseToInHost(gfx::Point(0, 0));
179c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_EQ("0,0", CurrentPointOfInterest());
180c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
181b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  generator.MoveMouseToInHost(gfx::Point(799, 599));
182c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_EQ("799,599", CurrentPointOfInterest());
183c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
184b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  generator.MoveMouseToInHost(gfx::Point(400, 300));
185c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_EQ("400,300", CurrentPointOfInterest());
186c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
187c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  GetMagnificationController()->SetEnabled(true);
188c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_EQ("400,300", CurrentPointOfInterest());
189c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
190b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  generator.MoveMouseToInHost(gfx::Point(500, 400));
191c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_EQ("450,350", CurrentPointOfInterest());
192c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
193c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
194c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST_F(MagnificationControllerTest, PanWindow2xLeftToRight) {
195c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  const aura::Env* env = aura::Env::GetInstance();
1965f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  ui::test::EventGenerator generator(Shell::GetPrimaryRootWindow());
197c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
198b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  generator.MoveMouseToInHost(gfx::Point(0, 0));
199c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_EQ(1.f, GetMagnificationController()->GetScale());
200c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_EQ("0,0 800x600", GetViewport().ToString());
201c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_EQ("0,0", env->last_mouse_location().ToString());
202c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
203c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // Enables magnifier and confirm the viewport is at center.
204c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  GetMagnificationController()->SetEnabled(true);
205c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_EQ(2.0f, GetMagnificationController()->GetScale());
206c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
207c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  GetMagnificationController()->MoveWindow(0, 0, false);
208b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  generator.MoveMouseToInHost(gfx::Point(0, 0));
209c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_EQ("0,0", env->last_mouse_location().ToString());
210c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_EQ("0,0 400x300", GetViewport().ToString());
211c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
212b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  generator.MoveMouseToInHost(gfx::Point(300, 150));
213c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_EQ("150,75", env->last_mouse_location().ToString());
214c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_EQ("0,0 400x300", GetViewport().ToString());
215c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
216b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  generator.MoveMouseToInHost(gfx::Point(700, 150));
217c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_EQ("350,75", env->last_mouse_location().ToString());
218c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_EQ("0,0 400x300", GetViewport().ToString());
219c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
220b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  generator.MoveMouseToInHost(gfx::Point(701, 150));
221c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_EQ("350,75", env->last_mouse_location().ToString());
222c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_EQ("0,0 400x300", GetViewport().ToString());
223c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
224b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  generator.MoveMouseToInHost(gfx::Point(702, 150));
225c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_EQ("351,75", env->last_mouse_location().ToString());
226c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_EQ("1,0 400x300", GetViewport().ToString());
227c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
228b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  generator.MoveMouseToInHost(gfx::Point(703, 150));
229c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_EQ("352,75", env->last_mouse_location().ToString());
230c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_EQ("2,0 400x300", GetViewport().ToString());
231c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
232b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  generator.MoveMouseToInHost(gfx::Point(704, 150));
233c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_EQ("354,75", env->last_mouse_location().ToString());
234c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_EQ("4,0 400x300", GetViewport().ToString());
235c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
236b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  generator.MoveMouseToInHost(gfx::Point(712, 150));
237c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_EQ("360,75", env->last_mouse_location().ToString());
238c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_EQ("10,0 400x300", GetViewport().ToString());
239c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
240b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  generator.MoveMouseToInHost(gfx::Point(600, 150));
241c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_EQ("310,75", env->last_mouse_location().ToString());
242c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_EQ("10,0 400x300", GetViewport().ToString());
243c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
244b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  generator.MoveMouseToInHost(gfx::Point(720, 150));
245c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_EQ("370,75", env->last_mouse_location().ToString());
246c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_EQ("20,0 400x300", GetViewport().ToString());
247c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
248b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  generator.MoveMouseToInHost(gfx::Point(780, 150));
249c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_EQ("410,75", env->last_mouse_location().ToString());
250c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_EQ("410,75", CurrentPointOfInterest());
251c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_EQ("60,0 400x300", GetViewport().ToString());
252c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
253b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  generator.MoveMouseToInHost(gfx::Point(799, 150));
254c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_EQ("459,75", env->last_mouse_location().ToString());
255c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_EQ("109,0 400x300", GetViewport().ToString());
256c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
257b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  generator.MoveMouseToInHost(gfx::Point(702, 150));
258c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_EQ("460,75", env->last_mouse_location().ToString());
259c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_EQ("110,0 400x300", GetViewport().ToString());
260c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
261b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  generator.MoveMouseToInHost(gfx::Point(780, 150));
262c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_EQ("500,75", env->last_mouse_location().ToString());
263c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_EQ("150,0 400x300", GetViewport().ToString());
264c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
265b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  generator.MoveMouseToInHost(gfx::Point(780, 150));
266c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_EQ("540,75", env->last_mouse_location().ToString());
267c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_EQ("190,0 400x300", GetViewport().ToString());
268c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
269b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  generator.MoveMouseToInHost(gfx::Point(780, 150));
270c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_EQ("580,75", env->last_mouse_location().ToString());
271c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_EQ("230,0 400x300", GetViewport().ToString());
272c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
273b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  generator.MoveMouseToInHost(gfx::Point(780, 150));
274c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_EQ("620,75", env->last_mouse_location().ToString());
275c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_EQ("270,0 400x300", GetViewport().ToString());
276c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
277b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  generator.MoveMouseToInHost(gfx::Point(780, 150));
278c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_EQ("660,75", env->last_mouse_location().ToString());
279c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_EQ("310,0 400x300", GetViewport().ToString());
280c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
281b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  generator.MoveMouseToInHost(gfx::Point(780, 150));
282c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_EQ("700,75", env->last_mouse_location().ToString());
283c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_EQ("350,0 400x300", GetViewport().ToString());
284c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
285b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  generator.MoveMouseToInHost(gfx::Point(780, 150));
286c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_EQ("740,75", env->last_mouse_location().ToString());
287c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_EQ("390,0 400x300", GetViewport().ToString());
288c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
289b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  generator.MoveMouseToInHost(gfx::Point(780, 150));
290c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_EQ("780,75", env->last_mouse_location().ToString());
291c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_EQ("400,0 400x300", GetViewport().ToString());
292c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
293b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  generator.MoveMouseToInHost(gfx::Point(799, 150));
294c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_EQ("799,75", env->last_mouse_location().ToString());
295c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_EQ("400,0 400x300", GetViewport().ToString());
296c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
297c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
298c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST_F(MagnificationControllerTest, PanWindow2xRightToLeft) {
299c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  const aura::Env* env = aura::Env::GetInstance();
3005f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  ui::test::EventGenerator generator(Shell::GetPrimaryRootWindow());
301c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
302b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  generator.MoveMouseToInHost(gfx::Point(799, 300));
303c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_EQ(1.f, GetMagnificationController()->GetScale());
304c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_EQ("0,0 800x600", GetViewport().ToString());
305c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_EQ("799,300", env->last_mouse_location().ToString());
306c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
307c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // Enables magnifier and confirm the viewport is at center.
308c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  GetMagnificationController()->SetEnabled(true);
309c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
310b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  generator.MoveMouseToInHost(gfx::Point(799, 300));
311c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_EQ("798,300", env->last_mouse_location().ToString());
312c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_EQ("400,150 400x300", GetViewport().ToString());
313c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
314b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  generator.MoveMouseToInHost(gfx::Point(0, 300));
315c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_EQ("400,300", env->last_mouse_location().ToString());
316c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_EQ("350,150 400x300", GetViewport().ToString());
317c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
318b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  generator.MoveMouseToInHost(gfx::Point(0, 300));
319c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_EQ("350,300", env->last_mouse_location().ToString());
320c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_EQ("300,150 400x300", GetViewport().ToString());
321c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
322b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  generator.MoveMouseToInHost(gfx::Point(0, 300));
323c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_EQ("300,300", env->last_mouse_location().ToString());
324c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_EQ("250,150 400x300", GetViewport().ToString());
325c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
326b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  generator.MoveMouseToInHost(gfx::Point(0, 300));
327c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_EQ("250,300", env->last_mouse_location().ToString());
328c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_EQ("200,150 400x300", GetViewport().ToString());
329c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
330b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  generator.MoveMouseToInHost(gfx::Point(0, 300));
331c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_EQ("200,300", env->last_mouse_location().ToString());
332c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_EQ("150,150 400x300", GetViewport().ToString());
333c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
334b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  generator.MoveMouseToInHost(gfx::Point(0, 300));
335c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_EQ("150,300", env->last_mouse_location().ToString());
336c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_EQ("100,150 400x300", GetViewport().ToString());
337c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
338b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  generator.MoveMouseToInHost(gfx::Point(0, 300));
339c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_EQ("100,300", env->last_mouse_location().ToString());
340c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_EQ("50,150 400x300", GetViewport().ToString());
341c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
342b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  generator.MoveMouseToInHost(gfx::Point(0, 300));
343c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_EQ("50,300", env->last_mouse_location().ToString());
344c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_EQ("0,150 400x300", GetViewport().ToString());
345c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
346b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  generator.MoveMouseToInHost(gfx::Point(0, 300));
347c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_EQ("0,300", env->last_mouse_location().ToString());
348c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_EQ("0,150 400x300", GetViewport().ToString());
349c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
350c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
351c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST_F(MagnificationControllerTest, PanWindowToRight) {
352c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  const aura::Env* env = aura::Env::GetInstance();
3535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  ui::test::EventGenerator generator(Shell::GetPrimaryRootWindow());
354c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
355b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  generator.MoveMouseToInHost(gfx::Point(400, 300));
356c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_EQ(1.f, GetMagnificationController()->GetScale());
357c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_EQ("0,0 800x600", GetViewport().ToString());
358c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_EQ("400,300", env->last_mouse_location().ToString());
359c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
360c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  float scale = 2.f;
361c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
362c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // Enables magnifier and confirm the viewport is at center.
363c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  GetMagnificationController()->SetEnabled(true);
364c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_FLOAT_EQ(2.f, GetMagnificationController()->GetScale());
365c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
366c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  scale *= kMagnificationScaleFactor;
367c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  GetMagnificationController()->SetScale(scale, false);
368c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_FLOAT_EQ(2.3784142, GetMagnificationController()->GetScale());
369b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  generator.MoveMouseToInHost(gfx::Point(400, 300));
370c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_EQ("400,300", env->last_mouse_location().ToString());
371b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  generator.MoveMouseToInHost(gfx::Point(799, 300));
372c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_EQ("566,299", env->last_mouse_location().ToString());
373c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_EQ("705,300", GetHostMouseLocation());
374c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
375c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  scale *= kMagnificationScaleFactor;
376c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  GetMagnificationController()->SetScale(scale, false);
377c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_FLOAT_EQ(2.8284268, GetMagnificationController()->GetScale());
378b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  generator.MoveMouseToInHost(gfx::Point(799, 300));
379c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_EQ("599,299", env->last_mouse_location().ToString());
380c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_EQ("702,300", GetHostMouseLocation());
381c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
382c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  scale *= kMagnificationScaleFactor;
383c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  GetMagnificationController()->SetScale(scale, false);
384c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_FLOAT_EQ(3.3635852, GetMagnificationController()->GetScale());
385b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  generator.MoveMouseToInHost(gfx::Point(799, 300));
386c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_EQ("627,298", env->last_mouse_location().ToString());
387c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_EQ("707,300", GetHostMouseLocation());
388c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
389c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  scale *= kMagnificationScaleFactor;
390c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  GetMagnificationController()->SetScale(scale, false);
391c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_FLOAT_EQ(4.f, GetMagnificationController()->GetScale());
392b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  generator.MoveMouseToInHost(gfx::Point(799, 300));
393c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_EQ("649,298", env->last_mouse_location().ToString());
394c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_EQ("704,300", GetHostMouseLocation());
395c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
396c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
397c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST_F(MagnificationControllerTest, PanWindowToLeft) {
398c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  const aura::Env* env = aura::Env::GetInstance();
3995f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  ui::test::EventGenerator generator(Shell::GetPrimaryRootWindow());
400c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
401b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  generator.MoveMouseToInHost(gfx::Point(400, 300));
402c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_EQ(1.f, GetMagnificationController()->GetScale());
403c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_EQ("0,0 800x600", GetViewport().ToString());
404c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_EQ("400,300", env->last_mouse_location().ToString());
405c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
406c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  float scale = 2.f;
407c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
408c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // Enables magnifier and confirm the viewport is at center.
409c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  GetMagnificationController()->SetEnabled(true);
410c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_FLOAT_EQ(2.f, GetMagnificationController()->GetScale());
411c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
412c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  scale *= kMagnificationScaleFactor;
413c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  GetMagnificationController()->SetScale(scale, false);
414c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_FLOAT_EQ(2.3784142, GetMagnificationController()->GetScale());
415b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  generator.MoveMouseToInHost(gfx::Point(400, 300));
416c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_EQ("400,300", env->last_mouse_location().ToString());
417b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  generator.MoveMouseToInHost(gfx::Point(0, 300));
418c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_EQ("231,299", env->last_mouse_location().ToString());
419c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_EQ("100,300", GetHostMouseLocation());
420c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
421c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  scale *= kMagnificationScaleFactor;
422c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  GetMagnificationController()->SetScale(scale, false);
423c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_FLOAT_EQ(2.8284268, GetMagnificationController()->GetScale());
424b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  generator.MoveMouseToInHost(gfx::Point(0, 300));
4254e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  EXPECT_EQ("194,299", env->last_mouse_location().ToString());
426c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_EQ("99,300", GetHostMouseLocation());
427c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
428c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  scale *= kMagnificationScaleFactor;
429c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  GetMagnificationController()->SetScale(scale, false);
430c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_FLOAT_EQ(3.3635852, GetMagnificationController()->GetScale());
431b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  generator.MoveMouseToInHost(gfx::Point(0, 300));
4324e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  EXPECT_EQ("164,298", env->last_mouse_location().ToString());
433c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_EQ("98,300", GetHostMouseLocation());
434c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
435c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  scale *= kMagnificationScaleFactor;
436c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  GetMagnificationController()->SetScale(scale, false);
437c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_FLOAT_EQ(4.f, GetMagnificationController()->GetScale());
438b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  generator.MoveMouseToInHost(gfx::Point(0, 300));
4394e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  EXPECT_EQ("139,298", env->last_mouse_location().ToString());
440c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_EQ("100,300", GetHostMouseLocation());
441c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
442c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
4432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}  // namespace ash
444