| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 #include "ui/aura/window.h" | 5 #include "ui/aura/window.h" |
| 6 | 6 |
| 7 #include "base/basictypes.h" | 7 #include "base/basictypes.h" |
| 8 #include "base/compiler_specific.h" | 8 #include "base/compiler_specific.h" |
| 9 #include "base/stringprintf.h" | 9 #include "base/stringprintf.h" |
| 10 #include "testing/gtest/include/gtest/gtest.h" | 10 #include "testing/gtest/include/gtest/gtest.h" |
| (...skipping 497 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 508 Window::ConvertPointToWindow(w2->parent(), root_window, &move_point); | 508 Window::ConvertPointToWindow(w2->parent(), root_window, &move_point); |
| 509 MouseEvent mouseev2(ui::ET_MOUSE_MOVED, move_point, 0); | 509 MouseEvent mouseev2(ui::ET_MOUSE_MOVED, move_point, 0); |
| 510 root_window->DispatchMouseEvent(&mouseev2); | 510 root_window->DispatchMouseEvent(&mouseev2); |
| 511 | 511 |
| 512 EXPECT_TRUE(d1.entered()); | 512 EXPECT_TRUE(d1.entered()); |
| 513 EXPECT_TRUE(d1.exited()); | 513 EXPECT_TRUE(d1.exited()); |
| 514 EXPECT_TRUE(d2.entered()); | 514 EXPECT_TRUE(d2.entered()); |
| 515 EXPECT_FALSE(d2.exited()); | 515 EXPECT_FALSE(d2.exited()); |
| 516 } | 516 } |
| 517 | 517 |
| 518 namespace { | |
| 519 | |
| 520 class ActiveWindowDelegate : public TestWindowDelegate { | |
| 521 public: | |
| 522 ActiveWindowDelegate() : window_(NULL), was_active_(false), hit_count_(0) { | |
| 523 } | |
| 524 | |
| 525 void set_window(Window* window) { window_ = window; } | |
| 526 | |
| 527 // Number of times OnLostActive has been invoked. | |
| 528 int hit_count() const { return hit_count_; } | |
| 529 | |
| 530 // Was the window active from the first call to OnLostActive? | |
| 531 bool was_active() const { return was_active_; } | |
| 532 | |
| 533 virtual void OnLostActive() OVERRIDE { | |
| 534 if (hit_count_++ == 0) | |
| 535 was_active_ = window_->IsActive(); | |
| 536 } | |
| 537 | |
| 538 private: | |
| 539 Window* window_; | |
| 540 | |
| 541 // See description above getters for details on these. | |
| 542 bool was_active_; | |
| 543 int hit_count_; | |
| 544 | |
| 545 DISALLOW_COPY_AND_ASSIGN(ActiveWindowDelegate); | |
| 546 }; | |
| 547 | |
| 548 } // namespace | |
| 549 | |
| 550 // Verifies that when WindowDelegate::OnLostActive is invoked the window is not | |
| 551 // active. | |
| 552 TEST_F(WindowTest, NotActiveInLostActive) { | |
| 553 RootWindow* root_window = RootWindow::GetInstance(); | |
| 554 | |
| 555 ActiveWindowDelegate d1; | |
| 556 scoped_ptr<Window> w1( | |
| 557 CreateTestWindowWithDelegate(&d1, 1, gfx::Rect(10, 10, 50, 50), NULL)); | |
| 558 d1.set_window(w1.get()); | |
| 559 scoped_ptr<Window> w2( | |
| 560 CreateTestWindowWithDelegate(NULL, 1, gfx::Rect(10, 10, 50, 50), NULL)); | |
| 561 | |
| 562 // Activate w1. | |
| 563 root_window->SetActiveWindow(w1.get(), NULL); | |
| 564 EXPECT_EQ(w1.get(), root_window->active_window()); | |
| 565 | |
| 566 // Should not have gotten a OnLostActive yet. | |
| 567 EXPECT_EQ(0, d1.hit_count()); | |
| 568 | |
| 569 // SetActiveWindow(NULL) should not change the active window. | |
| 570 root_window->SetActiveWindow(NULL, NULL); | |
| 571 EXPECT_TRUE(root_window->active_window() == w1.get()); | |
| 572 | |
| 573 // Now activate another window. | |
| 574 root_window->SetActiveWindow(w2.get(), NULL); | |
| 575 | |
| 576 // Should have gotten OnLostActive and w1 should not have been active at that | |
| 577 // time. | |
| 578 EXPECT_EQ(1, d1.hit_count()); | |
| 579 EXPECT_FALSE(d1.was_active()); | |
| 580 } | |
| 581 | |
| 582 // Creates a window with a delegate (w111) that can handle events at a lower | 518 // Creates a window with a delegate (w111) that can handle events at a lower |
| 583 // z-index than a window without a delegate (w12). w12 is sized to fill the | 519 // z-index than a window without a delegate (w12). w12 is sized to fill the |
| 584 // entire bounds of the container. This test verifies that | 520 // entire bounds of the container. This test verifies that |
| 585 // GetEventHandlerForPoint() skips w12 even though its bounds contain the event, | 521 // GetEventHandlerForPoint() skips w12 even though its bounds contain the event, |
| 586 // because it has no children that can handle the event and it has no delegate | 522 // because it has no children that can handle the event and it has no delegate |
| 587 // allowing it to handle the event itself. | 523 // allowing it to handle the event itself. |
| 588 TEST_F(WindowTest, GetEventHandlerForPoint_NoDelegate) { | 524 TEST_F(WindowTest, GetEventHandlerForPoint_NoDelegate) { |
| 589 TestWindowDelegate d111; | 525 TestWindowDelegate d111; |
| 590 scoped_ptr<Window> w1(CreateTestWindowWithDelegate(NULL, 1, | 526 scoped_ptr<Window> w1(CreateTestWindowWithDelegate(NULL, 1, |
| 591 gfx::Rect(0, 0, 500, 500), NULL)); | 527 gfx::Rect(0, 0, 500, 500), NULL)); |
| (...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 739 | 675 |
| 740 EXPECT_EQ(w121.get(), w1->GetEventHandlerForPoint(gfx::Point(160, 160))); | 676 EXPECT_EQ(w121.get(), w1->GetEventHandlerForPoint(gfx::Point(160, 160))); |
| 741 w121->set_ignore_events(true); | 677 w121->set_ignore_events(true); |
| 742 EXPECT_EQ(w12.get(), w1->GetEventHandlerForPoint(gfx::Point(160, 160))); | 678 EXPECT_EQ(w12.get(), w1->GetEventHandlerForPoint(gfx::Point(160, 160))); |
| 743 w12->set_ignore_events(true); | 679 w12->set_ignore_events(true); |
| 744 EXPECT_EQ(w111.get(), w1->GetEventHandlerForPoint(gfx::Point(160, 160))); | 680 EXPECT_EQ(w111.get(), w1->GetEventHandlerForPoint(gfx::Point(160, 160))); |
| 745 w111->set_ignore_events(true); | 681 w111->set_ignore_events(true); |
| 746 EXPECT_EQ(w11.get(), w1->GetEventHandlerForPoint(gfx::Point(160, 160))); | 682 EXPECT_EQ(w11.get(), w1->GetEventHandlerForPoint(gfx::Point(160, 160))); |
| 747 } | 683 } |
| 748 | 684 |
| 749 // Various assertions for activating/deactivating. | |
| 750 TEST_F(WindowTest, Deactivate) { | |
| 751 TestWindowDelegate d1; | |
| 752 TestWindowDelegate d2; | |
| 753 scoped_ptr<Window> w1( | |
| 754 CreateTestWindowWithDelegate(&d1, 1, gfx::Rect(), NULL)); | |
| 755 scoped_ptr<Window> w2( | |
| 756 CreateTestWindowWithDelegate(&d2, 2, gfx::Rect(), NULL)); | |
| 757 Window* parent = w1->parent(); | |
| 758 parent->Show(); | |
| 759 ASSERT_TRUE(parent); | |
| 760 ASSERT_EQ(2u, parent->children().size()); | |
| 761 // Activate w2 and make sure it's active and frontmost. | |
| 762 w2->Activate(); | |
| 763 EXPECT_TRUE(w2->IsActive()); | |
| 764 EXPECT_FALSE(w1->IsActive()); | |
| 765 EXPECT_EQ(w2.get(), parent->children()[1]); | |
| 766 | |
| 767 // Activate w1 and make sure it's active and frontmost. | |
| 768 w1->Activate(); | |
| 769 EXPECT_TRUE(w1->IsActive()); | |
| 770 EXPECT_FALSE(w2->IsActive()); | |
| 771 EXPECT_EQ(w1.get(), parent->children()[1]); | |
| 772 | |
| 773 // Deactivate w1 and make sure w2 becomes active and frontmost. | |
| 774 w1->Deactivate(); | |
| 775 EXPECT_FALSE(w1->IsActive()); | |
| 776 EXPECT_TRUE(w2->IsActive()); | |
| 777 EXPECT_EQ(w2.get(), parent->children()[1]); | |
| 778 } | |
| 779 | |
| 780 // Tests transformation on the root window. | 685 // Tests transformation on the root window. |
| 781 TEST_F(WindowTest, Transform) { | 686 TEST_F(WindowTest, Transform) { |
| 782 RootWindow* root_window = RootWindow::GetInstance(); | 687 RootWindow* root_window = RootWindow::GetInstance(); |
| 783 gfx::Size size = root_window->GetHostSize(); | 688 gfx::Size size = root_window->GetHostSize(); |
| 784 EXPECT_EQ(gfx::Rect(size), | 689 EXPECT_EQ(gfx::Rect(size), |
| 785 gfx::Screen::GetMonitorAreaNearestPoint(gfx::Point())); | 690 gfx::Screen::GetMonitorAreaNearestPoint(gfx::Point())); |
| 786 | 691 |
| 787 // Rotate it clock-wise 90 degrees. | 692 // Rotate it clock-wise 90 degrees. |
| 788 ui::Transform transform; | 693 ui::Transform transform; |
| 789 transform.SetRotate(90.0f); | 694 transform.SetRotate(90.0f); |
| (...skipping 295 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1085 EXPECT_EQ(2, w1->GetIntProperty(key)); | 990 EXPECT_EQ(2, w1->GetIntProperty(key)); |
| 1086 EXPECT_EQ(reinterpret_cast<void*>(2), w1->GetProperty(key)); | 991 EXPECT_EQ(reinterpret_cast<void*>(2), w1->GetProperty(key)); |
| 1087 EXPECT_EQ("name=test old=1 new=2", PropertyChangeInfoAndClear()); | 992 EXPECT_EQ("name=test old=1 new=2", PropertyChangeInfoAndClear()); |
| 1088 w1->SetProperty(key, NULL); | 993 w1->SetProperty(key, NULL); |
| 1089 EXPECT_EQ("name=test old=2 new=0", PropertyChangeInfoAndClear()); | 994 EXPECT_EQ("name=test old=2 new=0", PropertyChangeInfoAndClear()); |
| 1090 | 995 |
| 1091 // Sanity check to see if |PropertyChangeInfoAndClear| really clears. | 996 // Sanity check to see if |PropertyChangeInfoAndClear| really clears. |
| 1092 EXPECT_EQ("name= old=0 new=0", PropertyChangeInfoAndClear()); | 997 EXPECT_EQ("name= old=0 new=0", PropertyChangeInfoAndClear()); |
| 1093 } | 998 } |
| 1094 | 999 |
| 1095 class RootWindowObserverTest : public WindowTest, | |
| 1096 public RootWindowObserver { | |
| 1097 public: | |
| 1098 RootWindowObserverTest() : active_(NULL) { | |
| 1099 } | |
| 1100 | |
| 1101 virtual ~RootWindowObserverTest() {} | |
| 1102 | |
| 1103 Window* active() const { return active_; } | |
| 1104 | |
| 1105 void Reset() { | |
| 1106 active_ = NULL; | |
| 1107 } | |
| 1108 | |
| 1109 private: | |
| 1110 virtual void SetUp() OVERRIDE { | |
| 1111 WindowTest::SetUp(); | |
| 1112 RootWindow::GetInstance()->AddObserver(this); | |
| 1113 } | |
| 1114 | |
| 1115 virtual void TearDown() OVERRIDE { | |
| 1116 RootWindow::GetInstance()->RemoveObserver(this); | |
| 1117 WindowTest::TearDown(); | |
| 1118 } | |
| 1119 | |
| 1120 virtual void OnActiveWindowChanged(Window* active) OVERRIDE { | |
| 1121 active_ = active; | |
| 1122 } | |
| 1123 | |
| 1124 Window* active_; | |
| 1125 | |
| 1126 DISALLOW_COPY_AND_ASSIGN(RootWindowObserverTest); | |
| 1127 }; | |
| 1128 | |
| 1129 TEST_F(RootWindowObserverTest, WindowActivationObserve) { | |
| 1130 scoped_ptr<Window> w1(CreateTestWindowWithId(1, NULL)); | |
| 1131 scoped_ptr<Window> w2(CreateTestWindowWithId(2, NULL)); | |
| 1132 scoped_ptr<Window> w3(CreateTestWindowWithId(3, w1.get())); | |
| 1133 | |
| 1134 EXPECT_EQ(NULL, active()); | |
| 1135 | |
| 1136 w2->Activate(); | |
| 1137 EXPECT_EQ(w2.get(), active()); | |
| 1138 | |
| 1139 w3->Activate(); | |
| 1140 EXPECT_EQ(w2.get(), active()); | |
| 1141 | |
| 1142 w1->Activate(); | |
| 1143 EXPECT_EQ(w1.get(), active()); | |
| 1144 } | |
| 1145 | |
| 1146 } // namespace test | 1000 } // namespace test |
| 1147 } // namespace aura | 1001 } // namespace aura |
| OLD | NEW |