Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(60)

Side by Side Diff: components/filesystem/file_impl_unittest.cc

Issue 1166763002: Reland "Mandoline filesystem: Build the filesystem on windows." (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: DWORD -> INT for real checking. (This was wrong.) Created 5 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « components/filesystem/file_impl.cc ('k') | components/filesystem/file_system_impl.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include <vector> 5 #include <vector>
6 6
7 #include "base/files/file.h" 7 #include "base/files/file.h"
8 #include "components/filesystem/files_test_base.h" 8 #include "components/filesystem/files_test_base.h"
9 #include "mojo/platform_handle/platform_handle_functions.h" 9 #include "mojo/platform_handle/platform_handle_functions.h"
10 #include "mojo/public/cpp/bindings/interface_request.h" 10 #include "mojo/public/cpp/bindings/interface_request.h"
11 #include "mojo/public/cpp/bindings/type_converter.h" 11 #include "mojo/public/cpp/bindings/type_converter.h"
12 12
13 namespace filesystem { 13 namespace filesystem {
14 namespace { 14 namespace {
15 15
16 using FileImplTest = FilesTestBase; 16 using FileImplTest = FilesTestBase;
17 17
18 TEST_F(FileImplTest, CreateWriteCloseRenameOpenRead) { 18 TEST_F(FileImplTest, CreateWriteCloseRenameOpenRead) {
19 DirectoryPtr directory; 19 DirectoryPtr directory;
20 GetTemporaryRoot(&directory); 20 GetTemporaryRoot(&directory);
21 Error error; 21 FileError error;
22 22
23 { 23 {
24 // Create my_file. 24 // Create my_file.
25 FilePtr file; 25 FilePtr file;
26 error = ERROR_FAILED; 26 error = FILE_ERROR_FAILED;
27 directory->OpenFile("my_file", GetProxy(&file), kFlagWrite | kFlagCreate, 27 directory->OpenFile("my_file", GetProxy(&file), kFlagWrite | kFlagCreate,
28 Capture(&error)); 28 Capture(&error));
29 ASSERT_TRUE(directory.WaitForIncomingResponse()); 29 ASSERT_TRUE(directory.WaitForIncomingResponse());
30 EXPECT_EQ(ERROR_OK, error); 30 EXPECT_EQ(FILE_ERROR_OK, error);
31 31
32 // Write to it. 32 // Write to it.
33 std::vector<uint8_t> bytes_to_write; 33 std::vector<uint8_t> bytes_to_write;
34 bytes_to_write.push_back(static_cast<uint8_t>('h')); 34 bytes_to_write.push_back(static_cast<uint8_t>('h'));
35 bytes_to_write.push_back(static_cast<uint8_t>('e')); 35 bytes_to_write.push_back(static_cast<uint8_t>('e'));
36 bytes_to_write.push_back(static_cast<uint8_t>('l')); 36 bytes_to_write.push_back(static_cast<uint8_t>('l'));
37 bytes_to_write.push_back(static_cast<uint8_t>('l')); 37 bytes_to_write.push_back(static_cast<uint8_t>('l'));
38 bytes_to_write.push_back(static_cast<uint8_t>('o')); 38 bytes_to_write.push_back(static_cast<uint8_t>('o'));
39 error = ERROR_FAILED; 39 error = FILE_ERROR_FAILED;
40 uint32_t num_bytes_written = 0; 40 uint32_t num_bytes_written = 0;
41 file->Write(mojo::Array<uint8_t>::From(bytes_to_write), 0, 41 file->Write(mojo::Array<uint8_t>::From(bytes_to_write), 0,
42 WHENCE_FROM_CURRENT, Capture(&error, &num_bytes_written)); 42 WHENCE_FROM_CURRENT, Capture(&error, &num_bytes_written));
43 ASSERT_TRUE(file.WaitForIncomingResponse()); 43 ASSERT_TRUE(file.WaitForIncomingResponse());
44 EXPECT_EQ(ERROR_OK, error); 44 EXPECT_EQ(FILE_ERROR_OK, error);
45 EXPECT_EQ(bytes_to_write.size(), num_bytes_written); 45 EXPECT_EQ(bytes_to_write.size(), num_bytes_written);
46 46
47 // Close it. 47 // Close it.
48 error = ERROR_FAILED; 48 error = FILE_ERROR_FAILED;
49 file->Close(Capture(&error)); 49 file->Close(Capture(&error));
50 ASSERT_TRUE(file.WaitForIncomingResponse()); 50 ASSERT_TRUE(file.WaitForIncomingResponse());
51 EXPECT_EQ(ERROR_OK, error); 51 EXPECT_EQ(FILE_ERROR_OK, error);
52 } 52 }
53 53
54 // Rename it. 54 // Rename it.
55 error = ERROR_FAILED; 55 error = FILE_ERROR_FAILED;
56 directory->Rename("my_file", "your_file", Capture(&error)); 56 directory->Rename("my_file", "your_file", Capture(&error));
57 ASSERT_TRUE(directory.WaitForIncomingResponse()); 57 ASSERT_TRUE(directory.WaitForIncomingResponse());
58 EXPECT_EQ(ERROR_OK, error); 58 EXPECT_EQ(FILE_ERROR_OK, error);
59 59
60 { 60 {
61 // Open my_file again. 61 // Open my_file again.
62 FilePtr file; 62 FilePtr file;
63 error = ERROR_FAILED; 63 error = FILE_ERROR_FAILED;
64 directory->OpenFile("your_file", GetProxy(&file), kFlagRead | kFlagOpen, 64 directory->OpenFile("your_file", GetProxy(&file), kFlagRead | kFlagOpen,
65 Capture(&error)); 65 Capture(&error));
66 ASSERT_TRUE(directory.WaitForIncomingResponse()); 66 ASSERT_TRUE(directory.WaitForIncomingResponse());
67 EXPECT_EQ(ERROR_OK, error); 67 EXPECT_EQ(FILE_ERROR_OK, error);
68 68
69 // Read from it. 69 // Read from it.
70 mojo::Array<uint8_t> bytes_read; 70 mojo::Array<uint8_t> bytes_read;
71 error = ERROR_FAILED; 71 error = FILE_ERROR_FAILED;
72 file->Read(3, 1, WHENCE_FROM_BEGIN, Capture(&error, &bytes_read)); 72 file->Read(3, 1, WHENCE_FROM_BEGIN, Capture(&error, &bytes_read));
73 ASSERT_TRUE(file.WaitForIncomingResponse()); 73 ASSERT_TRUE(file.WaitForIncomingResponse());
74 EXPECT_EQ(ERROR_OK, error); 74 EXPECT_EQ(FILE_ERROR_OK, error);
75 ASSERT_EQ(3u, bytes_read.size()); 75 ASSERT_EQ(3u, bytes_read.size());
76 EXPECT_EQ(static_cast<uint8_t>('e'), bytes_read[0]); 76 EXPECT_EQ(static_cast<uint8_t>('e'), bytes_read[0]);
77 EXPECT_EQ(static_cast<uint8_t>('l'), bytes_read[1]); 77 EXPECT_EQ(static_cast<uint8_t>('l'), bytes_read[1]);
78 EXPECT_EQ(static_cast<uint8_t>('l'), bytes_read[2]); 78 EXPECT_EQ(static_cast<uint8_t>('l'), bytes_read[2]);
79 } 79 }
80 80
81 // TODO(vtl): Test read/write offset options. 81 // TODO(vtl): Test read/write offset options.
82 } 82 }
83 83
84 TEST_F(FileImplTest, CantWriteInReadMode) { 84 TEST_F(FileImplTest, CantWriteInReadMode) {
85 DirectoryPtr directory; 85 DirectoryPtr directory;
86 GetTemporaryRoot(&directory); 86 GetTemporaryRoot(&directory);
87 Error error; 87 FileError error;
88 88
89 std::vector<uint8_t> bytes_to_write; 89 std::vector<uint8_t> bytes_to_write;
90 bytes_to_write.push_back(static_cast<uint8_t>('h')); 90 bytes_to_write.push_back(static_cast<uint8_t>('h'));
91 bytes_to_write.push_back(static_cast<uint8_t>('e')); 91 bytes_to_write.push_back(static_cast<uint8_t>('e'));
92 bytes_to_write.push_back(static_cast<uint8_t>('l')); 92 bytes_to_write.push_back(static_cast<uint8_t>('l'));
93 bytes_to_write.push_back(static_cast<uint8_t>('l')); 93 bytes_to_write.push_back(static_cast<uint8_t>('l'));
94 bytes_to_write.push_back(static_cast<uint8_t>('o')); 94 bytes_to_write.push_back(static_cast<uint8_t>('o'));
95 95
96 { 96 {
97 // Create my_file. 97 // Create my_file.
98 FilePtr file; 98 FilePtr file;
99 error = ERROR_FAILED; 99 error = FILE_ERROR_FAILED;
100 directory->OpenFile("my_file", GetProxy(&file), kFlagWrite | kFlagCreate, 100 directory->OpenFile("my_file", GetProxy(&file), kFlagWrite | kFlagCreate,
101 Capture(&error)); 101 Capture(&error));
102 ASSERT_TRUE(directory.WaitForIncomingResponse()); 102 ASSERT_TRUE(directory.WaitForIncomingResponse());
103 EXPECT_EQ(ERROR_OK, error); 103 EXPECT_EQ(FILE_ERROR_OK, error);
104 104
105 // Write to it. 105 // Write to it.
106 error = ERROR_FAILED; 106 error = FILE_ERROR_FAILED;
107 uint32_t num_bytes_written = 0; 107 uint32_t num_bytes_written = 0;
108 file->Write(mojo::Array<uint8_t>::From(bytes_to_write), 0, 108 file->Write(mojo::Array<uint8_t>::From(bytes_to_write), 0,
109 WHENCE_FROM_CURRENT, Capture(&error, &num_bytes_written)); 109 WHENCE_FROM_CURRENT, Capture(&error, &num_bytes_written));
110 ASSERT_TRUE(file.WaitForIncomingResponse()); 110 ASSERT_TRUE(file.WaitForIncomingResponse());
111 EXPECT_EQ(ERROR_OK, error); 111 EXPECT_EQ(FILE_ERROR_OK, error);
112 EXPECT_EQ(bytes_to_write.size(), num_bytes_written); 112 EXPECT_EQ(bytes_to_write.size(), num_bytes_written);
113 113
114 // Close it. 114 // Close it.
115 error = ERROR_FAILED; 115 error = FILE_ERROR_FAILED;
116 file->Close(Capture(&error)); 116 file->Close(Capture(&error));
117 ASSERT_TRUE(file.WaitForIncomingResponse()); 117 ASSERT_TRUE(file.WaitForIncomingResponse());
118 EXPECT_EQ(ERROR_OK, error); 118 EXPECT_EQ(FILE_ERROR_OK, error);
119 } 119 }
120 120
121 { 121 {
122 // Open my_file again, this time with read only mode. 122 // Open my_file again, this time with read only mode.
123 FilePtr file; 123 FilePtr file;
124 error = ERROR_FAILED; 124 error = FILE_ERROR_FAILED;
125 directory->OpenFile("my_file", GetProxy(&file), kFlagRead | kFlagOpen, 125 directory->OpenFile("my_file", GetProxy(&file), kFlagRead | kFlagOpen,
126 Capture(&error)); 126 Capture(&error));
127 ASSERT_TRUE(directory.WaitForIncomingResponse()); 127 ASSERT_TRUE(directory.WaitForIncomingResponse());
128 EXPECT_EQ(ERROR_OK, error); 128 EXPECT_EQ(FILE_ERROR_OK, error);
129 129
130 // Try to write in read mode; it should fail. 130 // Try to write in read mode; it should fail.
131 error = ERROR_OK; 131 error = FILE_ERROR_OK;
132 uint32_t num_bytes_written = 0; 132 uint32_t num_bytes_written = 0;
133 file->Write(mojo::Array<uint8_t>::From(bytes_to_write), 0, 133 file->Write(mojo::Array<uint8_t>::From(bytes_to_write), 0,
134 WHENCE_FROM_CURRENT, Capture(&error, &num_bytes_written)); 134 WHENCE_FROM_CURRENT, Capture(&error, &num_bytes_written));
135 135
136 ASSERT_TRUE(file.WaitForIncomingResponse()); 136 ASSERT_TRUE(file.WaitForIncomingResponse());
137 EXPECT_EQ(ERROR_FAILED, error); 137 EXPECT_EQ(FILE_ERROR_FAILED, error);
138 EXPECT_EQ(0u, num_bytes_written); 138 EXPECT_EQ(0u, num_bytes_written);
139 139
140 // Close it. 140 // Close it.
141 error = ERROR_FAILED; 141 error = FILE_ERROR_FAILED;
142 file->Close(Capture(&error)); 142 file->Close(Capture(&error));
143 ASSERT_TRUE(file.WaitForIncomingResponse()); 143 ASSERT_TRUE(file.WaitForIncomingResponse());
144 EXPECT_EQ(ERROR_OK, error); 144 EXPECT_EQ(FILE_ERROR_OK, error);
145 } 145 }
146 } 146 }
147 147
148 TEST_F(FileImplTest, OpenInAppendMode) { 148 TEST_F(FileImplTest, OpenInAppendMode) {
149 DirectoryPtr directory; 149 DirectoryPtr directory;
150 GetTemporaryRoot(&directory); 150 GetTemporaryRoot(&directory);
151 Error error; 151 FileError error;
152 152
153 { 153 {
154 // Create my_file. 154 // Create my_file.
155 FilePtr file; 155 FilePtr file;
156 error = ERROR_FAILED; 156 error = FILE_ERROR_FAILED;
157 directory->OpenFile("my_file", GetProxy(&file), kFlagWrite | kFlagCreate, 157 directory->OpenFile("my_file", GetProxy(&file), kFlagWrite | kFlagCreate,
158 Capture(&error)); 158 Capture(&error));
159 ASSERT_TRUE(directory.WaitForIncomingResponse()); 159 ASSERT_TRUE(directory.WaitForIncomingResponse());
160 EXPECT_EQ(ERROR_OK, error); 160 EXPECT_EQ(FILE_ERROR_OK, error);
161 161
162 // Write to it. 162 // Write to it.
163 std::vector<uint8_t> bytes_to_write; 163 std::vector<uint8_t> bytes_to_write;
164 bytes_to_write.push_back(static_cast<uint8_t>('h')); 164 bytes_to_write.push_back(static_cast<uint8_t>('h'));
165 bytes_to_write.push_back(static_cast<uint8_t>('e')); 165 bytes_to_write.push_back(static_cast<uint8_t>('e'));
166 bytes_to_write.push_back(static_cast<uint8_t>('l')); 166 bytes_to_write.push_back(static_cast<uint8_t>('l'));
167 bytes_to_write.push_back(static_cast<uint8_t>('l')); 167 bytes_to_write.push_back(static_cast<uint8_t>('l'));
168 bytes_to_write.push_back(static_cast<uint8_t>('o')); 168 bytes_to_write.push_back(static_cast<uint8_t>('o'));
169 error = ERROR_FAILED; 169 error = FILE_ERROR_FAILED;
170 uint32_t num_bytes_written = 0; 170 uint32_t num_bytes_written = 0;
171 file->Write(mojo::Array<uint8_t>::From(bytes_to_write), 0, 171 file->Write(mojo::Array<uint8_t>::From(bytes_to_write), 0,
172 WHENCE_FROM_CURRENT, Capture(&error, &num_bytes_written)); 172 WHENCE_FROM_CURRENT, Capture(&error, &num_bytes_written));
173 ASSERT_TRUE(file.WaitForIncomingResponse()); 173 ASSERT_TRUE(file.WaitForIncomingResponse());
174 EXPECT_EQ(ERROR_OK, error); 174 EXPECT_EQ(FILE_ERROR_OK, error);
175 EXPECT_EQ(bytes_to_write.size(), num_bytes_written); 175 EXPECT_EQ(bytes_to_write.size(), num_bytes_written);
176 176
177 // Close it. 177 // Close it.
178 error = ERROR_FAILED; 178 error = FILE_ERROR_FAILED;
179 file->Close(Capture(&error)); 179 file->Close(Capture(&error));
180 ASSERT_TRUE(file.WaitForIncomingResponse()); 180 ASSERT_TRUE(file.WaitForIncomingResponse());
181 EXPECT_EQ(ERROR_OK, error); 181 EXPECT_EQ(FILE_ERROR_OK, error);
182 } 182 }
183 183
184 { 184 {
185 // Append to my_file. 185 // Append to my_file.
186 FilePtr file; 186 FilePtr file;
187 error = ERROR_FAILED; 187 error = FILE_ERROR_FAILED;
188 directory->OpenFile("my_file", GetProxy(&file), kFlagAppend | kFlagOpen, 188 directory->OpenFile("my_file", GetProxy(&file), kFlagAppend | kFlagOpen,
189 Capture(&error)); 189 Capture(&error));
190 ASSERT_TRUE(directory.WaitForIncomingResponse()); 190 ASSERT_TRUE(directory.WaitForIncomingResponse());
191 EXPECT_EQ(ERROR_OK, error); 191 EXPECT_EQ(FILE_ERROR_OK, error);
192 192
193 // Write to it. 193 // Write to it.
194 std::vector<uint8_t> bytes_to_write; 194 std::vector<uint8_t> bytes_to_write;
195 bytes_to_write.push_back(static_cast<uint8_t>('g')); 195 bytes_to_write.push_back(static_cast<uint8_t>('g'));
196 bytes_to_write.push_back(static_cast<uint8_t>('o')); 196 bytes_to_write.push_back(static_cast<uint8_t>('o'));
197 bytes_to_write.push_back(static_cast<uint8_t>('o')); 197 bytes_to_write.push_back(static_cast<uint8_t>('o'));
198 bytes_to_write.push_back(static_cast<uint8_t>('d')); 198 bytes_to_write.push_back(static_cast<uint8_t>('d'));
199 bytes_to_write.push_back(static_cast<uint8_t>('b')); 199 bytes_to_write.push_back(static_cast<uint8_t>('b'));
200 bytes_to_write.push_back(static_cast<uint8_t>('y')); 200 bytes_to_write.push_back(static_cast<uint8_t>('y'));
201 bytes_to_write.push_back(static_cast<uint8_t>('e')); 201 bytes_to_write.push_back(static_cast<uint8_t>('e'));
202 error = ERROR_FAILED; 202 error = FILE_ERROR_FAILED;
203 uint32_t num_bytes_written = 0; 203 uint32_t num_bytes_written = 0;
204 file->Write(mojo::Array<uint8_t>::From(bytes_to_write), 0, 204 file->Write(mojo::Array<uint8_t>::From(bytes_to_write), 0,
205 WHENCE_FROM_CURRENT, Capture(&error, &num_bytes_written)); 205 WHENCE_FROM_CURRENT, Capture(&error, &num_bytes_written));
206 ASSERT_TRUE(file.WaitForIncomingResponse()); 206 ASSERT_TRUE(file.WaitForIncomingResponse());
207 EXPECT_EQ(ERROR_OK, error); 207 EXPECT_EQ(FILE_ERROR_OK, error);
208 EXPECT_EQ(bytes_to_write.size(), num_bytes_written); 208 EXPECT_EQ(bytes_to_write.size(), num_bytes_written);
209 209
210 // Close it. 210 // Close it.
211 error = ERROR_FAILED; 211 error = FILE_ERROR_FAILED;
212 file->Close(Capture(&error)); 212 file->Close(Capture(&error));
213 ASSERT_TRUE(file.WaitForIncomingResponse()); 213 ASSERT_TRUE(file.WaitForIncomingResponse());
214 EXPECT_EQ(ERROR_OK, error); 214 EXPECT_EQ(FILE_ERROR_OK, error);
215 } 215 }
216 216
217 { 217 {
218 // Open my_file again. 218 // Open my_file again.
219 FilePtr file; 219 FilePtr file;
220 error = ERROR_FAILED; 220 error = FILE_ERROR_FAILED;
221 directory->OpenFile("my_file", GetProxy(&file), kFlagRead | kFlagOpen, 221 directory->OpenFile("my_file", GetProxy(&file), kFlagRead | kFlagOpen,
222 Capture(&error)); 222 Capture(&error));
223 ASSERT_TRUE(directory.WaitForIncomingResponse()); 223 ASSERT_TRUE(directory.WaitForIncomingResponse());
224 EXPECT_EQ(ERROR_OK, error); 224 EXPECT_EQ(FILE_ERROR_OK, error);
225 225
226 // Read from it. 226 // Read from it.
227 mojo::Array<uint8_t> bytes_read; 227 mojo::Array<uint8_t> bytes_read;
228 error = ERROR_FAILED; 228 error = FILE_ERROR_FAILED;
229 file->Read(12, 0, WHENCE_FROM_BEGIN, Capture(&error, &bytes_read)); 229 file->Read(12, 0, WHENCE_FROM_BEGIN, Capture(&error, &bytes_read));
230 ASSERT_TRUE(file.WaitForIncomingResponse()); 230 ASSERT_TRUE(file.WaitForIncomingResponse());
231 EXPECT_EQ(ERROR_OK, error); 231 EXPECT_EQ(FILE_ERROR_OK, error);
232 ASSERT_EQ(12u, bytes_read.size()); 232 ASSERT_EQ(12u, bytes_read.size());
233 EXPECT_EQ(static_cast<uint8_t>('l'), bytes_read[3]); 233 EXPECT_EQ(static_cast<uint8_t>('l'), bytes_read[3]);
234 EXPECT_EQ(static_cast<uint8_t>('o'), bytes_read[4]); 234 EXPECT_EQ(static_cast<uint8_t>('o'), bytes_read[4]);
235 EXPECT_EQ(static_cast<uint8_t>('g'), bytes_read[5]); 235 EXPECT_EQ(static_cast<uint8_t>('g'), bytes_read[5]);
236 EXPECT_EQ(static_cast<uint8_t>('o'), bytes_read[6]); 236 EXPECT_EQ(static_cast<uint8_t>('o'), bytes_read[6]);
237 } 237 }
238 } 238 }
239 239
240 TEST_F(FileImplTest, OpenInTruncateMode) { 240 TEST_F(FileImplTest, OpenInTruncateMode) {
241 DirectoryPtr directory; 241 DirectoryPtr directory;
242 GetTemporaryRoot(&directory); 242 GetTemporaryRoot(&directory);
243 Error error; 243 FileError error;
244 244
245 { 245 {
246 // Create my_file. 246 // Create my_file.
247 FilePtr file; 247 FilePtr file;
248 error = ERROR_FAILED; 248 error = FILE_ERROR_FAILED;
249 directory->OpenFile("my_file", GetProxy(&file), kFlagWrite | kFlagCreate, 249 directory->OpenFile("my_file", GetProxy(&file), kFlagWrite | kFlagCreate,
250 Capture(&error)); 250 Capture(&error));
251 ASSERT_TRUE(directory.WaitForIncomingResponse()); 251 ASSERT_TRUE(directory.WaitForIncomingResponse());
252 EXPECT_EQ(ERROR_OK, error); 252 EXPECT_EQ(FILE_ERROR_OK, error);
253 253
254 // Write to it. 254 // Write to it.
255 std::vector<uint8_t> bytes_to_write; 255 std::vector<uint8_t> bytes_to_write;
256 bytes_to_write.push_back(static_cast<uint8_t>('h')); 256 bytes_to_write.push_back(static_cast<uint8_t>('h'));
257 bytes_to_write.push_back(static_cast<uint8_t>('e')); 257 bytes_to_write.push_back(static_cast<uint8_t>('e'));
258 bytes_to_write.push_back(static_cast<uint8_t>('l')); 258 bytes_to_write.push_back(static_cast<uint8_t>('l'));
259 bytes_to_write.push_back(static_cast<uint8_t>('l')); 259 bytes_to_write.push_back(static_cast<uint8_t>('l'));
260 bytes_to_write.push_back(static_cast<uint8_t>('o')); 260 bytes_to_write.push_back(static_cast<uint8_t>('o'));
261 error = ERROR_FAILED; 261 error = FILE_ERROR_FAILED;
262 uint32_t num_bytes_written = 0; 262 uint32_t num_bytes_written = 0;
263 file->Write(mojo::Array<uint8_t>::From(bytes_to_write), 0, 263 file->Write(mojo::Array<uint8_t>::From(bytes_to_write), 0,
264 WHENCE_FROM_CURRENT, Capture(&error, &num_bytes_written)); 264 WHENCE_FROM_CURRENT, Capture(&error, &num_bytes_written));
265 ASSERT_TRUE(file.WaitForIncomingResponse()); 265 ASSERT_TRUE(file.WaitForIncomingResponse());
266 EXPECT_EQ(ERROR_OK, error); 266 EXPECT_EQ(FILE_ERROR_OK, error);
267 EXPECT_EQ(bytes_to_write.size(), num_bytes_written); 267 EXPECT_EQ(bytes_to_write.size(), num_bytes_written);
268 268
269 // Close it. 269 // Close it.
270 error = ERROR_FAILED; 270 error = FILE_ERROR_FAILED;
271 file->Close(Capture(&error)); 271 file->Close(Capture(&error));
272 ASSERT_TRUE(file.WaitForIncomingResponse()); 272 ASSERT_TRUE(file.WaitForIncomingResponse());
273 EXPECT_EQ(ERROR_OK, error); 273 EXPECT_EQ(FILE_ERROR_OK, error);
274 } 274 }
275 275
276 { 276 {
277 // Append to my_file. 277 // Append to my_file.
278 FilePtr file; 278 FilePtr file;
279 error = ERROR_FAILED; 279 error = FILE_ERROR_FAILED;
280 directory->OpenFile("my_file", GetProxy(&file), 280 directory->OpenFile("my_file", GetProxy(&file),
281 kFlagWrite | kFlagOpenTruncated, Capture(&error)); 281 kFlagWrite | kFlagOpenTruncated, Capture(&error));
282 ASSERT_TRUE(directory.WaitForIncomingResponse()); 282 ASSERT_TRUE(directory.WaitForIncomingResponse());
283 EXPECT_EQ(ERROR_OK, error); 283 EXPECT_EQ(FILE_ERROR_OK, error);
284 284
285 // Write to it. 285 // Write to it.
286 std::vector<uint8_t> bytes_to_write; 286 std::vector<uint8_t> bytes_to_write;
287 bytes_to_write.push_back(static_cast<uint8_t>('g')); 287 bytes_to_write.push_back(static_cast<uint8_t>('g'));
288 bytes_to_write.push_back(static_cast<uint8_t>('o')); 288 bytes_to_write.push_back(static_cast<uint8_t>('o'));
289 bytes_to_write.push_back(static_cast<uint8_t>('o')); 289 bytes_to_write.push_back(static_cast<uint8_t>('o'));
290 bytes_to_write.push_back(static_cast<uint8_t>('d')); 290 bytes_to_write.push_back(static_cast<uint8_t>('d'));
291 bytes_to_write.push_back(static_cast<uint8_t>('b')); 291 bytes_to_write.push_back(static_cast<uint8_t>('b'));
292 bytes_to_write.push_back(static_cast<uint8_t>('y')); 292 bytes_to_write.push_back(static_cast<uint8_t>('y'));
293 bytes_to_write.push_back(static_cast<uint8_t>('e')); 293 bytes_to_write.push_back(static_cast<uint8_t>('e'));
294 error = ERROR_FAILED; 294 error = FILE_ERROR_FAILED;
295 uint32_t num_bytes_written = 0; 295 uint32_t num_bytes_written = 0;
296 file->Write(mojo::Array<uint8_t>::From(bytes_to_write), 0, 296 file->Write(mojo::Array<uint8_t>::From(bytes_to_write), 0,
297 WHENCE_FROM_CURRENT, Capture(&error, &num_bytes_written)); 297 WHENCE_FROM_CURRENT, Capture(&error, &num_bytes_written));
298 ASSERT_TRUE(file.WaitForIncomingResponse()); 298 ASSERT_TRUE(file.WaitForIncomingResponse());
299 EXPECT_EQ(ERROR_OK, error); 299 EXPECT_EQ(FILE_ERROR_OK, error);
300 EXPECT_EQ(bytes_to_write.size(), num_bytes_written); 300 EXPECT_EQ(bytes_to_write.size(), num_bytes_written);
301 301
302 // Close it. 302 // Close it.
303 error = ERROR_FAILED; 303 error = FILE_ERROR_FAILED;
304 file->Close(Capture(&error)); 304 file->Close(Capture(&error));
305 ASSERT_TRUE(file.WaitForIncomingResponse()); 305 ASSERT_TRUE(file.WaitForIncomingResponse());
306 EXPECT_EQ(ERROR_OK, error); 306 EXPECT_EQ(FILE_ERROR_OK, error);
307 } 307 }
308 308
309 { 309 {
310 // Open my_file again. 310 // Open my_file again.
311 FilePtr file; 311 FilePtr file;
312 error = ERROR_FAILED; 312 error = FILE_ERROR_FAILED;
313 directory->OpenFile("my_file", GetProxy(&file), kFlagRead | kFlagOpen, 313 directory->OpenFile("my_file", GetProxy(&file), kFlagRead | kFlagOpen,
314 Capture(&error)); 314 Capture(&error));
315 ASSERT_TRUE(directory.WaitForIncomingResponse()); 315 ASSERT_TRUE(directory.WaitForIncomingResponse());
316 EXPECT_EQ(ERROR_OK, error); 316 EXPECT_EQ(FILE_ERROR_OK, error);
317 317
318 // Read from it. 318 // Read from it.
319 mojo::Array<uint8_t> bytes_read; 319 mojo::Array<uint8_t> bytes_read;
320 error = ERROR_FAILED; 320 error = FILE_ERROR_FAILED;
321 file->Read(7, 0, WHENCE_FROM_BEGIN, Capture(&error, &bytes_read)); 321 file->Read(7, 0, WHENCE_FROM_BEGIN, Capture(&error, &bytes_read));
322 ASSERT_TRUE(file.WaitForIncomingResponse()); 322 ASSERT_TRUE(file.WaitForIncomingResponse());
323 EXPECT_EQ(ERROR_OK, error); 323 EXPECT_EQ(FILE_ERROR_OK, error);
324 ASSERT_EQ(7u, bytes_read.size()); 324 ASSERT_EQ(7u, bytes_read.size());
325 EXPECT_EQ(static_cast<uint8_t>('g'), bytes_read[0]); 325 EXPECT_EQ(static_cast<uint8_t>('g'), bytes_read[0]);
326 EXPECT_EQ(static_cast<uint8_t>('o'), bytes_read[1]); 326 EXPECT_EQ(static_cast<uint8_t>('o'), bytes_read[1]);
327 EXPECT_EQ(static_cast<uint8_t>('o'), bytes_read[2]); 327 EXPECT_EQ(static_cast<uint8_t>('o'), bytes_read[2]);
328 EXPECT_EQ(static_cast<uint8_t>('d'), bytes_read[3]); 328 EXPECT_EQ(static_cast<uint8_t>('d'), bytes_read[3]);
329 } 329 }
330 } 330 }
331 331
332 // Note: Ignore nanoseconds, since it may not always be supported. We expect at 332 // Note: Ignore nanoseconds, since it may not always be supported. We expect at
333 // least second-resolution support though. 333 // least second-resolution support though.
334 TEST_F(FileImplTest, StatTouch) { 334 TEST_F(FileImplTest, StatTouch) {
335 DirectoryPtr directory; 335 DirectoryPtr directory;
336 GetTemporaryRoot(&directory); 336 GetTemporaryRoot(&directory);
337 Error error; 337 FileError error;
338 338
339 // Create my_file. 339 // Create my_file.
340 FilePtr file; 340 FilePtr file;
341 error = ERROR_FAILED; 341 error = FILE_ERROR_FAILED;
342 directory->OpenFile("my_file", GetProxy(&file), kFlagWrite | kFlagCreate, 342 directory->OpenFile("my_file", GetProxy(&file), kFlagWrite | kFlagCreate,
343 Capture(&error)); 343 Capture(&error));
344 ASSERT_TRUE(directory.WaitForIncomingResponse()); 344 ASSERT_TRUE(directory.WaitForIncomingResponse());
345 EXPECT_EQ(ERROR_OK, error); 345 EXPECT_EQ(FILE_ERROR_OK, error);
346 346
347 // Stat it. 347 // Stat it.
348 error = ERROR_FAILED; 348 error = FILE_ERROR_FAILED;
349 FileInformationPtr file_info; 349 FileInformationPtr file_info;
350 file->Stat(Capture(&error, &file_info)); 350 file->Stat(Capture(&error, &file_info));
351 ASSERT_TRUE(file.WaitForIncomingResponse()); 351 ASSERT_TRUE(file.WaitForIncomingResponse());
352 EXPECT_EQ(ERROR_OK, error); 352 EXPECT_EQ(FILE_ERROR_OK, error);
353 ASSERT_FALSE(file_info.is_null()); 353 ASSERT_FALSE(file_info.is_null());
354 EXPECT_EQ(FILE_TYPE_REGULAR_FILE, file_info->type); 354 EXPECT_EQ(FS_FILE_TYPE_REGULAR_FILE, file_info->type);
355 EXPECT_EQ(0, file_info->size); 355 EXPECT_EQ(0, file_info->size);
356 EXPECT_GT(file_info->atime, 0); // Expect that it's not 1970-01-01. 356 EXPECT_GT(file_info->atime, 0); // Expect that it's not 1970-01-01.
357 EXPECT_GT(file_info->mtime, 0); 357 EXPECT_GT(file_info->mtime, 0);
358 double first_mtime = file_info->mtime; 358 double first_mtime = file_info->mtime;
359 359
360 // Touch only the atime. 360 // Touch only the atime.
361 error = ERROR_FAILED; 361 error = FILE_ERROR_FAILED;
362 TimespecOrNowPtr t(TimespecOrNow::New()); 362 TimespecOrNowPtr t(TimespecOrNow::New());
363 t->now = false; 363 t->now = false;
364 const int64_t kPartyTime1 = 1234567890; // Party like it's 2009-02-13. 364 const int64_t kPartyTime1 = 1234567890; // Party like it's 2009-02-13.
365 t->seconds = kPartyTime1; 365 t->seconds = kPartyTime1;
366 file->Touch(t.Pass(), nullptr, Capture(&error)); 366 file->Touch(t.Pass(), nullptr, Capture(&error));
367 ASSERT_TRUE(file.WaitForIncomingResponse()); 367 ASSERT_TRUE(file.WaitForIncomingResponse());
368 EXPECT_EQ(ERROR_OK, error); 368 EXPECT_EQ(FILE_ERROR_OK, error);
369 369
370 // Stat again. 370 // Stat again.
371 error = ERROR_FAILED; 371 error = FILE_ERROR_FAILED;
372 file_info.reset(); 372 file_info.reset();
373 file->Stat(Capture(&error, &file_info)); 373 file->Stat(Capture(&error, &file_info));
374 ASSERT_TRUE(file.WaitForIncomingResponse()); 374 ASSERT_TRUE(file.WaitForIncomingResponse());
375 EXPECT_EQ(ERROR_OK, error); 375 EXPECT_EQ(FILE_ERROR_OK, error);
376 ASSERT_FALSE(file_info.is_null()); 376 ASSERT_FALSE(file_info.is_null());
377 EXPECT_EQ(kPartyTime1, file_info->atime); 377 EXPECT_EQ(kPartyTime1, file_info->atime);
378 EXPECT_EQ(first_mtime, file_info->mtime); 378 EXPECT_EQ(first_mtime, file_info->mtime);
379 379
380 // Touch only the mtime. 380 // Touch only the mtime.
381 t = TimespecOrNow::New(); 381 t = TimespecOrNow::New();
382 t->now = false; 382 t->now = false;
383 const int64_t kPartyTime2 = 1425059525; // No time like the present. 383 const int64_t kPartyTime2 = 1425059525; // No time like the present.
384 t->seconds = kPartyTime2; 384 t->seconds = kPartyTime2;
385 file->Touch(nullptr, t.Pass(), Capture(&error)); 385 file->Touch(nullptr, t.Pass(), Capture(&error));
386 ASSERT_TRUE(file.WaitForIncomingResponse()); 386 ASSERT_TRUE(file.WaitForIncomingResponse());
387 EXPECT_EQ(ERROR_OK, error); 387 EXPECT_EQ(FILE_ERROR_OK, error);
388 388
389 // Stat again. 389 // Stat again.
390 error = ERROR_FAILED; 390 error = FILE_ERROR_FAILED;
391 file_info.reset(); 391 file_info.reset();
392 file->Stat(Capture(&error, &file_info)); 392 file->Stat(Capture(&error, &file_info));
393 ASSERT_TRUE(file.WaitForIncomingResponse()); 393 ASSERT_TRUE(file.WaitForIncomingResponse());
394 EXPECT_EQ(ERROR_OK, error); 394 EXPECT_EQ(FILE_ERROR_OK, error);
395 ASSERT_FALSE(file_info.is_null()); 395 ASSERT_FALSE(file_info.is_null());
396 EXPECT_EQ(kPartyTime1, file_info->atime); 396 EXPECT_EQ(kPartyTime1, file_info->atime);
397 EXPECT_EQ(kPartyTime2, file_info->mtime); 397 EXPECT_EQ(kPartyTime2, file_info->mtime);
398 398
399 // TODO(vtl): Also test non-zero file size. 399 // TODO(vtl): Also test non-zero file size.
400 // TODO(vtl): Also test Touch() "now" options. 400 // TODO(vtl): Also test Touch() "now" options.
401 // TODO(vtl): Also test touching both atime and mtime. 401 // TODO(vtl): Also test touching both atime and mtime.
402 } 402 }
403 403
404 TEST_F(FileImplTest, TellSeek) { 404 TEST_F(FileImplTest, TellSeek) {
405 DirectoryPtr directory; 405 DirectoryPtr directory;
406 GetTemporaryRoot(&directory); 406 GetTemporaryRoot(&directory);
407 Error error; 407 FileError error;
408 408
409 // Create my_file. 409 // Create my_file.
410 FilePtr file; 410 FilePtr file;
411 error = ERROR_FAILED; 411 error = FILE_ERROR_FAILED;
412 directory->OpenFile("my_file", GetProxy(&file), kFlagWrite | kFlagCreate, 412 directory->OpenFile("my_file", GetProxy(&file), kFlagWrite | kFlagCreate,
413 Capture(&error)); 413 Capture(&error));
414 ASSERT_TRUE(directory.WaitForIncomingResponse()); 414 ASSERT_TRUE(directory.WaitForIncomingResponse());
415 EXPECT_EQ(ERROR_OK, error); 415 EXPECT_EQ(FILE_ERROR_OK, error);
416 416
417 // Write to it. 417 // Write to it.
418 std::vector<uint8_t> bytes_to_write(1000, '!'); 418 std::vector<uint8_t> bytes_to_write(1000, '!');
419 error = ERROR_FAILED; 419 error = FILE_ERROR_FAILED;
420 uint32_t num_bytes_written = 0; 420 uint32_t num_bytes_written = 0;
421 file->Write(mojo::Array<uint8_t>::From(bytes_to_write), 0, 421 file->Write(mojo::Array<uint8_t>::From(bytes_to_write), 0,
422 WHENCE_FROM_CURRENT, Capture(&error, &num_bytes_written)); 422 WHENCE_FROM_CURRENT, Capture(&error, &num_bytes_written));
423 ASSERT_TRUE(file.WaitForIncomingResponse()); 423 ASSERT_TRUE(file.WaitForIncomingResponse());
424 EXPECT_EQ(ERROR_OK, error); 424 EXPECT_EQ(FILE_ERROR_OK, error);
425 EXPECT_EQ(bytes_to_write.size(), num_bytes_written); 425 EXPECT_EQ(bytes_to_write.size(), num_bytes_written);
426 const int size = static_cast<int>(num_bytes_written); 426 const int size = static_cast<int>(num_bytes_written);
427 427
428 // Tell. 428 // Tell.
429 error = ERROR_FAILED; 429 error = FILE_ERROR_FAILED;
430 int64_t position = -1; 430 int64_t position = -1;
431 file->Tell(Capture(&error, &position)); 431 file->Tell(Capture(&error, &position));
432 ASSERT_TRUE(file.WaitForIncomingResponse()); 432 ASSERT_TRUE(file.WaitForIncomingResponse());
433 // Should be at the end. 433 // Should be at the end.
434 EXPECT_EQ(ERROR_OK, error); 434 EXPECT_EQ(FILE_ERROR_OK, error);
435 EXPECT_EQ(size, position); 435 EXPECT_EQ(size, position);
436 436
437 // Seek back 100. 437 // Seek back 100.
438 error = ERROR_FAILED; 438 error = FILE_ERROR_FAILED;
439 position = -1; 439 position = -1;
440 file->Seek(-100, WHENCE_FROM_CURRENT, Capture(&error, &position)); 440 file->Seek(-100, WHENCE_FROM_CURRENT, Capture(&error, &position));
441 ASSERT_TRUE(file.WaitForIncomingResponse()); 441 ASSERT_TRUE(file.WaitForIncomingResponse());
442 EXPECT_EQ(ERROR_OK, error); 442 EXPECT_EQ(FILE_ERROR_OK, error);
443 EXPECT_EQ(size - 100, position); 443 EXPECT_EQ(size - 100, position);
444 444
445 // Tell. 445 // Tell.
446 error = ERROR_FAILED; 446 error = FILE_ERROR_FAILED;
447 position = -1; 447 position = -1;
448 file->Tell(Capture(&error, &position)); 448 file->Tell(Capture(&error, &position));
449 ASSERT_TRUE(file.WaitForIncomingResponse()); 449 ASSERT_TRUE(file.WaitForIncomingResponse());
450 EXPECT_EQ(ERROR_OK, error); 450 EXPECT_EQ(FILE_ERROR_OK, error);
451 EXPECT_EQ(size - 100, position); 451 EXPECT_EQ(size - 100, position);
452 452
453 // Seek to 123 from start. 453 // Seek to 123 from start.
454 error = ERROR_FAILED; 454 error = FILE_ERROR_FAILED;
455 position = -1; 455 position = -1;
456 file->Seek(123, WHENCE_FROM_BEGIN, Capture(&error, &position)); 456 file->Seek(123, WHENCE_FROM_BEGIN, Capture(&error, &position));
457 ASSERT_TRUE(file.WaitForIncomingResponse()); 457 ASSERT_TRUE(file.WaitForIncomingResponse());
458 EXPECT_EQ(ERROR_OK, error); 458 EXPECT_EQ(FILE_ERROR_OK, error);
459 EXPECT_EQ(123, position); 459 EXPECT_EQ(123, position);
460 460
461 // Tell. 461 // Tell.
462 error = ERROR_FAILED; 462 error = FILE_ERROR_FAILED;
463 position = -1; 463 position = -1;
464 file->Tell(Capture(&error, &position)); 464 file->Tell(Capture(&error, &position));
465 ASSERT_TRUE(file.WaitForIncomingResponse()); 465 ASSERT_TRUE(file.WaitForIncomingResponse());
466 EXPECT_EQ(ERROR_OK, error); 466 EXPECT_EQ(FILE_ERROR_OK, error);
467 EXPECT_EQ(123, position); 467 EXPECT_EQ(123, position);
468 468
469 // Seek to 123 back from end. 469 // Seek to 123 back from end.
470 error = ERROR_FAILED; 470 error = FILE_ERROR_FAILED;
471 position = -1; 471 position = -1;
472 file->Seek(-123, WHENCE_FROM_END, Capture(&error, &position)); 472 file->Seek(-123, WHENCE_FROM_END, Capture(&error, &position));
473 ASSERT_TRUE(file.WaitForIncomingResponse()); 473 ASSERT_TRUE(file.WaitForIncomingResponse());
474 EXPECT_EQ(ERROR_OK, error); 474 EXPECT_EQ(FILE_ERROR_OK, error);
475 EXPECT_EQ(size - 123, position); 475 EXPECT_EQ(size - 123, position);
476 476
477 // Tell. 477 // Tell.
478 error = ERROR_FAILED; 478 error = FILE_ERROR_FAILED;
479 position = -1; 479 position = -1;
480 file->Tell(Capture(&error, &position)); 480 file->Tell(Capture(&error, &position));
481 ASSERT_TRUE(file.WaitForIncomingResponse()); 481 ASSERT_TRUE(file.WaitForIncomingResponse());
482 EXPECT_EQ(ERROR_OK, error); 482 EXPECT_EQ(FILE_ERROR_OK, error);
483 EXPECT_EQ(size - 123, position); 483 EXPECT_EQ(size - 123, position);
484 484
485 // TODO(vtl): Check that seeking actually affects reading/writing. 485 // TODO(vtl): Check that seeking actually affects reading/writing.
486 // TODO(vtl): Check that seeking can extend the file? 486 // TODO(vtl): Check that seeking can extend the file?
487 } 487 }
488 488
489 TEST_F(FileImplTest, Dup) { 489 TEST_F(FileImplTest, Dup) {
490 DirectoryPtr directory; 490 DirectoryPtr directory;
491 GetTemporaryRoot(&directory); 491 GetTemporaryRoot(&directory);
492 Error error; 492 FileError error;
493 493
494 // Create my_file. 494 // Create my_file.
495 FilePtr file1; 495 FilePtr file1;
496 error = ERROR_FAILED; 496 error = FILE_ERROR_FAILED;
497 directory->OpenFile("my_file", GetProxy(&file1), 497 directory->OpenFile("my_file", GetProxy(&file1),
498 kFlagRead | kFlagWrite | kFlagCreate, Capture(&error)); 498 kFlagRead | kFlagWrite | kFlagCreate, Capture(&error));
499 ASSERT_TRUE(directory.WaitForIncomingResponse()); 499 ASSERT_TRUE(directory.WaitForIncomingResponse());
500 EXPECT_EQ(ERROR_OK, error); 500 EXPECT_EQ(FILE_ERROR_OK, error);
501 501
502 // Write to it. 502 // Write to it.
503 std::vector<uint8_t> bytes_to_write; 503 std::vector<uint8_t> bytes_to_write;
504 bytes_to_write.push_back(static_cast<uint8_t>('h')); 504 bytes_to_write.push_back(static_cast<uint8_t>('h'));
505 bytes_to_write.push_back(static_cast<uint8_t>('e')); 505 bytes_to_write.push_back(static_cast<uint8_t>('e'));
506 bytes_to_write.push_back(static_cast<uint8_t>('l')); 506 bytes_to_write.push_back(static_cast<uint8_t>('l'));
507 bytes_to_write.push_back(static_cast<uint8_t>('l')); 507 bytes_to_write.push_back(static_cast<uint8_t>('l'));
508 bytes_to_write.push_back(static_cast<uint8_t>('o')); 508 bytes_to_write.push_back(static_cast<uint8_t>('o'));
509 error = ERROR_FAILED; 509 error = FILE_ERROR_FAILED;
510 uint32_t num_bytes_written = 0; 510 uint32_t num_bytes_written = 0;
511 file1->Write(mojo::Array<uint8_t>::From(bytes_to_write), 0, 511 file1->Write(mojo::Array<uint8_t>::From(bytes_to_write), 0,
512 WHENCE_FROM_CURRENT, Capture(&error, &num_bytes_written)); 512 WHENCE_FROM_CURRENT, Capture(&error, &num_bytes_written));
513 ASSERT_TRUE(file1.WaitForIncomingResponse()); 513 ASSERT_TRUE(file1.WaitForIncomingResponse());
514 EXPECT_EQ(ERROR_OK, error); 514 EXPECT_EQ(FILE_ERROR_OK, error);
515 EXPECT_EQ(bytes_to_write.size(), num_bytes_written); 515 EXPECT_EQ(bytes_to_write.size(), num_bytes_written);
516 const int end_hello_pos = static_cast<int>(num_bytes_written); 516 const int end_hello_pos = static_cast<int>(num_bytes_written);
517 517
518 // Dup it. 518 // Dup it.
519 FilePtr file2; 519 FilePtr file2;
520 error = ERROR_FAILED; 520 error = FILE_ERROR_FAILED;
521 file1->Dup(GetProxy(&file2), Capture(&error)); 521 file1->Dup(GetProxy(&file2), Capture(&error));
522 ASSERT_TRUE(file1.WaitForIncomingResponse()); 522 ASSERT_TRUE(file1.WaitForIncomingResponse());
523 EXPECT_EQ(ERROR_OK, error); 523 EXPECT_EQ(FILE_ERROR_OK, error);
524 524
525 // |file2| should have the same position. 525 // |file2| should have the same position.
526 error = ERROR_FAILED; 526 error = FILE_ERROR_FAILED;
527 int64_t position = -1; 527 int64_t position = -1;
528 file2->Tell(Capture(&error, &position)); 528 file2->Tell(Capture(&error, &position));
529 ASSERT_TRUE(file2.WaitForIncomingResponse()); 529 ASSERT_TRUE(file2.WaitForIncomingResponse());
530 EXPECT_EQ(ERROR_OK, error); 530 EXPECT_EQ(FILE_ERROR_OK, error);
531 EXPECT_EQ(end_hello_pos, position); 531 EXPECT_EQ(end_hello_pos, position);
532 532
533 // Write using |file2|. 533 // Write using |file2|.
534 std::vector<uint8_t> more_bytes_to_write; 534 std::vector<uint8_t> more_bytes_to_write;
535 more_bytes_to_write.push_back(static_cast<uint8_t>('w')); 535 more_bytes_to_write.push_back(static_cast<uint8_t>('w'));
536 more_bytes_to_write.push_back(static_cast<uint8_t>('o')); 536 more_bytes_to_write.push_back(static_cast<uint8_t>('o'));
537 more_bytes_to_write.push_back(static_cast<uint8_t>('r')); 537 more_bytes_to_write.push_back(static_cast<uint8_t>('r'));
538 more_bytes_to_write.push_back(static_cast<uint8_t>('l')); 538 more_bytes_to_write.push_back(static_cast<uint8_t>('l'));
539 more_bytes_to_write.push_back(static_cast<uint8_t>('d')); 539 more_bytes_to_write.push_back(static_cast<uint8_t>('d'));
540 error = ERROR_FAILED; 540 error = FILE_ERROR_FAILED;
541 num_bytes_written = 0; 541 num_bytes_written = 0;
542 file2->Write(mojo::Array<uint8_t>::From(more_bytes_to_write), 0, 542 file2->Write(mojo::Array<uint8_t>::From(more_bytes_to_write), 0,
543 WHENCE_FROM_CURRENT, Capture(&error, &num_bytes_written)); 543 WHENCE_FROM_CURRENT, Capture(&error, &num_bytes_written));
544 ASSERT_TRUE(file2.WaitForIncomingResponse()); 544 ASSERT_TRUE(file2.WaitForIncomingResponse());
545 EXPECT_EQ(ERROR_OK, error); 545 EXPECT_EQ(FILE_ERROR_OK, error);
546 EXPECT_EQ(more_bytes_to_write.size(), num_bytes_written); 546 EXPECT_EQ(more_bytes_to_write.size(), num_bytes_written);
547 const int end_world_pos = end_hello_pos + static_cast<int>(num_bytes_written); 547 const int end_world_pos = end_hello_pos + static_cast<int>(num_bytes_written);
548 548
549 // |file1| should have the same position. 549 // |file1| should have the same position.
550 error = ERROR_FAILED; 550 error = FILE_ERROR_FAILED;
551 position = -1; 551 position = -1;
552 file1->Tell(Capture(&error, &position)); 552 file1->Tell(Capture(&error, &position));
553 ASSERT_TRUE(file1.WaitForIncomingResponse()); 553 ASSERT_TRUE(file1.WaitForIncomingResponse());
554 EXPECT_EQ(ERROR_OK, error); 554 EXPECT_EQ(FILE_ERROR_OK, error);
555 EXPECT_EQ(end_world_pos, position); 555 EXPECT_EQ(end_world_pos, position);
556 556
557 // Close |file1|. 557 // Close |file1|.
558 error = ERROR_FAILED; 558 error = FILE_ERROR_FAILED;
559 file1->Close(Capture(&error)); 559 file1->Close(Capture(&error));
560 ASSERT_TRUE(file1.WaitForIncomingResponse()); 560 ASSERT_TRUE(file1.WaitForIncomingResponse());
561 EXPECT_EQ(ERROR_OK, error); 561 EXPECT_EQ(FILE_ERROR_OK, error);
562 562
563 // Read everything using |file2|. 563 // Read everything using |file2|.
564 mojo::Array<uint8_t> bytes_read; 564 mojo::Array<uint8_t> bytes_read;
565 error = ERROR_FAILED; 565 error = FILE_ERROR_FAILED;
566 file2->Read(1000, 0, WHENCE_FROM_BEGIN, Capture(&error, &bytes_read)); 566 file2->Read(1000, 0, WHENCE_FROM_BEGIN, Capture(&error, &bytes_read));
567 ASSERT_TRUE(file2.WaitForIncomingResponse()); 567 ASSERT_TRUE(file2.WaitForIncomingResponse());
568 EXPECT_EQ(ERROR_OK, error); 568 EXPECT_EQ(FILE_ERROR_OK, error);
569 ASSERT_EQ(static_cast<size_t>(end_world_pos), bytes_read.size()); 569 ASSERT_EQ(static_cast<size_t>(end_world_pos), bytes_read.size());
570 // Just check the first and last bytes. 570 // Just check the first and last bytes.
571 EXPECT_EQ(static_cast<uint8_t>('h'), bytes_read[0]); 571 EXPECT_EQ(static_cast<uint8_t>('h'), bytes_read[0]);
572 EXPECT_EQ(static_cast<uint8_t>('d'), bytes_read[end_world_pos - 1]); 572 EXPECT_EQ(static_cast<uint8_t>('d'), bytes_read[end_world_pos - 1]);
573 573
574 // TODO(vtl): Test that |file2| has the same open options as |file1|. 574 // TODO(vtl): Test that |file2| has the same open options as |file1|.
575 } 575 }
576 576
577 TEST_F(FileImplTest, Truncate) { 577 TEST_F(FileImplTest, Truncate) {
578 const uint32_t kInitialSize = 1000; 578 const uint32_t kInitialSize = 1000;
579 const uint32_t kTruncatedSize = 654; 579 const uint32_t kTruncatedSize = 654;
580 580
581 DirectoryPtr directory; 581 DirectoryPtr directory;
582 GetTemporaryRoot(&directory); 582 GetTemporaryRoot(&directory);
583 Error error; 583 FileError error;
584 584
585 // Create my_file. 585 // Create my_file.
586 FilePtr file; 586 FilePtr file;
587 error = ERROR_FAILED; 587 error = FILE_ERROR_FAILED;
588 directory->OpenFile("my_file", GetProxy(&file), kFlagWrite | kFlagCreate, 588 directory->OpenFile("my_file", GetProxy(&file), kFlagWrite | kFlagCreate,
589 Capture(&error)); 589 Capture(&error));
590 ASSERT_TRUE(directory.WaitForIncomingResponse()); 590 ASSERT_TRUE(directory.WaitForIncomingResponse());
591 EXPECT_EQ(ERROR_OK, error); 591 EXPECT_EQ(FILE_ERROR_OK, error);
592 592
593 // Write to it. 593 // Write to it.
594 std::vector<uint8_t> bytes_to_write(kInitialSize, '!'); 594 std::vector<uint8_t> bytes_to_write(kInitialSize, '!');
595 error = ERROR_FAILED; 595 error = FILE_ERROR_FAILED;
596 uint32_t num_bytes_written = 0; 596 uint32_t num_bytes_written = 0;
597 file->Write(mojo::Array<uint8_t>::From(bytes_to_write), 0, 597 file->Write(mojo::Array<uint8_t>::From(bytes_to_write), 0,
598 WHENCE_FROM_CURRENT, Capture(&error, &num_bytes_written)); 598 WHENCE_FROM_CURRENT, Capture(&error, &num_bytes_written));
599 ASSERT_TRUE(file.WaitForIncomingResponse()); 599 ASSERT_TRUE(file.WaitForIncomingResponse());
600 EXPECT_EQ(ERROR_OK, error); 600 EXPECT_EQ(FILE_ERROR_OK, error);
601 EXPECT_EQ(kInitialSize, num_bytes_written); 601 EXPECT_EQ(kInitialSize, num_bytes_written);
602 602
603 // Stat it. 603 // Stat it.
604 error = ERROR_FAILED; 604 error = FILE_ERROR_FAILED;
605 FileInformationPtr file_info; 605 FileInformationPtr file_info;
606 file->Stat(Capture(&error, &file_info)); 606 file->Stat(Capture(&error, &file_info));
607 ASSERT_TRUE(file.WaitForIncomingResponse()); 607 ASSERT_TRUE(file.WaitForIncomingResponse());
608 EXPECT_EQ(ERROR_OK, error); 608 EXPECT_EQ(FILE_ERROR_OK, error);
609 ASSERT_FALSE(file_info.is_null()); 609 ASSERT_FALSE(file_info.is_null());
610 EXPECT_EQ(kInitialSize, file_info->size); 610 EXPECT_EQ(kInitialSize, file_info->size);
611 611
612 // Truncate it. 612 // Truncate it.
613 error = ERROR_FAILED; 613 error = FILE_ERROR_FAILED;
614 file->Truncate(kTruncatedSize, Capture(&error)); 614 file->Truncate(kTruncatedSize, Capture(&error));
615 ASSERT_TRUE(file.WaitForIncomingResponse()); 615 ASSERT_TRUE(file.WaitForIncomingResponse());
616 EXPECT_EQ(ERROR_OK, error); 616 EXPECT_EQ(FILE_ERROR_OK, error);
617 617
618 // Stat again. 618 // Stat again.
619 error = ERROR_FAILED; 619 error = FILE_ERROR_FAILED;
620 file_info.reset(); 620 file_info.reset();
621 file->Stat(Capture(&error, &file_info)); 621 file->Stat(Capture(&error, &file_info));
622 ASSERT_TRUE(file.WaitForIncomingResponse()); 622 ASSERT_TRUE(file.WaitForIncomingResponse());
623 EXPECT_EQ(ERROR_OK, error); 623 EXPECT_EQ(FILE_ERROR_OK, error);
624 ASSERT_FALSE(file_info.is_null()); 624 ASSERT_FALSE(file_info.is_null());
625 EXPECT_EQ(kTruncatedSize, file_info->size); 625 EXPECT_EQ(kTruncatedSize, file_info->size);
626 } 626 }
627 627
628 TEST_F(FileImplTest, AsHandle) { 628 TEST_F(FileImplTest, AsHandle) {
629 DirectoryPtr directory; 629 DirectoryPtr directory;
630 GetTemporaryRoot(&directory); 630 GetTemporaryRoot(&directory);
631 Error error; 631 FileError error;
632 632
633 { 633 {
634 // Create my_file. 634 // Create my_file.
635 FilePtr file1; 635 FilePtr file1;
636 error = ERROR_FAILED; 636 error = FILE_ERROR_FAILED;
637 directory->OpenFile("my_file", GetProxy(&file1), 637 directory->OpenFile("my_file", GetProxy(&file1),
638 kFlagRead | kFlagWrite | kFlagCreate, Capture(&error)); 638 kFlagRead | kFlagWrite | kFlagCreate, Capture(&error));
639 ASSERT_TRUE(directory.WaitForIncomingResponse()); 639 ASSERT_TRUE(directory.WaitForIncomingResponse());
640 EXPECT_EQ(ERROR_OK, error); 640 EXPECT_EQ(FILE_ERROR_OK, error);
641 641
642 // Fetch the handle 642 // Fetch the handle
643 error = ERROR_FAILED; 643 error = FILE_ERROR_FAILED;
644 mojo::ScopedHandle handle; 644 mojo::ScopedHandle handle;
645 file1->AsHandle(Capture(&error, &handle)); 645 file1->AsHandle(Capture(&error, &handle));
646 ASSERT_TRUE(file1.WaitForIncomingResponse()); 646 ASSERT_TRUE(file1.WaitForIncomingResponse());
647 EXPECT_EQ(ERROR_OK, error); 647 EXPECT_EQ(FILE_ERROR_OK, error);
648 648
649 // Pull a file descriptor out of the scoped handle. 649 // Pull a file descriptor out of the scoped handle.
650 MojoPlatformHandle platform_handle; 650 MojoPlatformHandle platform_handle;
651 MojoResult extract_result = 651 MojoResult extract_result =
652 MojoExtractPlatformHandle(handle.release().value(), &platform_handle); 652 MojoExtractPlatformHandle(handle.release().value(), &platform_handle);
653 EXPECT_EQ(MOJO_RESULT_OK, extract_result); 653 EXPECT_EQ(MOJO_RESULT_OK, extract_result);
654 654
655 // Pass this raw file descriptor to a base::File. 655 // Pass this raw file descriptor to a base::File.
656 base::File raw_file(platform_handle); 656 base::File raw_file(platform_handle);
657 ASSERT_TRUE(raw_file.IsValid()); 657 ASSERT_TRUE(raw_file.IsValid());
658 EXPECT_EQ(5, raw_file.WriteAtCurrentPos("hello", 5)); 658 EXPECT_EQ(5, raw_file.WriteAtCurrentPos("hello", 5));
659 } 659 }
660 660
661 { 661 {
662 // Reopen my_file. 662 // Reopen my_file.
663 FilePtr file2; 663 FilePtr file2;
664 error = ERROR_FAILED; 664 error = FILE_ERROR_FAILED;
665 directory->OpenFile("my_file", GetProxy(&file2), kFlagRead | kFlagOpen, 665 directory->OpenFile("my_file", GetProxy(&file2), kFlagRead | kFlagOpen,
666 Capture(&error)); 666 Capture(&error));
667 ASSERT_TRUE(directory.WaitForIncomingResponse()); 667 ASSERT_TRUE(directory.WaitForIncomingResponse());
668 EXPECT_EQ(ERROR_OK, error); 668 EXPECT_EQ(FILE_ERROR_OK, error);
669 669
670 // Verify that we wrote data raw on the file descriptor. 670 // Verify that we wrote data raw on the file descriptor.
671 mojo::Array<uint8_t> bytes_read; 671 mojo::Array<uint8_t> bytes_read;
672 error = ERROR_FAILED; 672 error = FILE_ERROR_FAILED;
673 file2->Read(5, 0, WHENCE_FROM_BEGIN, Capture(&error, &bytes_read)); 673 file2->Read(5, 0, WHENCE_FROM_BEGIN, Capture(&error, &bytes_read));
674 ASSERT_TRUE(file2.WaitForIncomingResponse()); 674 ASSERT_TRUE(file2.WaitForIncomingResponse());
675 EXPECT_EQ(ERROR_OK, error); 675 EXPECT_EQ(FILE_ERROR_OK, error);
676 ASSERT_EQ(5u, bytes_read.size()); 676 ASSERT_EQ(5u, bytes_read.size());
677 EXPECT_EQ(static_cast<uint8_t>('h'), bytes_read[0]); 677 EXPECT_EQ(static_cast<uint8_t>('h'), bytes_read[0]);
678 EXPECT_EQ(static_cast<uint8_t>('e'), bytes_read[1]); 678 EXPECT_EQ(static_cast<uint8_t>('e'), bytes_read[1]);
679 EXPECT_EQ(static_cast<uint8_t>('l'), bytes_read[2]); 679 EXPECT_EQ(static_cast<uint8_t>('l'), bytes_read[2]);
680 EXPECT_EQ(static_cast<uint8_t>('l'), bytes_read[3]); 680 EXPECT_EQ(static_cast<uint8_t>('l'), bytes_read[3]);
681 EXPECT_EQ(static_cast<uint8_t>('o'), bytes_read[4]); 681 EXPECT_EQ(static_cast<uint8_t>('o'), bytes_read[4]);
682 } 682 }
683 } 683 }
684 684
685 } // namespace 685 } // namespace
686 } // namespace filesystem 686 } // namespace filesystem
OLDNEW
« no previous file with comments | « components/filesystem/file_impl.cc ('k') | components/filesystem/file_system_impl.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698