- add sources.
[platform/framework/web/crosswalk.git] / src / chrome / browser / chromeos / drive / file_system / create_file_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/create_file_operation.h"
6
7 #include "chrome/browser/chromeos/drive/file_system/operation_test_base.h"
8 #include "chrome/browser/google_apis/test_util.h"
9 #include "testing/gtest/include/gtest/gtest.h"
10
11 namespace drive {
12 namespace file_system {
13
14 typedef OperationTestBase CreateFileOperationTest;
15
16 TEST_F(CreateFileOperationTest, CreateFile) {
17   CreateFileOperation operation(blocking_task_runner(),
18                                 observer(),
19                                 scheduler(),
20                                 metadata(),
21                                 cache());
22
23   const base::FilePath kExistingFile(
24       FILE_PATH_LITERAL("drive/root/File 1.txt"));
25   const base::FilePath kExistingDirectory(
26       FILE_PATH_LITERAL("drive/root/Directory 1"));
27   const base::FilePath kNonExistingFile(
28       FILE_PATH_LITERAL("drive/root/Directory 1/not exist.png"));
29   const base::FilePath kFileInNonExistingDirectory(
30       FILE_PATH_LITERAL("drive/root/not exist/not exist.png"));
31
32   // Create fails if is_exclusive = true and a file exists.
33   FileError error = FILE_ERROR_FAILED;
34   operation.CreateFile(
35       kExistingFile,
36       true,  // is_exclusive
37       std::string(),  // no predetermined mime type
38       google_apis::test_util::CreateCopyResultCallback(&error));
39   test_util::RunBlockingPoolTask();
40   EXPECT_EQ(FILE_ERROR_EXISTS, error);
41
42   // Create succeeds if is_exclusive = false and a file exists.
43   operation.CreateFile(
44       kExistingFile,
45       false,  // is_exclusive
46       std::string(),  // no predetermined mime type
47       google_apis::test_util::CreateCopyResultCallback(&error));
48   test_util::RunBlockingPoolTask();
49   EXPECT_EQ(FILE_ERROR_OK, error);
50
51   // Create fails if a directory existed even when is_exclusive = false.
52   operation.CreateFile(
53       kExistingDirectory,
54       false,  // is_exclusive
55       std::string(),  // no predetermined mime type
56       google_apis::test_util::CreateCopyResultCallback(&error));
57   test_util::RunBlockingPoolTask();
58   EXPECT_EQ(FILE_ERROR_EXISTS, error);
59
60   // Create succeeds if no entry exists.
61   operation.CreateFile(
62       kNonExistingFile,
63       true,   // is_exclusive
64       std::string(),  // no predetermined mime type
65       google_apis::test_util::CreateCopyResultCallback(&error));
66   test_util::RunBlockingPoolTask();
67   EXPECT_EQ(FILE_ERROR_OK, error);
68
69   // Create fails if the parent directory does not exist.
70   operation.CreateFile(
71       kFileInNonExistingDirectory,
72       false,  // is_exclusive
73       std::string(),  // no predetermined mime type
74       google_apis::test_util::CreateCopyResultCallback(&error));
75   test_util::RunBlockingPoolTask();
76   EXPECT_EQ(FILE_ERROR_NOT_A_DIRECTORY, error);
77 }
78
79 TEST_F(CreateFileOperationTest, CreateFileMimeType) {
80   CreateFileOperation operation(blocking_task_runner(),
81                                 observer(),
82                                 scheduler(),
83                                 metadata(),
84                                 cache());
85
86   const base::FilePath kPng1(FILE_PATH_LITERAL("drive/root/1.png"));
87   const base::FilePath kPng2(FILE_PATH_LITERAL("drive/root/2.png"));
88   const base::FilePath kUnknown(FILE_PATH_LITERAL("drive/root/3.unknown"));
89   const std::string kSpecialMimeType("application/x-createfile-test");
90
91   FileError error = FILE_ERROR_FAILED;
92   operation.CreateFile(
93       kPng1,
94       false,  // is_exclusive
95       std::string(),  // no predetermined mime type
96       google_apis::test_util::CreateCopyResultCallback(&error));
97   test_util::RunBlockingPoolTask();
98   EXPECT_EQ(FILE_ERROR_OK, error);
99
100   // If no mime type is specified, it is guessed from the file name.
101   ResourceEntry entry;
102   ASSERT_EQ(FILE_ERROR_OK, GetLocalResourceEntry(kPng1, &entry));
103   EXPECT_EQ("image/png", entry.file_specific_info().content_mime_type());
104
105   error = FILE_ERROR_FAILED;
106   operation.CreateFile(
107       kPng2,
108       false,  // is_exclusive
109       kSpecialMimeType,
110       google_apis::test_util::CreateCopyResultCallback(&error));
111   test_util::RunBlockingPoolTask();
112   EXPECT_EQ(FILE_ERROR_OK, error);
113
114   // If the mime type is explicitly set, respect it.
115   ASSERT_EQ(FILE_ERROR_OK, GetLocalResourceEntry(kPng2, &entry));
116   EXPECT_EQ(kSpecialMimeType, entry.file_specific_info().content_mime_type());
117
118   error = FILE_ERROR_FAILED;
119   operation.CreateFile(
120       kUnknown,
121       false,  // is_exclusive
122       std::string(),  // no predetermined mime type
123       google_apis::test_util::CreateCopyResultCallback(&error));
124   test_util::RunBlockingPoolTask();
125   EXPECT_EQ(FILE_ERROR_OK, error);
126
127   // If the mime type is not set and unknown, default to octet-stream.
128   ASSERT_EQ(FILE_ERROR_OK, GetLocalResourceEntry(kUnknown, &entry));
129   EXPECT_EQ("application/octet-stream",
130             entry.file_specific_info().content_mime_type());
131 }
132
133
134 }  // namespace file_system
135 }  // namespace drive