diff options
Diffstat (limited to 'webkit/glue/devtools/dom_agent_unittest.cc')
-rw-r--r-- | webkit/glue/devtools/dom_agent_unittest.cc | 463 |
1 files changed, 0 insertions, 463 deletions
diff --git a/webkit/glue/devtools/dom_agent_unittest.cc b/webkit/glue/devtools/dom_agent_unittest.cc deleted file mode 100644 index ce01a50..0000000 --- a/webkit/glue/devtools/dom_agent_unittest.cc +++ /dev/null @@ -1,463 +0,0 @@ -// Copyright (c) 2009 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 "config.h" - -#include "CString.h" -#include "Document.h" -#include "EventListener.h" -#include "HTMLFrameOwnerElement.h" -#include "Node.h" -#include "PlatformString.h" -#include "Text.h" -#include <wtf/OwnPtr.h> -#undef LOG - -#include "base/file_path.h" -#include "base/string_util.h" -#include "base/values.h" -#include "net/base/net_util.h" -#include "testing/gtest/include/gtest/gtest.h" -#include "webkit/api/public/WebData.h" -#include "webkit/api/public/WebFrame.h" -#include "webkit/api/public/WebURL.h" -#include "webkit/glue/devtools/devtools_mock_rpc.h" -#include "webkit/glue/devtools/devtools_rpc.h" -#include "webkit/glue/devtools/dom_agent_impl.h" -#include "webkit/glue/dom_operations.h" -#include "webkit/glue/glue_util.h" -#include "webkit/glue/webframe_impl.h" -#include "webkit/glue/webview.h" -#include "webkit/tools/test_shell/test_shell_test.h" - -using WebCore::Document; -using WebCore::Element; -using WebCore::ExceptionCode; -using WebCore::HTMLFrameOwnerElement; -using WebCore::Node; -using WebCore::String; -using WebCore::Text; -using WebKit::WebFrame; - -namespace { - -class MockDomAgentDelegate : public DomAgentDelegateStub, - public DevToolsMockRpc { - public: - MockDomAgentDelegate() : DomAgentDelegateStub(NULL) { - set_delegate(this); - } - ~MockDomAgentDelegate() {} -}; - -class DomAgentTests : public TestShellTest { - public: - DomAgentTests() : ec_(0) {} - - protected: - // testing::Test - virtual void SetUp() { - TestShellTest::SetUp(); - test_shell_->ResetTestController(); - GURL file_url = net::FilePathToFileURL(data_dir_); - WebFrame* main_frame = test_shell_->webView()->GetMainFrame(); - main_frame->loadHTMLString("<html> <head> </head> <body> </body> </html>", - file_url); - WebFrameImpl* main_frame_impl = static_cast<WebFrameImpl*>(main_frame); - - document_ = main_frame_impl->frame()->document(); - Node* html = document_->documentElement(); - head_ = static_cast<Element*>(html->firstChild()); - body_ = static_cast<Element*>(head_->nextSibling()); - mock_delegate_.set(new MockDomAgentDelegate()); - dom_agent_.set(new DomAgentImpl(mock_delegate_.get())); - dom_agent_->SetDocument(document_.get()); - } - - virtual void TearDown() { - TestShellTest::TearDown(); - dom_agent_.set(NULL); - body_ = NULL; - document_ = NULL; - } - - static const int kHtmlElemId = 1; - static const int kHeadElemId = 2; - static const int kBodyElemId = 3; - enum { - kCallIdAny = 0, - kCallId1, - kCallId2, - kCallId3, - kCallId4 - }; - - RefPtr<Document> document_; - RefPtr<Element> head_; - RefPtr<Element> body_; - OwnPtr<DomAgentImpl> dom_agent_; - ExceptionCode ec_; - OwnPtr<MockDomAgentDelegate> mock_delegate_; -}; - -// Requests document node and tests that the callback with the serialized -// version is called. -TEST_F(DomAgentTests, GetDocumentElement) { - OwnPtr<Value> v(DevToolsRpc::ParseMessage("[1,1,\"HTML\",\"\",[],2]")); - mock_delegate_->SetDocumentElement(*v.get()); - mock_delegate_->Replay(); - - dom_agent_->GetDocumentElement(); - mock_delegate_->Verify(); -} - -// Requests element's children and tests that the callback with the serialized -// version is called. -TEST_F(DomAgentTests, GetChildNodes) { - dom_agent_->GetDocumentElement(); - mock_delegate_->Reset(); - - OwnPtr<Value> v(DevToolsRpc::ParseMessage( - "[[2,1,\"HEAD\",\"\",[],0],[3,1,\"BODY\",\"\",[],0]]")); - mock_delegate_->SetChildNodes(kHtmlElemId, *v.get()); - mock_delegate_->DidGetChildNodes(kCallId2); - mock_delegate_->Replay(); - - dom_agent_->GetChildNodes(kCallId2, kHtmlElemId); - mock_delegate_->Verify(); -} - -// Tests that "child node inserted" event is being fired. -TEST_F(DomAgentTests, ChildNodeInsertedUnknownParent) { - dom_agent_->GetDocumentElement(); - mock_delegate_->Reset(); - - // There should be no events fired until parent node is known to client. - RefPtr<Element> div = document_->createElement("DIV", ec_); - body_->appendChild(div, ec_); - mock_delegate_->Replay(); - mock_delegate_->Verify(); -} - -// Tests that "child node inserted" event is being fired. -TEST_F(DomAgentTests, ChildNodeInsertedKnownParent) { - dom_agent_->GetDocumentElement(); - dom_agent_->GetChildNodes(kCallId2, kHtmlElemId); - mock_delegate_->Reset(); - - // There should be an event fired in case parent node is known to client, - // but the event should not be specific. - mock_delegate_->HasChildrenUpdated(kBodyElemId, true); - mock_delegate_->Replay(); - - RefPtr<Element> div = document_->createElement("DIV", ec_); - body_->appendChild(div, ec_); - mock_delegate_->Verify(); -} - -// Tests that "child node inserted" event is being fired. -TEST_F(DomAgentTests, ChildNodeInsertedKnownChildren) { - dom_agent_->GetDocumentElement(); - dom_agent_->GetChildNodes(kCallId2, kHtmlElemId); - dom_agent_->GetChildNodes(kCallId3, kBodyElemId); - mock_delegate_->Reset(); - - // There should be an event fired in case parent node is known to client, - // Since children were already requested, event should have all the - // new child data. - OwnPtr<Value> v(DevToolsRpc::ParseMessage("[4,1,\"DIV\",\"\",[],0]")); - mock_delegate_->ChildNodeInserted(kBodyElemId, 0, *v.get()); - mock_delegate_->Replay(); - - // Blank text should be transparent. - RefPtr<Text> text = document_->createTextNode(" "); - body_->appendChild(text, ec_); - - RefPtr<Element> div = document_->createElement("DIV", ec_); - body_->appendChild(div, ec_); - mock_delegate_->Verify(); -} - -// Tests that "child node inserted" event is being fired after push path to -// node request. -TEST_F(DomAgentTests, ChildNodeInsertedAfterPushPathToNode) { - RefPtr<Element> div = document_->createElement("DIV", ec_); - body_->appendChild(div, ec_); - - dom_agent_->GetDocumentElement(); - dom_agent_->PushNodePathToClient(div.get()); - mock_delegate_->Reset(); - - // Since children were already requested via path to node, event should have - // all the new child data. - OwnPtr<Value> v(DevToolsRpc::ParseMessage("[5,1,\"DIV\",\"\",[],0]")); - mock_delegate_->ChildNodeInserted(kBodyElemId, 4, *v.get()); - mock_delegate_->Replay(); - - RefPtr<Element> div2 = document_->createElement("DIV", ec_); - body_->appendChild(div2, ec_); - mock_delegate_->Verify(); -} - -// Tests that "child node inserted" event is being fired. -TEST_F(DomAgentTests, ChildNodePrepend) { - RefPtr<Element> div = document_->createElement("DIV", ec_); - body_->appendChild(div, ec_); - - dom_agent_->GetDocumentElement(); - dom_agent_->GetChildNodes(kCallId2, kHtmlElemId); - dom_agent_->GetChildNodes(kCallId3, kBodyElemId); - mock_delegate_->Reset(); - - // There should be an event fired in case parent node is known to client, - // Since children were already requested, event should have all the - // new child data. - OwnPtr<Value> v(DevToolsRpc::ParseMessage("[5,1,\"DIV\",\"\",[],0]")); - mock_delegate_->ChildNodeInserted(kBodyElemId, 0, *v.get()); - mock_delegate_->Replay(); - - RefPtr<Element> new_div = document_->createElement("DIV", ec_); - body_->insertBefore(new_div, div.get(), ec_, false); - mock_delegate_->Verify(); -} - -// Tests that "child node inserted" event is being fired. -TEST_F(DomAgentTests, ChildNodeAppend) { - RefPtr<Element> div = document_->createElement("DIV", ec_); - body_->appendChild(div, ec_); - - dom_agent_->GetDocumentElement(); - dom_agent_->GetChildNodes(kCallId2, kHtmlElemId); - dom_agent_->GetChildNodes(kCallId3, kBodyElemId); - mock_delegate_->Reset(); - - // There should be an event fired in case parent node is known to client, - // Since children were already requested, event should have all the - // new child data. - OwnPtr<Value> v(DevToolsRpc::ParseMessage("[5,1,\"DIV\",\"\",[],0]")); - mock_delegate_->ChildNodeInserted(kBodyElemId, 4, *v.get()); - mock_delegate_->Replay(); - - RefPtr<Element> new_div = document_->createElement("DIV", ec_); - body_->appendChild(new_div, ec_, false); - mock_delegate_->Verify(); -} - -// Tests that "child node inserted" event is being fired. -TEST_F(DomAgentTests, ChildNodeInsert) { - RefPtr<Element> div1 = document_->createElement("DIV", ec_); - body_->appendChild(div1, ec_); - RefPtr<Element> div2 = document_->createElement("DIV", ec_); - body_->appendChild(div2, ec_); - - dom_agent_->GetDocumentElement(); - dom_agent_->GetChildNodes(kCallId2, kHtmlElemId); - dom_agent_->GetChildNodes(kCallId3, kBodyElemId); - mock_delegate_->Reset(); - - // There should be an event fired in case parent node is known to client, - // Since children were already requested, event should have all the - // new child data. - OwnPtr<Value> v(DevToolsRpc::ParseMessage("[6,1,\"DIV\",\"\",[],0]")); - mock_delegate_->ChildNodeInserted(kBodyElemId, 4, *v.get()); - mock_delegate_->Replay(); - - RefPtr<Element> new_div = document_->createElement("DIV", ec_); - body_->insertBefore(new_div, div2.get(), ec_, false); - mock_delegate_->Verify(); -} - -// Tests that "child node inserted" event is being fired. -TEST_F(DomAgentTests, ChildNodeRemovedUnknownParent) { - RefPtr<Element> div = document_->createElement("DIV", ec_); - body_->appendChild(div, ec_); - - dom_agent_->GetDocumentElement(); - mock_delegate_->Reset(); - - // There should be no events fired until parent node is known to client. - mock_delegate_->Replay(); - body_->removeChild(div.get(), ec_); - mock_delegate_->Verify(); -} - -// Tests that "child node inserted" event is being fired. -TEST_F(DomAgentTests, ChildNodeRemovedKnownParent) { - RefPtr<Element> div = document_->createElement("DIV", ec_); - body_->appendChild(div, ec_); - - dom_agent_->GetDocumentElement(); - dom_agent_->GetChildNodes(kCallId2, kHtmlElemId); - mock_delegate_->Reset(); - - // There should be an event fired in case parent node is known to client, - // but the event should not be specific. - mock_delegate_->HasChildrenUpdated(kBodyElemId, false); - mock_delegate_->Replay(); - - body_->removeChild(div.get(), ec_); - mock_delegate_->Verify(); -} - -// Tests that "child node inserted" event is being fired. -TEST_F(DomAgentTests, ChildNodeRemovedKnownChildren) { - RefPtr<Element> div = document_->createElement("DIV", ec_); - body_->appendChild(div, ec_); - - dom_agent_->GetDocumentElement(); - dom_agent_->GetChildNodes(kCallId2, kHtmlElemId); - dom_agent_->GetChildNodes(kCallId3, kBodyElemId); - mock_delegate_->Reset(); - - // There should be an event fired in case parent node is known to client, - // Since children were already requested, event should have removed child id. - mock_delegate_->ChildNodeRemoved(kBodyElemId, 4); - mock_delegate_->Replay(); - - body_->removeChild(div.get(), ec_); - mock_delegate_->Verify(); -} - -// Tests that "PushNodePathToClient" sends all missing events in path. -TEST_F(DomAgentTests, PushPathToKnownNode) { - RefPtr<Element> div1 = document_->createElement("DIV", ec_); - body_->appendChild(div1, ec_); - - dom_agent_->GetDocumentElement(); - dom_agent_->GetChildNodes(kCallId2, kHtmlElemId); - dom_agent_->GetChildNodes(kCallId3, kBodyElemId); - mock_delegate_->Reset(); - - // We expect no messages - node is already known. - mock_delegate_->Replay(); - - int id = dom_agent_->PushNodePathToClient(div1.get()); - mock_delegate_->Verify(); - EXPECT_EQ(4, id); -} - -// Tests that "PushNodePathToClient" sends all missing events in path. -TEST_F(DomAgentTests, PushPathToKnownParent) { - RefPtr<Element> div1 = document_->createElement("DIV", ec_); - body_->appendChild(div1, ec_); - - dom_agent_->GetDocumentElement(); - dom_agent_->GetChildNodes(kCallId2, kHtmlElemId); - mock_delegate_->Reset(); - - OwnPtr<Value> v1(DevToolsRpc::ParseMessage("[[4,1,\"DIV\",\"\",[],0]]")); - mock_delegate_->SetChildNodes(kBodyElemId, *v1.get()); - mock_delegate_->Replay(); - - int id = dom_agent_->PushNodePathToClient(div1.get()); - mock_delegate_->Verify(); - EXPECT_EQ(4, id); -} - -// Tests that "PushNodePathToClient" sends all missing events in path. -TEST_F(DomAgentTests, PushPathToUnknownNode) { - RefPtr<Element> div1 = document_->createElement("DIV", ec_); - RefPtr<Element> div2 = document_->createElement("DIV", ec_); - RefPtr<Element> div3 = document_->createElement("DIV", ec_); - RefPtr<Element> div4 = document_->createElement("DIV", ec_); - body_->appendChild(div1, ec_); - div1->appendChild(div2, ec_); - div2->appendChild(div3, ec_); - div3->appendChild(div4, ec_); - - dom_agent_->GetDocumentElement(); - dom_agent_->GetChildNodes(kCallId2, kHtmlElemId); - mock_delegate_->Reset(); - - OwnPtr<Value> v1(DevToolsRpc::ParseMessage("[[4,1,\"DIV\",\"\",[],1]]")); - OwnPtr<Value> v2(DevToolsRpc::ParseMessage("[[5,1,\"DIV\",\"\",[],1]]")); - OwnPtr<Value> v3(DevToolsRpc::ParseMessage("[[6,1,\"DIV\",\"\",[],1]]")); - OwnPtr<Value> v4(DevToolsRpc::ParseMessage("[[7,1,\"DIV\",\"\",[],0]]")); - mock_delegate_->SetChildNodes(kBodyElemId, *v1.get()); - mock_delegate_->SetChildNodes(4, *v2.get()); - mock_delegate_->SetChildNodes(5, *v3.get()); - mock_delegate_->SetChildNodes(6, *v4.get()); - mock_delegate_->Replay(); - - int id = dom_agent_->PushNodePathToClient(div4.get()); - mock_delegate_->Verify(); - EXPECT_EQ(7, id); -} - -// Tests that "GetChildNodes" crosses frame owner boundaries. -TEST_F(DomAgentTests, GetChildNodesOfFrameOwner) { - RefPtr<Element> iframe = document_->createElement("IFRAME", ec_); - body_->appendChild(iframe, ec_); - - dom_agent_->GetDocumentElement(); - dom_agent_->GetChildNodes(kCallId2, kHtmlElemId); - dom_agent_->GetChildNodes(kCallId3, kBodyElemId); - mock_delegate_->Reset(); - - // Expecting HTML child with two (head, body) children. - OwnPtr<Value> v(DevToolsRpc::ParseMessage("[[5,1,\"HTML\",\"\",[],2]]")); - mock_delegate_->SetChildNodes(4, *v.get()); - mock_delegate_->DidGetChildNodes(kCallId4); - mock_delegate_->Replay(); - - dom_agent_->GetChildNodes(kCallId4, 4); - mock_delegate_->Verify(); -} - -// Tests that "PushNodePathToClient" crosses frame owner boundaries. -TEST_F(DomAgentTests, SendPathToNodeOverFrameOwner) { - RefPtr<Element> iframe = document_->createElement("IFRAME", ec_); - body_->appendChild(iframe, ec_); - HTMLFrameOwnerElement* frame_owner = - static_cast<HTMLFrameOwnerElement*>(iframe.get()); - Node* inner_body = frame_owner->contentDocument()->firstChild()-> - firstChild(); - - dom_agent_->GetDocumentElement(); - dom_agent_->GetChildNodes(kCallId2, kHtmlElemId); - mock_delegate_->Reset(); - - OwnPtr<Value> v1(DevToolsRpc::ParseMessage("[[4,1,\"IFRAME\",\"\",[],1]]")); - OwnPtr<Value> v2(DevToolsRpc::ParseMessage("[[5,1,\"HTML\",\"\",[],2]]")); - OwnPtr<Value> v3(DevToolsRpc::ParseMessage( - "[[6,1,\"HEAD\",\"\",[],0],[7,1,\"BODY\",\"\",[],0]]")); - mock_delegate_->SetChildNodes(3, *v1.get()); - mock_delegate_->SetChildNodes(4, *v2.get()); - mock_delegate_->SetChildNodes(5, *v3.get()); - mock_delegate_->Replay(); - - dom_agent_->PushNodePathToClient(inner_body); - mock_delegate_->Verify(); -} - -// Tests that "child node inserted" event is being fired. -TEST_F(DomAgentTests, ChildNodeInsertUnderFrameOwner) { - RefPtr<Element> iframe = document_->createElement("IFRAME", ec_); - body_->appendChild(iframe, ec_); - HTMLFrameOwnerElement* frame_owner = - static_cast<HTMLFrameOwnerElement*>(iframe.get()); - Node* inner_body = frame_owner->contentDocument()->firstChild()-> - firstChild()->nextSibling(); - - dom_agent_->GetDocumentElement(); - dom_agent_->GetChildNodes(kCallIdAny, kHtmlElemId); - dom_agent_->GetChildNodes(kCallIdAny, kBodyElemId); - dom_agent_->GetChildNodes(kCallIdAny, 4); // IFrame children - dom_agent_->GetChildNodes(kCallIdAny, 5); // IFrame html's children - dom_agent_->GetChildNodes(kCallIdAny, 7); // IFrame body's children - mock_delegate_->Reset(); - - // There should be an event fired in case parent node is known to client, - // Since children were already requested, event should have all the - // new child data. - OwnPtr<Value> v(DevToolsRpc::ParseMessage("[8,1,\"DIV\",\"\",[],0]")); - mock_delegate_->ChildNodeInserted(7, 0, *v.get()); - mock_delegate_->Replay(); - - RefPtr<Element> new_div = document_->createElement("DIV", ec_); - inner_body->appendChild(new_div.get(), ec_, false); - mock_delegate_->Verify(); -} - -} // namespace |