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 526 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
537 Window::ConvertPointToWindow(w2->parent(), root_window, &move_point); | 537 Window::ConvertPointToWindow(w2->parent(), root_window, &move_point); |
538 MouseEvent mouseev2(ui::ET_MOUSE_MOVED, move_point, 0); | 538 MouseEvent mouseev2(ui::ET_MOUSE_MOVED, move_point, 0); |
539 root_window->DispatchMouseEvent(&mouseev2); | 539 root_window->DispatchMouseEvent(&mouseev2); |
540 | 540 |
541 EXPECT_TRUE(d1.entered()); | 541 EXPECT_TRUE(d1.entered()); |
542 EXPECT_TRUE(d1.exited()); | 542 EXPECT_TRUE(d1.exited()); |
543 EXPECT_TRUE(d2.entered()); | 543 EXPECT_TRUE(d2.entered()); |
544 EXPECT_FALSE(d2.exited()); | 544 EXPECT_FALSE(d2.exited()); |
545 } | 545 } |
546 | 546 |
| 547 namespace { |
| 548 |
| 549 class ActiveWindowDelegate : public TestWindowDelegate { |
| 550 public: |
| 551 ActiveWindowDelegate() : window_(NULL), was_active_(false), hit_count_(0) { |
| 552 } |
| 553 |
| 554 void set_window(Window* window) { window_ = window; } |
| 555 |
| 556 // Number of times OnLostActive has been invoked. |
| 557 int hit_count() const { return hit_count_; } |
| 558 |
| 559 // Was the window active from the first call to OnLostActive? |
| 560 bool was_active() const { return was_active_; } |
| 561 |
| 562 virtual void OnLostActive() OVERRIDE { |
| 563 if (hit_count_++ == 0) |
| 564 was_active_ = window_->IsActive(); |
| 565 } |
| 566 |
| 567 private: |
| 568 Window* window_; |
| 569 |
| 570 // See description above getters for details on these. |
| 571 bool was_active_; |
| 572 int hit_count_; |
| 573 |
| 574 DISALLOW_COPY_AND_ASSIGN(ActiveWindowDelegate); |
| 575 }; |
| 576 |
| 577 } // namespace |
| 578 |
| 579 // Verifies that when WindowDelegate::OnLostActive is invoked the window is not |
| 580 // active. |
| 581 TEST_F(WindowTest, NotActiveInLostActive) { |
| 582 RootWindow* root_window = RootWindow::GetInstance(); |
| 583 |
| 584 ActiveWindowDelegate d1; |
| 585 scoped_ptr<Window> w1( |
| 586 CreateTestWindowWithDelegate(&d1, 1, gfx::Rect(10, 10, 50, 50), NULL)); |
| 587 d1.set_window(w1.get()); |
| 588 scoped_ptr<Window> w2( |
| 589 CreateTestWindowWithDelegate(NULL, 1, gfx::Rect(10, 10, 50, 50), NULL)); |
| 590 |
| 591 // Activate w1. |
| 592 root_window->SetActiveWindow(w1.get(), NULL); |
| 593 EXPECT_EQ(w1.get(), root_window->active_window()); |
| 594 |
| 595 // Should not have gotten a OnLostActive yet. |
| 596 EXPECT_EQ(0, d1.hit_count()); |
| 597 |
| 598 // SetActiveWindow(NULL) should not change the active window. |
| 599 root_window->SetActiveWindow(NULL, NULL); |
| 600 EXPECT_TRUE(root_window->active_window() == w1.get()); |
| 601 |
| 602 // Now activate another window. |
| 603 root_window->SetActiveWindow(w2.get(), NULL); |
| 604 |
| 605 // Should have gotten OnLostActive and w1 should not have been active at that |
| 606 // time. |
| 607 EXPECT_EQ(1, d1.hit_count()); |
| 608 EXPECT_FALSE(d1.was_active()); |
| 609 } |
| 610 |
547 // Creates a window with a delegate (w111) that can handle events at a lower | 611 // Creates a window with a delegate (w111) that can handle events at a lower |
548 // z-index than a window without a delegate (w12). w12 is sized to fill the | 612 // z-index than a window without a delegate (w12). w12 is sized to fill the |
549 // entire bounds of the container. This test verifies that | 613 // entire bounds of the container. This test verifies that |
550 // GetEventHandlerForPoint() skips w12 even though its bounds contain the event, | 614 // GetEventHandlerForPoint() skips w12 even though its bounds contain the event, |
551 // because it has no children that can handle the event and it has no delegate | 615 // because it has no children that can handle the event and it has no delegate |
552 // allowing it to handle the event itself. | 616 // allowing it to handle the event itself. |
553 TEST_F(WindowTest, GetEventHandlerForPoint_NoDelegate) { | 617 TEST_F(WindowTest, GetEventHandlerForPoint_NoDelegate) { |
554 TestWindowDelegate d111; | 618 TestWindowDelegate d111; |
555 scoped_ptr<Window> w1(CreateTestWindowWithDelegate(NULL, 1, | 619 scoped_ptr<Window> w1(CreateTestWindowWithDelegate(NULL, 1, |
556 gfx::Rect(0, 0, 500, 500), NULL)); | 620 gfx::Rect(0, 0, 500, 500), NULL)); |
(...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
704 | 768 |
705 EXPECT_EQ(w121.get(), w1->GetEventHandlerForPoint(gfx::Point(160, 160))); | 769 EXPECT_EQ(w121.get(), w1->GetEventHandlerForPoint(gfx::Point(160, 160))); |
706 w121->set_ignore_events(true); | 770 w121->set_ignore_events(true); |
707 EXPECT_EQ(w12.get(), w1->GetEventHandlerForPoint(gfx::Point(160, 160))); | 771 EXPECT_EQ(w12.get(), w1->GetEventHandlerForPoint(gfx::Point(160, 160))); |
708 w12->set_ignore_events(true); | 772 w12->set_ignore_events(true); |
709 EXPECT_EQ(w111.get(), w1->GetEventHandlerForPoint(gfx::Point(160, 160))); | 773 EXPECT_EQ(w111.get(), w1->GetEventHandlerForPoint(gfx::Point(160, 160))); |
710 w111->set_ignore_events(true); | 774 w111->set_ignore_events(true); |
711 EXPECT_EQ(w11.get(), w1->GetEventHandlerForPoint(gfx::Point(160, 160))); | 775 EXPECT_EQ(w11.get(), w1->GetEventHandlerForPoint(gfx::Point(160, 160))); |
712 } | 776 } |
713 | 777 |
| 778 // Various assertions for activating/deactivating. |
| 779 TEST_F(WindowTest, Deactivate) { |
| 780 TestWindowDelegate d1; |
| 781 TestWindowDelegate d2; |
| 782 scoped_ptr<Window> w1( |
| 783 CreateTestWindowWithDelegate(&d1, 1, gfx::Rect(), NULL)); |
| 784 scoped_ptr<Window> w2( |
| 785 CreateTestWindowWithDelegate(&d2, 2, gfx::Rect(), NULL)); |
| 786 Window* parent = w1->parent(); |
| 787 parent->Show(); |
| 788 ASSERT_TRUE(parent); |
| 789 ASSERT_EQ(2u, parent->children().size()); |
| 790 // Activate w2 and make sure it's active and frontmost. |
| 791 w2->Activate(); |
| 792 EXPECT_TRUE(w2->IsActive()); |
| 793 EXPECT_FALSE(w1->IsActive()); |
| 794 EXPECT_EQ(w2.get(), parent->children()[1]); |
| 795 |
| 796 // Activate w1 and make sure it's active and frontmost. |
| 797 w1->Activate(); |
| 798 EXPECT_TRUE(w1->IsActive()); |
| 799 EXPECT_FALSE(w2->IsActive()); |
| 800 EXPECT_EQ(w1.get(), parent->children()[1]); |
| 801 |
| 802 // Deactivate w1 and make sure w2 becomes active and frontmost. |
| 803 w1->Deactivate(); |
| 804 EXPECT_FALSE(w1->IsActive()); |
| 805 EXPECT_TRUE(w2->IsActive()); |
| 806 EXPECT_EQ(w2.get(), parent->children()[1]); |
| 807 } |
| 808 |
714 // Tests transformation on the root window. | 809 // Tests transformation on the root window. |
715 TEST_F(WindowTest, Transform) { | 810 TEST_F(WindowTest, Transform) { |
716 RootWindow* root_window = RootWindow::GetInstance(); | 811 RootWindow* root_window = RootWindow::GetInstance(); |
717 gfx::Size size = root_window->GetHostSize(); | 812 gfx::Size size = root_window->GetHostSize(); |
718 EXPECT_EQ(gfx::Rect(size), | 813 EXPECT_EQ(gfx::Rect(size), |
719 gfx::Screen::GetMonitorAreaNearestPoint(gfx::Point())); | 814 gfx::Screen::GetMonitorAreaNearestPoint(gfx::Point())); |
720 | 815 |
721 // Rotate it clock-wise 90 degrees. | 816 // Rotate it clock-wise 90 degrees. |
722 ui::Transform transform; | 817 ui::Transform transform; |
723 transform.SetRotate(90.0f); | 818 transform.SetRotate(90.0f); |
(...skipping 295 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1019 EXPECT_EQ(2, w1->GetIntProperty(key)); | 1114 EXPECT_EQ(2, w1->GetIntProperty(key)); |
1020 EXPECT_EQ(reinterpret_cast<void*>(2), w1->GetProperty(key)); | 1115 EXPECT_EQ(reinterpret_cast<void*>(2), w1->GetProperty(key)); |
1021 EXPECT_EQ("name=test old=1 new=2", PropertyChangeInfoAndClear()); | 1116 EXPECT_EQ("name=test old=1 new=2", PropertyChangeInfoAndClear()); |
1022 w1->SetProperty(key, NULL); | 1117 w1->SetProperty(key, NULL); |
1023 EXPECT_EQ("name=test old=2 new=0", PropertyChangeInfoAndClear()); | 1118 EXPECT_EQ("name=test old=2 new=0", PropertyChangeInfoAndClear()); |
1024 | 1119 |
1025 // Sanity check to see if |PropertyChangeInfoAndClear| really clears. | 1120 // Sanity check to see if |PropertyChangeInfoAndClear| really clears. |
1026 EXPECT_EQ("name= old=0 new=0", PropertyChangeInfoAndClear()); | 1121 EXPECT_EQ("name= old=0 new=0", PropertyChangeInfoAndClear()); |
1027 } | 1122 } |
1028 | 1123 |
| 1124 class RootWindowObserverTest : public WindowTest, |
| 1125 public RootWindowObserver { |
| 1126 public: |
| 1127 RootWindowObserverTest() : active_(NULL) { |
| 1128 } |
| 1129 |
| 1130 virtual ~RootWindowObserverTest() {} |
| 1131 |
| 1132 Window* active() const { return active_; } |
| 1133 |
| 1134 void Reset() { |
| 1135 active_ = NULL; |
| 1136 } |
| 1137 |
| 1138 private: |
| 1139 virtual void SetUp() OVERRIDE { |
| 1140 WindowTest::SetUp(); |
| 1141 RootWindow::GetInstance()->AddObserver(this); |
| 1142 } |
| 1143 |
| 1144 virtual void TearDown() OVERRIDE { |
| 1145 RootWindow::GetInstance()->RemoveObserver(this); |
| 1146 WindowTest::TearDown(); |
| 1147 } |
| 1148 |
| 1149 virtual void OnActiveWindowChanged(Window* active) OVERRIDE { |
| 1150 active_ = active; |
| 1151 } |
| 1152 |
| 1153 Window* active_; |
| 1154 |
| 1155 DISALLOW_COPY_AND_ASSIGN(RootWindowObserverTest); |
| 1156 }; |
| 1157 |
| 1158 TEST_F(RootWindowObserverTest, WindowActivationObserve) { |
| 1159 scoped_ptr<Window> w1(CreateTestWindowWithId(1, NULL)); |
| 1160 scoped_ptr<Window> w2(CreateTestWindowWithId(2, NULL)); |
| 1161 scoped_ptr<Window> w3(CreateTestWindowWithId(3, w1.get())); |
| 1162 |
| 1163 EXPECT_EQ(NULL, active()); |
| 1164 |
| 1165 w2->Activate(); |
| 1166 EXPECT_EQ(w2.get(), active()); |
| 1167 |
| 1168 w3->Activate(); |
| 1169 EXPECT_EQ(w2.get(), active()); |
| 1170 |
| 1171 w1->Activate(); |
| 1172 EXPECT_EQ(w1.get(), active()); |
| 1173 } |
| 1174 |
1029 } // namespace test | 1175 } // namespace test |
1030 } // namespace aura | 1176 } // namespace aura |
OLD | NEW |