Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2500)

Unified Diff: ash/common/devtools/ash_devtools_unittest.cc

Issue 2469883002: Add test for ash devtools DOM agent getDocument method (Closed)
Patch Set: use new devtools style Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ash/common/devtools/ash_devtools_dom_agent.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ash/common/devtools/ash_devtools_unittest.cc
diff --git a/ash/common/devtools/ash_devtools_unittest.cc b/ash/common/devtools/ash_devtools_unittest.cc
new file mode 100644
index 0000000000000000000000000000000000000000..65d77bec087f488460e1238fd6429b9a3ef12c1b
--- /dev/null
+++ b/ash/common/devtools/ash_devtools_unittest.cc
@@ -0,0 +1,151 @@
+// Copyright 2016 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 "ash/common/devtools/ash_devtools_dom_agent.h"
+
+#include "ash/common/test/ash_test.h"
+#include "ash/common/wm_lookup.h"
+#include "ash/common/wm_shell.h"
+#include "ash/common/wm_window.h"
+#include "ui/views/widget/widget.h"
+
+namespace ash {
+namespace {
+using namespace ui::devtools::protocol;
+const int kDefaultChildNodeCount = -1;
+
+class TestView : public views::View {
+ public:
+ TestView(const char* name) : views::View(), name_(name) {}
+
+ const char* GetClassName() const override { return name_; }
+
+ private:
+ const char* name_;
+
+ DISALLOW_COPY_AND_ASSIGN(TestView);
+};
+
+std::string GetAttributeValue(const std::string& attribute, DOM::Node* node) {
+ EXPECT_TRUE(node->hasAttributes());
+ Array<std::string>* attributes = node->getAttributes(nullptr);
+ for (size_t i = 0; i < attributes->length() - 1; i++) {
+ if (attributes->get(i) == attribute)
+ return attributes->get(i + 1);
+ }
+ return nullptr;
+}
+
+bool Equals(views::Widget* widget, DOM::Node* node) {
+ return "Widget" == node->getNodeName() &&
+ widget->GetName() == GetAttributeValue("name", node) &&
+ (widget->GetRootView() ? 1 : 0) ==
+ node->getChildNodeCount(kDefaultChildNodeCount);
+}
+
+bool Equals(WmWindow* window, DOM::Node* node) {
+ return "Window" == node->getNodeName() &&
+ window->GetName() == GetAttributeValue("name", node) &&
+ static_cast<int>(window->GetChildren().size()) ==
+ node->getChildNodeCount(kDefaultChildNodeCount);
+}
+
+void Compare(views::View* view, DOM::Node* node) {
+ EXPECT_EQ("View", node->getNodeName());
+ EXPECT_EQ(view->GetClassName(), GetAttributeValue("name", node));
+ EXPECT_EQ(view->child_count(),
+ node->getChildNodeCount(kDefaultChildNodeCount));
+}
+
+void Compare(WmWindow* window, DOM::Node* node) {
+ EXPECT_TRUE(Equals(window, node));
+}
+
+DOM::Node* FindInRoot(WmWindow* window, DOM::Node* root) {
+ if (Equals(window, root))
+ return root;
+
+ Array<DOM::Node>* children = root->getChildren(nullptr);
+ DOM::Node* window_node = nullptr;
+ for (size_t i = 0; i < children->length(); i++) {
+ window_node = FindInRoot(window, children->get(i));
+ if (window_node)
+ return window_node;
+ }
+ return window_node;
+}
+
+DOM::Node* FindInRoot(views::Widget* widget, DOM::Node* root) {
+ if (Equals(widget, root))
+ return root;
+
+ Array<DOM::Node>* children = root->getChildren(nullptr);
+ DOM::Node* widget_node = nullptr;
+ for (size_t i = 0; i < children->length(); i++) {
+ widget_node = FindInRoot(widget, children->get(i));
+ if (widget_node)
+ return widget_node;
+ }
+ return widget_node;
+}
+
+} // namespace
+
+class AshDevToolsTest : public AshTest {
+ public:
+ AshDevToolsTest() {}
+ ~AshDevToolsTest() override {}
+
+ void SetUp() override {
+ AshTest::SetUp();
+ dom_agent_ =
+ base::MakeUnique<devtools::AshDevToolsDOMAgent>(WmShell::Get());
+ }
+
+ void TearDown() override {
+ dom_agent_.reset();
+ AshTest::TearDown();
+ }
+
+ devtools::AshDevToolsDOMAgent* dom_agent() { return dom_agent_.get(); }
+
+ private:
+ std::unique_ptr<devtools::AshDevToolsDOMAgent> dom_agent_;
+
+ DISALLOW_COPY_AND_ASSIGN(AshDevToolsTest);
+};
+
+TEST_F(AshDevToolsTest, GetDocumentWithWindowWidgetView) {
+ std::unique_ptr<views::Widget> widget(
+ CreateTestWidget(gfx::Rect(1, 1, 1, 1)));
+ WmWindow* parent_window = WmLookup::Get()->GetWindowForWidget(widget.get());
+ parent_window->SetName("parent_window");
+ std::unique_ptr<WindowOwner> child_owner(CreateChildWindow(parent_window));
+ WmWindow* child_window = child_owner->window();
+ child_window->SetName("child_window");
+ widget->Show();
+ views::View* child_view = new TestView("child_view");
+ widget->GetRootView()->AddChildView(child_view);
+
+ std::unique_ptr<ui::devtools::protocol::DOM::Node> root;
+
+ dom_agent()->getDocument(&root);
+ DOM::Node* parent_node = FindInRoot(parent_window, root.get());
+ DOM::Node* widget_node = FindInRoot(widget.get(), root.get());
+
+ ASSERT_TRUE(parent_node);
+ ASSERT_TRUE(widget_node);
+ Array<DOM::Node>* default_children = nullptr;
+ ASSERT_TRUE(parent_node->getChildren(default_children));
+ Compare(child_window, parent_node->getChildren(default_children)->get(0));
+ Array<DOM::Node>* widget_children =
+ widget_node->getChildren(default_children);
+ ASSERT_TRUE(widget_children);
+ Compare(widget->GetRootView(), widget_children->get(0));
+ ASSERT_TRUE(widget_children->get(0)->getChildren(default_children));
+ Compare(child_view,
+ widget_children->get(0)->getChildren(default_children)->get(1));
+}
+
+} // namespace ash
« no previous file with comments | « ash/common/devtools/ash_devtools_dom_agent.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698