forked from chromium/chromium
-
Notifications
You must be signed in to change notification settings - Fork 0
/
create_file_operation_unittest.cc
161 lines (137 loc) · 6.07 KB
/
create_file_operation_unittest.cc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
// Copyright 2013 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "components/drive/chromeos/file_system/create_file_operation.h"
#include "components/drive/file_change.h"
#include "components/drive/file_system/operation_test_base.h"
#include "content/public/test/test_utils.h"
#include "google_apis/drive/test_util.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace drive {
namespace file_system {
typedef OperationTestBase CreateFileOperationTest;
TEST_F(CreateFileOperationTest, CreateFile) {
CreateFileOperation operation(blocking_task_runner(),
delegate(),
metadata());
const base::FilePath kFilePath(FILE_PATH_LITERAL("drive/root/New File.txt"));
FileError error = FILE_ERROR_FAILED;
operation.CreateFile(
kFilePath,
true, // is_exclusive
std::string(), // no predetermined mime type
google_apis::test_util::CreateCopyResultCallback(&error));
content::RunAllBlockingPoolTasksUntilIdle();
EXPECT_EQ(FILE_ERROR_OK, error);
ResourceEntry entry;
EXPECT_EQ(FILE_ERROR_OK, GetLocalResourceEntry(kFilePath, &entry));
EXPECT_EQ(ResourceEntry::DIRTY, entry.metadata_edit_state());
EXPECT_FALSE(base::Time::FromInternalValue(
entry.file_info().last_modified()).is_null());
EXPECT_FALSE(base::Time::FromInternalValue(
entry.file_info().last_accessed()).is_null());
EXPECT_EQ(1u, delegate()->get_changed_files().size());
EXPECT_EQ(1u, delegate()->get_changed_files().count(kFilePath));
EXPECT_EQ(1u, delegate()->updated_local_ids().size());
EXPECT_EQ(1u, delegate()->updated_local_ids().count(entry.local_id()));
}
TEST_F(CreateFileOperationTest, CreateFileIsExclusive) {
CreateFileOperation operation(blocking_task_runner(),
delegate(),
metadata());
const base::FilePath kExistingFile(
FILE_PATH_LITERAL("drive/root/File 1.txt"));
const base::FilePath kExistingDirectory(
FILE_PATH_LITERAL("drive/root/Directory 1"));
const base::FilePath kNonExistingFile(
FILE_PATH_LITERAL("drive/root/Directory 1/not exist.png"));
const base::FilePath kFileInNonExistingDirectory(
FILE_PATH_LITERAL("drive/root/not exist/not exist.png"));
// Create fails if is_exclusive = true and a file exists.
FileError error = FILE_ERROR_FAILED;
operation.CreateFile(
kExistingFile,
true, // is_exclusive
std::string(), // no predetermined mime type
google_apis::test_util::CreateCopyResultCallback(&error));
content::RunAllBlockingPoolTasksUntilIdle();
EXPECT_EQ(FILE_ERROR_EXISTS, error);
// Create succeeds if is_exclusive = false and a file exists.
operation.CreateFile(
kExistingFile,
false, // is_exclusive
std::string(), // no predetermined mime type
google_apis::test_util::CreateCopyResultCallback(&error));
content::RunAllBlockingPoolTasksUntilIdle();
EXPECT_EQ(FILE_ERROR_OK, error);
// Create fails if a directory existed even when is_exclusive = false.
operation.CreateFile(
kExistingDirectory,
false, // is_exclusive
std::string(), // no predetermined mime type
google_apis::test_util::CreateCopyResultCallback(&error));
content::RunAllBlockingPoolTasksUntilIdle();
EXPECT_EQ(FILE_ERROR_EXISTS, error);
// Create succeeds if no entry exists.
operation.CreateFile(
kNonExistingFile,
true, // is_exclusive
std::string(), // no predetermined mime type
google_apis::test_util::CreateCopyResultCallback(&error));
content::RunAllBlockingPoolTasksUntilIdle();
EXPECT_EQ(FILE_ERROR_OK, error);
// Create fails if the parent directory does not exist.
operation.CreateFile(
kFileInNonExistingDirectory,
false, // is_exclusive
std::string(), // no predetermined mime type
google_apis::test_util::CreateCopyResultCallback(&error));
content::RunAllBlockingPoolTasksUntilIdle();
EXPECT_EQ(FILE_ERROR_NOT_A_DIRECTORY, error);
}
TEST_F(CreateFileOperationTest, CreateFileMimeType) {
CreateFileOperation operation(blocking_task_runner(),
delegate(),
metadata());
const base::FilePath kPng1(FILE_PATH_LITERAL("drive/root/1.png"));
const base::FilePath kPng2(FILE_PATH_LITERAL("drive/root/2.png"));
const base::FilePath kUnknown(FILE_PATH_LITERAL("drive/root/3.unknown"));
const std::string kSpecialMimeType("application/x-createfile-test");
FileError error = FILE_ERROR_FAILED;
operation.CreateFile(
kPng1,
false, // is_exclusive
std::string(), // no predetermined mime type
google_apis::test_util::CreateCopyResultCallback(&error));
content::RunAllBlockingPoolTasksUntilIdle();
EXPECT_EQ(FILE_ERROR_OK, error);
// If no mime type is specified, it is guessed from the file name.
ResourceEntry entry;
ASSERT_EQ(FILE_ERROR_OK, GetLocalResourceEntry(kPng1, &entry));
EXPECT_EQ("image/png", entry.file_specific_info().content_mime_type());
error = FILE_ERROR_FAILED;
operation.CreateFile(
kPng2,
false, // is_exclusive
kSpecialMimeType,
google_apis::test_util::CreateCopyResultCallback(&error));
content::RunAllBlockingPoolTasksUntilIdle();
EXPECT_EQ(FILE_ERROR_OK, error);
// If the mime type is explicitly set, respect it.
ASSERT_EQ(FILE_ERROR_OK, GetLocalResourceEntry(kPng2, &entry));
EXPECT_EQ(kSpecialMimeType, entry.file_specific_info().content_mime_type());
error = FILE_ERROR_FAILED;
operation.CreateFile(
kUnknown,
false, // is_exclusive
std::string(), // no predetermined mime type
google_apis::test_util::CreateCopyResultCallback(&error));
content::RunAllBlockingPoolTasksUntilIdle();
EXPECT_EQ(FILE_ERROR_OK, error);
// If the mime type is not set and unknown, default to octet-stream.
ASSERT_EQ(FILE_ERROR_OK, GetLocalResourceEntry(kUnknown, &entry));
EXPECT_EQ("application/octet-stream",
entry.file_specific_info().content_mime_type());
}
} // namespace file_system
} // namespace drive