Disable view source for Developer Tools.
[chromium-blink-merge.git] / chrome / browser / chromeos / drive / file_system / move_operation_unittest.cc
blobae21a664e6242879216377a7249e77f63fe9b8ff
1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "chrome/browser/chromeos/drive/file_system/move_operation.h"
7 #include "chrome/browser/chromeos/drive/file_system/copy_operation.h"
8 #include "chrome/browser/chromeos/drive/file_system/operation_test_base.h"
9 #include "chrome/browser/drive/drive_api_util.h"
10 #include "google_apis/drive/test_util.h"
11 #include "testing/gtest/include/gtest/gtest.h"
13 namespace drive {
14 namespace file_system {
16 class MoveOperationTest : public OperationTestBase {
17 protected:
18 virtual void SetUp() OVERRIDE {
19 OperationTestBase::SetUp();
20 operation_.reset(new MoveOperation(blocking_task_runner(),
21 observer(),
22 metadata()));
23 copy_operation_.reset(new CopyOperation(
24 blocking_task_runner(),
25 observer(),
26 scheduler(),
27 metadata(),
28 cache(),
29 util::GetIdentityResourceIdCanonicalizer()));
32 scoped_ptr<MoveOperation> operation_;
33 scoped_ptr<CopyOperation> copy_operation_;
36 TEST_F(MoveOperationTest, MoveFileInSameDirectory) {
37 const base::FilePath src_path(
38 FILE_PATH_LITERAL("drive/root/Directory 1/SubDirectory File 1.txt"));
39 const base::FilePath dest_path(
40 FILE_PATH_LITERAL("drive/root/Directory 1/Test.log"));
42 ResourceEntry src_entry, dest_entry;
43 ASSERT_EQ(FILE_ERROR_OK, GetLocalResourceEntry(src_path, &src_entry));
44 ASSERT_EQ(FILE_ERROR_NOT_FOUND,
45 GetLocalResourceEntry(dest_path, &dest_entry));
47 FileError error = FILE_ERROR_FAILED;
48 operation_->Move(src_path,
49 dest_path,
50 false,
51 google_apis::test_util::CreateCopyResultCallback(&error));
52 test_util::RunBlockingPoolTask();
53 EXPECT_EQ(FILE_ERROR_OK, error);
55 EXPECT_EQ(FILE_ERROR_OK, GetLocalResourceEntry(dest_path, &dest_entry));
56 EXPECT_EQ(src_entry.local_id(), dest_entry.local_id());
57 EXPECT_EQ(ResourceEntry::DIRTY, dest_entry.metadata_edit_state());
58 EXPECT_EQ(FILE_ERROR_NOT_FOUND, GetLocalResourceEntry(src_path, &src_entry));
60 EXPECT_EQ(1U, observer()->get_changed_paths().size());
61 EXPECT_TRUE(observer()->get_changed_paths().count(src_path.DirName()));
63 EXPECT_EQ(1U, observer()->updated_local_ids().size());
64 EXPECT_TRUE(observer()->updated_local_ids().count(src_entry.local_id()));
67 TEST_F(MoveOperationTest, MoveFileFromRootToSubDirectory) {
68 base::FilePath src_path(FILE_PATH_LITERAL("drive/root/File 1.txt"));
69 base::FilePath dest_path(
70 FILE_PATH_LITERAL("drive/root/Directory 1/Test.log"));
72 ResourceEntry src_entry, dest_entry;
73 ASSERT_EQ(FILE_ERROR_OK, GetLocalResourceEntry(src_path, &src_entry));
74 ASSERT_EQ(FILE_ERROR_NOT_FOUND,
75 GetLocalResourceEntry(dest_path, &dest_entry));
77 FileError error = FILE_ERROR_FAILED;
78 operation_->Move(src_path,
79 dest_path,
80 false,
81 google_apis::test_util::CreateCopyResultCallback(&error));
82 test_util::RunBlockingPoolTask();
83 EXPECT_EQ(FILE_ERROR_OK, error);
85 EXPECT_EQ(FILE_ERROR_OK, GetLocalResourceEntry(dest_path, &dest_entry));
86 EXPECT_EQ(src_entry.local_id(), dest_entry.local_id());
87 EXPECT_EQ(ResourceEntry::DIRTY, dest_entry.metadata_edit_state());
88 EXPECT_EQ(FILE_ERROR_NOT_FOUND, GetLocalResourceEntry(src_path, &src_entry));
90 EXPECT_EQ(2U, observer()->get_changed_paths().size());
91 EXPECT_TRUE(observer()->get_changed_paths().count(src_path.DirName()));
92 EXPECT_TRUE(observer()->get_changed_paths().count(dest_path.DirName()));
94 EXPECT_EQ(1U, observer()->updated_local_ids().size());
95 EXPECT_TRUE(observer()->updated_local_ids().count(src_entry.local_id()));
98 TEST_F(MoveOperationTest, MoveFileBetweenSubDirectoriesRenameWithTitle) {
99 base::FilePath src_path(
100 FILE_PATH_LITERAL("drive/root/Directory 1/SubDirectory File 1.txt"));
101 base::FilePath dest_path(FILE_PATH_LITERAL(
102 "drive/root/Directory 1/Sub Directory Folder/"
103 "SubDirectory File 1 (1).txt"));
105 ResourceEntry src_entry, dest_entry;
106 ASSERT_EQ(FILE_ERROR_OK, GetLocalResourceEntry(src_path, &src_entry));
107 ASSERT_EQ(FILE_ERROR_NOT_FOUND,
108 GetLocalResourceEntry(dest_path, &dest_entry));
110 FileError error = FILE_ERROR_FAILED;
111 // Copy the src file into the same directory. This will make inconsistency
112 // between title and path of the copied file.
113 copy_operation_->Copy(
114 src_path,
115 src_path,
116 false,
117 google_apis::test_util::CreateCopyResultCallback(&error));
118 test_util::RunBlockingPoolTask();
119 EXPECT_EQ(FILE_ERROR_OK, error);
120 base::FilePath copied_path(
121 FILE_PATH_LITERAL("drive/root/Directory 1/SubDirectory File 1 (1).txt"));
122 ResourceEntry copied_entry;
123 ASSERT_EQ(FILE_ERROR_OK, GetLocalResourceEntry(copied_path, &copied_entry));
124 ASSERT_EQ("SubDirectory File 1.txt", copied_entry.title());
126 // Move the copied file.
127 operation_->Move(copied_path,
128 dest_path,
129 false,
130 google_apis::test_util::CreateCopyResultCallback(&error));
131 test_util::RunBlockingPoolTask();
132 EXPECT_EQ(FILE_ERROR_OK, error);
134 EXPECT_EQ(FILE_ERROR_OK, GetLocalResourceEntry(dest_path, &dest_entry));
135 EXPECT_EQ("SubDirectory File 1 (1).txt", dest_entry.title());
136 EXPECT_EQ(copied_entry.local_id(), dest_entry.local_id());
137 EXPECT_EQ(ResourceEntry::DIRTY, dest_entry.metadata_edit_state());
138 EXPECT_EQ(FILE_ERROR_NOT_FOUND,
139 GetLocalResourceEntry(copied_path, &copied_entry));
141 EXPECT_EQ(2U, observer()->get_changed_paths().size());
142 EXPECT_TRUE(observer()->get_changed_paths().count(copied_path.DirName()));
143 EXPECT_TRUE(observer()->get_changed_paths().count(dest_path.DirName()));
145 EXPECT_EQ(1U, observer()->updated_local_ids().size());
146 EXPECT_TRUE(observer()->updated_local_ids().count(copied_entry.local_id()));
149 TEST_F(MoveOperationTest, MoveNotExistingFile) {
150 base::FilePath src_path(FILE_PATH_LITERAL("drive/root/Dummy file.txt"));
151 base::FilePath dest_path(FILE_PATH_LITERAL("drive/root/Test.log"));
153 FileError error = FILE_ERROR_OK;
154 operation_->Move(src_path,
155 dest_path,
156 false,
157 google_apis::test_util::CreateCopyResultCallback(&error));
158 test_util::RunBlockingPoolTask();
159 EXPECT_EQ(FILE_ERROR_NOT_FOUND, error);
161 ResourceEntry entry;
162 EXPECT_EQ(FILE_ERROR_NOT_FOUND, GetLocalResourceEntry(src_path, &entry));
163 EXPECT_EQ(FILE_ERROR_NOT_FOUND, GetLocalResourceEntry(dest_path, &entry));
166 TEST_F(MoveOperationTest, MoveFileToNonExistingDirectory) {
167 base::FilePath src_path(FILE_PATH_LITERAL("drive/root/File 1.txt"));
168 base::FilePath dest_path(FILE_PATH_LITERAL("drive/root/Dummy/Test.log"));
170 FileError error = FILE_ERROR_OK;
171 operation_->Move(src_path,
172 dest_path,
173 false,
174 google_apis::test_util::CreateCopyResultCallback(&error));
175 test_util::RunBlockingPoolTask();
176 EXPECT_EQ(FILE_ERROR_NOT_FOUND, error);
178 ResourceEntry entry;
179 EXPECT_EQ(FILE_ERROR_OK, GetLocalResourceEntry(src_path, &entry));
180 EXPECT_EQ(FILE_ERROR_NOT_FOUND, GetLocalResourceEntry(dest_path, &entry));
183 // Test the case where the parent of |dest_file_path| is a existing file,
184 // not a directory.
185 TEST_F(MoveOperationTest, MoveFileToInvalidPath) {
186 base::FilePath src_path(FILE_PATH_LITERAL("drive/root/File 1.txt"));
187 base::FilePath dest_path(
188 FILE_PATH_LITERAL("drive/root/Duplicate Name.txt/Test.log"));
190 FileError error = FILE_ERROR_OK;
191 operation_->Move(src_path,
192 dest_path,
193 false,
194 google_apis::test_util::CreateCopyResultCallback(&error));
195 test_util::RunBlockingPoolTask();
196 EXPECT_EQ(FILE_ERROR_NOT_A_DIRECTORY, error);
198 ResourceEntry entry;
199 EXPECT_EQ(FILE_ERROR_OK, GetLocalResourceEntry(src_path, &entry));
200 EXPECT_EQ(FILE_ERROR_NOT_FOUND, GetLocalResourceEntry(dest_path, &entry));
203 TEST_F(MoveOperationTest, PreserveLastModified) {
204 const base::FilePath src_path(
205 FILE_PATH_LITERAL("drive/root/Directory 1/SubDirectory File 1.txt"));
206 const base::FilePath dest_path(
207 FILE_PATH_LITERAL("drive/root/Directory 1/Test.log"));
209 ResourceEntry src_entry, dest_entry;
210 ASSERT_EQ(FILE_ERROR_OK, GetLocalResourceEntry(src_path, &src_entry));
211 ASSERT_EQ(FILE_ERROR_NOT_FOUND,
212 GetLocalResourceEntry(dest_path, &dest_entry));
214 FileError error = FILE_ERROR_FAILED;
215 operation_->Move(src_path,
216 dest_path,
217 true, // Preserve last modified.
218 google_apis::test_util::CreateCopyResultCallback(&error));
219 test_util::RunBlockingPoolTask();
220 EXPECT_EQ(FILE_ERROR_OK, error);
222 EXPECT_EQ(FILE_ERROR_OK, GetLocalResourceEntry(dest_path, &dest_entry));
223 EXPECT_EQ(src_entry.local_id(), dest_entry.local_id());
224 EXPECT_EQ(src_entry.file_info().last_modified(),
225 dest_entry.file_info().last_modified());
226 EXPECT_EQ(ResourceEntry::DIRTY, dest_entry.metadata_edit_state());
227 EXPECT_EQ(FILE_ERROR_NOT_FOUND,
228 GetLocalResourceEntry(src_path, &src_entry));
231 } // namespace file_system
232 } // namespace drive