| Index: ui/views/view_unittest.cc
|
| diff --git a/ui/views/view_unittest.cc b/ui/views/view_unittest.cc
|
| index e9af12ad5a964d0a67207326d15e99dbd2163f12..cf728b68618acd93c041717504021aac286a0097 100644
|
| --- a/ui/views/view_unittest.cc
|
| +++ b/ui/views/view_unittest.cc
|
| @@ -39,6 +39,7 @@
|
| #include "ui/views/controls/native/native_view_host.h"
|
| #include "ui/views/controls/scroll_view.h"
|
| #include "ui/views/controls/textfield/textfield.h"
|
| +#include "ui/views/devtools_observer.h"
|
| #include "ui/views/focus/view_storage.h"
|
| #include "ui/views/test/views_test_base.h"
|
| #include "ui/views/widget/native_widget.h"
|
| @@ -4577,4 +4578,146 @@ TEST_F(ViewTest, CrashOnAddFromFromOnNativeThemeChanged) {
|
| EXPECT_TRUE(v->on_native_theme_changed_called());
|
| }
|
|
|
| +////////////////////////////////////////////////////////////////////////////////
|
| +// DevTools observer tests.
|
| +////////////////////////////////////////////////////////////////////////////////
|
| +
|
| +class DevToolsObserverTest : public ViewTest, public DevToolsObserver {
|
| + public:
|
| + DevToolsObserverTest()
|
| + : view_visibility_changed_(nullptr),
|
| + view_enabled_changed_(nullptr),
|
| + view_bounds_changed_(nullptr),
|
| + view_reordered_(nullptr) {}
|
| +
|
| + ~DevToolsObserverTest() override {}
|
| +
|
| + void OnViewHierarchyChanged(View* target,
|
| + View* old_parent,
|
| + View* new_parent) override {
|
| + ViewHierarchyChangedDetails details;
|
| + details.target = target;
|
| + details.old_parent = old_parent;
|
| + details.new_parent = new_parent;
|
| + view_hierarchy_changed_details_.push_back(details);
|
| + }
|
| +
|
| + void OnViewVisibilityChanged(View* view, bool visible) override {
|
| + view_visibility_changed_ = view;
|
| + }
|
| +
|
| + void OnViewEnabledChanged(View* view, int index) override {
|
| + view_enabled_changed_ = view;
|
| + }
|
| +
|
| + void OnViewBoundsChanged(View* view, const gfx::Rect& new_bounds) override {
|
| + view_bounds_changed_ = view;
|
| + }
|
| +
|
| + void OnChildViewReordered(View* view, int index) override {
|
| + view_reordered_ = view;
|
| + }
|
| +
|
| + bool DidChangeHierarchy(View* target, View* old_parent, View* new_parent) {
|
| + for (auto& details : view_hierarchy_changed_details_) {
|
| + if (details.target == target && details.old_parent == old_parent &&
|
| + details.new_parent == new_parent)
|
| + return true;
|
| + }
|
| + return false;
|
| + }
|
| +
|
| + void reset() {
|
| + view_hierarchy_changed_details_.clear();
|
| + view_visibility_changed_ = nullptr;
|
| + view_enabled_changed_ = nullptr;
|
| + view_bounds_changed_ = nullptr;
|
| + view_reordered_ = nullptr;
|
| + }
|
| +
|
| + std::unique_ptr<View> NewView() {
|
| + auto view = base::MakeUnique<View>();
|
| + view->set_devtools_observer(this);
|
| + return view;
|
| + }
|
| +
|
| + int views_hierarchy_changed_times() const {
|
| + return static_cast<int>(view_hierarchy_changed_details_.size());
|
| + }
|
| + const View* view_visibility_changed() const {
|
| + return view_visibility_changed_;
|
| + }
|
| + const View* view_enabled_changed() const { return view_enabled_changed_; }
|
| + const View* view_bounds_changed() const { return view_bounds_changed_; }
|
| + const View* view_reordered() const { return view_reordered_; }
|
| +
|
| + private:
|
| + struct ViewHierarchyChangedDetails {
|
| + View* target;
|
| + View* old_parent;
|
| + View* new_parent;
|
| + };
|
| + std::vector<ViewHierarchyChangedDetails> view_hierarchy_changed_details_;
|
| + View* view_visibility_changed_;
|
| + View* view_enabled_changed_;
|
| + View* view_bounds_changed_;
|
| + View* view_reordered_;
|
| +};
|
| +
|
| +TEST_F(DevToolsObserverTest, DevToolsObserverViewHierarchyChanged) {
|
| + std::unique_ptr<View> parent1 = NewView();
|
| + std::unique_ptr<View> parent2 = NewView();
|
| + std::unique_ptr<View> child_view = NewView();
|
| +
|
| + parent1->AddChildView(child_view.get());
|
| + EXPECT_EQ(1, views_hierarchy_changed_times());
|
| + EXPECT_TRUE(DidChangeHierarchy(child_view.get(), nullptr, parent1.get()));
|
| + reset();
|
| +
|
| + // Removed from parent1, added to parent2
|
| + parent2->AddChildView(child_view.get());
|
| + EXPECT_EQ(2, views_hierarchy_changed_times());
|
| + EXPECT_TRUE(DidChangeHierarchy(child_view.get(), parent1.get(), nullptr));
|
| + EXPECT_TRUE(DidChangeHierarchy(child_view.get(), nullptr, parent2.get()));
|
| +
|
| + reset();
|
| +
|
| + parent2->RemoveChildView(child_view.get());
|
| + EXPECT_EQ(1, views_hierarchy_changed_times());
|
| + EXPECT_TRUE(DidChangeHierarchy(child_view.get(), parent2.get(), nullptr));
|
| +}
|
| +
|
| +TEST_F(DevToolsObserverTest, DevToolsObserverViewVisibilityChanged) {
|
| + std::unique_ptr<View> view = NewView();
|
| + view->SetVisible(false);
|
| + EXPECT_EQ(view.get(), view_visibility_changed());
|
| +}
|
| +
|
| +TEST_F(DevToolsObserverTest, DevToolsObserverViewEnabledChanged) {
|
| + std::unique_ptr<View> view = NewView();
|
| + view->SetEnabled(false);
|
| + EXPECT_EQ(view.get(), view_enabled_changed());
|
| +}
|
| +
|
| +TEST_F(DevToolsObserverTest, DevToolsObserverViewBoundsChanged) {
|
| + std::unique_ptr<View> view = NewView();
|
| + view->SetBounds(2, 2, 2, 2);
|
| + EXPECT_EQ(view.get(), view_bounds_changed());
|
| +
|
| + reset();
|
| +
|
| + view->SetBoundsRect(gfx::Rect(1, 1, 1, 1));
|
| + EXPECT_EQ(view.get(), view_bounds_changed());
|
| +}
|
| +
|
| +TEST_F(DevToolsObserverTest, DevToolsObserverChildViewReordered) {
|
| + std::unique_ptr<View> view = NewView();
|
| + std::unique_ptr<View> child_view = NewView();
|
| + std::unique_ptr<View> child_view2 = NewView();
|
| + view->AddChildView(child_view.get());
|
| + view->AddChildView(child_view2.get());
|
| + view->ReorderChildView(child_view2.get(), 0);
|
| + EXPECT_EQ(child_view2.get(), view_reordered());
|
| +}
|
| +
|
| } // namespace views
|
|
|