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