| Index: chrome/test/chromedriver/session_commands_unittest.cc
|
| diff --git a/chrome/test/chromedriver/session_commands_unittest.cc b/chrome/test/chromedriver/session_commands_unittest.cc
|
| index 33a748b3fbbb19f3c5282835b056d40758c0c7c1..1b6ef7b42e813ad231fdfa927dfc584ec2ac848b 100644
|
| --- a/chrome/test/chromedriver/session_commands_unittest.cc
|
| +++ b/chrome/test/chromedriver/session_commands_unittest.cc
|
| @@ -8,114 +8,106 @@
|
| #include "base/callback.h"
|
| #include "base/file_util.h"
|
| #include "base/files/file_path.h"
|
| +#include "base/memory/linked_ptr.h"
|
| #include "base/memory/scoped_ptr.h"
|
| +#include "base/message_loop/message_loop.h"
|
| +#include "base/run_loop.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"
|
| -#include "chrome/test/chromedriver/fake_session_accessor.h"
|
| +#include "chrome/test/chromedriver/commands.h"
|
| #include "chrome/test/chromedriver/session.h"
|
| #include "chrome/test/chromedriver/session_commands.h"
|
| -#include "chrome/test/chromedriver/session_map.h"
|
| #include "testing/gtest/include/gtest/gtest.h"
|
|
|
| +TEST(SessionCommandTest, FileUpload) {
|
| + Session session("id");
|
| + base::DictionaryValue params;
|
| + scoped_ptr<base::Value> value;
|
| + // Zip file entry that contains a single file with contents 'COW\n', base64
|
| + // encoded following RFC 1521.
|
| + const char* kBase64ZipEntry =
|
| + "UEsDBBQAAAAAAMROi0K/wAzGBAAAAAQAAAADAAAAbW9vQ09XClBLAQIUAxQAAAAAAMROi0K/"
|
| + "wAzG\nBAAAAAQAAAADAAAAAAAAAAAAAACggQAAAABtb29QSwUGAAAAAAEAAQAxAAAAJQAAAA"
|
| + "AA\n";
|
| + params.SetString("file", kBase64ZipEntry);
|
| + Status status = ExecuteUploadFile(&session, params, &value);
|
| + ASSERT_EQ(kOk, status.code()) << status.message();
|
| + base::FilePath::StringType path;
|
| + ASSERT_TRUE(value->GetAsString(&path));
|
| + ASSERT_TRUE(base::PathExists(base::FilePath(path)));
|
| + std::string data;
|
| + ASSERT_TRUE(file_util::ReadFileToString(base::FilePath(path), &data));
|
| + ASSERT_STREQ("COW\n", data.c_str());
|
| +}
|
| +
|
| namespace {
|
|
|
| -Status ExecuteSimpleCommand(
|
| - Session* expected_session,
|
| - base::DictionaryValue* expected_params,
|
| - base::Value* value,
|
| - Session* session,
|
| - const base::DictionaryValue& params,
|
| - scoped_ptr<base::Value>* return_value) {
|
| - EXPECT_EQ(expected_session, session);
|
| - EXPECT_TRUE(expected_params->Equals(¶ms));
|
| - return_value->reset(value->DeepCopy());
|
| - return Status(kOk);
|
| -}
|
| +class DetachChrome : public StubChrome {
|
| + public:
|
| + DetachChrome() : quit_called_(false) {}
|
| + virtual ~DetachChrome() {}
|
| +
|
| + // Overridden from Chrome:
|
| + virtual Status Quit() OVERRIDE {
|
| + quit_called_ = true;
|
| + return Status(kOk);
|
| + }
|
| +
|
| + bool quit_called_;
|
| +};
|
|
|
| } // namespace
|
|
|
| -TEST(SessionCommandTest, SimpleCommand) {
|
| - SessionMap map;
|
| - Session session("session", scoped_ptr<Chrome>(new StubChrome()));
|
| - ASSERT_TRUE(session.thread.Start());
|
| - scoped_refptr<SessionAccessor> accessor(new FakeSessionAccessor(&session));
|
| - map.Set(session.id, accessor);
|
| +TEST(SessionCommandsTest, Quit) {
|
| + DetachChrome* chrome = new DetachChrome();
|
| + Session session("id", scoped_ptr<Chrome>(chrome));
|
|
|
| base::DictionaryValue params;
|
| - params.SetInteger("param", 5);
|
| - base::FundamentalValue expected_value(6);
|
| - SessionCommand cmd = base::Bind(
|
| - &ExecuteSimpleCommand, &session, ¶ms, &expected_value);
|
| -
|
| scoped_ptr<base::Value> value;
|
| - std::string session_id;
|
| - Status status = ExecuteSessionCommand(
|
| - &map, cmd, params,
|
| - session.id, &value, &session_id);
|
| - ASSERT_EQ(kOk, status.code());
|
| - ASSERT_TRUE(expected_value.Equals(value.get()));
|
| - ASSERT_STREQ(session.id.c_str(), session_id.c_str());
|
| -}
|
|
|
| -namespace {
|
| + ASSERT_EQ(kOk, ExecuteQuit(false, &session, params, &value).code());
|
| + ASSERT_TRUE(chrome->quit_called_);
|
|
|
| -Status ShouldNotBeCalled(
|
| - Session* session,
|
| - const base::DictionaryValue& params,
|
| - scoped_ptr<base::Value>* value) {
|
| - EXPECT_TRUE(false);
|
| - return Status(kOk);
|
| + chrome->quit_called_ = false;
|
| + ASSERT_EQ(kOk, ExecuteQuit(true, &session, params, &value).code());
|
| + ASSERT_TRUE(chrome->quit_called_);
|
| }
|
|
|
| -} // namespace
|
| +TEST(SessionCommandsTest, QuitWithDetach) {
|
| + DetachChrome* chrome = new DetachChrome();
|
| + Session session("id", scoped_ptr<Chrome>(chrome));
|
| + session.detach = true;
|
|
|
| -TEST(SessionCommandTest, NoSuchSession) {
|
| - SessionMap map;
|
| base::DictionaryValue params;
|
| scoped_ptr<base::Value> value;
|
| - std::string session_id;
|
| - Status status = ExecuteSessionCommand(
|
| - &map, base::Bind(&ShouldNotBeCalled), params,
|
| - "session", &value, &session_id);
|
| - ASSERT_EQ(kNoSuchSession, status.code());
|
| - ASSERT_FALSE(value.get());
|
| - ASSERT_STREQ("session", session_id.c_str());
|
| -}
|
|
|
| -TEST(SessionCommandTest, SessionDeletedWhileWaiting) {
|
| - SessionMap map;
|
| - scoped_refptr<SessionAccessor> accessor(new FakeSessionAccessor(NULL));
|
| - map.Set("session", accessor);
|
| + ASSERT_EQ(kOk, ExecuteQuit(true, &session, params, &value).code());
|
| + ASSERT_FALSE(chrome->quit_called_);
|
|
|
| - base::DictionaryValue params;
|
| - scoped_ptr<base::Value> value;
|
| - std::string session_id;
|
| - Status status = ExecuteSessionCommand(
|
| - &map, base::Bind(&ShouldNotBeCalled), params,
|
| - "session", &value, &session_id);
|
| - ASSERT_EQ(kNoSuchSession, status.code());
|
| - ASSERT_FALSE(value.get());
|
| - ASSERT_STREQ("session", session_id.c_str());
|
| + ASSERT_EQ(kOk, ExecuteQuit(false, &session, params, &value).code());
|
| + ASSERT_TRUE(chrome->quit_called_);
|
| }
|
|
|
| -TEST(SessionCommandTest, FileUpload) {
|
| - Session session("id");
|
| +namespace {
|
| +
|
| +class FailsToQuitChrome : public StubChrome {
|
| + public:
|
| + FailsToQuitChrome() {}
|
| + virtual ~FailsToQuitChrome() {}
|
| +
|
| + // Overridden from Chrome:
|
| + virtual Status Quit() OVERRIDE {
|
| + return Status(kUnknownError);
|
| + }
|
| +};
|
| +
|
| +} // namespace
|
| +
|
| +TEST(SessionCommandsTest, QuitFails) {
|
| + Session session("id", scoped_ptr<Chrome>(new FailsToQuitChrome()));
|
| base::DictionaryValue params;
|
| scoped_ptr<base::Value> value;
|
| - // Zip file entry that contains a single file with contents 'COW\n', base64
|
| - // encoded following RFC 1521.
|
| - const char* kBase64ZipEntry =
|
| - "UEsDBBQAAAAAAMROi0K/wAzGBAAAAAQAAAADAAAAbW9vQ09XClBLAQIUAxQAAAAAAMROi0K/"
|
| - "wAzG\nBAAAAAQAAAADAAAAAAAAAAAAAACggQAAAABtb29QSwUGAAAAAAEAAQAxAAAAJQAAAA"
|
| - "AA\n";
|
| - params.SetString("file", kBase64ZipEntry);
|
| - Status status = ExecuteUploadFile(&session, params, &value);
|
| - ASSERT_EQ(kOk, status.code()) << status.message();
|
| - base::FilePath::StringType path;
|
| - ASSERT_TRUE(value->GetAsString(&path));
|
| - ASSERT_TRUE(base::PathExists(base::FilePath(path)));
|
| - std::string data;
|
| - ASSERT_TRUE(file_util::ReadFileToString(base::FilePath(path), &data));
|
| - ASSERT_STREQ("COW\n", data.c_str());
|
| + ASSERT_EQ(kUnknownError, ExecuteQuit(false, &session, params, &value).code());
|
| }
|
|
|