diff options
Diffstat (limited to 'ui/aura/window_unittest.cc')
-rw-r--r-- | ui/aura/window_unittest.cc | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/ui/aura/window_unittest.cc b/ui/aura/window_unittest.cc index 7f7fd75..bac8e51 100644 --- a/ui/aura/window_unittest.cc +++ b/ui/aura/window_unittest.cc @@ -355,6 +355,10 @@ TEST_F(WindowTest, GetTopWindowContainingPoint) { scoped_ptr<Window> w311( CreateTestWindow(SK_ColorBLUE, 311, gfx::Rect(0, 0, 10, 10), w31.get())); + // The stop-event-propagation flag shouldn't have any effect on the behavior + // of this method. + w3->set_stops_event_propagation(true); + EXPECT_EQ(NULL, root->GetTopWindowContainingPoint(gfx::Point(0, 0))); EXPECT_EQ(w2.get(), root->GetTopWindowContainingPoint(gfx::Point(5, 5))); EXPECT_EQ(w2.get(), root->GetTopWindowContainingPoint(gfx::Point(10, 10))); @@ -804,6 +808,58 @@ TEST_F(WindowTest, Visibility) { EXPECT_TRUE(w3->IsVisible()); } +// When set_consume_events() is called with |true| for a Window, that Window +// should make sure that none behind it in the z-order see events if it has +// children. If it does not have children, event targeting works as usual. +TEST_F(WindowTest, StopsEventPropagation) { + TestWindowDelegate d11; + TestWindowDelegate d111; + TestWindowDelegate d121; + scoped_ptr<Window> w1(CreateTestWindowWithDelegate(NULL, 1, + gfx::Rect(0, 0, 500, 500), NULL)); + scoped_ptr<Window> w11(CreateTestWindowWithDelegate(&d11, 11, + gfx::Rect(0, 0, 500, 500), w1.get())); + scoped_ptr<Window> w111(CreateTestWindowWithDelegate(&d111, 111, + gfx::Rect(50, 50, 450, 450), w11.get())); + scoped_ptr<Window> w12(CreateTestWindowWithDelegate(NULL, 12, + gfx::Rect(0, 0, 500, 500), w1.get())); + scoped_ptr<Window> w121(CreateTestWindowWithDelegate(&d121, 121, + gfx::Rect(150, 150, 50, 50), NULL)); + + w12->set_stops_event_propagation(true); + EXPECT_EQ(w11.get(), w1->GetEventHandlerForPoint(gfx::Point(10, 10))); + + EXPECT_TRUE(w111->CanFocus()); + EXPECT_TRUE(w111->CanReceiveEvents()); + w111->Focus(); + EXPECT_EQ(w111.get(), w1->GetFocusManager()->GetFocusedWindow()); + + w12->AddChild(w121.get()); + + EXPECT_EQ(NULL, w1->GetEventHandlerForPoint(gfx::Point(10, 10))); + EXPECT_EQ(w121.get(), w1->GetEventHandlerForPoint(gfx::Point(175, 175))); + + // It should be possible to focus w121 since it is at or above the + // consumes_events_ window. + EXPECT_TRUE(w121->CanFocus()); + EXPECT_TRUE(w121->CanReceiveEvents()); + w121->Focus(); + EXPECT_EQ(w121.get(), w1->GetFocusManager()->GetFocusedWindow()); + + // An attempt to focus 111 should be ignored and w121 should retain focus, + // since a consumes_events_ window with a child is in the z-index above w111. + EXPECT_FALSE(w111->CanReceiveEvents()); + w111->Focus(); + EXPECT_EQ(w121.get(), w1->GetFocusManager()->GetFocusedWindow()); + + // Hiding w121 should make 111 focusable. + w121->Hide(); + EXPECT_TRUE(w111->CanFocus()); + EXPECT_TRUE(w111->CanReceiveEvents()); + w111->Focus(); + EXPECT_EQ(w111.get(), w1->GetFocusManager()->GetFocusedWindow()); +} + TEST_F(WindowTest, IgnoreEventsTest) { TestWindowDelegate d11; TestWindowDelegate d12; |