Index: chrome/browser/chromeos/gdata/gdata_file_system_unittest.cc |
diff --git a/chrome/browser/chromeos/gdata/gdata_file_system_unittest.cc b/chrome/browser/chromeos/gdata/gdata_file_system_unittest.cc |
index 75066bc68ace909e2509850c306765b87becebdb..72e5ea37e7e1cf2fe3cd8a260a816c8f0d5db6d1 100644 |
--- a/chrome/browser/chromeos/gdata/gdata_file_system_unittest.cc |
+++ b/chrome/browser/chromeos/gdata/gdata_file_system_unittest.cc |
@@ -114,6 +114,36 @@ struct PathToVerify { |
FilePath expected_existing_path; |
}; |
+struct SearchResultPair { |
+ const char* search_path; |
+ const char* real_path; |
+}; |
+ |
+// Callback to GDataFileSystem::GetEntriesByQueryAsync unsed in ContentSearch |
+// test. |
+// Verifies that returned proto buffer contains entries specified in search |
+// feed, and that treing file names are formatted like |
+// "<resource_id>.<file_name>". |
+void ContentSearchCallback(MessageLoop* message_loop, |
+ base::PlatformFileError error, |
+ scoped_ptr<gdata::GDataDirectoryProto> dir_proto) { |
+ ASSERT_EQ(base::PLATFORM_FILE_OK, error); |
+ ASSERT_TRUE(dir_proto.get()); |
+ |
+ // Search feed contains 2 entries. One file (SubDirectory File 1.txt) and one |
+ // directory (Directory 1). Entries generated from the fedd should have names |
+ // in format resource_id.actual_file_name. |
+ ASSERT_EQ(1, dir_proto->child_files_size()); |
+ EXPECT_EQ("file:2_file_resouce_id.SubDirectory File 1.txt", |
+ dir_proto->child_files(0).gdata_entry().file_name()); |
+ |
+ ASSERT_EQ(1, dir_proto->child_directories_size()); |
+ EXPECT_EQ("folder:1_folder_resource_id.Directory 1", |
+ dir_proto->child_directories(0).gdata_entry().file_name()); |
+ |
+ message_loop->Quit(); |
+} |
+ |
} // anonymous namespace |
namespace gdata { |
@@ -1135,7 +1165,7 @@ TEST_F(GDataFileSystemTest, DuplicatedAsyncInitialization) { |
&message_loop_); |
EXPECT_CALL(*mock_doc_service_, GetAccountMetadata(_)).Times(1); |
- EXPECT_CALL(*mock_doc_service_, GetDocuments(Eq(GURL()), _, _)).Times(1); |
+ EXPECT_CALL(*mock_doc_service_, GetDocuments(Eq(GURL()), _, _, _)).Times(1); |
file_system_->ReadDirectoryByPathAsync( |
FilePath(FILE_PATH_LITERAL("gdata")), callback); |
@@ -3076,6 +3106,397 @@ TEST_F(GDataFileSystemTest, GetFileByResourceId_FromCache) { |
callback_helper_->download_path_.value()); |
} |
+TEST_F(GDataFileSystemTest, ContentSearch) { |
+ LoadRootFeedDocument("root_feed.json"); |
+ |
+ EXPECT_CALL(*mock_doc_service_, GetDocuments(Eq(GURL()), _, "foo", _)) |
+ .Times(1); |
+ |
+ ReadDirectoryCallback callback = base::Bind( |
+ &ContentSearchCallback, |
+ &message_loop_); |
+ |
+ file_system_->GetEntriesByQueryAsync("foo", callback); |
+ message_loop_.Run(); // Wait to get our result |
+ |
+ const SearchResultPair kSearchResultPairs[] = { |
+ { "gdata/.search/foo/file:2_file_resouce_id.SubDirectory File 1.txt", |
+ "gdata/Directory 1/SubDirectory File 1.txt" }, |
+ { "gdata/.search/foo/folder:1_folder_resource_id.Directory 1", |
+ "gdata/Directory 1" }, |
+ { "gdata/.search/foo/folder:1_folder_resource_id.Directory 1/" |
+ "SubDirectory File 1.txt", |
+ "gdata/Directory 1/SubDirectory File 1.txt" } |
+ }; |
+ |
+ for (size_t i = 0; i < arraysize(kSearchResultPairs); ++i) { |
+ FilePath search_file_path(FILE_PATH_LITERAL( |
+ kSearchResultPairs[i].search_path)); |
+ FilePath real_file_path(FILE_PATH_LITERAL( |
+ kSearchResultPairs[i].real_path)); |
+ |
+ GDataEntry* search_file_entry = FindEntry(search_file_path); |
+ ASSERT_TRUE(search_file_entry) |
+ << "Can't find " << search_file_path.value(); |
+ |
+ GDataEntry* real_file_entry = FindEntry(real_file_path); |
+ ASSERT_TRUE(real_file_entry) |
+ << "Can't find " << real_file_path.value(); |
+ |
+ EXPECT_EQ(search_file_entry, real_file_entry); |
+ } |
+} |
+ |
+TEST_F(GDataFileSystemTest, ContentSearch_Delete) { |
+ LoadRootFeedDocument("root_feed.json"); |
+ |
+ EXPECT_CALL(*mock_doc_service_, DeleteDocument(_, _)).Times(1); |
+ EXPECT_CALL(*mock_directory_observer_, OnDirectoryChanged( |
+ Eq(FilePath(FILE_PATH_LITERAL("gdata/Directory 1"))))).Times(1); |
+ |
+ FilePath search_file_path(FILE_PATH_LITERAL( |
+ "gdata/.search/foo/file:2_file_resouce_id.SubDirectory File 1.txt")); |
+ FilePath real_file_path(FILE_PATH_LITERAL( |
+ "gdata/Directory 1/SubDirectory File 1.txt")); |
+ |
+ ASSERT_TRUE(FindEntry(real_file_path)); |
+ ASSERT_TRUE(FindEntry(search_file_path)); |
+ |
+ FileOperationCallback callback = |
+ base::Bind(&CallbackHelper::FileOperationCallback, |
+ callback_helper_.get()); |
+ |
+ file_system_->Remove(search_file_path, false, callback); |
+ message_loop_.RunAllPending(); // Wait to get our result |
+ |
+ EXPECT_EQ(base::PLATFORM_FILE_OK, callback_helper_->last_error_); |
+ |
+ EXPECT_FALSE(FindEntry(real_file_path)); |
+ EXPECT_FALSE(FindEntry(search_file_path)); |
+} |
+ |
+TEST_F(GDataFileSystemTest, ContentSearch_RenameResult) { |
+ LoadRootFeedDocument("root_feed.json"); |
+ |
+ EXPECT_CALL(*mock_directory_observer_, OnDirectoryChanged( |
+ Eq(FilePath(FILE_PATH_LITERAL("gdata/Directory 1"))))).Times(1); |
+ |
+ EXPECT_CALL(*mock_doc_service_, RenameResource( |
+ Eq(GURL("https://dir1_file_link_self/file:2_file_resouce_id")), |
+ "SubDirectory File 1.txt.renamed", _)) |
+ .Times(1); |
+ |
+ FilePath source_path_search(FILE_PATH_LITERAL( |
+ "gdata/.search/foo/file:2_file_resouce_id.SubDirectory File 1.txt")); |
+ FilePath source_path_real(FILE_PATH_LITERAL( |
+ "gdata/Directory 1/SubDirectory File 1.txt")); |
+ |
+ FilePath renamed_path_search(FILE_PATH_LITERAL( |
+ "gdata/.search/foo/" |
+ "file:2_file_resouce_id.SubDirectory File 1.txt.renamed")); |
+ FilePath renamed_path_real(FILE_PATH_LITERAL( |
+ "gdata/Directory 1/SubDirectory File 1.txt.renamed")); |
+ |
+ FileOperationCallback callback = |
+ base::Bind(&CallbackHelper::FileOperationCallback, |
+ callback_helper_.get()); |
+ |
+ file_system_->Move(source_path_search, renamed_path_search, callback); |
+ message_loop_.RunAllPending(); |
+ |
+ EXPECT_EQ(base::PLATFORM_FILE_OK, callback_helper_->last_error_); |
+ |
+ EXPECT_FALSE(FindEntry(source_path_real)); |
+ EXPECT_FALSE(FindEntry(source_path_search)); |
+ |
+ EXPECT_TRUE(FindEntry(renamed_path_real)); |
+ EXPECT_TRUE(FindEntry(renamed_path_search)); |
+} |
+ |
+TEST_F(GDataFileSystemTest, ContentSearch_Move) { |
+ LoadRootFeedDocument("root_feed.json"); |
+ |
+ // Setup directory observer mocks. |
+ EXPECT_CALL(*mock_directory_observer_, OnDirectoryChanged( |
+ Eq(FilePath(FILE_PATH_LITERAL("gdata/Directory 1"))))).Times(1); |
+ EXPECT_CALL(*mock_directory_observer_, OnDirectoryChanged( |
+ Eq(FilePath(FILE_PATH_LITERAL( |
+ "gdata/Directory 1/Sub Directory Folder"))))) |
+ .Times(1); |
+ EXPECT_CALL(*mock_directory_observer_, OnDirectoryChanged( |
+ Eq(FilePath(FILE_PATH_LITERAL("gdata"))))).Times(1); |
+ |
+ // Setup documents service mocks. |
+ EXPECT_CALL(*mock_doc_service_, RenameResource( |
+ Eq(GURL("https://dir1_file_link_self/file:2_file_resouce_id")), |
+ "SubDirectory File 1.txt.dest", _)) |
+ .Times(1); |
+ EXPECT_CALL(*mock_doc_service_, RemoveResourceFromDirectory( |
+ Eq(GURL("https://1_folder_content_url/")), |
+ Eq(GURL("https://dir1_file_link_self/file:2_file_resouce_id")), |
+ "file:2_file_resouce_id", _)) |
+ .Times(1); |
+ EXPECT_CALL(*mock_doc_service_, AddResourceToDirectory( |
+ Eq(GURL("https://1_folder_content_url/")), |
+ Eq(GURL("https://dir1_file_link_self/file:2_file_resouce_id")), _)) |
+ .Times(1); |
+ |
+ // Start the test. |
+ FilePath source_path_search(FILE_PATH_LITERAL( |
+ "gdata/.search/foo/folder:1_folder_resource_id.Directory 1/" |
+ "SubDirectory File 1.txt")); |
+ FilePath source_path_real(FILE_PATH_LITERAL( |
+ "gdata/Directory 1/SubDirectory File 1.txt")); |
+ |
+ FilePath destination_path_search(FILE_PATH_LITERAL( |
+ "gdata/.search/foo/folder:1_folder_resource_id.Directory 1/" |
+ "Sub Directory Folder/SubDirectory File 1.txt.dest")); |
+ FilePath destination_path_real(FILE_PATH_LITERAL( |
+ "gdata/Directory 1/Sub Directory Folder/SubDirectory File 1.txt.dest")); |
+ |
+ ASSERT_TRUE(FindEntry(source_path_search)); |
+ ASSERT_TRUE(FindEntry(source_path_real)); |
+ |
+ FileOperationCallback callback = |
+ base::Bind(&CallbackHelper::FileOperationCallback, |
+ callback_helper_.get()); |
+ |
+ file_system_->Move(source_path_search, destination_path_search, callback); |
+ message_loop_.RunAllPending(); |
+ |
+ EXPECT_EQ(base::PLATFORM_FILE_OK, callback_helper_->last_error_); |
+ |
+ EXPECT_FALSE(FindEntry(source_path_search)); |
+ EXPECT_FALSE(FindEntry(source_path_real)); |
+ |
+ EXPECT_TRUE(FindEntry(destination_path_search)); |
+ EXPECT_TRUE(FindEntry(destination_path_real)); |
+} |
+ |
+// Move file to gdata file system from search result directory. |
+TEST_F(GDataFileSystemTest, ContentSearch_MoveToGData) { |
+ LoadRootFeedDocument("root_feed.json"); |
+ |
+ // Setup directory observer mocks. |
+ EXPECT_CALL(*mock_directory_observer_, OnDirectoryChanged( |
+ Eq(FilePath(FILE_PATH_LITERAL("gdata/Directory 1"))))).Times(1); |
+ EXPECT_CALL(*mock_directory_observer_, OnDirectoryChanged( |
+ Eq(FilePath(FILE_PATH_LITERAL( |
+ "gdata/Directory 1/Sub Directory Folder"))))) |
+ .Times(1); |
+ EXPECT_CALL(*mock_directory_observer_, OnDirectoryChanged( |
+ Eq(FilePath(FILE_PATH_LITERAL("gdata"))))).Times(1); |
+ |
+ // Setup documents service mocks. |
+ EXPECT_CALL(*mock_doc_service_, RenameResource( |
+ Eq(GURL("https://dir1_file_link_self/file:2_file_resouce_id")), |
+ "SubDirectory File 1.txt.dest", _)) |
+ .Times(1); |
+ EXPECT_CALL(*mock_doc_service_, RemoveResourceFromDirectory( |
+ Eq(GURL("https://1_folder_content_url/")), |
+ Eq(GURL("https://dir1_file_link_self/file:2_file_resouce_id")), |
+ "file:2_file_resouce_id", _)) |
+ .Times(1); |
+ EXPECT_CALL(*mock_doc_service_, AddResourceToDirectory( |
+ Eq(GURL("https://1_folder_content_url/")), |
+ Eq(GURL("https://dir1_file_link_self/file:2_file_resouce_id")), _)) |
+ .Times(1); |
+ |
+ // Statr the test. |
+ FilePath source_path_search(FILE_PATH_LITERAL( |
+ "gdata/.search/foo/folder:1_folder_resource_id.Directory 1/" |
+ "SubDirectory File 1.txt")); |
+ FilePath source_path_real(FILE_PATH_LITERAL( |
+ "gdata/Directory 1/SubDirectory File 1.txt")); |
+ |
+ FilePath destination_path_search(FILE_PATH_LITERAL( |
+ "gdata/.search/foo/folder:1_folder_resource_id.Directory 1/" |
+ "Sub Directory Folder/SubDirectory File 1.txt.dest")); |
+ FilePath destination_path_real(FILE_PATH_LITERAL( |
+ "gdata/Directory 1/Sub Directory Folder/SubDirectory File 1.txt.dest")); |
+ |
+ ASSERT_TRUE(FindEntry(source_path_search)); |
+ ASSERT_TRUE(FindEntry(source_path_real)); |
+ |
+ FileOperationCallback callback = |
+ base::Bind(&CallbackHelper::FileOperationCallback, |
+ callback_helper_.get()); |
+ |
+ file_system_->Move(source_path_search, destination_path_real, callback); |
+ message_loop_.RunAllPending(); |
+ |
+ EXPECT_EQ(base::PLATFORM_FILE_OK, callback_helper_->last_error_); |
+ |
+ EXPECT_FALSE(FindEntry(source_path_search)); |
+ EXPECT_FALSE(FindEntry(source_path_real)); |
+ |
+ EXPECT_TRUE(FindEntry(destination_path_search)); |
+ EXPECT_TRUE(FindEntry(destination_path_real)); |
+} |
+ |
+TEST_F(GDataFileSystemTest, ContentSearch_MoveToSearch) { |
+ LoadRootFeedDocument("root_feed.json"); |
+ |
+ // Setup directory observer mocks. |
+ EXPECT_CALL(*mock_directory_observer_, OnDirectoryChanged( |
+ Eq(FilePath(FILE_PATH_LITERAL("gdata/Directory 1"))))).Times(1); |
+ EXPECT_CALL(*mock_directory_observer_, OnDirectoryChanged( |
+ Eq(FilePath(FILE_PATH_LITERAL( |
+ "gdata/Directory 1/Sub Directory Folder"))))) |
+ .Times(1); |
+ EXPECT_CALL(*mock_directory_observer_, OnDirectoryChanged( |
+ Eq(FilePath(FILE_PATH_LITERAL("gdata"))))).Times(1); |
+ |
+ // Setup documents service mocks. |
+ EXPECT_CALL(*mock_doc_service_, RenameResource( |
+ Eq(GURL("https://dir1_file_link_self/file:2_file_resouce_id")), |
+ "SubDirectory File 1.txt.dest", _)) |
+ .Times(1); |
+ EXPECT_CALL(*mock_doc_service_, RemoveResourceFromDirectory( |
+ Eq(GURL("https://1_folder_content_url/")), |
+ Eq(GURL("https://dir1_file_link_self/file:2_file_resouce_id")), |
+ "file:2_file_resouce_id", _)) |
+ .Times(1); |
+ EXPECT_CALL(*mock_doc_service_, AddResourceToDirectory( |
+ Eq(GURL("https://1_folder_content_url/")), |
+ Eq(GURL("https://dir1_file_link_self/file:2_file_resouce_id")), _)) |
+ .Times(1); |
+ |
+ // Statr the test. |
+ FilePath source_path_search(FILE_PATH_LITERAL( |
+ "gdata/.search/foo/folder:1_folder_resource_id.Directory 1/" |
+ "SubDirectory File 1.txt")); |
+ FilePath source_path_real(FILE_PATH_LITERAL( |
+ "gdata/Directory 1/SubDirectory File 1.txt")); |
+ |
+ FilePath destination_path_search(FILE_PATH_LITERAL( |
+ "gdata/.search/foo/folder:1_folder_resource_id.Directory 1/" |
+ "Sub Directory Folder/SubDirectory File 1.txt.dest")); |
+ FilePath destination_path_real(FILE_PATH_LITERAL( |
+ "gdata/Directory 1/Sub Directory Folder/SubDirectory File 1.txt.dest")); |
+ |
+ ASSERT_TRUE(FindEntry(source_path_search)); |
+ ASSERT_TRUE(FindEntry(source_path_real)); |
+ |
+ FileOperationCallback callback = |
+ base::Bind(&CallbackHelper::FileOperationCallback, |
+ callback_helper_.get()); |
+ |
+ file_system_->Move(source_path_real, destination_path_search, callback); |
+ message_loop_.RunAllPending(); |
+ |
+ EXPECT_EQ(base::PLATFORM_FILE_OK, callback_helper_->last_error_); |
+ |
+ EXPECT_FALSE(FindEntry(source_path_search)); |
+ EXPECT_FALSE(FindEntry(source_path_real)); |
+ |
+ EXPECT_TRUE(FindEntry(destination_path_search)); |
+ EXPECT_TRUE(FindEntry(destination_path_real)); |
+} |
+ |
+TEST_F(GDataFileSystemTest, ContentSearch_CopyToSearchDirectory) { |
+ LoadRootFeedDocument("root_feed.json"); |
+ |
+ FilePath src_file_path(FILE_PATH_LITERAL( |
+ "gdata/Directory 1/SubDirectory File 1.txt")); |
+ FilePath dest_file_path(FILE_PATH_LITERAL( |
+ "gdata/.search/Directory 1")); |
+ |
+ FileOperationCallback callback = |
+ base::Bind(&CallbackHelper::FileOperationCallback, |
+ callback_helper_.get()); |
+ |
+ file_system_->Copy(src_file_path, dest_file_path, callback); |
+ message_loop_.RunAllPending(); |
+ |
+ EXPECT_NE(base::PLATFORM_FILE_OK, callback_helper_->last_error_); |
+ |
+ EXPECT_TRUE(FindEntry(src_file_path)); |
+} |
+ |
+TEST_F(GDataFileSystemTest, ContentSearch_CopyToSearchResultDirectory) { |
+ LoadRootFeedDocument("root_feed.json"); |
+ |
+ FilePath src_file_path(FILE_PATH_LITERAL( |
+ "gdata/Directory 1/SubDirectory File 1.txt")); |
+ FilePath dest_file_path(FILE_PATH_LITERAL( |
+ "gdata/.search/foo/Directory 1")); |
+ |
+ FileOperationCallback callback = |
+ base::Bind(&CallbackHelper::FileOperationCallback, |
+ callback_helper_.get()); |
+ |
+ file_system_->Copy(src_file_path, dest_file_path, callback); |
+ message_loop_.RunAllPending(); |
+ |
+ EXPECT_EQ(base::PLATFORM_FILE_ERROR_INVALID_OPERATION, |
+ callback_helper_->last_error_); |
+ |
+ EXPECT_TRUE(FindEntry(src_file_path)); |
+} |
+ |
+TEST_F(GDataFileSystemTest, ContentSearch_CreateDirInSearchResultDirectory) { |
+ LoadRootFeedDocument("root_feed.json"); |
+ |
+ FilePath dest_file_path(FILE_PATH_LITERAL( |
+ "gdata/.search/foo/New Folder")); |
+ |
+ FileOperationCallback callback = |
+ base::Bind(&CallbackHelper::FileOperationCallback, |
+ callback_helper_.get()); |
+ |
+ file_system_->CreateDirectory(dest_file_path, false, false, callback); |
+ message_loop_.RunAllPending(); |
+ |
+ EXPECT_EQ(base::PLATFORM_FILE_ERROR_INVALID_OPERATION, |
+ callback_helper_->last_error_); |
+} |
+ |
+TEST_F(GDataFileSystemTest, ContentSearch_CreateDirInSearchDirectory) { |
+ LoadRootFeedDocument("root_feed.json"); |
+ |
+ FilePath dest_file_path(FILE_PATH_LITERAL( |
+ "gdata/.search/New Folder")); |
+ |
+ FileOperationCallback callback = |
+ base::Bind(&CallbackHelper::FileOperationCallback, |
+ callback_helper_.get()); |
+ |
+ file_system_->CreateDirectory(dest_file_path, false, false, callback); |
+ message_loop_.RunAllPending(); |
+ |
+ EXPECT_EQ(base::PLATFORM_FILE_ERROR_INVALID_OPERATION, |
+ callback_helper_->last_error_); |
+} |
+ |
+TEST_F(GDataFileSystemTest, ContentSearch_CreateDirectory) { |
+ LoadRootFeedDocument("root_feed.json"); |
+ |
+ EXPECT_CALL(*mock_directory_observer_, OnDirectoryChanged( |
+ Eq(FilePath(FILE_PATH_LITERAL("gdata/Directory 1"))))).Times(1); |
+ EXPECT_CALL(*mock_doc_service_, CreateDirectory( |
+ Eq(GURL("https://1_folder_content_url/")), "FolderNew", _)).Times(1); |
+ |
+ FilePath search_dir_path(FILE_PATH_LITERAL( |
+ "gdata/.search/foo/folder:1_folder_resource_id.Directory 1/" |
+ "FolderNew")); |
+ FilePath real_dir_path(FILE_PATH_LITERAL("gdata/Directory 1/FolderNew")); |
+ |
+ EXPECT_FALSE(FindEntry(search_dir_path)); |
+ EXPECT_FALSE(FindEntry(real_dir_path)); |
+ |
+ FileOperationCallback callback = |
+ base::Bind(&CallbackHelper::FileOperationCallback, |
+ callback_helper_.get()); |
+ |
+ file_system_->CreateDirectory(search_dir_path, false, false, callback); |
+ message_loop_.RunAllPending(); |
+ |
+ EXPECT_EQ(base::PLATFORM_FILE_OK, callback_helper_->last_error_); |
+ |
+ EXPECT_TRUE(FindEntry(search_dir_path)); |
+ EXPECT_TRUE(FindEntry(real_dir_path)); |
+} |
TEST_F(GDataFileSystemTest, GetAvailableSpace) { |
EXPECT_CALL(*mock_sync_client_, OnCacheInitialized()).Times(1); |