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