1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
8 #include "base/json/json_reader.h"
9 #include "base/values.h"
10 #include "chrome/test/chromedriver/chrome/dom_tracker.h"
11 #include "chrome/test/chromedriver/chrome/status.h"
12 #include "chrome/test/chromedriver/chrome/stub_devtools_client.h"
13 #include "testing/gtest/include/gtest/gtest.h"
17 class FakeDevToolsClient : public StubDevToolsClient {
19 FakeDevToolsClient() {}
20 ~FakeDevToolsClient() override {}
22 std::string PopSentCommand() {
24 if (!sent_command_queue_.empty()) {
25 command = sent_command_queue_.front();
26 sent_command_queue_.pop_front();
31 // Overridden from DevToolsClient:
32 Status SendCommand(const std::string& method,
33 const base::DictionaryValue& params) override {
34 sent_command_queue_.push_back(method);
37 Status SendCommandAndGetResult(
38 const std::string& method,
39 const base::DictionaryValue& params,
40 scoped_ptr<base::DictionaryValue>* result) override {
41 return SendCommand(method, params);
45 std::list<std::string> sent_command_queue_;
50 TEST(DomTracker, GetFrameIdForNode) {
51 FakeDevToolsClient client;
52 DomTracker tracker(&client);
54 ASSERT_TRUE(tracker.GetFrameIdForNode(101, &frame_id).IsError());
55 ASSERT_TRUE(frame_id.empty());
58 "[{\"nodeId\":100,\"children\":"
60 " {\"nodeId\":102,\"frameId\":\"f\"}]"
62 base::DictionaryValue params;
63 params.Set("nodes", base::JSONReader::Read(nodes));
64 ASSERT_EQ(kOk, tracker.OnEvent(&client, "DOM.setChildNodes", params).code());
65 ASSERT_TRUE(tracker.GetFrameIdForNode(101, &frame_id).IsError());
66 ASSERT_TRUE(frame_id.empty());
67 ASSERT_TRUE(tracker.GetFrameIdForNode(102, &frame_id).IsOk());
68 ASSERT_STREQ("f", frame_id.c_str());
71 tracker.OnEvent(&client, "DOM.documentUpdated", params).code());
72 ASSERT_TRUE(tracker.GetFrameIdForNode(102, &frame_id).IsError());
73 ASSERT_STREQ("DOM.getDocument", client.PopSentCommand().c_str());
76 TEST(DomTracker, ChildNodeInserted) {
77 FakeDevToolsClient client;
78 DomTracker tracker(&client);
81 base::DictionaryValue params;
82 params.Set("node", base::JSONReader::Read("{\"nodeId\":1}"));
84 tracker.OnEvent(&client, "DOM.childNodeInserted", params).code());
85 ASSERT_TRUE(tracker.GetFrameIdForNode(1, &frame_id).IsError());
86 ASSERT_TRUE(frame_id.empty());
89 params.Set("node", base::JSONReader::Read(
90 "{\"nodeId\":2,\"frameId\":\"f\"}"));
92 tracker.OnEvent(&client, "DOM.childNodeInserted", params).code());
93 ASSERT_TRUE(tracker.GetFrameIdForNode(2, &frame_id).IsOk());
94 ASSERT_STREQ("f", frame_id.c_str());