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

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

Issue 12817009: Add Query() support to FileRef (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Merged onto origin/master yet again Created 7 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « ppapi/tests/test_file_ref.h ('k') | ppapi/thunk/interfaces_ppb_public_stable.h » ('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_ref.h" 5 #include "ppapi/tests/test_file_ref.h"
6 6
7 #include <stdio.h> 7 #include <stdio.h>
8 #include <vector> 8 #include <vector>
9 9
10 #include "ppapi/c/pp_errors.h" 10 #include "ppapi/c/pp_errors.h"
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
42 return method_name + " returned '" + returned_result + "'; '" + 42 return method_name + " returned '" + returned_result + "'; '" +
43 expected_result + "' expected."; 43 expected_result + "' expected.";
44 } 44 }
45 45
46 } // namespace 46 } // namespace
47 47
48 bool TestFileRef::Init() { 48 bool TestFileRef::Init() {
49 return CheckTestingInterface() && EnsureRunningOverHTTP(); 49 return CheckTestingInterface() && EnsureRunningOverHTTP();
50 } 50 }
51 51
52 std::string TestFileRef::MakeExternalFileRef(pp::FileRef* file_ref_ext) {
53 pp::URLRequestInfo request(instance_);
54 request.SetURL("test_url_loader_data/hello.txt");
55 request.SetStreamToFile(true);
56
57 TestCompletionCallback callback(instance_->pp_instance(), callback_type());
58
59 pp::URLLoader loader(instance_);
60 callback.WaitForResult(loader.Open(request, callback.GetCallback()));
61 CHECK_CALLBACK_BEHAVIOR(callback);
62 ASSERT_EQ(PP_OK, callback.result());
63
64 pp::URLResponseInfo response_info(loader.GetResponseInfo());
65 ASSERT_FALSE(response_info.is_null())
66 ASSERT_EQ(200, response_info.GetStatusCode());
67
68 *file_ref_ext = pp::FileRef(response_info.GetBodyAsFileRef());
69 ASSERT_EQ(PP_FILESYSTEMTYPE_EXTERNAL, file_ref_ext->GetFileSystemType())
70 PASS();
71 }
72
52 void TestFileRef::RunTests(const std::string& filter) { 73 void TestFileRef::RunTests(const std::string& filter) {
53 RUN_TEST_FORCEASYNC_AND_NOT(Create, filter); 74 RUN_TEST_FORCEASYNC_AND_NOT(Create, filter);
54 RUN_TEST_FORCEASYNC_AND_NOT(GetFileSystemType, filter); 75 RUN_TEST_FORCEASYNC_AND_NOT(GetFileSystemType, filter);
55 RUN_TEST_FORCEASYNC_AND_NOT(GetName, filter); 76 RUN_TEST_FORCEASYNC_AND_NOT(GetName, filter);
56 RUN_TEST_FORCEASYNC_AND_NOT(GetPath, filter); 77 RUN_TEST_FORCEASYNC_AND_NOT(GetPath, filter);
57 RUN_TEST_FORCEASYNC_AND_NOT(GetParent, filter); 78 RUN_TEST_FORCEASYNC_AND_NOT(GetParent, filter);
58 RUN_TEST_FORCEASYNC_AND_NOT(MakeDirectory, filter); 79 RUN_TEST_FORCEASYNC_AND_NOT(MakeDirectory, filter);
59 RUN_TEST_FORCEASYNC_AND_NOT(QueryAndTouchFile, filter); 80 RUN_TEST_FORCEASYNC_AND_NOT(QueryAndTouchFile, filter);
60 RUN_TEST_FORCEASYNC_AND_NOT(DeleteFileAndDirectory, filter); 81 RUN_TEST_FORCEASYNC_AND_NOT(DeleteFileAndDirectory, filter);
61 RUN_TEST_FORCEASYNC_AND_NOT(RenameFileAndDirectory, filter); 82 RUN_TEST_FORCEASYNC_AND_NOT(RenameFileAndDirectory, filter);
83 RUN_CALLBACK_TEST(TestFileRef, Query, filter);
62 #ifndef PPAPI_OS_NACL // NaCl can't run this test yet. 84 #ifndef PPAPI_OS_NACL // NaCl can't run this test yet.
63 RUN_TEST_FORCEASYNC_AND_NOT(FileNameEscaping, filter); 85 RUN_TEST_FORCEASYNC_AND_NOT(FileNameEscaping, filter);
64 #endif 86 #endif
65 } 87 }
66 88
67 std::string TestFileRef::TestCreate() { 89 std::string TestFileRef::TestCreate() {
68 std::vector<std::string> invalid_paths; 90 std::vector<std::string> invalid_paths;
69 invalid_paths.push_back("invalid_path"); // no '/' at the first character 91 invalid_paths.push_back("invalid_path"); // no '/' at the first character
70 invalid_paths.push_back(""); // empty path 92 invalid_paths.push_back(""); // empty path
71 // The following are directory traversal checks 93 // The following are directory traversal checks
(...skipping 29 matching lines...) Expand all
101 instance_, PP_FILESYSTEMTYPE_LOCALTEMPORARY); 123 instance_, PP_FILESYSTEMTYPE_LOCALTEMPORARY);
102 124
103 pp::FileRef file_ref_pers(file_system_pers, kPersFilePath); 125 pp::FileRef file_ref_pers(file_system_pers, kPersFilePath);
104 if (file_ref_pers.GetFileSystemType() != PP_FILESYSTEMTYPE_LOCALPERSISTENT) 126 if (file_ref_pers.GetFileSystemType() != PP_FILESYSTEMTYPE_LOCALPERSISTENT)
105 return "file_ref_pers expected to be persistent."; 127 return "file_ref_pers expected to be persistent.";
106 128
107 pp::FileRef file_ref_temp(file_system_temp, kTempFilePath); 129 pp::FileRef file_ref_temp(file_system_temp, kTempFilePath);
108 if (file_ref_temp.GetFileSystemType() != PP_FILESYSTEMTYPE_LOCALTEMPORARY) 130 if (file_ref_temp.GetFileSystemType() != PP_FILESYSTEMTYPE_LOCALTEMPORARY)
109 return "file_ref_temp expected to be temporary."; 131 return "file_ref_temp expected to be temporary.";
110 132
111 pp::URLRequestInfo request(instance_); 133 pp::FileRef file_ref_ext;
112 request.SetURL("test_url_loader_data/hello.txt"); 134 std::string result = MakeExternalFileRef(&file_ref_ext);
113 request.SetStreamToFile(true); 135 if (!result.empty())
114 136 return result;
115 TestCompletionCallback callback(instance_->pp_instance(), force_async_);
116
117 pp::URLLoader loader(instance_);
118 int32_t rv = loader.Open(request, callback.GetCallback());
119 if (force_async_ && rv != PP_OK_COMPLETIONPENDING)
120 return ReportError("URLLoader::Open force_async", rv);
121 if (rv == PP_OK_COMPLETIONPENDING)
122 rv = callback.WaitForResult();
123 if (rv != PP_OK)
124 return "URLLoader::Open() failed.";
125
126 pp::URLResponseInfo response_info(loader.GetResponseInfo());
127 if (response_info.is_null())
128 return "URLLoader::GetResponseInfo returned null";
129 int32_t status_code = response_info.GetStatusCode();
130 if (status_code != 200)
131 return "Unexpected HTTP status code";
132
133 pp::FileRef file_ref_ext(response_info.GetBodyAsFileRef());
134 if (file_ref_ext.GetFileSystemType() != PP_FILESYSTEMTYPE_EXTERNAL)
135 return "file_ref_ext expected to be external.";
136
137 PASS(); 137 PASS();
138 } 138 }
139 139
140 std::string TestFileRef::TestGetName() { 140 std::string TestFileRef::TestGetName() {
141 pp::FileSystem file_system_pers( 141 pp::FileSystem file_system_pers(
142 instance_, PP_FILESYSTEMTYPE_LOCALPERSISTENT); 142 instance_, PP_FILESYSTEMTYPE_LOCALPERSISTENT);
143 pp::FileSystem file_system_temp( 143 pp::FileSystem file_system_temp(
144 instance_, PP_FILESYSTEMTYPE_LOCALTEMPORARY); 144 instance_, PP_FILESYSTEMTYPE_LOCALTEMPORARY);
145 145
146 pp::FileRef file_ref_pers(file_system_pers, kPersFilePath); 146 pp::FileRef file_ref_pers(file_system_pers, kPersFilePath);
(...skipping 528 matching lines...) Expand 10 before | Expand all | Expand 10 after
675 rv = callback.WaitForResult(); 675 rv = callback.WaitForResult();
676 if (rv != PP_ERROR_ABORTED) 676 if (rv != PP_ERROR_ABORTED)
677 return "FileSystem::Rename not aborted."; 677 return "FileSystem::Rename not aborted.";
678 } else if (rv != PP_OK) { 678 } else if (rv != PP_OK) {
679 return ReportError("FileSystem::Rename", rv); 679 return ReportError("FileSystem::Rename", rv);
680 } 680 }
681 681
682 PASS(); 682 PASS();
683 } 683 }
684 684
685 std::string TestFileRef::TestQuery() {
686 TestCompletionCallback callback(instance_->pp_instance(), callback_type());
687
688 pp::FileSystem file_system(instance_, PP_FILESYSTEMTYPE_LOCALTEMPORARY);
689 callback.WaitForResult(file_system.Open(1024, callback.GetCallback()));
690 CHECK_CALLBACK_BEHAVIOR(callback);
691 ASSERT_EQ(PP_OK, callback.result());
692
693 pp::FileRef file_ref(file_system, "/file");
694 pp::FileIO file_io(instance_);
695 callback.WaitForResult(file_io.Open(file_ref, PP_FILEOPENFLAG_CREATE,
696 callback.GetCallback()));
697 CHECK_CALLBACK_BEHAVIOR(callback);
698 ASSERT_EQ(PP_OK, callback.result());
699
700 // We touch the file so we can easily check access and modified time.
701 callback.WaitForResult(file_io.Touch(0, 0, callback.GetCallback()));
702 CHECK_CALLBACK_BEHAVIOR(callback);
703 ASSERT_EQ(PP_OK, callback.result());
704
705 TestCompletionCallbackWithOutput<PP_FileInfo> out_callback(
706 instance_->pp_instance(), callback_type());
707 out_callback.WaitForResult(file_ref.Query(out_callback.GetCallback()));
708 CHECK_CALLBACK_BEHAVIOR(out_callback);
709 ASSERT_EQ(PP_OK, out_callback.result());
710
711 PP_FileInfo info = out_callback.output();
712 ASSERT_EQ(0, info.size);
713 ASSERT_EQ(PP_FILETYPE_REGULAR, info.type);
714 ASSERT_EQ(PP_FILESYSTEMTYPE_LOCALTEMPORARY, info.system_type);
715 ASSERT_DOUBLE_EQ(0.0, info.last_access_time);
716 ASSERT_DOUBLE_EQ(0.0, info.last_modified_time);
717
718 // Query a file ref on an external filesystem.
719 pp::FileRef file_ref_ext;
720 std::string result = MakeExternalFileRef(&file_ref_ext);
721 if (!result.empty())
722 return result;
723 out_callback.WaitForResult(file_ref_ext.Query(out_callback.GetCallback()));
724 CHECK_CALLBACK_BEHAVIOR(out_callback);
725 if (out_callback.result() != PP_OK)
726 return ReportError("Query() result", out_callback.result());
727 ASSERT_EQ(PP_OK, out_callback.result());
728
729 info = out_callback.output();
730 ASSERT_EQ(PP_FILETYPE_REGULAR, info.type);
731 ASSERT_EQ(PP_FILESYSTEMTYPE_EXTERNAL, info.system_type);
732
733 // We can't touch the file, so just sanity check the times.
734 ASSERT_TRUE(info.creation_time >= 0.0);
735 ASSERT_TRUE(info.last_modified_time >= 0.0);
736 ASSERT_TRUE(info.last_access_time >= 0.0);
737
738 // Query a file ref for a file that doesn't exist.
739 pp::FileRef missing_file_ref(file_system, "/missing_file");
740 out_callback.WaitForResult(missing_file_ref.Query(
741 out_callback.GetCallback()));
742 CHECK_CALLBACK_BEHAVIOR(out_callback);
743 ASSERT_EQ(PP_ERROR_FILENOTFOUND, out_callback.result());
744
745 PASS();
746 }
747
685 #ifndef PPAPI_OS_NACL 748 #ifndef PPAPI_OS_NACL
686 std::string TestFileRef::TestFileNameEscaping() { 749 std::string TestFileRef::TestFileNameEscaping() {
687 TestCompletionCallback callback(instance_->pp_instance(), force_async_); 750 TestCompletionCallback callback(instance_->pp_instance(), force_async_);
688 pp::FileSystem file_system(instance_, PP_FILESYSTEMTYPE_LOCALTEMPORARY); 751 pp::FileSystem file_system(instance_, PP_FILESYSTEMTYPE_LOCALTEMPORARY);
689 int32_t rv = file_system.Open(1024, callback.GetCallback()); 752 int32_t rv = file_system.Open(1024, callback.GetCallback());
690 if (force_async_ && rv != PP_OK_COMPLETIONPENDING) 753 if (force_async_ && rv != PP_OK_COMPLETIONPENDING)
691 return ReportError("FileSystem::Open force_async", rv); 754 return ReportError("FileSystem::Open force_async", rv);
692 if (rv == PP_OK_COMPLETIONPENDING) 755 if (rv == PP_OK_COMPLETIONPENDING)
693 rv = callback.WaitForResult(); 756 rv = callback.WaitForResult();
694 if (rv != PP_OK) 757 if (rv != PP_OK)
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
734 return "Entry was not found."; 797 return "Entry was not found.";
735 if (entries.size() != 1) 798 if (entries.size() != 1)
736 return "Directory had too many entries."; 799 return "Directory had too many entries.";
737 if (entries.front().file_ref().GetName().AsString() != kTerribleName) 800 if (entries.front().file_ref().GetName().AsString() != kTerribleName)
738 return "Entry name did not match."; 801 return "Entry name did not match.";
739 } 802 }
740 803
741 PASS(); 804 PASS();
742 } 805 }
743 #endif 806 #endif
OLDNEW
« no previous file with comments | « ppapi/tests/test_file_ref.h ('k') | ppapi/thunk/interfaces_ppb_public_stable.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698