[Mac] Enable CrZombie for subprocesses in release builds.
[chromium-blink-merge.git] / webkit / fileapi / local_file_util_unittest.cc
blob119d919ed35b996cab9eea3917142c5e52b99820
1 // Copyright (c) 2011 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 <string>
7 #include "base/file_path.h"
8 #include "base/memory/scoped_callback_factory.h"
9 #include "base/message_loop_proxy.h"
10 #include "base/platform_file.h"
11 #include "base/scoped_temp_dir.h"
12 #include "base/sys_string_conversions.h"
13 #include "base/utf_string_conversions.h"
14 #include "testing/gtest/include/gtest/gtest.h"
15 #include "webkit/fileapi/file_system_context.h"
16 #include "webkit/fileapi/file_system_file_util.h"
17 #include "webkit/fileapi/file_system_operation_context.h"
18 #include "webkit/fileapi/file_system_path_manager.h"
19 #include "webkit/fileapi/file_system_test_helper.h"
20 #include "webkit/fileapi/file_system_types.h"
21 #include "webkit/fileapi/local_file_util.h"
22 #include "webkit/fileapi/native_file_util.h"
24 namespace fileapi {
26 // TODO(dmikurube): Cover all public methods in LocalFileUtil.
27 class LocalFileUtilTest : public testing::Test {
28 public:
29 LocalFileUtilTest()
30 : local_file_util_(new LocalFileUtil(new NativeFileUtil())),
31 callback_factory_(ALLOW_THIS_IN_INITIALIZER_LIST(this)) {
34 void SetUp() {
35 ASSERT_TRUE(data_dir_.CreateUniqueTempDir());
36 test_helper_.SetUp(data_dir_.path(), FileUtil());
39 void TearDown() {
40 test_helper_.TearDown();
43 protected:
44 FileSystemOperationContext* NewContext() {
45 FileSystemOperationContext* context = test_helper_.NewOperationContext();
46 return context;
49 LocalFileUtil* FileUtil() {
50 return local_file_util_.get();
53 static FilePath Path(const std::string& file_name) {
54 return FilePath().AppendASCII(file_name);
57 FilePath LocalPath(const char *file_name) {
58 return test_helper_.GetLocalPathFromASCII(file_name);
61 bool FileExists(const char *file_name) {
62 return file_util::PathExists(LocalPath(file_name)) &&
63 !file_util::DirectoryExists(LocalPath(file_name));
66 bool DirectoryExists(const char *file_name) {
67 return file_util::DirectoryExists(LocalPath(file_name));
70 int64 GetSize(const char *file_name) {
71 base::PlatformFileInfo info;
72 file_util::GetFileInfo(LocalPath(file_name), &info);
73 return info.size;
76 base::PlatformFileError CreateFile(const char* file_name,
77 base::PlatformFile* file_handle, bool* created) {
78 int file_flags = base::PLATFORM_FILE_CREATE |
79 base::PLATFORM_FILE_WRITE | base::PLATFORM_FILE_ASYNC;
81 scoped_ptr<FileSystemOperationContext> context(NewContext());
82 return FileUtil()->CreateOrOpen(
83 context.get(),
84 Path(file_name),
85 file_flags, file_handle, created);
88 base::PlatformFileError EnsureFileExists(const char* file_name,
89 bool* created) {
90 scoped_ptr<FileSystemOperationContext> context(NewContext());
91 return FileUtil()->EnsureFileExists(
92 context.get(),
93 Path(file_name), created);
96 private:
97 scoped_ptr<LocalFileUtil> local_file_util_;
98 ScopedTempDir data_dir_;
99 FileSystemTestOriginHelper test_helper_;
101 base::ScopedCallbackFactory<LocalFileUtilTest> callback_factory_;
103 DISALLOW_COPY_AND_ASSIGN(LocalFileUtilTest);
106 TEST_F(LocalFileUtilTest, CreateAndClose) {
107 const char *file_name = "test_file";
108 base::PlatformFile file_handle;
109 bool created;
110 ASSERT_EQ(base::PLATFORM_FILE_OK,
111 CreateFile(file_name, &file_handle, &created));
112 ASSERT_TRUE(created);
114 EXPECT_TRUE(FileExists(file_name));
115 EXPECT_EQ(0, GetSize(file_name));
117 scoped_ptr<FileSystemOperationContext> context(NewContext());
118 EXPECT_EQ(base::PLATFORM_FILE_OK,
119 FileUtil()->Close(context.get(), file_handle));
122 TEST_F(LocalFileUtilTest, EnsureFileExists) {
123 const char *file_name = "foobar";
124 bool created;
125 ASSERT_EQ(base::PLATFORM_FILE_OK, EnsureFileExists(file_name, &created));
126 ASSERT_TRUE(created);
128 EXPECT_TRUE(FileExists(file_name));
129 EXPECT_EQ(0, GetSize(file_name));
131 ASSERT_EQ(base::PLATFORM_FILE_OK, EnsureFileExists(file_name, &created));
132 EXPECT_FALSE(created);
135 TEST_F(LocalFileUtilTest, Truncate) {
136 const char *file_name = "truncated";
137 bool created;
138 ASSERT_EQ(base::PLATFORM_FILE_OK, EnsureFileExists(file_name, &created));
139 ASSERT_TRUE(created);
141 scoped_ptr<FileSystemOperationContext> context;
143 context.reset(NewContext());
144 ASSERT_EQ(base::PLATFORM_FILE_OK,
145 FileUtil()->Truncate(context.get(), Path(file_name), 1020));
147 EXPECT_TRUE(FileExists(file_name));
148 EXPECT_EQ(1020, GetSize(file_name));
151 TEST_F(LocalFileUtilTest, CopyFile) {
152 const char *from_file = "fromfile";
153 const char *to_file1 = "tofile1";
154 const char *to_file2 = "tofile2";
155 bool created;
156 ASSERT_EQ(base::PLATFORM_FILE_OK, EnsureFileExists(from_file, &created));
157 ASSERT_TRUE(created);
158 scoped_ptr<FileSystemOperationContext> context;
160 context.reset(NewContext());
161 ASSERT_EQ(base::PLATFORM_FILE_OK,
162 FileUtil()->Truncate(context.get(), Path(from_file), 1020));
164 EXPECT_TRUE(FileExists(from_file));
165 EXPECT_EQ(1020, GetSize(from_file));
167 context.reset(NewContext());
168 ASSERT_EQ(base::PLATFORM_FILE_OK,
169 FileUtil()->Copy(context.get(), Path(from_file), Path(to_file1)));
171 context.reset(NewContext());
172 ASSERT_EQ(base::PLATFORM_FILE_OK,
173 FileUtil()->Copy(context.get(), Path(from_file), Path(to_file2)));
175 EXPECT_TRUE(FileExists(from_file));
176 EXPECT_EQ(1020, GetSize(from_file));
177 EXPECT_TRUE(FileExists(to_file1));
178 EXPECT_EQ(1020, GetSize(to_file1));
179 EXPECT_TRUE(FileExists(to_file2));
180 EXPECT_EQ(1020, GetSize(to_file2));
183 TEST_F(LocalFileUtilTest, CopyDirectory) {
184 const char *from_dir = "fromdir";
185 const char *from_file = "fromdir/fromfile";
186 const char *to_dir = "todir";
187 const char *to_file = "todir/fromfile";
188 bool created;
189 scoped_ptr<FileSystemOperationContext> context;
191 context.reset(NewContext());
192 ASSERT_EQ(base::PLATFORM_FILE_OK,
193 FileUtil()->CreateDirectory(context.get(), Path(from_dir), false, false));
194 ASSERT_EQ(base::PLATFORM_FILE_OK, EnsureFileExists(from_file, &created));
195 ASSERT_TRUE(created);
197 context.reset(NewContext());
198 ASSERT_EQ(base::PLATFORM_FILE_OK,
199 FileUtil()->Truncate(context.get(), Path(from_file), 1020));
201 EXPECT_TRUE(DirectoryExists(from_dir));
202 EXPECT_TRUE(FileExists(from_file));
203 EXPECT_EQ(1020, GetSize(from_file));
204 EXPECT_FALSE(DirectoryExists(to_dir));
206 context.reset(NewContext());
207 ASSERT_EQ(base::PLATFORM_FILE_OK,
208 FileUtil()->Copy(context.get(), Path(from_dir), Path(to_dir)));
210 EXPECT_TRUE(DirectoryExists(from_dir));
211 EXPECT_TRUE(FileExists(from_file));
212 EXPECT_EQ(1020, GetSize(from_file));
213 EXPECT_TRUE(DirectoryExists(to_dir));
214 EXPECT_TRUE(FileExists(to_file));
215 EXPECT_EQ(1020, GetSize(to_file));
218 TEST_F(LocalFileUtilTest, MoveFile) {
219 const char *from_file = "fromfile";
220 const char *to_file = "tofile";
221 bool created;
222 ASSERT_EQ(base::PLATFORM_FILE_OK, EnsureFileExists(from_file, &created));
223 ASSERT_TRUE(created);
224 scoped_ptr<FileSystemOperationContext> context;
226 context.reset(NewContext());
227 ASSERT_EQ(base::PLATFORM_FILE_OK,
228 FileUtil()->Truncate(context.get(), Path(from_file), 1020));
230 EXPECT_TRUE(FileExists(from_file));
231 EXPECT_EQ(1020, GetSize(from_file));
233 context.reset(NewContext());
234 ASSERT_EQ(base::PLATFORM_FILE_OK,
235 FileUtil()->Move(context.get(), Path(from_file), Path(to_file)));
237 EXPECT_FALSE(FileExists(from_file));
238 EXPECT_TRUE(FileExists(to_file));
239 EXPECT_EQ(1020, GetSize(to_file));
242 TEST_F(LocalFileUtilTest, MoveDirectory) {
243 const char *from_dir = "fromdir";
244 const char *from_file = "fromdir/fromfile";
245 const char *to_dir = "todir";
246 const char *to_file = "todir/fromfile";
247 bool created;
248 scoped_ptr<FileSystemOperationContext> context;
250 context.reset(NewContext());
251 ASSERT_EQ(base::PLATFORM_FILE_OK,
252 FileUtil()->CreateDirectory(context.get(), Path(from_dir), false, false));
253 ASSERT_EQ(base::PLATFORM_FILE_OK, EnsureFileExists(from_file, &created));
254 ASSERT_TRUE(created);
256 context.reset(NewContext());
257 ASSERT_EQ(base::PLATFORM_FILE_OK,
258 FileUtil()->Truncate(context.get(), Path(from_file), 1020));
260 EXPECT_TRUE(DirectoryExists(from_dir));
261 EXPECT_TRUE(FileExists(from_file));
262 EXPECT_EQ(1020, GetSize(from_file));
263 EXPECT_FALSE(DirectoryExists(to_dir));
265 context.reset(NewContext());
266 ASSERT_EQ(base::PLATFORM_FILE_OK,
267 FileUtil()->Move(context.get(), Path(from_dir), Path(to_dir)));
269 EXPECT_FALSE(DirectoryExists(from_dir));
270 EXPECT_TRUE(DirectoryExists(to_dir));
271 EXPECT_TRUE(FileExists(to_file));
272 EXPECT_EQ(1020, GetSize(to_file));
275 } // namespace fileapi