OLD | NEW |
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_ref.h" | 5 #include "ppapi/tests/test_file_ref.h" |
6 | 6 |
7 #include <stdio.h> | 7 #include <stdio.h> |
8 | 8 |
9 #include <sstream> | 9 #include <sstream> |
10 #include <vector> | 10 #include <vector> |
(...skipping 280 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
291 | 291 |
292 std::string TestFileRef::TestMakeDirectory() { | 292 std::string TestFileRef::TestMakeDirectory() { |
293 TestCompletionCallback callback(instance_->pp_instance(), callback_type()); | 293 TestCompletionCallback callback(instance_->pp_instance(), callback_type()); |
294 | 294 |
295 // Open. | 295 // Open. |
296 pp::FileSystem file_system(instance_, PP_FILESYSTEMTYPE_LOCALTEMPORARY); | 296 pp::FileSystem file_system(instance_, PP_FILESYSTEMTYPE_LOCALTEMPORARY); |
297 callback.WaitForResult(file_system.Open(1024, callback.GetCallback())); | 297 callback.WaitForResult(file_system.Open(1024, callback.GetCallback())); |
298 CHECK_CALLBACK_BEHAVIOR(callback); | 298 CHECK_CALLBACK_BEHAVIOR(callback); |
299 ASSERT_EQ(PP_OK, callback.result()); | 299 ASSERT_EQ(PP_OK, callback.result()); |
300 | 300 |
301 // MakeDirectory. | 301 // Make a directory. |
302 pp::FileRef dir_ref(file_system, "/test_dir_make_directory"); | 302 pp::FileRef dir_ref(file_system, "/dir_make_dir"); |
303 callback.WaitForResult(dir_ref.MakeDirectory(callback.GetCallback())); | 303 callback.WaitForResult( |
| 304 dir_ref.MakeDirectory(PP_MAKEDIRECTORYFLAG_NONE, callback.GetCallback())); |
304 CHECK_CALLBACK_BEHAVIOR(callback); | 305 CHECK_CALLBACK_BEHAVIOR(callback); |
305 ASSERT_EQ(PP_OK, callback.result()); | 306 ASSERT_EQ(PP_OK, callback.result()); |
306 | 307 |
307 // MakeDirectory aborted. | 308 // Make a directory on the existing path without exclusive flag. |
| 309 callback.WaitForResult( |
| 310 dir_ref.MakeDirectory(PP_MAKEDIRECTORYFLAG_NONE, callback.GetCallback())); |
| 311 CHECK_CALLBACK_BEHAVIOR(callback); |
| 312 ASSERT_EQ(PP_OK, callback.result()); |
| 313 |
| 314 // Making a directory should be aborted. |
308 int32_t rv = PP_ERROR_FAILED; | 315 int32_t rv = PP_ERROR_FAILED; |
309 { | 316 { |
310 rv = pp::FileRef(file_system, "/test_dir_make_abort") | 317 rv = pp::FileRef(file_system, "/dir_make_dir_abort") |
311 .MakeDirectory(callback.GetCallback()); | 318 .MakeDirectory(PP_MAKEDIRECTORYFLAG_NONE, callback.GetCallback()); |
312 } | 319 } |
313 callback.WaitForAbortResult(rv); | 320 callback.WaitForAbortResult(rv); |
314 CHECK_CALLBACK_BEHAVIOR(callback); | 321 CHECK_CALLBACK_BEHAVIOR(callback); |
315 | 322 |
316 // MakeDirectoryIncludingAncestors. | 323 // Make nested directories. |
317 dir_ref = pp::FileRef(file_system, "/dir_make_dir_1/dir_make_dir_2"); | 324 dir_ref = pp::FileRef(file_system, "/dir_make_nested_dir_1/dir"); |
318 callback.WaitForResult( | 325 callback.WaitForResult( |
319 dir_ref.MakeDirectoryIncludingAncestors(callback.GetCallback())); | 326 dir_ref.MakeDirectory(PP_MAKEDIRECTORYFLAG_WITH_ANCESTORS, |
| 327 callback.GetCallback())); |
320 CHECK_CALLBACK_BEHAVIOR(callback); | 328 CHECK_CALLBACK_BEHAVIOR(callback); |
321 ASSERT_EQ(PP_OK, callback.result()); | 329 ASSERT_EQ(PP_OK, callback.result()); |
322 | 330 |
323 // MakeDirectoryIncludingAncestors aborted. | 331 dir_ref = pp::FileRef(file_system, "/dir_make_nested_dir_2/dir"); |
324 { | 332 callback.WaitForResult( |
325 rv = pp::FileRef(file_system, "/dir_make_abort_1/dir_make_abort_2") | 333 dir_ref.MakeDirectory(PP_MAKEDIRECTORYFLAG_NONE, callback.GetCallback())); |
326 .MakeDirectoryIncludingAncestors(callback.GetCallback()); | |
327 } | |
328 callback.WaitForAbortResult(rv); | |
329 CHECK_CALLBACK_BEHAVIOR(callback); | 334 CHECK_CALLBACK_BEHAVIOR(callback); |
| 335 ASSERT_EQ(PP_ERROR_FILENOTFOUND, callback.result()); |
330 | 336 |
331 // MakeDirectory with nested path should fail. | 337 // Ensure there is no directory on the path to test exclusive cases. |
332 dir_ref = pp::FileRef(file_system, "/dir_make_dir_3/dir_make_dir_4"); | 338 dir_ref = pp::FileRef(file_system, "/dir_make_dir_exclusive"); |
333 callback.WaitForResult(dir_ref.MakeDirectory(callback.GetCallback())); | 339 rv = DeleteDirectoryRecursively(&dir_ref); |
| 340 ASSERT_TRUE(rv == PP_OK || rv == PP_ERROR_FILENOTFOUND); |
| 341 |
| 342 // Make a directory exclusively. |
| 343 callback.WaitForResult( |
| 344 dir_ref.MakeDirectory(PP_MAKEDIRECTORYFLAG_EXCLUSIVE, |
| 345 callback.GetCallback())); |
334 CHECK_CALLBACK_BEHAVIOR(callback); | 346 CHECK_CALLBACK_BEHAVIOR(callback); |
335 ASSERT_NE(PP_OK, callback.result()); | 347 ASSERT_EQ(PP_OK, callback.result()); |
| 348 |
| 349 callback.WaitForResult( |
| 350 dir_ref.MakeDirectory(PP_MAKEDIRECTORYFLAG_EXCLUSIVE, |
| 351 callback.GetCallback())); |
| 352 CHECK_CALLBACK_BEHAVIOR(callback); |
| 353 ASSERT_EQ(PP_ERROR_FILEEXISTS, callback.result()); |
336 | 354 |
337 PASS(); | 355 PASS(); |
338 } | 356 } |
339 | 357 |
340 std::string TestFileRef::TestQueryAndTouchFile() { | 358 std::string TestFileRef::TestQueryAndTouchFile() { |
341 TestCompletionCallback callback(instance_->pp_instance(), callback_type()); | 359 TestCompletionCallback callback(instance_->pp_instance(), callback_type()); |
342 pp::FileSystem file_system(instance_, PP_FILESYSTEMTYPE_LOCALTEMPORARY); | 360 pp::FileSystem file_system(instance_, PP_FILESYSTEMTYPE_LOCALTEMPORARY); |
343 callback.WaitForResult(file_system.Open(1024, callback.GetCallback())); | 361 callback.WaitForResult(file_system.Open(1024, callback.GetCallback())); |
344 CHECK_CALLBACK_BEHAVIOR(callback); | 362 CHECK_CALLBACK_BEHAVIOR(callback); |
345 ASSERT_EQ(PP_OK, callback.result()); | 363 ASSERT_EQ(PP_OK, callback.result()); |
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
425 callback.WaitForResult( | 443 callback.WaitForResult( |
426 file_io.Open(file_ref, PP_FILEOPENFLAG_CREATE, callback.GetCallback())); | 444 file_io.Open(file_ref, PP_FILEOPENFLAG_CREATE, callback.GetCallback())); |
427 CHECK_CALLBACK_BEHAVIOR(callback); | 445 CHECK_CALLBACK_BEHAVIOR(callback); |
428 ASSERT_EQ(PP_OK, callback.result()); | 446 ASSERT_EQ(PP_OK, callback.result()); |
429 | 447 |
430 callback.WaitForResult(file_ref.Delete(callback.GetCallback())); | 448 callback.WaitForResult(file_ref.Delete(callback.GetCallback())); |
431 CHECK_CALLBACK_BEHAVIOR(callback); | 449 CHECK_CALLBACK_BEHAVIOR(callback); |
432 ASSERT_EQ(PP_OK, callback.result()); | 450 ASSERT_EQ(PP_OK, callback.result()); |
433 | 451 |
434 pp::FileRef dir_ref(file_system, "/dir_delete"); | 452 pp::FileRef dir_ref(file_system, "/dir_delete"); |
435 callback.WaitForResult(dir_ref.MakeDirectory(callback.GetCallback())); | 453 callback.WaitForResult(dir_ref.MakeDirectory( |
| 454 PP_MAKEDIRECTORYFLAG_NONE, callback.GetCallback())); |
436 CHECK_CALLBACK_BEHAVIOR(callback); | 455 CHECK_CALLBACK_BEHAVIOR(callback); |
437 ASSERT_EQ(PP_OK, callback.result()); | 456 ASSERT_EQ(PP_OK, callback.result()); |
438 | 457 |
439 callback.WaitForResult(dir_ref.Delete(callback.GetCallback())); | 458 callback.WaitForResult(dir_ref.Delete(callback.GetCallback())); |
440 CHECK_CALLBACK_BEHAVIOR(callback); | 459 CHECK_CALLBACK_BEHAVIOR(callback); |
441 ASSERT_EQ(PP_OK, callback.result()); | 460 ASSERT_EQ(PP_OK, callback.result()); |
442 | 461 |
443 pp::FileRef nested_dir_ref(file_system, "/dir_delete_1/dir_delete_2"); | 462 pp::FileRef nested_dir_ref(file_system, "/dir_delete_1/dir_delete_2"); |
444 callback.WaitForResult( | 463 callback.WaitForResult( |
445 nested_dir_ref.MakeDirectoryIncludingAncestors(callback.GetCallback())); | 464 nested_dir_ref.MakeDirectory(PP_MAKEDIRECTORYFLAG_WITH_ANCESTORS, |
| 465 callback.GetCallback())); |
446 CHECK_CALLBACK_BEHAVIOR(callback); | 466 CHECK_CALLBACK_BEHAVIOR(callback); |
447 ASSERT_EQ(PP_OK, callback.result()); | 467 ASSERT_EQ(PP_OK, callback.result()); |
448 | 468 |
449 // Attempt to delete the parent directory (should fail; it's non-empty). | 469 // Attempt to delete the parent directory (should fail; it's non-empty). |
450 pp::FileRef parent_dir_ref = nested_dir_ref.GetParent(); | 470 pp::FileRef parent_dir_ref = nested_dir_ref.GetParent(); |
451 callback.WaitForResult(parent_dir_ref.Delete(callback.GetCallback())); | 471 callback.WaitForResult(parent_dir_ref.Delete(callback.GetCallback())); |
452 CHECK_CALLBACK_BEHAVIOR(callback); | 472 CHECK_CALLBACK_BEHAVIOR(callback); |
453 ASSERT_EQ(PP_ERROR_FAILED, callback.result()); | 473 ASSERT_EQ(PP_ERROR_FAILED, callback.result()); |
454 | 474 |
455 pp::FileRef nonexistent_file_ref(file_system, "/nonexistent_file_delete"); | 475 pp::FileRef nonexistent_file_ref(file_system, "/nonexistent_file_delete"); |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
489 CHECK_CALLBACK_BEHAVIOR(callback); | 509 CHECK_CALLBACK_BEHAVIOR(callback); |
490 ASSERT_EQ(PP_OK, callback.result()); | 510 ASSERT_EQ(PP_OK, callback.result()); |
491 | 511 |
492 pp::FileRef target_file_ref(file_system, "/target_file_rename"); | 512 pp::FileRef target_file_ref(file_system, "/target_file_rename"); |
493 callback.WaitForResult( | 513 callback.WaitForResult( |
494 file_ref.Rename(target_file_ref, callback.GetCallback())); | 514 file_ref.Rename(target_file_ref, callback.GetCallback())); |
495 CHECK_CALLBACK_BEHAVIOR(callback); | 515 CHECK_CALLBACK_BEHAVIOR(callback); |
496 ASSERT_EQ(PP_OK, callback.result()); | 516 ASSERT_EQ(PP_OK, callback.result()); |
497 | 517 |
498 pp::FileRef dir_ref(file_system, "/dir_rename"); | 518 pp::FileRef dir_ref(file_system, "/dir_rename"); |
499 callback.WaitForResult(dir_ref.MakeDirectory(callback.GetCallback())); | 519 callback.WaitForResult(dir_ref.MakeDirectory( |
| 520 PP_MAKEDIRECTORYFLAG_NONE, callback.GetCallback())); |
500 CHECK_CALLBACK_BEHAVIOR(callback); | 521 CHECK_CALLBACK_BEHAVIOR(callback); |
501 ASSERT_EQ(PP_OK, callback.result()); | 522 ASSERT_EQ(PP_OK, callback.result()); |
502 | 523 |
503 pp::FileRef target_dir_ref(file_system, "/target_dir_rename"); | 524 pp::FileRef target_dir_ref(file_system, "/target_dir_rename"); |
504 callback.WaitForResult( | 525 callback.WaitForResult( |
505 dir_ref.Rename(target_dir_ref, callback.GetCallback())); | 526 dir_ref.Rename(target_dir_ref, callback.GetCallback())); |
506 CHECK_CALLBACK_BEHAVIOR(callback); | 527 CHECK_CALLBACK_BEHAVIOR(callback); |
507 ASSERT_EQ(PP_OK, callback.result()); | 528 ASSERT_EQ(PP_OK, callback.result()); |
508 | 529 |
509 pp::FileRef nested_dir_ref(file_system, "/dir_rename_1/dir_rename_2"); | 530 pp::FileRef nested_dir_ref(file_system, "/dir_rename_1/dir_rename_2"); |
510 callback.WaitForResult( | 531 callback.WaitForResult( |
511 nested_dir_ref.MakeDirectoryIncludingAncestors(callback.GetCallback())); | 532 nested_dir_ref.MakeDirectory(PP_MAKEDIRECTORYFLAG_WITH_ANCESTORS, |
| 533 callback.GetCallback())); |
512 CHECK_CALLBACK_BEHAVIOR(callback); | 534 CHECK_CALLBACK_BEHAVIOR(callback); |
513 ASSERT_EQ(PP_OK, callback.result()); | 535 ASSERT_EQ(PP_OK, callback.result()); |
514 | 536 |
515 // Try to rename nested directory to the parent name. Should fail. | 537 // Try to rename nested directory to the parent name. Should fail. |
516 pp::FileRef target_nested_dir_ref(file_system, "/dir_rename_1"); | 538 pp::FileRef target_nested_dir_ref(file_system, "/dir_rename_1"); |
517 callback.WaitForResult( | 539 callback.WaitForResult( |
518 nested_dir_ref.Rename(target_nested_dir_ref, callback.GetCallback())); | 540 nested_dir_ref.Rename(target_nested_dir_ref, callback.GetCallback())); |
519 CHECK_CALLBACK_BEHAVIOR(callback); | 541 CHECK_CALLBACK_BEHAVIOR(callback); |
520 ASSERT_EQ(PP_ERROR_FAILED, callback.result()); | 542 ASSERT_EQ(PP_ERROR_FAILED, callback.result()); |
521 | 543 |
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
608 std::string TestFileRef::TestFileNameEscaping() { | 630 std::string TestFileRef::TestFileNameEscaping() { |
609 TestCompletionCallback callback(instance_->pp_instance(), callback_type()); | 631 TestCompletionCallback callback(instance_->pp_instance(), callback_type()); |
610 pp::FileSystem file_system(instance_, PP_FILESYSTEMTYPE_LOCALTEMPORARY); | 632 pp::FileSystem file_system(instance_, PP_FILESYSTEMTYPE_LOCALTEMPORARY); |
611 callback.WaitForResult(file_system.Open(1024, callback.GetCallback())); | 633 callback.WaitForResult(file_system.Open(1024, callback.GetCallback())); |
612 CHECK_CALLBACK_BEHAVIOR(callback); | 634 CHECK_CALLBACK_BEHAVIOR(callback); |
613 ASSERT_EQ(PP_OK, callback.result()); | 635 ASSERT_EQ(PP_OK, callback.result()); |
614 | 636 |
615 std::string test_dir_path = "/dir_for_escaping_test"; | 637 std::string test_dir_path = "/dir_for_escaping_test"; |
616 // Create a directory in which to test. | 638 // Create a directory in which to test. |
617 pp::FileRef test_dir_ref(file_system, test_dir_path.c_str()); | 639 pp::FileRef test_dir_ref(file_system, test_dir_path.c_str()); |
618 callback.WaitForResult(test_dir_ref.MakeDirectory(callback.GetCallback())); | 640 callback.WaitForResult(test_dir_ref.MakeDirectory( |
| 641 PP_MAKEDIRECTORYFLAG_NONE, callback.GetCallback())); |
619 CHECK_CALLBACK_BEHAVIOR(callback); | 642 CHECK_CALLBACK_BEHAVIOR(callback); |
620 ASSERT_EQ(PP_OK, callback.result()); | 643 ASSERT_EQ(PP_OK, callback.result()); |
621 | 644 |
622 // Create the file with the terrible name. | 645 // Create the file with the terrible name. |
623 std::string full_file_path = test_dir_path + "/" + kTerribleName; | 646 std::string full_file_path = test_dir_path + "/" + kTerribleName; |
624 pp::FileRef file_ref(file_system, full_file_path.c_str()); | 647 pp::FileRef file_ref(file_system, full_file_path.c_str()); |
625 pp::FileIO file_io(instance_); | 648 pp::FileIO file_io(instance_); |
626 callback.WaitForResult( | 649 callback.WaitForResult( |
627 file_io.Open(file_ref, PP_FILEOPENFLAG_CREATE, callback.GetCallback())); | 650 file_io.Open(file_ref, PP_FILEOPENFLAG_CREATE, callback.GetCallback())); |
628 CHECK_CALLBACK_BEHAVIOR(callback); | 651 CHECK_CALLBACK_BEHAVIOR(callback); |
(...skipping 27 matching lines...) Expand all Loading... |
656 | 679 |
657 // Setup testing directories and files. | 680 // Setup testing directories and files. |
658 const char* test_dir_name = "/test_get_next_file"; | 681 const char* test_dir_name = "/test_get_next_file"; |
659 const char* file_prefix = "file_"; | 682 const char* file_prefix = "file_"; |
660 const char* dir_prefix = "dir_"; | 683 const char* dir_prefix = "dir_"; |
661 | 684 |
662 pp::FileRef test_dir(file_system, test_dir_name); | 685 pp::FileRef test_dir(file_system, test_dir_name); |
663 int32_t rv = DeleteDirectoryRecursively(&test_dir); | 686 int32_t rv = DeleteDirectoryRecursively(&test_dir); |
664 ASSERT_TRUE(rv == PP_OK || rv == PP_ERROR_FILENOTFOUND); | 687 ASSERT_TRUE(rv == PP_OK || rv == PP_ERROR_FILENOTFOUND); |
665 | 688 |
666 callback.WaitForResult(test_dir.MakeDirectory(callback.GetCallback())); | 689 callback.WaitForResult(test_dir.MakeDirectory( |
| 690 PP_MAKEDIRECTORYFLAG_NONE, callback.GetCallback())); |
667 CHECK_CALLBACK_BEHAVIOR(callback); | 691 CHECK_CALLBACK_BEHAVIOR(callback); |
668 ASSERT_EQ(PP_OK, callback.result()); | 692 ASSERT_EQ(PP_OK, callback.result()); |
669 | 693 |
670 static const int kNumFiles = 3; | 694 static const int kNumFiles = 3; |
671 std::set<std::string> expected_file_names; | 695 std::set<std::string> expected_file_names; |
672 for (int i = 1; i <= kNumFiles; ++i) { | 696 for (int i = 1; i <= kNumFiles; ++i) { |
673 std::ostringstream buffer; | 697 std::ostringstream buffer; |
674 buffer << test_dir_name << '/' << file_prefix << i; | 698 buffer << test_dir_name << '/' << file_prefix << i; |
675 pp::FileRef file_ref(file_system, buffer.str().c_str()); | 699 pp::FileRef file_ref(file_system, buffer.str().c_str()); |
676 | 700 |
677 pp::FileIO file_io(instance_); | 701 pp::FileIO file_io(instance_); |
678 callback.WaitForResult( | 702 callback.WaitForResult( |
679 file_io.Open(file_ref, PP_FILEOPENFLAG_CREATE, callback.GetCallback())); | 703 file_io.Open(file_ref, PP_FILEOPENFLAG_CREATE, callback.GetCallback())); |
680 CHECK_CALLBACK_BEHAVIOR(callback); | 704 CHECK_CALLBACK_BEHAVIOR(callback); |
681 ASSERT_EQ(PP_OK, callback.result()); | 705 ASSERT_EQ(PP_OK, callback.result()); |
682 | 706 |
683 expected_file_names.insert(buffer.str()); | 707 expected_file_names.insert(buffer.str()); |
684 } | 708 } |
685 | 709 |
686 static const int kNumDirectories = 3; | 710 static const int kNumDirectories = 3; |
687 std::set<std::string> expected_dir_names; | 711 std::set<std::string> expected_dir_names; |
688 for (int i = 1; i <= kNumDirectories; ++i) { | 712 for (int i = 1; i <= kNumDirectories; ++i) { |
689 std::ostringstream buffer; | 713 std::ostringstream buffer; |
690 buffer << test_dir_name << '/' << dir_prefix << i; | 714 buffer << test_dir_name << '/' << dir_prefix << i; |
691 pp::FileRef file_ref(file_system, buffer.str().c_str()); | 715 pp::FileRef file_ref(file_system, buffer.str().c_str()); |
692 | 716 |
693 callback.WaitForResult(file_ref.MakeDirectory(callback.GetCallback())); | 717 callback.WaitForResult(file_ref.MakeDirectory( |
| 718 PP_MAKEDIRECTORYFLAG_NONE, callback.GetCallback())); |
694 CHECK_CALLBACK_BEHAVIOR(callback); | 719 CHECK_CALLBACK_BEHAVIOR(callback); |
695 ASSERT_EQ(PP_OK, callback.result()); | 720 ASSERT_EQ(PP_OK, callback.result()); |
696 | 721 |
697 expected_dir_names.insert(buffer.str()); | 722 expected_dir_names.insert(buffer.str()); |
698 } | 723 } |
699 | 724 |
700 // Test that |ReadDirectoryEntries()| is able to fetch all | 725 // Test that |ReadDirectoryEntries()| is able to fetch all |
701 // directories and files that we created. | 726 // directories and files that we created. |
702 { | 727 { |
703 TestCompletionCallbackWithOutput<DirEntries> output_callback( | 728 TestCompletionCallbackWithOutput<DirEntries> output_callback( |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
741 { | 766 { |
742 rv = pp::FileRef(file_system, test_dir_name) | 767 rv = pp::FileRef(file_system, test_dir_name) |
743 .ReadDirectoryEntries(output_callback.GetCallback()); | 768 .ReadDirectoryEntries(output_callback.GetCallback()); |
744 } | 769 } |
745 output_callback.WaitForAbortResult(rv); | 770 output_callback.WaitForAbortResult(rv); |
746 CHECK_CALLBACK_BEHAVIOR(output_callback); | 771 CHECK_CALLBACK_BEHAVIOR(output_callback); |
747 | 772 |
748 | 773 |
749 PASS(); | 774 PASS(); |
750 } | 775 } |
OLD | NEW |