// Copyright 2014 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "ui/views/view_targeter.h" #include <memory> #include <utility> #include "base/memory/ptr_util.h" #include "third_party/skia/include/core/SkPath.h" #include "ui/base/metadata/metadata_header_macros.h" #include "ui/base/metadata/metadata_impl_macros.h" #include "ui/events/event_targeter.h" #include "ui/events/event_utils.h" #include "ui/events/keycodes/dom/dom_code.h" #include "ui/views/masked_targeter_delegate.h" #include "ui/views/test/views_test_base.h" #include "ui/views/view_targeter_delegate.h" #include "ui/views/widget/root_view.h" namespace views { // A derived class of View used for testing purposes. class TestingView : public View, public ViewTargeterDelegate { … }; BEGIN_METADATA(…) // A derived class of View having a triangular-shaped hit test mask. class TestMaskedView : public View, public MaskedTargeterDelegate { … }; BEGIN_METADATA(…) namespace test { // TODO(tdanderson): Clean up this test suite by moving common code/state into // ViewTargeterTest and overriding SetUp(), TearDown(), etc. // See crbug.com/355680. class ViewTargeterTest : public ViewsTestBase { … }; namespace { gfx::Point ConvertPointFromWidgetToView(View* view, const gfx::Point& p) { … } gfx::Rect ConvertRectFromWidgetToView(View* view, const gfx::Rect& r) { … } } // namespace // Verifies that the the functions ViewTargeter::FindTargetForEvent() // and ViewTargeter::FindNextBestTarget() are implemented correctly // for key events. TEST_F(ViewTargeterTest, ViewTargeterForKeyEvents) { … } // Verifies that the the functions ViewTargeter::FindTargetForEvent() // and ViewTargeter::FindNextBestTarget() are implemented correctly // for scroll events. TEST_F(ViewTargeterTest, ViewTargeterForScrollEvents) { … } // Convenience to make constructing a GestureEvent simpler. ui::GestureEvent CreateTestGestureEvent( const ui::GestureEventDetails& details) { … } // Verifies that the the functions ViewTargeter::FindTargetForEvent() // and ViewTargeter::FindNextBestTarget() are implemented correctly // for gesture events. TEST_F(ViewTargeterTest, ViewTargeterForGestureEvents) { … } // Tests that the contents view is targeted instead of the root view for // gesture events that should be targeted to the contents view. Also // tests that the root view is targeted for gesture events which should // not be targeted to any other view in the views tree. TEST_F(ViewTargeterTest, TargetContentsAndRootView) { … } // Tests that calls to FindTargetForEvent() and FindNextBestTarget() change // the location of a gesture event to be in the correct coordinate space. TEST_F(ViewTargeterTest, GestureEventCoordinateConversion) { … } // Tests that the functions ViewTargeterDelegate::DoesIntersectRect() // and MaskedTargeterDelegate::DoesIntersectRect() work as intended when // called on views which are derived from ViewTargeterDelegate. // Also verifies that ViewTargeterDelegate::DoesIntersectRect() can // be called from the ViewTargeter installed on RootView. TEST_F(ViewTargeterTest, DoesIntersectRect) { … } // Tests that calls made directly on the hit-testing methods in View // (HitTestPoint(), HitTestRect(), etc.) return the correct values. TEST_F(ViewTargeterTest, HitTestCallsOnView) { … } TEST_F(ViewTargeterTest, FavorChildContainingHitBounds) { … } } // namespace test } // namespace views