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

Unified Diff: chrome/test/chromedriver/commands_unittest.cc

Issue 353063005: [ChromeDriver] Subscribe PerformanceLogger to CommandListener interface (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Removing unnecessary check in test Created 6 years, 5 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/test/chromedriver/commands.cc ('k') | chrome/test/chromedriver/logging.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/test/chromedriver/commands_unittest.cc
diff --git a/chrome/test/chromedriver/commands_unittest.cc b/chrome/test/chromedriver/commands_unittest.cc
index 44571863054bbd1a38e1ca25808019295033843a..c34f197fa0f4ce93b2dc9dd95ed6539add2b7d4e 100644
--- a/chrome/test/chromedriver/commands_unittest.cc
+++ b/chrome/test/chromedriver/commands_unittest.cc
@@ -18,6 +18,7 @@
#include "chrome/test/chromedriver/chrome/stub_chrome.h"
#include "chrome/test/chromedriver/chrome/stub_web_view.h"
#include "chrome/test/chromedriver/chrome/web_view.h"
+#include "chrome/test/chromedriver/command_listener_proxy.h"
#include "chrome/test/chromedriver/commands.h"
#include "chrome/test/chromedriver/element_commands.h"
#include "chrome/test/chromedriver/session.h"
@@ -546,3 +547,113 @@ TEST(CommandsTest, ErrorFindChildElement) {
ExecuteFindChildElements(
1, &session, &web_view, element_id, params, &result).code());
}
+
+namespace {
+
+class MockCommandListener : public CommandListener {
+ public:
+ MockCommandListener() : called_(false) {}
+ virtual ~MockCommandListener() {}
+
+ virtual Status BeforeCommand(const std::string& command_name) OVERRIDE {
+ called_ = true;
+ EXPECT_STREQ("cmd", command_name.c_str());
+ return Status(kOk);
+ }
+
+ void VerifyCalled() {
+ EXPECT_TRUE(called_);
+ }
+
+ void VerifyNotCalled() {
+ EXPECT_FALSE(called_);
+ }
+
+ private:
+ bool called_;
+};
+
+Status ExecuteAddListenerToSessionCommand(
+ CommandListener* listener,
+ Session* session,
+ const base::DictionaryValue& params,
+ scoped_ptr<base::Value>* return_value) {
+ session->command_listeners.push_back(listener);
+ return Status(kOk);
+}
+
+Status ExecuteQuitSessionCommand(
+ Session* session,
+ const base::DictionaryValue& params,
+ scoped_ptr<base::Value>* return_value) {
+ session->quit = true;
+ return Status(kOk);
+}
+
+void OnSessionCommand(
+ base::RunLoop* run_loop,
+ const Status& status,
+ scoped_ptr<base::Value> value,
+ const std::string& session_id) {
+ ASSERT_EQ(kOk, status.code());
+ run_loop->Quit();
+}
+
+} // namespace
+
+TEST(CommandsTest, SessionNotifiedOfCommand) {
+ SessionThreadMap map;
+ linked_ptr<base::Thread> thread(new base::Thread("1"));
+ ASSERT_TRUE(thread->Start());
+ std::string id("id");
+ thread->message_loop()->PostTask(
+ FROM_HERE,
+ base::Bind(&internal::CreateSessionOnSessionThreadForTesting, id));
+ map[id] = thread;
+
+ base::DictionaryValue params;
+ scoped_ptr<MockCommandListener> listener(new MockCommandListener());
+ CommandListenerProxy* proxy = new CommandListenerProxy(listener.get());
+ // We add |proxy| to the session instead of adding |listener| directly so that
+ // after the session is destroyed by ExecuteQuitSessionCommand, we can still
+ // verify the listener was called. The session owns and will destroy |proxy|.
+ SessionCommand cmd = base::Bind(
+ &ExecuteAddListenerToSessionCommand, proxy);
+ base::MessageLoop loop;
+ base::RunLoop run_loop_addlistener;
+
+ // |CommandListener|s are notified immediately before commands are run.
+ // Here, the command adds |listener| to the session, so |listener|
+ // should not be notified since it will not have been added yet.
+ ExecuteSessionCommand(
+ &map,
+ "cmd",
+ cmd,
+ false,
+ params,
+ id,
+ base::Bind(&OnSessionCommand,
+ &run_loop_addlistener));
+ run_loop_addlistener.Run();
+
+ listener->VerifyNotCalled();
+
+ base::RunLoop run_loop_testlistener;
+ cmd = base::Bind(
+ &ExecuteQuitSessionCommand);
+
+ // |listener| was added to |session| by ExecuteAddListenerToSessionCommand
+ // and should be notified before the next command, ExecuteQuitSessionCommand.
+ ExecuteSessionCommand(
+ &map,
+ "cmd",
+ cmd,
+ false,
+ params,
+ id,
+ base::Bind(&OnSessionCommand,
+ &run_loop_testlistener));
+ run_loop_testlistener.Run();
+
+ listener->VerifyCalled();
+}
« no previous file with comments | « chrome/test/chromedriver/commands.cc ('k') | chrome/test/chromedriver/logging.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698