1 // Copyright (c) 2013 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.
7 #include "base/callback.h"
8 #include "base/memory/scoped_ptr.h"
9 #include "base/values.h"
10 #include "chrome/test/chromedriver/chrome/javascript_dialog_manager.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"
15 TEST(JavaScriptDialogManager, NoDialog) {
16 StubDevToolsClient client;
17 JavaScriptDialogManager manager(&client);
18 std::string message("HI");
19 ASSERT_EQ(kNoAlertOpen, manager.GetDialogMessage(&message).code());
20 ASSERT_FALSE(manager.IsDialogOpen());
21 ASSERT_STREQ("HI", message.c_str());
22 ASSERT_EQ(kNoAlertOpen, manager.HandleDialog(false, NULL).code());
27 class RecorderDevToolsClient : public StubDevToolsClient {
29 RecorderDevToolsClient() {}
30 ~RecorderDevToolsClient() override {}
32 // Overridden from StubDevToolsClient:
33 Status SendCommandAndGetResult(
34 const std::string& method,
35 const base::DictionaryValue& params,
36 scoped_ptr<base::DictionaryValue>* result) override {
39 params_.MergeDictionary(¶ms);
44 base::DictionaryValue params_;
49 TEST(JavaScriptDialogManager, HandleDialogPassesParams) {
50 RecorderDevToolsClient client;
51 JavaScriptDialogManager manager(&client);
52 base::DictionaryValue params;
53 params.SetString("message", "hi");
56 manager.OnEvent(&client, "Page.javascriptDialogOpening", params).code());
57 std::string given_text("text");
58 ASSERT_EQ(kOk, manager.HandleDialog(false, &given_text).code());
60 client.params_.GetString("promptText", &text);
61 ASSERT_EQ(given_text, text);
62 ASSERT_TRUE(client.params_.HasKey("accept"));
65 TEST(JavaScriptDialogManager, HandleDialogNullPrompt) {
66 RecorderDevToolsClient client;
67 JavaScriptDialogManager manager(&client);
68 base::DictionaryValue params;
69 params.SetString("message", "hi");
72 manager.OnEvent(&client, "Page.javascriptDialogOpening", params).code());
73 ASSERT_EQ(kOk, manager.HandleDialog(false, NULL).code());
74 ASSERT_FALSE(client.params_.HasKey("promptText"));
75 ASSERT_TRUE(client.params_.HasKey("accept"));
78 TEST(JavaScriptDialogManager, ReconnectClearsStateAndSendsEnable) {
79 RecorderDevToolsClient client;
80 JavaScriptDialogManager manager(&client);
81 base::DictionaryValue params;
82 params.SetString("message", "hi");
85 manager.OnEvent(&client, "Page.javascriptDialogOpening", params).code());
86 ASSERT_TRUE(manager.IsDialogOpen());
88 ASSERT_EQ(kOk, manager.GetDialogMessage(&message).code());
90 ASSERT_TRUE(manager.OnConnected(&client).IsOk());
91 ASSERT_EQ("Page.enable", client.method_);
92 ASSERT_FALSE(manager.IsDialogOpen());
93 ASSERT_EQ(kNoAlertOpen, manager.GetDialogMessage(&message).code());
94 ASSERT_EQ(kNoAlertOpen, manager.HandleDialog(false, NULL).code());
99 class FakeDevToolsClient : public StubDevToolsClient {
101 FakeDevToolsClient() : listener_(NULL), closing_count_(0) {}
102 ~FakeDevToolsClient() override {}
104 void set_closing_count(int closing_count) {
105 closing_count_ = closing_count;
108 // Overridden from StubDevToolsClient:
109 Status SendCommandAndGetResult(
110 const std::string& method,
111 const base::DictionaryValue& params,
112 scoped_ptr<base::DictionaryValue>* result) override {
113 while (closing_count_ > 0) {
114 base::DictionaryValue empty;
116 listener_->OnEvent(this, "Page.javascriptDialogClosing", empty);
117 if (status.IsError())
123 void AddListener(DevToolsEventListener* listener) override {
124 listener_ = listener;
128 DevToolsEventListener* listener_;
134 TEST(JavaScriptDialogManager, OneDialog) {
135 FakeDevToolsClient client;
136 JavaScriptDialogManager manager(&client);
137 base::DictionaryValue params;
138 params.SetString("message", "hi");
139 ASSERT_FALSE(manager.IsDialogOpen());
141 ASSERT_EQ(kNoAlertOpen, manager.GetDialogMessage(&message).code());
145 manager.OnEvent(&client, "Page.javascriptDialogOpening", params).code());
146 ASSERT_TRUE(manager.IsDialogOpen());
147 ASSERT_EQ(kOk, manager.GetDialogMessage(&message).code());
148 ASSERT_EQ("hi", message);
150 client.set_closing_count(1);
151 ASSERT_EQ(kOk, manager.HandleDialog(false, NULL).code());
152 ASSERT_FALSE(manager.IsDialogOpen());
153 ASSERT_EQ(kNoAlertOpen, manager.GetDialogMessage(&message).code());
154 ASSERT_EQ(kNoAlertOpen, manager.HandleDialog(false, NULL).code());
157 TEST(JavaScriptDialogManager, TwoDialogs) {
158 FakeDevToolsClient client;
159 JavaScriptDialogManager manager(&client);
160 base::DictionaryValue params;
161 params.SetString("message", "1");
164 manager.OnEvent(&client, "Page.javascriptDialogOpening", params).code());
165 params.SetString("message", "2");
168 manager.OnEvent(&client, "Page.javascriptDialogOpening", params).code());
171 ASSERT_EQ(kOk, manager.GetDialogMessage(&message).code());
172 ASSERT_TRUE(manager.IsDialogOpen());
173 ASSERT_EQ("1", message);
175 ASSERT_EQ(kOk, manager.HandleDialog(false, NULL).code());
176 ASSERT_TRUE(manager.IsDialogOpen());
177 ASSERT_EQ(kOk, manager.GetDialogMessage(&message).code());
178 ASSERT_EQ("2", message);
180 client.set_closing_count(2);
181 ASSERT_EQ(kOk, manager.HandleDialog(false, NULL).code());
182 ASSERT_FALSE(manager.IsDialogOpen());
183 ASSERT_EQ(kNoAlertOpen, manager.GetDialogMessage(&message).code());
184 ASSERT_EQ(kNoAlertOpen, manager.HandleDialog(false, NULL).code());
187 TEST(JavaScriptDialogManager, OneDialogManualClose) {
188 StubDevToolsClient client;
189 JavaScriptDialogManager manager(&client);
190 base::DictionaryValue params;
191 params.SetString("message", "hi");
192 ASSERT_FALSE(manager.IsDialogOpen());
194 ASSERT_EQ(kNoAlertOpen, manager.GetDialogMessage(&message).code());
198 manager.OnEvent(&client, "Page.javascriptDialogOpening", params).code());
199 ASSERT_TRUE(manager.IsDialogOpen());
200 ASSERT_EQ(kOk, manager.GetDialogMessage(&message).code());
201 ASSERT_EQ("hi", message);
205 manager.OnEvent(&client, "Page.javascriptDialogClosing", params).code());
206 ASSERT_FALSE(manager.IsDialogOpen());
207 ASSERT_EQ(kNoAlertOpen, manager.GetDialogMessage(&message).code());
208 ASSERT_EQ(kNoAlertOpen, manager.HandleDialog(false, NULL).code());