Index: chrome/test/chromedriver/commands_unittest.cc |
diff --git a/chrome/test/chromedriver/commands_unittest.cc b/chrome/test/chromedriver/commands_unittest.cc |
index 5e7ea33b1f721503ad47ce5f08fef4ffc923be41..064fb95664d3989d71e0679b365150cd7e22e310 100644 |
--- a/chrome/test/chromedriver/commands_unittest.cc |
+++ b/chrome/test/chromedriver/commands_unittest.cc |
@@ -9,7 +9,10 @@ |
#include "base/compiler_specific.h" |
#include "base/files/file_path.h" |
#include "base/memory/scoped_ptr.h" |
+#include "base/message_loop/message_loop.h" |
+#include "base/run_loop.h" |
#include "base/synchronization/lock.h" |
+#include "base/threading/thread.h" |
#include "base/values.h" |
#include "chrome/test/chromedriver/chrome/status.h" |
#include "chrome/test/chromedriver/chrome/stub_chrome.h" |
@@ -17,18 +20,18 @@ |
#include "chrome/test/chromedriver/chrome/web_view.h" |
#include "chrome/test/chromedriver/commands.h" |
#include "chrome/test/chromedriver/element_commands.h" |
-#include "chrome/test/chromedriver/fake_session_accessor.h" |
+#include "chrome/test/chromedriver/session.h" |
#include "chrome/test/chromedriver/session_commands.h" |
#include "chrome/test/chromedriver/window_commands.h" |
#include "testing/gtest/include/gtest/gtest.h" |
#include "third_party/webdriver/atoms.h" |
-TEST(CommandsTest, GetStatus) { |
- base::DictionaryValue params; |
- scoped_ptr<base::Value> value; |
- std::string session_id; |
- ASSERT_EQ( |
- kOk, ExecuteGetStatus(params, std::string(), &value, &session_id).code()); |
+namespace { |
+ |
+void OnGetStatus(const Status& status, |
+ scoped_ptr<base::Value> value, |
+ const std::string& session_id) { |
+ ASSERT_EQ(kOk, status.code()); |
base::DictionaryValue* dict; |
ASSERT_TRUE(value->GetAsDictionary(&dict)); |
base::Value* unused; |
@@ -38,145 +41,188 @@ TEST(CommandsTest, GetStatus) { |
ASSERT_TRUE(dict->Get("build.version", &unused)); |
} |
+} // namespace |
+ |
+TEST(CommandsTest, GetStatus) { |
+ base::DictionaryValue params; |
+ ExecuteGetStatus(params, std::string(), base::Bind(&OnGetStatus)); |
+} |
+ |
namespace { |
-Status ExecuteStubQuit( |
+void ExecuteStubQuit( |
int* count, |
const base::DictionaryValue& params, |
const std::string& session_id, |
- scoped_ptr<base::Value>* value, |
- std::string* out_session_id) { |
+ const CommandCallback& callback) { |
if (*count == 0) { |
EXPECT_STREQ("id", session_id.c_str()); |
} else { |
EXPECT_STREQ("id2", session_id.c_str()); |
} |
(*count)++; |
- return Status(kOk); |
+ callback.Run(Status(kOk), scoped_ptr<base::Value>(), session_id); |
+} |
+ |
+void OnQuitAll(const Status& status, |
+ scoped_ptr<base::Value> value, |
+ const std::string& session_id) { |
+ ASSERT_EQ(kOk, status.code()); |
+ ASSERT_FALSE(value.get()); |
} |
} // namespace |
TEST(CommandsTest, QuitAll) { |
- SessionMap map; |
+ SessionThreadMap map; |
Session session("id"); |
Session session2("id2"); |
- map.Set(session.id, |
- scoped_refptr<SessionAccessor>(new FakeSessionAccessor(&session))); |
- map.Set(session2.id, |
- scoped_refptr<SessionAccessor>(new FakeSessionAccessor(&session2))); |
+ map[session.id] = make_linked_ptr(new base::Thread("1")); |
+ map[session2.id] = make_linked_ptr(new base::Thread("2")); |
int count = 0; |
Command cmd = base::Bind(&ExecuteStubQuit, &count); |
base::DictionaryValue params; |
- scoped_ptr<base::Value> value; |
- std::string session_id; |
- Status status = |
- ExecuteQuitAll(cmd, &map, params, std::string(), &value, &session_id); |
- ASSERT_EQ(kOk, status.code()); |
- ASSERT_FALSE(value.get()); |
+ base::MessageLoop loop; |
+ ExecuteQuitAll(cmd, &map, params, std::string(), base::Bind(&OnQuitAll)); |
ASSERT_EQ(2, count); |
} |
-TEST(CommandsTest, Quit) { |
- SessionMap map; |
- Session session("id", scoped_ptr<Chrome>(new StubChrome())); |
- scoped_refptr<FakeSessionAccessor> session_accessor( |
- new FakeSessionAccessor(&session)); |
- map.Set(session.id, session_accessor); |
+namespace { |
+ |
+Status ExecuteSimpleCommand( |
+ const std::string& expected_id, |
+ base::DictionaryValue* expected_params, |
+ base::Value* value, |
+ Session* session, |
+ const base::DictionaryValue& params, |
+ scoped_ptr<base::Value>* return_value) { |
+ EXPECT_EQ(expected_id, session->id); |
+ EXPECT_TRUE(expected_params->Equals(¶ms)); |
+ return_value->reset(value->DeepCopy()); |
+ session->quit = true; |
+ return Status(kOk); |
+} |
+ |
+void OnSimpleCommand(base::RunLoop* run_loop, |
+ const std::string& expected_session_id, |
+ base::Value* expected_value, |
+ const Status& status, |
+ scoped_ptr<base::Value> value, |
+ const std::string& session_id) { |
+ ASSERT_EQ(kOk, status.code()); |
+ ASSERT_TRUE(expected_value->Equals(value.get())); |
+ ASSERT_EQ(expected_session_id, session_id); |
+ run_loop->Quit(); |
+} |
+ |
+} // namespace |
+ |
+TEST(CommandsTest, ExecuteSessionCommand) { |
+ 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<base::Value> value; |
- std::string out_session_id; |
- ASSERT_EQ(kOk, |
- ExecuteQuit(false, &map, params, session.id, &value, |
- &out_session_id).code()); |
- ASSERT_FALSE(map.Has(session.id)); |
- ASSERT_TRUE(session_accessor->IsSessionDeleted()); |
- ASSERT_FALSE(value.get()); |
+ params.SetInteger("param", 5); |
+ base::FundamentalValue expected_value(6); |
+ SessionCommand cmd = base::Bind( |
+ &ExecuteSimpleCommand, id, ¶ms, &expected_value); |
+ |
+ base::MessageLoop loop; |
+ base::RunLoop run_loop; |
+ ExecuteSessionCommand( |
+ &map, |
+ cmd, |
+ false, |
+ params, |
+ id, |
+ base::Bind(&OnSimpleCommand, &run_loop, id, &expected_value)); |
+ run_loop.Run(); |
} |
namespace { |
-class DetachChrome : public StubChrome { |
- public: |
- DetachChrome() : quit_called(false) {} |
- virtual ~DetachChrome() {} |
- |
- bool IsQuitCalled() { |
- return quit_called; |
- } |
+Status ShouldNotBeCalled( |
+ Session* session, |
+ const base::DictionaryValue& params, |
+ scoped_ptr<base::Value>* value) { |
+ EXPECT_TRUE(false); |
+ return Status(kOk); |
+} |
- // Overridden from Chrome: |
- virtual Status Quit() OVERRIDE { |
- quit_called = true; |
- return Status(kOk); |
- } |
+void OnNoSuchSession(const Status& status, |
+ scoped_ptr<base::Value> value, |
+ const std::string& session_id) { |
+ EXPECT_EQ(kNoSuchSession, status.code()); |
+ EXPECT_FALSE(value.get()); |
+} |
- private: |
- bool quit_called; |
-}; |
+void OnNoSuchSessionIsOk(const Status& status, |
+ scoped_ptr<base::Value> value, |
+ const std::string& session_id) { |
+ EXPECT_EQ(kOk, status.code()); |
+ EXPECT_FALSE(value.get()); |
+} |
} // namespace |
-TEST(CommandsTest, QuitWhenDetach) { |
- SessionMap map; |
- DetachChrome* chrome = new DetachChrome(); |
- Session session("id", scoped_ptr<Chrome>(chrome)); |
- session.detach = true; |
- |
- scoped_refptr<FakeSessionAccessor> session_accessor( |
- new FakeSessionAccessor(&session)); |
+TEST(CommandsTest, ExecuteSessionCommandOnNoSuchSession) { |
+ SessionThreadMap map; |
base::DictionaryValue params; |
- scoped_ptr<base::Value> value; |
- std::string out_session_id; |
- |
- map.Set(session.id, session_accessor); |
- ASSERT_EQ(kOk, |
- ExecuteQuit(true, &map, params, session.id, &value, |
- &out_session_id).code()); |
- ASSERT_FALSE(map.Has(session.id)); |
- ASSERT_FALSE(value.get()); |
- ASSERT_FALSE(chrome->IsQuitCalled()); |
+ ExecuteSessionCommand(&map, |
+ base::Bind(&ShouldNotBeCalled), |
+ false, |
+ params, |
+ "session", |
+ base::Bind(&OnNoSuchSession)); |
+} |
- map.Set(session.id, session_accessor); |
- ASSERT_EQ(kOk, |
- ExecuteQuit(false, &map, params, session.id, &value, |
- &out_session_id).code()); |
- ASSERT_FALSE(map.Has(session.id)); |
- ASSERT_FALSE(value.get()); |
- ASSERT_TRUE(chrome->IsQuitCalled()); |
+TEST(CommandsTest, ExecuteSessionCommandOnNoSuchSessionWhenItExpectsOk) { |
+ SessionThreadMap map; |
+ base::DictionaryValue params; |
+ ExecuteSessionCommand(&map, |
+ base::Bind(&ShouldNotBeCalled), |
+ true, |
+ params, |
+ "session", |
+ base::Bind(&OnNoSuchSessionIsOk)); |
} |
namespace { |
-class FailsToQuitChrome : public StubChrome { |
- public: |
- FailsToQuitChrome() {} |
- virtual ~FailsToQuitChrome() {} |
- |
- // Overridden from Chrome: |
- virtual Status Quit() OVERRIDE { |
- return Status(kUnknownError); |
- } |
-}; |
+void OnNoSuchSessionAndQuit(base::RunLoop* run_loop, |
+ const Status& status, |
+ scoped_ptr<base::Value> value, |
+ const std::string& session_id) { |
+ run_loop->Quit(); |
+ EXPECT_EQ(kNoSuchSession, status.code()); |
+ EXPECT_FALSE(value.get()); |
+} |
} // namespace |
-TEST(CommandsTest, QuitFails) { |
- SessionMap map; |
- Session session("id", scoped_ptr<Chrome>(new FailsToQuitChrome())); |
- scoped_refptr<FakeSessionAccessor> session_accessor( |
- new FakeSessionAccessor(&session)); |
- map.Set(session.id, session_accessor); |
- base::DictionaryValue params; |
- scoped_ptr<base::Value> value; |
- std::string out_session_id; |
- ASSERT_EQ(kUnknownError, |
- ExecuteQuit(false, &map, params, session.id, &value, |
- &out_session_id).code()); |
- ASSERT_FALSE(map.Has(session.id)); |
- ASSERT_TRUE(session_accessor->IsSessionDeleted()); |
- ASSERT_FALSE(value.get()); |
+TEST(CommandsTest, ExecuteSessionCommandOnJustDeletedSession) { |
+ SessionThreadMap map; |
+ linked_ptr<base::Thread> thread(new base::Thread("1")); |
+ ASSERT_TRUE(thread->Start()); |
+ std::string id("id"); |
+ map[id] = thread; |
+ |
+ base::MessageLoop loop; |
+ base::RunLoop run_loop; |
+ ExecuteSessionCommand(&map, |
+ base::Bind(&ShouldNotBeCalled), |
+ false, |
+ base::DictionaryValue(), |
+ "session", |
+ base::Bind(&OnNoSuchSessionAndQuit, &run_loop)); |
+ run_loop.Run(); |
} |
namespace { |