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

Side by Side Diff: chrome/test/chromedriver/navigation_tracker_unittest.cc

Issue 12848005: [chromedriver] Separate stuff of chrome from chromedriver. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Address comments and fix compile error on mac. Created 7 years, 9 months 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
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.
4
5 #include <string>
6
7 #include "base/compiler_specific.h"
8 #include "base/json/json_reader.h"
9 #include "base/values.h"
10 #include "chrome/test/chromedriver/navigation_tracker.h"
11 #include "chrome/test/chromedriver/status.h"
12 #include "chrome/test/chromedriver/stub_devtools_client.h"
13 #include "testing/gtest/include/gtest/gtest.h"
14
15 namespace {
16
17 void AssertPendingState(NavigationTracker* tracker,
18 const std::string& frame_id,
19 bool expected_is_pending) {
20 bool is_pending = !expected_is_pending;
21 ASSERT_EQ(kOk, tracker->IsPendingNavigation(frame_id, &is_pending).code());
22 ASSERT_EQ(expected_is_pending, is_pending);
23 }
24
25 } // namespace
26
27 TEST(NavigationTracker, FrameLoadStartStop) {
28 StubDevToolsClient client;
29 NavigationTracker tracker(&client);
30
31 base::DictionaryValue params;
32 tracker.OnEvent("Page.frameStartedLoading", params);
33 ASSERT_NO_FATAL_FAILURE(AssertPendingState(&tracker, "f", true));
34 tracker.OnEvent("Page.frameStoppedLoading", params);
35 ASSERT_NO_FATAL_FAILURE(AssertPendingState(&tracker, "f", false));
36 }
37
38 TEST(NavigationTracker, NavigationScheduledThenLoaded) {
39 StubDevToolsClient client;
40 NavigationTracker tracker(&client, NavigationTracker::kNotLoading);
41 base::DictionaryValue params;
42 params.SetString("frameId", "f");
43 base::DictionaryValue params_scheduled;
44 params_scheduled.SetInteger("delay", 0);
45 params_scheduled.SetString("frameId", "f");
46
47 tracker.OnEvent("Page.frameScheduledNavigation", params_scheduled);
48 ASSERT_NO_FATAL_FAILURE(AssertPendingState(&tracker, "f", true));
49 tracker.OnEvent("Page.frameStartedLoading", params);
50 ASSERT_NO_FATAL_FAILURE(AssertPendingState(&tracker, "f", true));
51 tracker.OnEvent("Page.frameClearedScheduledNavigation", params);
52 ASSERT_NO_FATAL_FAILURE(AssertPendingState(&tracker, "f", true));
53 tracker.OnEvent("Page.frameStoppedLoading", params);
54 ASSERT_NO_FATAL_FAILURE(AssertPendingState(&tracker, "f", false));
55 }
56
57 TEST(NavigationTracker, NavigationScheduledForOtherFrame) {
58 StubDevToolsClient client;
59 NavigationTracker tracker(&client, NavigationTracker::kNotLoading);
60 base::DictionaryValue params_scheduled;
61 params_scheduled.SetInteger("delay", 0);
62 params_scheduled.SetString("frameId", "other");
63
64 tracker.OnEvent("Page.frameScheduledNavigation", params_scheduled);
65 ASSERT_NO_FATAL_FAILURE(AssertPendingState(&tracker, "f", false));
66 }
67
68 TEST(NavigationTracker, NavigationScheduledThenCancelled) {
69 StubDevToolsClient client;
70 NavigationTracker tracker(&client, NavigationTracker::kNotLoading);
71 base::DictionaryValue params;
72 params.SetString("frameId", "f");
73 base::DictionaryValue params_scheduled;
74 params_scheduled.SetInteger("delay", 0);
75 params_scheduled.SetString("frameId", "f");
76
77 tracker.OnEvent("Page.frameScheduledNavigation", params_scheduled);
78 ASSERT_NO_FATAL_FAILURE(AssertPendingState(&tracker, "f", true));
79 tracker.OnEvent("Page.frameClearedScheduledNavigation", params);
80 ASSERT_NO_FATAL_FAILURE(AssertPendingState(&tracker, "f", false));
81 }
82
83 TEST(NavigationTracker, NavigationScheduledTooFarAway) {
84 StubDevToolsClient client;
85 NavigationTracker tracker(&client, NavigationTracker::kNotLoading);
86
87 base::DictionaryValue params_scheduled;
88 params_scheduled.SetInteger("delay", 10);
89 params_scheduled.SetString("frameId", "f");
90 tracker.OnEvent("Page.frameScheduledNavigation", params_scheduled);
91 ASSERT_NO_FATAL_FAILURE(AssertPendingState(&tracker, "f", false));
92 }
93
94 TEST(NavigationTracker, DiscardScheduledNavigationsOnMainFrameCommit) {
95 StubDevToolsClient client;
96 NavigationTracker tracker(&client, NavigationTracker::kNotLoading);
97
98 base::DictionaryValue params_scheduled;
99 params_scheduled.SetString("frameId", "subframe");
100 params_scheduled.SetInteger("delay", 0);
101 tracker.OnEvent("Page.frameScheduledNavigation", params_scheduled);
102 ASSERT_NO_FATAL_FAILURE(AssertPendingState(&tracker, "subframe", true));
103
104 base::DictionaryValue params_navigated;
105 params_navigated.SetString("frame.parentId", "something");
106 tracker.OnEvent("Page.frameNavigated", params_navigated);
107 ASSERT_NO_FATAL_FAILURE(AssertPendingState(&tracker, "subframe", true));
108 params_navigated.Clear();
109 tracker.OnEvent("Page.frameNavigated", params_navigated);
110 ASSERT_NO_FATAL_FAILURE(AssertPendingState(&tracker, "subframe", false));
111 }
112
113 namespace {
114
115 class FailToEvalScriptDevToolsClient : public StubDevToolsClient {
116 public:
117 virtual ~FailToEvalScriptDevToolsClient() {}
118
119 virtual Status SendCommandAndGetResult(
120 const std::string& method,
121 const base::DictionaryValue& params,
122 scoped_ptr<base::DictionaryValue>* result) OVERRIDE {
123 EXPECT_STREQ("Runtime.evaluate", method.c_str());
124 return Status(kUnknownError, "failed to eval script");
125 }
126 };
127
128 } // namespace
129
130 TEST(NavigationTracker, UnknownStateFailsToDetermineState) {
131 FailToEvalScriptDevToolsClient client;
132 NavigationTracker tracker(&client);
133 bool is_pending;
134 ASSERT_EQ(kUnknownError,
135 tracker.IsPendingNavigation("f", &is_pending).code());
136 }
137
138 namespace {
139
140 class DeterminingLoadStateDevToolsClient : public StubDevToolsClient {
141 public:
142 DeterminingLoadStateDevToolsClient(
143 bool is_loading,
144 const std::string& send_event_first,
145 base::DictionaryValue* send_event_first_params)
146 : is_loading_(is_loading),
147 send_event_first_(send_event_first),
148 send_event_first_params_(send_event_first_params) {}
149
150 virtual ~DeterminingLoadStateDevToolsClient() {}
151
152 virtual Status SendCommandAndGetResult(
153 const std::string& method,
154 const base::DictionaryValue& params,
155 scoped_ptr<base::DictionaryValue>* result) OVERRIDE {
156 if (send_event_first_.length()) {
157 listeners_.front()->OnEvent(send_event_first_, *send_event_first_params_);
158 }
159
160 base::DictionaryValue result_dict;
161 result_dict.SetBoolean("result.value", is_loading_);
162 result->reset(result_dict.DeepCopy());
163 return Status(kOk);
164 }
165
166 private:
167 bool is_loading_;
168 std::string send_event_first_;
169 base::DictionaryValue* send_event_first_params_;
170 };
171
172 } // namespace
173
174 TEST(NavigationTracker, UnknownStateForcesStart) {
175 base::DictionaryValue params;
176 DeterminingLoadStateDevToolsClient client(true, "", &params);
177 NavigationTracker tracker(&client);
178 ASSERT_NO_FATAL_FAILURE(AssertPendingState(&tracker, "f", true));
179 }
180
181 TEST(NavigationTracker, UnknownStateForcesStartReceivesStop) {
182 base::DictionaryValue params;
183 DeterminingLoadStateDevToolsClient client(
184 true, "Page.frameStoppedLoading", &params);
185 NavigationTracker tracker(&client);
186 ASSERT_NO_FATAL_FAILURE(AssertPendingState(&tracker, "f", false));
187 }
OLDNEW
« no previous file with comments | « chrome/test/chromedriver/navigation_tracker.cc ('k') | chrome/test/chromedriver/preferences.txt » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698