OLD | NEW |
| (Empty) |
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. | |
4 | |
5 #include <string> | |
6 | |
7 #include "base/callback.h" | |
8 #include "base/memory/scoped_ptr.h" | |
9 #include "base/values.h" | |
10 #include "chrome/test/chromedriver/javascript_dialog_manager.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 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, "").code()); | |
23 } | |
24 | |
25 namespace { | |
26 | |
27 class RecorderDevToolsClient : public StubDevToolsClient { | |
28 public: | |
29 RecorderDevToolsClient() {} | |
30 virtual ~RecorderDevToolsClient() {} | |
31 | |
32 // Overridden from StubDevToolsClient: | |
33 virtual Status SendCommandAndGetResult( | |
34 const std::string& method, | |
35 const base::DictionaryValue& params, | |
36 scoped_ptr<base::DictionaryValue>* result) OVERRIDE { | |
37 method_ = method; | |
38 params_.Clear(); | |
39 params_.MergeDictionary(¶ms); | |
40 return Status(kOk); | |
41 } | |
42 | |
43 std::string method_; | |
44 base::DictionaryValue params_; | |
45 }; | |
46 | |
47 } // namespace | |
48 | |
49 TEST(JavaScriptDialogManager, HandleDialogPassesParams) { | |
50 RecorderDevToolsClient client; | |
51 JavaScriptDialogManager manager(&client); | |
52 base::DictionaryValue params; | |
53 params.SetString("message", "hi"); | |
54 manager.OnEvent("Page.javascriptDialogOpening", params); | |
55 ASSERT_EQ(kOk, manager.HandleDialog(false, "text").code()); | |
56 std::string text; | |
57 client.params_.GetString("promptText", &text); | |
58 ASSERT_EQ("text", text); | |
59 ASSERT_TRUE(client.params_.HasKey("accept")); | |
60 } | |
61 | |
62 TEST(JavaScriptDialogManager, ReconnectClearsStateAndSendsEnable) { | |
63 RecorderDevToolsClient client; | |
64 JavaScriptDialogManager manager(&client); | |
65 base::DictionaryValue params; | |
66 params.SetString("message", "hi"); | |
67 manager.OnEvent("Page.javascriptDialogOpening", params); | |
68 ASSERT_TRUE(manager.IsDialogOpen()); | |
69 std::string message; | |
70 ASSERT_EQ(kOk, manager.GetDialogMessage(&message).code()); | |
71 | |
72 ASSERT_TRUE(manager.OnConnected().IsOk()); | |
73 ASSERT_EQ("Page.enable", client.method_); | |
74 ASSERT_FALSE(manager.IsDialogOpen()); | |
75 ASSERT_EQ(kNoAlertOpen, manager.GetDialogMessage(&message).code()); | |
76 ASSERT_EQ(kNoAlertOpen, manager.HandleDialog(false, "").code()); | |
77 } | |
78 | |
79 namespace { | |
80 | |
81 class FakeDevToolsClient : public StubDevToolsClient { | |
82 public: | |
83 FakeDevToolsClient() : listener_(NULL), closing_count_(0) {} | |
84 virtual ~FakeDevToolsClient() {} | |
85 | |
86 void set_closing_count(int closing_count) { | |
87 closing_count_ = closing_count; | |
88 } | |
89 | |
90 // Overridden from StubDevToolsClient: | |
91 virtual Status SendCommandAndGetResult( | |
92 const std::string& method, | |
93 const base::DictionaryValue& params, | |
94 scoped_ptr<base::DictionaryValue>* result) OVERRIDE { | |
95 while (closing_count_ > 0) { | |
96 base::DictionaryValue empty; | |
97 listener_->OnEvent("Page.javascriptDialogClosing", empty); | |
98 closing_count_--; | |
99 } | |
100 return Status(kOk); | |
101 } | |
102 virtual void AddListener(DevToolsEventListener* listener) OVERRIDE { | |
103 listener_ = listener; | |
104 } | |
105 | |
106 private: | |
107 DevToolsEventListener* listener_; | |
108 int closing_count_; | |
109 }; | |
110 | |
111 } // namespace | |
112 | |
113 TEST(JavaScriptDialogManager, OneDialog) { | |
114 FakeDevToolsClient client; | |
115 JavaScriptDialogManager manager(&client); | |
116 base::DictionaryValue params; | |
117 params.SetString("message", "hi"); | |
118 ASSERT_FALSE(manager.IsDialogOpen()); | |
119 std::string message; | |
120 ASSERT_EQ(kNoAlertOpen, manager.GetDialogMessage(&message).code()); | |
121 | |
122 manager.OnEvent("Page.javascriptDialogOpening", params); | |
123 ASSERT_TRUE(manager.IsDialogOpen()); | |
124 ASSERT_EQ(kOk, manager.GetDialogMessage(&message).code()); | |
125 ASSERT_EQ("hi", message); | |
126 | |
127 client.set_closing_count(1); | |
128 ASSERT_EQ(kOk, manager.HandleDialog(false, "").code()); | |
129 ASSERT_FALSE(manager.IsDialogOpen()); | |
130 ASSERT_EQ(kNoAlertOpen, manager.GetDialogMessage(&message).code()); | |
131 ASSERT_EQ(kNoAlertOpen, manager.HandleDialog(false, "").code()); | |
132 } | |
133 | |
134 TEST(JavaScriptDialogManager, TwoDialogs) { | |
135 FakeDevToolsClient client; | |
136 JavaScriptDialogManager manager(&client); | |
137 base::DictionaryValue params; | |
138 params.SetString("message", "1"); | |
139 manager.OnEvent("Page.javascriptDialogOpening", params); | |
140 params.SetString("message", "2"); | |
141 manager.OnEvent("Page.javascriptDialogOpening", params); | |
142 | |
143 std::string message; | |
144 ASSERT_EQ(kOk, manager.GetDialogMessage(&message).code()); | |
145 ASSERT_TRUE(manager.IsDialogOpen()); | |
146 ASSERT_EQ("1", message); | |
147 | |
148 ASSERT_EQ(kOk, manager.HandleDialog(false, "").code()); | |
149 ASSERT_TRUE(manager.IsDialogOpen()); | |
150 ASSERT_EQ(kOk, manager.GetDialogMessage(&message).code()); | |
151 ASSERT_EQ("2", message); | |
152 | |
153 client.set_closing_count(2); | |
154 ASSERT_EQ(kOk, manager.HandleDialog(false, "").code()); | |
155 ASSERT_FALSE(manager.IsDialogOpen()); | |
156 ASSERT_EQ(kNoAlertOpen, manager.GetDialogMessage(&message).code()); | |
157 ASSERT_EQ(kNoAlertOpen, manager.HandleDialog(false, "").code()); | |
158 } | |
159 | |
160 TEST(JavaScriptDialogManager, OneDialogManualClose) { | |
161 StubDevToolsClient client; | |
162 JavaScriptDialogManager manager(&client); | |
163 base::DictionaryValue params; | |
164 params.SetString("message", "hi"); | |
165 ASSERT_FALSE(manager.IsDialogOpen()); | |
166 std::string message; | |
167 ASSERT_EQ(kNoAlertOpen, manager.GetDialogMessage(&message).code()); | |
168 | |
169 manager.OnEvent("Page.javascriptDialogOpening", params); | |
170 ASSERT_TRUE(manager.IsDialogOpen()); | |
171 ASSERT_EQ(kOk, manager.GetDialogMessage(&message).code()); | |
172 ASSERT_EQ("hi", message); | |
173 | |
174 manager.OnEvent("Page.javascriptDialogClosing", params); | |
175 ASSERT_FALSE(manager.IsDialogOpen()); | |
176 ASSERT_EQ(kNoAlertOpen, manager.GetDialogMessage(&message).code()); | |
177 ASSERT_EQ(kNoAlertOpen, manager.HandleDialog(false, "").code()); | |
178 } | |
OLD | NEW |