Index: chrome/browser/chromeos/extensions/file_manager/file_manager_browsertest.cc |
diff --git a/chrome/browser/chromeos/extensions/file_manager/file_manager_browsertest.cc b/chrome/browser/chromeos/extensions/file_manager/file_manager_browsertest.cc |
index 4e12086996c076ec21e4d14aa5ae24820f01ba47..827743231fd5fceb2ea06bdf2baa3177607c7175 100644 |
--- a/chrome/browser/chromeos/extensions/file_manager/file_manager_browsertest.cc |
+++ b/chrome/browser/chromeos/extensions/file_manager/file_manager_browsertest.cc |
@@ -19,10 +19,15 @@ |
#include "base/threading/platform_thread.h" |
#include "base/time.h" |
#include "base/utf_string_conversions.h" |
+#include "chrome/browser/chromeos/drive/drive_file_system.h" |
+#include "chrome/browser/chromeos/drive/drive_system_service.h" |
#include "chrome/browser/extensions/component_loader.h" |
#include "chrome/browser/extensions/extension_apitest.h" |
#include "chrome/browser/extensions/extension_service.h" |
#include "chrome/browser/extensions/extension_test_message_listener.h" |
+#include "chrome/browser/google_apis/fake_drive_service.h" |
+#include "chrome/browser/google_apis/gdata_wapi_parser.h" |
+#include "chrome/browser/google_apis/test_util.h" |
#include "chrome/browser/profiles/profile.h" |
#include "chrome/browser/ui/browser_window.h" |
#include "chrome/browser/ui/tabs/tab_strip_model.h" |
@@ -43,6 +48,26 @@ const char kKeyboardTestFileName[] = "world.mpeg"; |
const int64 kKeyboardTestFileSize = 1000; |
const char kKeyboardTestFileCopyName[] = "world (1).mpeg"; |
+struct TestFileInfo { |
+ const char* base_name; |
+ int64 file_size; |
+ const char* last_modified_time_as_string; |
+} kTestFiles[] = { |
+ { "hello.txt", 123, "4 Sep 1998 12:34:56" }, |
+ { "My Desktop Background.png", 1024, "18 Jan 2038 01:02:03" }, |
+ { kKeyboardTestFileName, kKeyboardTestFileSize, "4 July 2012 10:35:00" }, |
+}; |
+ |
+struct TestDirectoryInfo { |
+ const char* base_name; |
+ const char* last_modified_time_as_string; |
+} kTestDirectories[] = { |
+ { "photos", "1 Jan 1980 23:59:59" }, |
+ // Files starting with . are filtered out in |
+ // file_manager/js/directory_contents.js, so this should not be shown. |
+ { ".warez", "26 Oct 1985 13:39" }, |
+}; |
+ |
// The base test class. Used by FileManagerBrowserLocalTest and |
// FileManagerBrowserDriveTest. |
// TODO(satorux): Add the latter: crbug.com/224534. |
@@ -56,6 +81,22 @@ class FileManagerBrowserTestBase : public ExtensionApiTest { |
// Loads our testing extension and sends it a string identifying the current |
// test. |
void StartTest(const std::string& test_name); |
+ |
+ // Creates test files and directories. |
+ void CreateTestFilesAndDirectories(); |
+ |
+ // Creates a file with the given |name|, |length|, and |modification_time|. |
+ virtual void CreateTestFile(const std::string& name, |
+ int64 length, |
+ const std::string& modification_time) = 0; |
+ |
+ // Creates an empty directory with the given |name| and |modification_time|. |
+ virtual void CreateTestDirectory( |
+ const std::string& name, |
+ const std::string& modification_time) = 0; |
+ |
+ // Runs the file display test, shared by sub classes. |
+ void DoTestFileDisplay(); |
}; |
void FileManagerBrowserTestBase::StartFileManager( |
@@ -83,6 +124,31 @@ void FileManagerBrowserTestBase::StartTest(const std::string& test_name) { |
listener.Reply(test_name); |
} |
+void FileManagerBrowserTestBase::CreateTestFilesAndDirectories() { |
+ for (size_t i = 0; i < arraysize(kTestFiles); ++i) { |
+ CreateTestFile(kTestFiles[i].base_name, |
+ kTestFiles[i].file_size, |
+ kTestFiles[i].last_modified_time_as_string); |
+ } |
+ for (size_t i = 0; i < arraysize(kTestDirectories); ++i) { |
+ CreateTestDirectory(kTestDirectories[i].base_name, |
+ kTestDirectories[i].last_modified_time_as_string); |
+ } |
+} |
+ |
+void FileManagerBrowserTestBase::DoTestFileDisplay() { |
+ ResultCatcher catcher; |
+ |
+ StartTest("file display"); |
+ |
+ ExtensionTestMessageListener listener("initial check done", true); |
+ ASSERT_TRUE(listener.WaitUntilSatisfied()); |
+ CreateTestFile("newly added file.mp3", 2000, "4 Sep 1998 00:00:00"); |
+ listener.Reply("file added"); |
+ |
+ ASSERT_TRUE(catcher.GetNextResult()) << catcher.message(); |
+} |
+ |
// The boolean parameter, retrieved by GetParam(), is true if testing in the |
// guest mode. See SetUpCommandLine() below for details. |
class FileManagerBrowserLocalTest : public FileManagerBrowserTestBase, |
@@ -95,14 +161,7 @@ class FileManagerBrowserLocalTest : public FileManagerBrowserTestBase, |
downloads_path_ = tmp_dir_.path().Append("Downloads"); |
ASSERT_TRUE(file_util::CreateDirectory(downloads_path_)); |
- CreateTestFile("hello.txt", 123, "4 Sep 1998 12:34:56"); |
- CreateTestFile("My Desktop Background.png", 1024, "18 Jan 2038 01:02:03"); |
- CreateTestFile(kKeyboardTestFileName, kKeyboardTestFileSize, |
- "4 July 2012 10:35:00"); |
- CreateTestDirectory("photos", "1 Jan 1980 23:59:59"); |
- // Files starting with . are filtered out in |
- // file_manager/js/directory_contents.js, so this should not be shown. |
- CreateTestDirectory(".warez", "26 Oct 1985 13:39"); |
+ CreateTestFilesAndDirectories(); |
ExtensionApiTest::SetUp(); |
} |
@@ -117,14 +176,13 @@ class FileManagerBrowserLocalTest : public FileManagerBrowserTestBase, |
} |
protected: |
- // Creates a file with the given |name|, |length|, and |modification_time|. |
- void CreateTestFile(const std::string& name, |
- int length, |
- const std::string& modification_time); |
- |
- // Creates an empty directory with the given |name| and |modification_time|. |
- void CreateTestDirectory(const std::string& name, |
- const std::string& modification_time); |
+ // FileManagerBrowserTestBase overrides. |
+ virtual void CreateTestFile(const std::string& name, |
+ int64 length, |
+ const std::string& modification_time) OVERRIDE; |
+ virtual void CreateTestDirectory( |
+ const std::string& name, |
+ const std::string& modification_time) OVERRIDE; |
// Add a mount point to the fake Downloads directory. Should be called |
// before StartFileManager(). |
@@ -147,7 +205,7 @@ INSTANTIATE_TEST_CASE_P(InNonGuestMode, |
void FileManagerBrowserLocalTest::CreateTestFile( |
const std::string& name, |
- int length, |
+ int64 length, |
const std::string& modification_time) { |
ASSERT_GE(length, 0); |
base::FilePath path = downloads_path_.AppendASCII(name); |
@@ -184,6 +242,131 @@ void FileManagerBrowserLocalTest::AddMountPointToFakeDownloads() { |
"Downloads", fileapi::kFileSystemTypeNativeLocal, downloads_path_)); |
} |
+class FileManagerBrowserDriveTest : public FileManagerBrowserTestBase { |
+ public: |
+ FileManagerBrowserDriveTest() |
+ : fake_drive_service_(NULL), |
+ system_service_(NULL) { |
+ } |
+ |
+ virtual void SetUp() OVERRIDE { |
+ extensions::ComponentLoader::EnableBackgroundExtensionsForTesting(); |
+ |
+ ASSERT_TRUE(test_cache_root_.CreateUniqueTempDir()); |
+ |
+ drive::DriveSystemServiceFactory::SetFactoryForTest( |
+ base::Bind(&FileManagerBrowserDriveTest::CreateDriveSystemService, |
+ base::Unretained(this))); |
+ |
+ ExtensionApiTest::SetUp(); |
+ } |
+ |
+ protected: |
+ // FileManagerBrowserTestBase overrides. |
+ virtual void CreateTestFile(const std::string& name, |
+ int64 length, |
+ const std::string& modification_time) OVERRIDE; |
+ virtual void CreateTestDirectory( |
+ const std::string& name, |
+ const std::string& modification_time) OVERRIDE; |
+ |
+ // Notifies DriveFileSystem that the contents in FakeDriveService are |
+ // changed, hence the new contents should be fetched. |
+ void CheckForUpdates(); |
+ |
+ // DriveSystemService factory function for this test. |
+ drive::DriveSystemService* CreateDriveSystemService(Profile* profile); |
+ |
+ base::ScopedTempDir test_cache_root_; |
+ google_apis::FakeDriveService* fake_drive_service_; |
+ drive::DriveSystemService* system_service_; |
+}; |
+ |
+void FileManagerBrowserDriveTest::CreateTestFile( |
+ const std::string& name, |
+ int64 length, |
+ const std::string& modification_time) { |
+ google_apis::GDataErrorCode error = google_apis::GDATA_OTHER_ERROR; |
+ scoped_ptr<google_apis::ResourceEntry> resource_entry; |
+ fake_drive_service_->AddNewFile( |
+ "text/plain", |
+ length, |
+ fake_drive_service_->GetRootResourceId(), |
+ name, |
+ google_apis::test_util::CreateCopyResultCallback(&error, |
+ &resource_entry)); |
+ MessageLoop::current()->RunUntilIdle(); |
+ ASSERT_EQ(google_apis::HTTP_CREATED, error); |
+ ASSERT_TRUE(resource_entry); |
+ |
+ base::Time time; |
+ ASSERT_TRUE(base::Time::FromString(modification_time.c_str(), &time)); |
+ fake_drive_service_->SetLastModifiedTime( |
+ resource_entry->resource_id(), |
+ time, |
+ google_apis::test_util::CreateCopyResultCallback(&error, |
+ &resource_entry)); |
+ MessageLoop::current()->RunUntilIdle(); |
+ ASSERT_EQ(google_apis::HTTP_SUCCESS, error); |
+ ASSERT_TRUE(resource_entry); |
+ |
+ CheckForUpdates(); |
+} |
+ |
+void FileManagerBrowserDriveTest::CreateTestDirectory( |
+ const std::string& name, |
+ const std::string& modification_time) { |
+ google_apis::GDataErrorCode error = google_apis::GDATA_OTHER_ERROR; |
+ scoped_ptr<google_apis::ResourceEntry> resource_entry; |
+ fake_drive_service_->AddNewDirectory( |
+ fake_drive_service_->GetRootResourceId(), |
+ name, |
+ google_apis::test_util::CreateCopyResultCallback(&error, |
+ &resource_entry)); |
+ MessageLoop::current()->RunUntilIdle(); |
+ ASSERT_EQ(google_apis::HTTP_CREATED, error); |
+ ASSERT_TRUE(resource_entry); |
+ |
+ base::Time time; |
+ ASSERT_TRUE(base::Time::FromString(modification_time.c_str(), &time)); |
+ fake_drive_service_->SetLastModifiedTime( |
+ resource_entry->resource_id(), |
+ time, |
+ google_apis::test_util::CreateCopyResultCallback(&error, |
+ &resource_entry)); |
+ MessageLoop::current()->RunUntilIdle(); |
+ ASSERT_EQ(google_apis::HTTP_SUCCESS, error); |
+ ASSERT_TRUE(resource_entry); |
+ |
+ CheckForUpdates(); |
+} |
+ |
+void FileManagerBrowserDriveTest::CheckForUpdates() { |
+ if (system_service_ && system_service_->file_system()) { |
+ system_service_->file_system()->CheckForUpdates(); |
+ } |
+} |
+ |
+drive::DriveSystemService* |
+FileManagerBrowserDriveTest::CreateDriveSystemService(Profile* profile) { |
+ fake_drive_service_ = new google_apis::FakeDriveService; |
+ fake_drive_service_->LoadResourceListForWapi( |
+ "chromeos/gdata/empty_feed.json"); |
+ fake_drive_service_->LoadAccountMetadataForWapi( |
+ "chromeos/gdata/account_metadata.json"); |
+ fake_drive_service_->LoadAppListForDriveApi("chromeos/drive/applist.json"); |
+ |
+ // Create test files and directories inside the fake drive service. |
+ CreateTestFilesAndDirectories(); |
+ |
+ system_service_ = new drive::DriveSystemService(profile, |
+ fake_drive_service_, |
+ test_cache_root_.path(), |
+ NULL); |
+ |
+ return system_service_; |
+} |
+ |
// Monitors changes to a single file until the supplied condition callback |
// returns true. Usage: |
// TestFilePathWatcher watcher(path_to_file, MyConditionCallback); |
@@ -297,16 +480,7 @@ IN_PROC_BROWSER_TEST_P(FileManagerBrowserLocalTest, TestFileDisplay) { |
AddMountPointToFakeDownloads(); |
StartFileManager("/Downloads"); |
- ResultCatcher catcher; |
- |
- StartTest("file display"); |
- |
- ExtensionTestMessageListener listener("initial check done", true); |
- ASSERT_TRUE(listener.WaitUntilSatisfied()); |
- CreateTestFile("newly added file.mp3", 2000, "4 Sep 1998 00:00:00"); |
- listener.Reply("file added"); |
- |
- ASSERT_TRUE(catcher.GetNextResult()) << catcher.message(); |
+ DoTestFileDisplay(); |
} |
IN_PROC_BROWSER_TEST_P(FileManagerBrowserLocalTest, TestKeyboardCopy) { |
@@ -350,4 +524,10 @@ IN_PROC_BROWSER_TEST_P(FileManagerBrowserLocalTest, TestKeyboardDelete) { |
ASSERT_TRUE(watcher.RunMessageLoopUntilConditionSatisfied()); |
} |
+IN_PROC_BROWSER_TEST_F(FileManagerBrowserDriveTest, TestFileDisplay) { |
+ StartFileManager("/drive/root"); |
+ |
+ DoTestFileDisplay(); |
+} |
+ |
} // namespace |