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

Side by Side Diff: ppapi/tests/test_file_io.cc

Issue 6899055: PPAPI: Force async callback invocation option. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 9 years, 5 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 | Annotate | Revision Log
« no previous file with comments | « ppapi/tests/test_directory_reader.cc ('k') | ppapi/tests/test_file_ref.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 (c) 2011 The Chromium Authors. All rights reserved. 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 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 "ppapi/tests/test_file_io.h" 5 #include "ppapi/tests/test_file_io.h"
6 6
7 #include <stdio.h> 7 #include <stdio.h>
8 #include <string.h> 8 #include <string.h>
9 9
10 #include "ppapi/c/pp_errors.h" 10 #include "ppapi/c/pp_errors.h"
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after
104 return PP_OK; 104 return PP_OK;
105 } 105 }
106 106
107 } // namespace 107 } // namespace
108 108
109 bool TestFileIO::Init() { 109 bool TestFileIO::Init() {
110 return InitTestingInterface() && EnsureRunningOverHTTP(); 110 return InitTestingInterface() && EnsureRunningOverHTTP();
111 } 111 }
112 112
113 void TestFileIO::RunTest() { 113 void TestFileIO::RunTest() {
114 RUN_TEST(Open); 114 RUN_TEST_FORCEASYNC_AND_NOT(Open);
115 RUN_TEST(ReadWriteSetLength); 115 RUN_TEST_FORCEASYNC_AND_NOT(ReadWriteSetLength);
116 RUN_TEST(TouchQuery); 116 RUN_TEST_FORCEASYNC_AND_NOT(TouchQuery);
117 RUN_TEST(AbortCalls); 117 RUN_TEST_FORCEASYNC_AND_NOT(TouchQuery);
118 RUN_TEST_FORCEASYNC_AND_NOT(AbortCalls);
119 RUN_TEST_FORCEASYNC_AND_NOT(AbortCalls);
118 // TODO(viettrungluu): add tests: 120 // TODO(viettrungluu): add tests:
119 // - that PP_ERROR_PENDING is correctly returned 121 // - that PP_ERROR_PENDING is correctly returned
120 // - that operations respect the file open modes (flags) 122 // - that operations respect the file open modes (flags)
121 } 123 }
122 124
123 std::string TestFileIO::TestOpen() { 125 std::string TestFileIO::TestOpen() {
124 TestCompletionCallback callback(instance_->pp_instance()); 126 TestCompletionCallback callback(instance_->pp_instance(), force_async_);
125 127
126 pp::FileSystem_Dev file_system(instance_, PP_FILESYSTEMTYPE_LOCALTEMPORARY); 128 pp::FileSystem_Dev file_system(instance_, PP_FILESYSTEMTYPE_LOCALTEMPORARY);
127 pp::FileRef_Dev file_ref(file_system, "/file_open"); 129 pp::FileRef_Dev file_ref(file_system, "/file_open");
128 int32_t rv = file_system.Open(1024, callback); 130 int32_t rv = file_system.Open(1024, callback);
131 if (force_async_ && rv != PP_OK_COMPLETIONPENDING)
132 return ReportError("FileSystem::Open force_async", rv);
129 if (rv == PP_OK_COMPLETIONPENDING) 133 if (rv == PP_OK_COMPLETIONPENDING)
130 rv = callback.WaitForResult(); 134 rv = callback.WaitForResult();
131 if (rv != PP_OK) 135 if (rv != PP_OK)
132 return ReportError("FileSystem::Open", rv); 136 return ReportError("FileSystem::Open", rv);
133 137
134 std::string result; 138 std::string result;
135 result = MatchOpenExpectations( 139 result = MatchOpenExpectations(
136 &file_system, 140 &file_system,
137 PP_FILEOPENFLAG_READ, 141 PP_FILEOPENFLAG_READ,
138 DONT_CREATE_IF_DOESNT_EXIST | OPEN_IF_EXISTS | DONT_TRUNCATE_IF_EXISTS); 142 DONT_CREATE_IF_DOESNT_EXIST | OPEN_IF_EXISTS | DONT_TRUNCATE_IF_EXISTS);
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
210 &file_system, 214 &file_system,
211 PP_FILEOPENFLAG_READ | PP_FILEOPENFLAG_TRUNCATE, 215 PP_FILEOPENFLAG_READ | PP_FILEOPENFLAG_TRUNCATE,
212 INVALID_FLAG_COMBINATION); 216 INVALID_FLAG_COMBINATION);
213 if (!result.empty()) 217 if (!result.empty())
214 return result; 218 return result;
215 219
216 PASS(); 220 PASS();
217 } 221 }
218 222
219 std::string TestFileIO::TestReadWriteSetLength() { 223 std::string TestFileIO::TestReadWriteSetLength() {
220 TestCompletionCallback callback(instance_->pp_instance()); 224 TestCompletionCallback callback(instance_->pp_instance(), force_async_);
221 225
222 pp::FileSystem_Dev file_system(instance_, PP_FILESYSTEMTYPE_LOCALTEMPORARY); 226 pp::FileSystem_Dev file_system(instance_, PP_FILESYSTEMTYPE_LOCALTEMPORARY);
223 pp::FileRef_Dev file_ref(file_system, "/file_read_write_setlength"); 227 pp::FileRef_Dev file_ref(file_system, "/file_read_write_setlength");
224 int32_t rv = file_system.Open(1024, callback); 228 int32_t rv = file_system.Open(1024, callback);
229 if (force_async_ && rv != PP_OK_COMPLETIONPENDING)
230 return ReportError("FileSystem::Open force_async", rv);
225 if (rv == PP_OK_COMPLETIONPENDING) 231 if (rv == PP_OK_COMPLETIONPENDING)
226 rv = callback.WaitForResult(); 232 rv = callback.WaitForResult();
227 if (rv != PP_OK) 233 if (rv != PP_OK)
228 return ReportError("FileSystem::Open", rv); 234 return ReportError("FileSystem::Open", rv);
229 235
230 pp::FileIO_Dev file_io(instance_); 236 pp::FileIO_Dev file_io(instance_);
231 rv = file_io.Open(file_ref, 237 rv = file_io.Open(file_ref,
232 PP_FILEOPENFLAG_CREATE | 238 PP_FILEOPENFLAG_CREATE |
233 PP_FILEOPENFLAG_TRUNCATE | 239 PP_FILEOPENFLAG_TRUNCATE |
234 PP_FILEOPENFLAG_READ | 240 PP_FILEOPENFLAG_READ |
235 PP_FILEOPENFLAG_WRITE, 241 PP_FILEOPENFLAG_WRITE,
236 callback); 242 callback);
243 if (force_async_ && rv != PP_OK_COMPLETIONPENDING)
244 return ReportError("FileIO::Open force_async", rv);
237 if (rv == PP_OK_COMPLETIONPENDING) 245 if (rv == PP_OK_COMPLETIONPENDING)
238 rv = callback.WaitForResult(); 246 rv = callback.WaitForResult();
239 if (rv != PP_OK) 247 if (rv != PP_OK)
240 return ReportError("FileIO::Open", rv); 248 return ReportError("FileIO::Open", rv);
241 249
242 // Write something to the file. 250 // Write something to the file.
243 rv = WriteEntireBuffer(instance_->pp_instance(), &file_io, 0, "test_test"); 251 rv = WriteEntireBuffer(instance_->pp_instance(), &file_io, 0, "test_test");
244 if (rv != PP_OK) 252 if (rv != PP_OK)
245 return ReportError("FileIO::Write", rv); 253 return ReportError("FileIO::Write", rv);
246 254
247 // Read the entire file. 255 // Read the entire file.
248 std::string read_buffer; 256 std::string read_buffer;
249 rv = ReadEntireFile(instance_->pp_instance(), &file_io, 0, &read_buffer); 257 rv = ReadEntireFile(instance_->pp_instance(), &file_io, 0, &read_buffer);
250 if (rv != PP_OK) 258 if (rv != PP_OK)
251 return ReportError("FileIO::Read", rv); 259 return ReportError("FileIO::Read", rv);
252 if (read_buffer != "test_test") 260 if (read_buffer != "test_test")
253 return ReportMismatch("FileIO::Read", read_buffer, "test_test"); 261 return ReportMismatch("FileIO::Read", read_buffer, "test_test");
254 262
255 // Truncate the file. 263 // Truncate the file.
256 rv = file_io.SetLength(4, callback); 264 rv = file_io.SetLength(4, callback);
265 if (force_async_ && rv != PP_OK_COMPLETIONPENDING)
266 return ReportError("FileIO::SetLength force_async", rv);
257 if (rv == PP_OK_COMPLETIONPENDING) 267 if (rv == PP_OK_COMPLETIONPENDING)
258 rv = callback.WaitForResult(); 268 rv = callback.WaitForResult();
259 if (rv != PP_OK) 269 if (rv != PP_OK)
260 return ReportError("FileIO::SetLength", rv); 270 return ReportError("FileIO::SetLength", rv);
261 271
262 // Check the file contents. 272 // Check the file contents.
263 read_buffer.clear(); 273 read_buffer.clear();
264 rv = ReadEntireFile(instance_->pp_instance(), &file_io, 0, &read_buffer); 274 rv = ReadEntireFile(instance_->pp_instance(), &file_io, 0, &read_buffer);
265 if (rv != PP_OK) 275 if (rv != PP_OK)
266 return ReportError("FileIO::Read", rv); 276 return ReportError("FileIO::Read", rv);
(...skipping 17 matching lines...) Expand all
284 read_buffer.clear(); 294 read_buffer.clear();
285 rv = ReadEntireFile(instance_->pp_instance(), &file_io, 0, &read_buffer); 295 rv = ReadEntireFile(instance_->pp_instance(), &file_io, 0, &read_buffer);
286 if (rv != PP_OK) 296 if (rv != PP_OK)
287 return ReportError("FileIO::Read", rv); 297 return ReportError("FileIO::Read", rv);
288 if (read_buffer != std::string("test\0\0\0\0test", 12)) 298 if (read_buffer != std::string("test\0\0\0\0test", 12))
289 return ReportMismatch("FileIO::Read", read_buffer, 299 return ReportMismatch("FileIO::Read", read_buffer,
290 std::string("test\0\0\0\0test", 12)); 300 std::string("test\0\0\0\0test", 12));
291 301
292 // Extend the file. 302 // Extend the file.
293 rv = file_io.SetLength(16, callback); 303 rv = file_io.SetLength(16, callback);
304 if (force_async_ && rv != PP_OK_COMPLETIONPENDING)
305 return ReportError("FileIO::SetLength force_async", rv);
294 if (rv == PP_OK_COMPLETIONPENDING) 306 if (rv == PP_OK_COMPLETIONPENDING)
295 rv = callback.WaitForResult(); 307 rv = callback.WaitForResult();
296 if (rv != PP_OK) 308 if (rv != PP_OK)
297 return ReportError("FileIO::SetLength", rv); 309 return ReportError("FileIO::SetLength", rv);
298 310
299 // Check the contents of the file. 311 // Check the contents of the file.
300 read_buffer.clear(); 312 read_buffer.clear();
301 rv = ReadEntireFile(instance_->pp_instance(), &file_io, 0, &read_buffer); 313 rv = ReadEntireFile(instance_->pp_instance(), &file_io, 0, &read_buffer);
302 if (rv != PP_OK) 314 if (rv != PP_OK)
303 return ReportError("FileIO::Read", rv); 315 return ReportError("FileIO::Read", rv);
(...skipping 21 matching lines...) Expand all
325 if (rv != PP_OK) 337 if (rv != PP_OK)
326 return ReportError("FileIO::Read", rv); 338 return ReportError("FileIO::Read", rv);
327 if (read_buffer != std::string("testtest\0\0\0\0", 12)) 339 if (read_buffer != std::string("testtest\0\0\0\0", 12))
328 return ReportMismatch("FileIO::Read", read_buffer, 340 return ReportMismatch("FileIO::Read", read_buffer,
329 std::string("testtest\0\0\0\0", 12)); 341 std::string("testtest\0\0\0\0", 12));
330 342
331 PASS(); 343 PASS();
332 } 344 }
333 345
334 std::string TestFileIO::TestTouchQuery() { 346 std::string TestFileIO::TestTouchQuery() {
335 TestCompletionCallback callback(instance_->pp_instance()); 347 TestCompletionCallback callback(instance_->pp_instance(), force_async_);
336 348
337 pp::FileSystem_Dev file_system(instance_, PP_FILESYSTEMTYPE_LOCALTEMPORARY); 349 pp::FileSystem_Dev file_system(instance_, PP_FILESYSTEMTYPE_LOCALTEMPORARY);
338 int32_t rv = file_system.Open(1024, callback); 350 int32_t rv = file_system.Open(1024, callback);
351 if (force_async_ && rv != PP_OK_COMPLETIONPENDING)
352 return ReportError("FileSystem::Open force_async", rv);
339 if (rv == PP_OK_COMPLETIONPENDING) 353 if (rv == PP_OK_COMPLETIONPENDING)
340 rv = callback.WaitForResult(); 354 rv = callback.WaitForResult();
341 if (rv != PP_OK) 355 if (rv != PP_OK)
342 return ReportError("FileSystem::Open", rv); 356 return ReportError("FileSystem::Open", rv);
343 357
344 pp::FileRef_Dev file_ref(file_system, "/file_touch"); 358 pp::FileRef_Dev file_ref(file_system, "/file_touch");
345 pp::FileIO_Dev file_io(instance_); 359 pp::FileIO_Dev file_io(instance_);
346 rv = file_io.Open(file_ref, 360 rv = file_io.Open(file_ref,
347 PP_FILEOPENFLAG_CREATE | 361 PP_FILEOPENFLAG_CREATE |
348 PP_FILEOPENFLAG_TRUNCATE | 362 PP_FILEOPENFLAG_TRUNCATE |
349 PP_FILEOPENFLAG_WRITE, 363 PP_FILEOPENFLAG_WRITE,
350 callback); 364 callback);
365 if (force_async_ && rv != PP_OK_COMPLETIONPENDING)
366 return ReportError("FileIO::Open force_async", rv);
351 if (rv == PP_OK_COMPLETIONPENDING) 367 if (rv == PP_OK_COMPLETIONPENDING)
352 rv = callback.WaitForResult(); 368 rv = callback.WaitForResult();
353 if (rv != PP_OK) 369 if (rv != PP_OK)
354 return ReportError("FileIO::Open", rv); 370 return ReportError("FileIO::Open", rv);
355 371
356 // Write some data to have a non-zero file size. 372 // Write some data to have a non-zero file size.
357 rv = file_io.Write(0, "test", 4, callback); 373 rv = file_io.Write(0, "test", 4, callback);
374 if (force_async_ && rv != PP_OK_COMPLETIONPENDING)
375 return ReportError("FileIO::Write force_async", rv);
358 if (rv == PP_OK_COMPLETIONPENDING) 376 if (rv == PP_OK_COMPLETIONPENDING)
359 rv = callback.WaitForResult(); 377 rv = callback.WaitForResult();
360 if (rv != 4) 378 if (rv != 4)
361 return ReportError("FileIO::Write", rv); 379 return ReportError("FileIO::Write", rv);
362 380
363 // last_access_time's granularity is 1 day 381 // last_access_time's granularity is 1 day
364 // last_modified_time's granularity is 2 seconds 382 // last_modified_time's granularity is 2 seconds
365 const PP_Time last_access_time = 123 * 24 * 3600.0; 383 const PP_Time last_access_time = 123 * 24 * 3600.0;
366 const PP_Time last_modified_time = 246.0; 384 const PP_Time last_modified_time = 246.0;
367 rv = file_io.Touch(last_access_time, last_modified_time, callback); 385 rv = file_io.Touch(last_access_time, last_modified_time, callback);
386 if (force_async_ && rv != PP_OK_COMPLETIONPENDING)
387 return ReportError("FileIO::Touch force_async", rv);
368 if (rv == PP_OK_COMPLETIONPENDING) 388 if (rv == PP_OK_COMPLETIONPENDING)
369 rv = callback.WaitForResult(); 389 rv = callback.WaitForResult();
370 if (rv != PP_OK) 390 if (rv != PP_OK)
371 return ReportError("FileSystem::Touch", rv); 391 return ReportError("FileIO::Touch", rv);
372 392
373 PP_FileInfo_Dev info; 393 PP_FileInfo_Dev info;
374 rv = file_io.Query(&info, callback); 394 rv = file_io.Query(&info, callback);
395 if (force_async_ && rv != PP_OK_COMPLETIONPENDING)
396 return ReportError("FileIO::Query force_async", rv);
375 if (rv == PP_OK_COMPLETIONPENDING) 397 if (rv == PP_OK_COMPLETIONPENDING)
376 rv = callback.WaitForResult(); 398 rv = callback.WaitForResult();
377 if (rv != PP_OK) 399 if (rv != PP_OK)
378 return ReportError("FileSystem::Query", rv); 400 return ReportError("FileIO::Query", rv);
379 401
380 if ((info.size != 4) || 402 if ((info.size != 4) ||
381 (info.type != PP_FILETYPE_REGULAR) || 403 (info.type != PP_FILETYPE_REGULAR) ||
382 (info.system_type != PP_FILESYSTEMTYPE_LOCALTEMPORARY) || 404 (info.system_type != PP_FILESYSTEMTYPE_LOCALTEMPORARY) ||
383 (info.last_access_time != last_access_time) || 405 (info.last_access_time != last_access_time) ||
384 (info.last_modified_time != last_modified_time)) 406 (info.last_modified_time != last_modified_time))
385 return "FileSystem::Query() has returned bad data."; 407 return "FileIO::Query() has returned bad data.";
386 408
387 // Call |Query()| again, to make sure it works a second time. 409 // Call |Query()| again, to make sure it works a second time.
388 rv = file_io.Query(&info, callback); 410 rv = file_io.Query(&info, callback);
411 if (force_async_ && rv != PP_OK_COMPLETIONPENDING)
412 return ReportError("FileIO::Query force_async", rv);
389 if (rv == PP_OK_COMPLETIONPENDING) 413 if (rv == PP_OK_COMPLETIONPENDING)
390 rv = callback.WaitForResult(); 414 rv = callback.WaitForResult();
391 if (rv != PP_OK) 415 if (rv != PP_OK)
392 return ReportError("FileSystem::Query", rv); 416 return ReportError("FileIO::Query", rv);
393 417
394 PASS(); 418 PASS();
395 } 419 }
396 420
397 std::string TestFileIO::TestAbortCalls() { 421 std::string TestFileIO::TestAbortCalls() {
398 TestCompletionCallback callback(instance_->pp_instance()); 422 TestCompletionCallback callback(instance_->pp_instance(), force_async_);
399 423
400 pp::FileSystem_Dev file_system(instance_, PP_FILESYSTEMTYPE_LOCALTEMPORARY); 424 pp::FileSystem_Dev file_system(instance_, PP_FILESYSTEMTYPE_LOCALTEMPORARY);
401 pp::FileRef_Dev file_ref(file_system, "/file_abort_calls"); 425 pp::FileRef_Dev file_ref(file_system, "/file_abort_calls");
402 int32_t rv = file_system.Open(1024, callback); 426 int32_t rv = file_system.Open(1024, callback);
427 if (force_async_ && rv != PP_OK_COMPLETIONPENDING)
428 return ReportError("FileSystem::Open force_async", rv);
403 if (rv == PP_OK_COMPLETIONPENDING) 429 if (rv == PP_OK_COMPLETIONPENDING)
404 rv = callback.WaitForResult(); 430 rv = callback.WaitForResult();
405 if (rv != PP_OK) 431 if (rv != PP_OK)
406 return ReportError("FileSystem::Open", rv); 432 return ReportError("FileSystem::Open", rv);
407 433
408 // First, create a file which to do ops on. 434 // First, create a file which to do ops on.
409 { 435 {
410 pp::FileIO_Dev file_io(instance_); 436 pp::FileIO_Dev file_io(instance_);
411 rv = file_io.Open(file_ref, 437 rv = file_io.Open(file_ref,
412 PP_FILEOPENFLAG_CREATE | PP_FILEOPENFLAG_WRITE, 438 PP_FILEOPENFLAG_CREATE | PP_FILEOPENFLAG_WRITE,
413 callback); 439 callback);
440 if (force_async_ && rv != PP_OK_COMPLETIONPENDING)
441 return ReportError("FileIO::Open force_async", rv);
414 if (rv == PP_OK_COMPLETIONPENDING) 442 if (rv == PP_OK_COMPLETIONPENDING)
415 rv = callback.WaitForResult(); 443 rv = callback.WaitForResult();
416 if (rv != PP_OK) 444 if (rv != PP_OK)
417 return ReportError("FileIO::Open", rv); 445 return ReportError("FileIO::Open", rv);
418 446
419 // N.B.: Should write at least 3 bytes. 447 // N.B.: Should write at least 3 bytes.
420 rv = WriteEntireBuffer(instance_->pp_instance(), 448 rv = WriteEntireBuffer(instance_->pp_instance(),
421 &file_io, 449 &file_io,
422 0, 450 0,
423 "foobarbazquux"); 451 "foobarbazquux");
424 if (rv != PP_OK) 452 if (rv != PP_OK)
425 return ReportError("FileIO::Write", rv); 453 return ReportError("FileIO::Write", rv);
426 } 454 }
427 455
428 // Abort |Open()|. 456 // Abort |Open()|.
429 { 457 {
430 callback.reset_run_count(); 458 callback.reset_run_count();
431 rv = pp::FileIO_Dev(instance_) 459 rv = pp::FileIO_Dev(instance_)
432 .Open(file_ref, PP_FILEOPENFLAG_READ,callback); 460 .Open(file_ref, PP_FILEOPENFLAG_READ,callback);
461 if (force_async_ && rv != PP_OK_COMPLETIONPENDING)
462 return ReportError("FileIO::Open force_async", rv);
433 if (callback.run_count() > 0) 463 if (callback.run_count() > 0)
434 return "FileIO::Open ran callback synchronously."; 464 return "FileIO::Open ran callback synchronously.";
435 if (rv == PP_OK_COMPLETIONPENDING) { 465 if (rv == PP_OK_COMPLETIONPENDING) {
436 rv = callback.WaitForResult(); 466 rv = callback.WaitForResult();
437 if (rv != PP_ERROR_ABORTED) 467 if (rv != PP_ERROR_ABORTED)
438 return "FileIO::Open not aborted."; 468 return "FileIO::Open not aborted.";
439 } else if (rv != PP_OK) { 469 } else if (rv != PP_OK) {
440 return ReportError("FileIO::Open", rv); 470 return ReportError("FileIO::Open", rv);
441 } 471 }
442 } 472 }
443 473
444 // Abort |Query()|. 474 // Abort |Query()|.
445 { 475 {
446 PP_FileInfo_Dev info = { 0 }; 476 PP_FileInfo_Dev info = { 0 };
447 { 477 {
448 pp::FileIO_Dev file_io(instance_); 478 pp::FileIO_Dev file_io(instance_);
449 rv = file_io.Open(file_ref, PP_FILEOPENFLAG_READ, callback); 479 rv = file_io.Open(file_ref, PP_FILEOPENFLAG_READ, callback);
480 if (force_async_ && rv != PP_OK_COMPLETIONPENDING)
481 return ReportError("FileIO::Open force_async", rv);
450 if (rv == PP_OK_COMPLETIONPENDING) 482 if (rv == PP_OK_COMPLETIONPENDING)
451 rv = callback.WaitForResult(); 483 rv = callback.WaitForResult();
452 if (rv != PP_OK) 484 if (rv != PP_OK)
453 return ReportError("FileIO::Open", rv); 485 return ReportError("FileIO::Open", rv);
454 486
455 callback.reset_run_count(); 487 callback.reset_run_count();
456 rv = file_io.Query(&info, callback); 488 rv = file_io.Query(&info, callback);
489 if (force_async_ && rv != PP_OK_COMPLETIONPENDING)
490 return ReportError("FileIO::Query force_async", rv);
457 } // Destroy |file_io|. 491 } // Destroy |file_io|.
458 if (rv == PP_OK_COMPLETIONPENDING) { 492 if (rv == PP_OK_COMPLETIONPENDING) {
459 // Save a copy and make sure |info| doesn't get written to. 493 // Save a copy and make sure |info| doesn't get written to.
460 PP_FileInfo_Dev info_copy; 494 PP_FileInfo_Dev info_copy;
461 memcpy(&info_copy, &info, sizeof(info)); 495 memcpy(&info_copy, &info, sizeof(info));
462 rv = callback.WaitForResult(); 496 rv = callback.WaitForResult();
463 if (rv != PP_ERROR_ABORTED) 497 if (rv != PP_ERROR_ABORTED)
464 return "FileIO::Query not aborted."; 498 return "FileIO::Query not aborted.";
465 if (memcmp(&info_copy, &info, sizeof(info)) != 0) 499 if (memcmp(&info_copy, &info, sizeof(info)) != 0)
466 return "FileIO::Query wrote data after resource destruction."; 500 return "FileIO::Query wrote data after resource destruction.";
467 } else if (rv != PP_OK) { 501 } else if (rv != PP_OK) {
468 return ReportError("FileIO::Query", rv); 502 return ReportError("FileIO::Query", rv);
469 } 503 }
470 } 504 }
471 505
472 // Abort |Touch()|. 506 // Abort |Touch()|.
473 { 507 {
474 { 508 {
475 pp::FileIO_Dev file_io(instance_); 509 pp::FileIO_Dev file_io(instance_);
476 rv = file_io.Open(file_ref, PP_FILEOPENFLAG_WRITE, callback); 510 rv = file_io.Open(file_ref, PP_FILEOPENFLAG_WRITE, callback);
511 if (force_async_ && rv != PP_OK_COMPLETIONPENDING)
512 return ReportError("FileIO::Open force_async", rv);
477 if (rv == PP_OK_COMPLETIONPENDING) 513 if (rv == PP_OK_COMPLETIONPENDING)
478 rv = callback.WaitForResult(); 514 rv = callback.WaitForResult();
479 if (rv != PP_OK) 515 if (rv != PP_OK)
480 return ReportError("FileIO::Open", rv); 516 return ReportError("FileIO::Open", rv);
481 517
482 callback.reset_run_count(); 518 callback.reset_run_count();
483 rv = file_io.Touch(0, 0, callback); 519 rv = file_io.Touch(0, 0, callback);
520 if (force_async_ && rv != PP_OK_COMPLETIONPENDING)
521 return ReportError("FileIO::Touch force_async", rv);
484 } // Destroy |file_io|. 522 } // Destroy |file_io|.
485 if (rv == PP_OK_COMPLETIONPENDING) { 523 if (rv == PP_OK_COMPLETIONPENDING) {
486 rv = callback.WaitForResult(); 524 rv = callback.WaitForResult();
487 if (rv != PP_ERROR_ABORTED) 525 if (rv != PP_ERROR_ABORTED)
488 return "FileIO::Touch not aborted."; 526 return "FileIO::Touch not aborted.";
489 } else if (rv != PP_OK) { 527 } else if (rv != PP_OK) {
490 return ReportError("FileIO::Touch", rv); 528 return ReportError("FileIO::Touch", rv);
491 } 529 }
492 } 530 }
493 531
494 // Abort |Read()|. 532 // Abort |Read()|.
495 { 533 {
496 char buf[3] = { 0 }; 534 char buf[3] = { 0 };
497 { 535 {
498 pp::FileIO_Dev file_io(instance_); 536 pp::FileIO_Dev file_io(instance_);
499 rv = file_io.Open(file_ref, PP_FILEOPENFLAG_READ, callback); 537 rv = file_io.Open(file_ref, PP_FILEOPENFLAG_READ, callback);
538 if (force_async_ && rv != PP_OK_COMPLETIONPENDING)
539 return ReportError("FileIO::Open force_async", rv);
500 if (rv == PP_OK_COMPLETIONPENDING) 540 if (rv == PP_OK_COMPLETIONPENDING)
501 rv = callback.WaitForResult(); 541 rv = callback.WaitForResult();
502 if (rv != PP_OK) 542 if (rv != PP_OK)
503 return ReportError("FileIO::Open", rv); 543 return ReportError("FileIO::Open", rv);
504 544
505 callback.reset_run_count(); 545 callback.reset_run_count();
506 rv = file_io.Read(0, buf, sizeof(buf), callback); 546 rv = file_io.Read(0, buf, sizeof(buf), callback);
547 if (force_async_ && rv != PP_OK_COMPLETIONPENDING)
548 return ReportError("FileIO::Read force_async", rv);
507 } // Destroy |file_io|. 549 } // Destroy |file_io|.
508 if (rv == PP_OK_COMPLETIONPENDING) { 550 if (rv == PP_OK_COMPLETIONPENDING) {
509 // Save a copy and make sure |buf| doesn't get written to. 551 // Save a copy and make sure |buf| doesn't get written to.
510 char buf_copy[3]; 552 char buf_copy[3];
511 memcpy(&buf_copy, &buf, sizeof(buf)); 553 memcpy(&buf_copy, &buf, sizeof(buf));
512 rv = callback.WaitForResult(); 554 rv = callback.WaitForResult();
513 if (rv != PP_ERROR_ABORTED) 555 if (rv != PP_ERROR_ABORTED)
514 return "FileIO::Read not aborted."; 556 return "FileIO::Read not aborted.";
515 if (memcmp(&buf_copy, &buf, sizeof(buf)) != 0) 557 if (memcmp(&buf_copy, &buf, sizeof(buf)) != 0)
516 return "FileIO::Read wrote data after resource destruction."; 558 return "FileIO::Read wrote data after resource destruction.";
517 } else if (rv != PP_OK) { 559 } else if (rv != PP_OK) {
518 return ReportError("FileIO::Read", rv); 560 return ReportError("FileIO::Read", rv);
519 } 561 }
520 } 562 }
521 563
522 // Abort |Write()|. 564 // Abort |Write()|.
523 { 565 {
524 char buf[3] = { 0 }; 566 char buf[3] = { 0 };
525 { 567 {
526 pp::FileIO_Dev file_io(instance_); 568 pp::FileIO_Dev file_io(instance_);
527 rv = file_io.Open(file_ref, PP_FILEOPENFLAG_READ, callback); 569 rv = file_io.Open(file_ref, PP_FILEOPENFLAG_READ, callback);
570 if (force_async_ && rv != PP_OK_COMPLETIONPENDING)
571 return ReportError("FileIO::Open force_async", rv);
528 if (rv == PP_OK_COMPLETIONPENDING) 572 if (rv == PP_OK_COMPLETIONPENDING)
529 rv = callback.WaitForResult(); 573 rv = callback.WaitForResult();
530 if (rv != PP_OK) 574 if (rv != PP_OK)
531 return ReportError("FileIO::Open", rv); 575 return ReportError("FileIO::Open", rv);
532 576
533 callback.reset_run_count(); 577 callback.reset_run_count();
534 rv = file_io.Write(0, buf, sizeof(buf), callback); 578 rv = file_io.Write(0, buf, sizeof(buf), callback);
579 if (force_async_ && rv != PP_OK_COMPLETIONPENDING)
580 return ReportError("FileIO::Write force_async", rv);
535 } // Destroy |file_io|. 581 } // Destroy |file_io|.
536 if (rv == PP_OK_COMPLETIONPENDING) { 582 if (rv == PP_OK_COMPLETIONPENDING) {
537 rv = callback.WaitForResult(); 583 rv = callback.WaitForResult();
538 if (rv != PP_ERROR_ABORTED) 584 if (rv != PP_ERROR_ABORTED)
539 return "FileIO::Write not aborted."; 585 return "FileIO::Write not aborted.";
540 } else if (rv != PP_OK) { 586 } else if (rv != PP_OK) {
541 return ReportError("FileIO::Write", rv); 587 return ReportError("FileIO::Write", rv);
542 } 588 }
543 } 589 }
544 590
545 // Abort |SetLength()|. 591 // Abort |SetLength()|.
546 { 592 {
547 { 593 {
548 pp::FileIO_Dev file_io(instance_); 594 pp::FileIO_Dev file_io(instance_);
549 rv = file_io.Open(file_ref, PP_FILEOPENFLAG_READ, callback); 595 rv = file_io.Open(file_ref, PP_FILEOPENFLAG_READ, callback);
596 if (force_async_ && rv != PP_OK_COMPLETIONPENDING)
597 return ReportError("FileIO::Open force_async", rv);
550 if (rv == PP_OK_COMPLETIONPENDING) 598 if (rv == PP_OK_COMPLETIONPENDING)
551 rv = callback.WaitForResult(); 599 rv = callback.WaitForResult();
552 if (rv != PP_OK) 600 if (rv != PP_OK)
553 return ReportError("FileIO::Open", rv); 601 return ReportError("FileIO::Open", rv);
554 602
555 callback.reset_run_count(); 603 callback.reset_run_count();
556 rv = file_io.SetLength(3, callback); 604 rv = file_io.SetLength(3, callback);
605 if (force_async_ && rv != PP_OK_COMPLETIONPENDING)
606 return ReportError("FileIO::SetLength force_async", rv);
557 } // Destroy |file_io|. 607 } // Destroy |file_io|.
558 if (rv == PP_OK_COMPLETIONPENDING) { 608 if (rv == PP_OK_COMPLETIONPENDING) {
559 rv = callback.WaitForResult(); 609 rv = callback.WaitForResult();
560 if (rv != PP_ERROR_ABORTED) 610 if (rv != PP_ERROR_ABORTED)
561 return "FileIO::SetLength not aborted."; 611 return "FileIO::SetLength not aborted.";
562 } else if (rv != PP_OK) { 612 } else if (rv != PP_OK) {
563 return ReportError("FileIO::SetLength", rv); 613 return ReportError("FileIO::SetLength", rv);
564 } 614 }
565 } 615 }
566 616
567 // Abort |Flush()|. 617 // Abort |Flush()|.
568 { 618 {
569 { 619 {
570 pp::FileIO_Dev file_io(instance_); 620 pp::FileIO_Dev file_io(instance_);
571 rv = file_io.Open(file_ref, PP_FILEOPENFLAG_READ, callback); 621 rv = file_io.Open(file_ref, PP_FILEOPENFLAG_READ, callback);
622 if (force_async_ && rv != PP_OK_COMPLETIONPENDING)
623 return ReportError("FileIO::Open force_async", rv);
572 if (rv == PP_OK_COMPLETIONPENDING) 624 if (rv == PP_OK_COMPLETIONPENDING)
573 rv = callback.WaitForResult(); 625 rv = callback.WaitForResult();
574 if (rv != PP_OK) 626 if (rv != PP_OK)
575 return ReportError("FileIO::Open", rv); 627 return ReportError("FileIO::Open", rv);
576 628
577 callback.reset_run_count(); 629 callback.reset_run_count();
578 rv = file_io.Flush(callback); 630 rv = file_io.Flush(callback);
631 if (force_async_ && rv != PP_OK_COMPLETIONPENDING)
632 return ReportError("FileIO::Flush force_async", rv);
579 } // Destroy |file_io|. 633 } // Destroy |file_io|.
580 if (rv == PP_OK_COMPLETIONPENDING) { 634 if (rv == PP_OK_COMPLETIONPENDING) {
581 rv = callback.WaitForResult(); 635 rv = callback.WaitForResult();
582 if (rv != PP_ERROR_ABORTED) 636 if (rv != PP_ERROR_ABORTED)
583 return "FileIO::Flush not aborted."; 637 return "FileIO::Flush not aborted.";
584 } else if (rv != PP_OK) { 638 } else if (rv != PP_OK) {
585 return ReportError("FileIO::Flush", rv); 639 return ReportError("FileIO::Flush", rv);
586 } 640 }
587 } 641 }
588 642
(...skipping 18 matching lines...) Expand all
607 for (size_t remains = expectations, end = END_OF_OPEN_EXPECATION_PAIRS; 661 for (size_t remains = expectations, end = END_OF_OPEN_EXPECATION_PAIRS;
608 end != 0; remains >>= 2, end >>= 2) { 662 end != 0; remains >>= 2, end >>= 2) {
609 if (!!(remains & 1) == !!(remains & 2)) 663 if (!!(remains & 1) == !!(remains & 2))
610 return bad_argument; 664 return bad_argument;
611 } 665 }
612 } 666 }
613 bool create_if_doesnt_exist = !!(expectations & CREATE_IF_DOESNT_EXIST); 667 bool create_if_doesnt_exist = !!(expectations & CREATE_IF_DOESNT_EXIST);
614 bool open_if_exists = !!(expectations & OPEN_IF_EXISTS); 668 bool open_if_exists = !!(expectations & OPEN_IF_EXISTS);
615 bool truncate_if_exists = !!(expectations & TRUNCATE_IF_EXISTS); 669 bool truncate_if_exists = !!(expectations & TRUNCATE_IF_EXISTS);
616 670
617 TestCompletionCallback callback(instance_->pp_instance()); 671 TestCompletionCallback callback(instance_->pp_instance(), force_async_);
618 pp::FileRef_Dev existent_file_ref( 672 pp::FileRef_Dev existent_file_ref(
619 *file_system, "/match_open_expectation_existent_non_empty_file"); 673 *file_system, "/match_open_expectation_existent_non_empty_file");
620 pp::FileRef_Dev nonexistent_file_ref( 674 pp::FileRef_Dev nonexistent_file_ref(
621 *file_system, "/match_open_expectation_nonexistent_file"); 675 *file_system, "/match_open_expectation_nonexistent_file");
622 676
623 // Setup files for test. 677 // Setup files for test.
624 { 678 {
625 int32_t rv = existent_file_ref.Delete(callback); 679 int32_t rv = existent_file_ref.Delete(callback);
680 if (force_async_ && rv != PP_OK_COMPLETIONPENDING)
681 return ReportError("FileRef::Delete force_async", rv);
626 if (rv == PP_OK_COMPLETIONPENDING) 682 if (rv == PP_OK_COMPLETIONPENDING)
627 rv = callback.WaitForResult(); 683 rv = callback.WaitForResult();
628 if (rv != PP_OK && rv != PP_ERROR_FILENOTFOUND) 684 if (rv != PP_OK && rv != PP_ERROR_FILENOTFOUND)
629 return ReportError("FileRef::Delete", rv); 685 return ReportError("FileRef::Delete", rv);
630 686
631 rv = nonexistent_file_ref.Delete(callback); 687 rv = nonexistent_file_ref.Delete(callback);
688 if (force_async_ && rv != PP_OK_COMPLETIONPENDING)
689 return ReportError("FileRef::Delete force_async", rv);
632 if (rv == PP_OK_COMPLETIONPENDING) 690 if (rv == PP_OK_COMPLETIONPENDING)
633 rv = callback.WaitForResult(); 691 rv = callback.WaitForResult();
634 if (rv != PP_OK && rv != PP_ERROR_FILENOTFOUND) 692 if (rv != PP_OK && rv != PP_ERROR_FILENOTFOUND)
635 return ReportError("FileRef::Delete", rv); 693 return ReportError("FileRef::Delete", rv);
636 694
637 pp::FileIO_Dev existent_file_io(instance_); 695 pp::FileIO_Dev existent_file_io(instance_);
638 rv = existent_file_io.Open(existent_file_ref, 696 rv = existent_file_io.Open(existent_file_ref,
639 PP_FILEOPENFLAG_CREATE | PP_FILEOPENFLAG_WRITE, 697 PP_FILEOPENFLAG_CREATE | PP_FILEOPENFLAG_WRITE,
640 callback); 698 callback);
699 if (force_async_ && rv != PP_OK_COMPLETIONPENDING)
700 return ReportError("FileIO::Open force_async", rv);
641 if (rv == PP_OK_COMPLETIONPENDING) 701 if (rv == PP_OK_COMPLETIONPENDING)
642 rv = callback.WaitForResult(); 702 rv = callback.WaitForResult();
643 if (rv != PP_OK) 703 if (rv != PP_OK)
644 return ReportError("FileIO::Open", rv); 704 return ReportError("FileIO::Open", rv);
645 705
646 rv = WriteEntireBuffer(instance_->pp_instance(), &existent_file_io, 0, 706 rv = WriteEntireBuffer(instance_->pp_instance(), &existent_file_io, 0,
647 "foobar"); 707 "foobar");
648 if (rv != PP_OK) 708 if (rv != PP_OK)
649 return ReportError("FileIO::Write", rv); 709 return ReportError("FileIO::Write", rv);
650 } 710 }
651 711
652 pp::FileIO_Dev existent_file_io(instance_); 712 pp::FileIO_Dev existent_file_io(instance_);
653 int32_t rv = existent_file_io.Open(existent_file_ref, open_flags, callback); 713 int32_t rv = existent_file_io.Open(existent_file_ref, open_flags, callback);
714 if (force_async_ && rv != PP_OK_COMPLETIONPENDING)
715 return ReportError("FileIO::Open force_async", rv);
654 if (rv == PP_OK_COMPLETIONPENDING) 716 if (rv == PP_OK_COMPLETIONPENDING)
655 rv = callback.WaitForResult(); 717 rv = callback.WaitForResult();
656 if ((invalid_combination && rv == PP_OK) || 718 if ((invalid_combination && rv == PP_OK) ||
657 (!invalid_combination && ((rv == PP_OK) != open_if_exists))) { 719 (!invalid_combination && ((rv == PP_OK) != open_if_exists))) {
658 return ReportOpenError(open_flags); 720 return ReportOpenError(open_flags);
659 } 721 }
660 722
661 if (!invalid_combination && open_if_exists) { 723 if (!invalid_combination && open_if_exists) {
662 PP_FileInfo_Dev info; 724 PP_FileInfo_Dev info;
663 rv = existent_file_io.Query(&info, callback); 725 rv = existent_file_io.Query(&info, callback);
726 if (force_async_ && rv != PP_OK_COMPLETIONPENDING)
727 return ReportError("FileIO::Query force_async", rv);
664 if (rv == PP_OK_COMPLETIONPENDING) 728 if (rv == PP_OK_COMPLETIONPENDING)
665 rv = callback.WaitForResult(); 729 rv = callback.WaitForResult();
666 if (rv != PP_OK) 730 if (rv != PP_OK)
667 return ReportError("FileIO::Query", rv); 731 return ReportError("FileIO::Query", rv);
668 732
669 if (truncate_if_exists != (info.size == 0)) 733 if (truncate_if_exists != (info.size == 0))
670 return ReportOpenError(open_flags); 734 return ReportOpenError(open_flags);
671 } 735 }
672 736
673 pp::FileIO_Dev nonexistent_file_io(instance_); 737 pp::FileIO_Dev nonexistent_file_io(instance_);
674 rv = nonexistent_file_io.Open(nonexistent_file_ref, open_flags, callback); 738 rv = nonexistent_file_io.Open(nonexistent_file_ref, open_flags, callback);
739 if (force_async_ && rv != PP_OK_COMPLETIONPENDING)
740 return ReportError("FileIO::Open force_async", rv);
675 if (rv == PP_OK_COMPLETIONPENDING) 741 if (rv == PP_OK_COMPLETIONPENDING)
676 rv = callback.WaitForResult(); 742 rv = callback.WaitForResult();
677 if ((invalid_combination && rv == PP_OK) || 743 if ((invalid_combination && rv == PP_OK) ||
678 (!invalid_combination && ((rv == PP_OK) != create_if_doesnt_exist))) { 744 (!invalid_combination && ((rv == PP_OK) != create_if_doesnt_exist))) {
679 return ReportOpenError(open_flags); 745 return ReportOpenError(open_flags);
680 } 746 }
681 747
682 return std::string(); 748 return std::string();
683 } 749 }
684 750
685 // TODO(viettrungluu): Test Close(). crbug.com/69457 751 // TODO(viettrungluu): Test Close(). crbug.com/69457
OLDNEW
« no previous file with comments | « ppapi/tests/test_directory_reader.cc ('k') | ppapi/tests/test_file_ref.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698