9ea476fc67e7d255ec1a11f644be71b3ea93296d
[platform/framework/web/crosswalk.git] / src / chrome / browser / chromeos / drive / file_system / move_operation_unittest.cc
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.
4
5 #include "chrome/browser/chromeos/drive/file_system/move_operation.h"
6
7 #include "chrome/browser/chromeos/drive/file_change.h"
8 #include "chrome/browser/chromeos/drive/file_system/operation_test_base.h"
9 #include "content/public/test/test_utils.h"
10 #include "google_apis/drive/test_util.h"
11 #include "testing/gtest/include/gtest/gtest.h"
12
13 namespace drive {
14 namespace file_system {
15
16 class MoveOperationTest : public OperationTestBase {
17  protected:
18   virtual void SetUp() OVERRIDE {
19    OperationTestBase::SetUp();
20    operation_.reset(new MoveOperation(blocking_task_runner(),
21                                       delegate(),
22                                       metadata()));
23   }
24
25   scoped_ptr<MoveOperation> operation_;
26 };
27
28 TEST_F(MoveOperationTest, MoveFileInSameDirectory) {
29   const base::FilePath src_path(
30       FILE_PATH_LITERAL("drive/root/Directory 1/SubDirectory File 1.txt"));
31   const base::FilePath dest_path(
32       FILE_PATH_LITERAL("drive/root/Directory 1/Test.log"));
33
34   ResourceEntry src_entry, dest_entry;
35   ASSERT_EQ(FILE_ERROR_OK, GetLocalResourceEntry(src_path, &src_entry));
36   ASSERT_EQ(FILE_ERROR_NOT_FOUND,
37             GetLocalResourceEntry(dest_path, &dest_entry));
38
39   FileError error = FILE_ERROR_FAILED;
40   operation_->Move(src_path,
41                    dest_path,
42                    google_apis::test_util::CreateCopyResultCallback(&error));
43   content::RunAllBlockingPoolTasksUntilIdle();
44   EXPECT_EQ(FILE_ERROR_OK, error);
45
46   EXPECT_EQ(FILE_ERROR_OK, GetLocalResourceEntry(dest_path, &dest_entry));
47   EXPECT_EQ(src_entry.local_id(), dest_entry.local_id());
48   EXPECT_EQ(ResourceEntry::DIRTY, dest_entry.metadata_edit_state());
49   EXPECT_EQ(FILE_ERROR_NOT_FOUND, GetLocalResourceEntry(src_path, &src_entry));
50
51   EXPECT_EQ(2U, delegate()->get_changed_files().size());
52   EXPECT_TRUE(delegate()->get_changed_files().count(src_path));
53   EXPECT_TRUE(delegate()->get_changed_files().count(dest_path));
54
55   EXPECT_EQ(1U, delegate()->updated_local_ids().size());
56   EXPECT_TRUE(delegate()->updated_local_ids().count(src_entry.local_id()));
57 }
58
59 TEST_F(MoveOperationTest, MoveFileFromRootToSubDirectory) {
60   base::FilePath src_path(FILE_PATH_LITERAL("drive/root/File 1.txt"));
61   base::FilePath dest_path(
62       FILE_PATH_LITERAL("drive/root/Directory 1/Test.log"));
63
64   ResourceEntry src_entry, dest_entry;
65   ASSERT_EQ(FILE_ERROR_OK, GetLocalResourceEntry(src_path, &src_entry));
66   ASSERT_EQ(FILE_ERROR_NOT_FOUND,
67             GetLocalResourceEntry(dest_path, &dest_entry));
68
69   FileError error = FILE_ERROR_FAILED;
70   operation_->Move(src_path,
71                    dest_path,
72                    google_apis::test_util::CreateCopyResultCallback(&error));
73   content::RunAllBlockingPoolTasksUntilIdle();
74   EXPECT_EQ(FILE_ERROR_OK, error);
75
76   EXPECT_EQ(FILE_ERROR_OK, GetLocalResourceEntry(dest_path, &dest_entry));
77   EXPECT_EQ(src_entry.local_id(), dest_entry.local_id());
78   EXPECT_EQ(ResourceEntry::DIRTY, dest_entry.metadata_edit_state());
79   EXPECT_EQ(FILE_ERROR_NOT_FOUND, GetLocalResourceEntry(src_path, &src_entry));
80
81   EXPECT_EQ(2U, delegate()->get_changed_files().size());
82   EXPECT_TRUE(delegate()->get_changed_files().count(src_path));
83   EXPECT_TRUE(delegate()->get_changed_files().count(dest_path));
84
85   EXPECT_EQ(1U, delegate()->updated_local_ids().size());
86   EXPECT_TRUE(delegate()->updated_local_ids().count(src_entry.local_id()));
87 }
88
89 TEST_F(MoveOperationTest, MoveNotExistingFile) {
90   base::FilePath src_path(FILE_PATH_LITERAL("drive/root/Dummy file.txt"));
91   base::FilePath dest_path(FILE_PATH_LITERAL("drive/root/Test.log"));
92
93   FileError error = FILE_ERROR_OK;
94   operation_->Move(src_path,
95                    dest_path,
96                    google_apis::test_util::CreateCopyResultCallback(&error));
97   content::RunAllBlockingPoolTasksUntilIdle();
98   EXPECT_EQ(FILE_ERROR_NOT_FOUND, error);
99
100   ResourceEntry entry;
101   EXPECT_EQ(FILE_ERROR_NOT_FOUND, GetLocalResourceEntry(src_path, &entry));
102   EXPECT_EQ(FILE_ERROR_NOT_FOUND, GetLocalResourceEntry(dest_path, &entry));
103 }
104
105 TEST_F(MoveOperationTest, MoveFileToNonExistingDirectory) {
106   base::FilePath src_path(FILE_PATH_LITERAL("drive/root/File 1.txt"));
107   base::FilePath dest_path(FILE_PATH_LITERAL("drive/root/Dummy/Test.log"));
108
109   FileError error = FILE_ERROR_OK;
110   operation_->Move(src_path,
111                    dest_path,
112                    google_apis::test_util::CreateCopyResultCallback(&error));
113   content::RunAllBlockingPoolTasksUntilIdle();
114   EXPECT_EQ(FILE_ERROR_NOT_FOUND, error);
115
116   ResourceEntry entry;
117   EXPECT_EQ(FILE_ERROR_OK, GetLocalResourceEntry(src_path, &entry));
118   EXPECT_EQ(FILE_ERROR_NOT_FOUND, GetLocalResourceEntry(dest_path, &entry));
119 }
120
121 // Test the case where the parent of |dest_file_path| is a existing file,
122 // not a directory.
123 TEST_F(MoveOperationTest, MoveFileToInvalidPath) {
124   base::FilePath src_path(FILE_PATH_LITERAL("drive/root/File 1.txt"));
125   base::FilePath dest_path(
126       FILE_PATH_LITERAL("drive/root/Duplicate Name.txt/Test.log"));
127
128   FileError error = FILE_ERROR_OK;
129   operation_->Move(src_path,
130                    dest_path,
131                    google_apis::test_util::CreateCopyResultCallback(&error));
132   content::RunAllBlockingPoolTasksUntilIdle();
133   EXPECT_EQ(FILE_ERROR_NOT_A_DIRECTORY, error);
134
135   ResourceEntry entry;
136   EXPECT_EQ(FILE_ERROR_OK, GetLocalResourceEntry(src_path, &entry));
137   EXPECT_EQ(FILE_ERROR_NOT_FOUND, GetLocalResourceEntry(dest_path, &entry));
138 }
139
140 }  // namespace file_system
141 }  // namespace drive