blob: a2f2f9ab53af27080659a24aec937875ce0ba2c5 [file] [log] [blame]
// Copyright 2018 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "ui/views/window/hit_test_utils.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "ui/base/hit_test.h"
#include "ui/views/test/views_test_base.h"
#include "ui/views/view.h"
#include "ui/views/view_properties.h"
#include "ui/views/widget/widget.h"
namespace views {
using GetHitTestComponentTest = ViewsTestBase;
TEST_F(GetHitTestComponentTest, BasicTests) {
Widget* widget = new Widget;
widget->Init(CreateParams(Widget::InitParams::TYPE_WINDOW));
// Testing arrangement diagram:
// *=============root:HTCLIENT=============*
// | *=left:HTLEFT=* *=nowhere:HTNOWHERE=* |
// | | | | *=right:HTRIGHT=* | |
// | | | | | | | |
// | | | | *===============* | |
// | *=============* *===================* |
// *=======================================*
View* root = widget->GetRootView();
root->SetProperty(views::kHitTestComponentKey, static_cast<int>(HTCLIENT));
root->SetBounds(0, 0, 100, 100);
View* left = new View;
left->SetProperty(views::kHitTestComponentKey, static_cast<int>(HTLEFT));
left->SetBounds(10, 10, 30, 80);
root->AddChildView(left);
View* nowhere = new View;
nowhere->SetBounds(60, 10, 30, 80);
root->AddChildView(nowhere);
View* right = new View;
right->SetProperty(views::kHitTestComponentKey, static_cast<int>(HTRIGHT));
right->SetBounds(10, 10, 10, 60);
nowhere->AddChildView(right);
// Hit the root view.
EXPECT_EQ(GetHitTestComponent(root, gfx::Point(50, 50)), HTCLIENT);
// Hit the left view.
EXPECT_EQ(GetHitTestComponent(root, gfx::Point(25, 50)), HTLEFT);
// Hit the nowhere view, should return the root view's value.
EXPECT_EQ(GetHitTestComponent(root, gfx::Point(65, 50)), HTCLIENT);
// Hit the right view.
EXPECT_EQ(GetHitTestComponent(root, gfx::Point(75, 50)), HTRIGHT);
// Hit outside the root view.
EXPECT_EQ(GetHitTestComponent(root, gfx::Point(200, 50)), HTNOWHERE);
widget->CloseNow();
}
} // namespace views