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