OLD | NEW |
(Empty) | |
| 1 // Copyright (c) 2011 The Native Client Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. |
| 4 |
| 5 #include "native_client/src/third_party/ppapi/c/pp_errors.h" |
| 6 #include "native_client/src/third_party/ppapi/c/ppb_core.h" |
| 7 #include "native_client/src/third_party/ppapi/c/ppb_file_io.h" |
| 8 #include "native_client/src/third_party/ppapi/c/ppb_file_ref.h" |
| 9 #include "native_client/src/third_party/ppapi/c/ppb_file_system.h" |
| 10 #include "native_client/src/third_party/ppapi/c/ppb_url_loader.h" |
| 11 #include "native_client/tests/ppapi_browser/ppb_file_io/common.h" |
| 12 #include "native_client/tests/ppapi_test_lib/get_browser_interface.h" |
| 13 #include "native_client/tests/ppapi_test_lib/test_interface.h" |
| 14 |
| 15 namespace { |
| 16 |
| 17 using common::BoundPPAPIFunc; |
| 18 using common::FileIOTester; |
| 19 using common::InitFileInfo; |
| 20 using common::TestCallbackData; |
| 21 using common::TestSequenceElement; |
| 22 |
| 23 class TestOpenExistingFileSequenceElement : public TestSequenceElement { |
| 24 public: |
| 25 TestOpenExistingFileSequenceElement(const std::string& name, |
| 26 int32_t expected_return_value, |
| 27 int32_t expected_result, int32_t flags) |
| 28 : TestSequenceElement(name, expected_return_value, expected_result), |
| 29 flags_(flags) {} |
| 30 virtual ~TestOpenExistingFileSequenceElement() {} |
| 31 |
| 32 private: |
| 33 virtual BoundPPAPIFunc GetCompletionCallbackInitiatingPPAPIFunction( |
| 34 TestCallbackData* callback_data) { |
| 35 return std::tr1::bind(PPBFileIO()->Open, callback_data->existing_file_io, |
| 36 callback_data->existing_file_ref, flags_, |
| 37 std::tr1::placeholders::_1); |
| 38 } |
| 39 virtual void Setup(TestCallbackData* callback_data) { |
| 40 // We make sure the file io is closed before each test. |
| 41 PPBFileIO()->Close(callback_data->existing_file_io); |
| 42 } |
| 43 |
| 44 const int32_t flags_; |
| 45 }; |
| 46 |
| 47 class TestOpenNonExistingFileSequenceElement : public TestSequenceElement { |
| 48 public: |
| 49 TestOpenNonExistingFileSequenceElement(const std::string& name, |
| 50 int32_t expected_return_value, |
| 51 int32_t expected_result, int32_t flags) |
| 52 : TestSequenceElement(name, expected_return_value, expected_result), |
| 53 flags_(flags) {} |
| 54 virtual ~TestOpenNonExistingFileSequenceElement() {} |
| 55 |
| 56 private: |
| 57 virtual BoundPPAPIFunc GetCompletionCallbackInitiatingPPAPIFunction( |
| 58 TestCallbackData* callback_data) { |
| 59 return std::tr1::bind(PPBFileIO()->Open, |
| 60 callback_data->non_existing_file_io, |
| 61 callback_data->non_existing_file_ref, flags_, |
| 62 std::tr1::placeholders::_1); |
| 63 } |
| 64 virtual void Setup(TestCallbackData* callback_data) { |
| 65 // We make sure the file io is closed before each test. |
| 66 PPBFileIO()->Close(callback_data->non_existing_file_io); |
| 67 } |
| 68 |
| 69 const int32_t flags_; |
| 70 }; |
| 71 |
| 72 class DeleteFile : public TestSequenceElement { |
| 73 public: |
| 74 DeleteFile() |
| 75 : TestSequenceElement("DeleteFile", PP_OK_COMPLETIONPENDING, PP_OK) {} |
| 76 |
| 77 private: |
| 78 virtual BoundPPAPIFunc GetCompletionCallbackInitiatingPPAPIFunction( |
| 79 TestCallbackData* callback_data) { |
| 80 return std::tr1::bind(PPBFileRef()->Delete, |
| 81 callback_data->non_existing_file_ref, |
| 82 std::tr1::placeholders::_1); |
| 83 } |
| 84 }; |
| 85 |
| 86 void TestOpenNonExistingFile(PP_FileSystemType system_type) { |
| 87 PP_FileInfo file_info = { 0 }; |
| 88 InitFileInfo(system_type, &file_info); |
| 89 |
| 90 FileIOTester tester(file_info); |
| 91 tester.AddSequenceElement( |
| 92 new TestOpenNonExistingFileSequenceElement("TestOpenForRead", |
| 93 PP_OK_COMPLETIONPENDING, |
| 94 PP_ERROR_FILENOTFOUND, |
| 95 PP_FILEOPENFLAG_READ)); |
| 96 tester.AddSequenceElement( |
| 97 new TestOpenNonExistingFileSequenceElement("TestOpenForWrite", |
| 98 PP_OK_COMPLETIONPENDING, |
| 99 PP_ERROR_FILENOTFOUND, |
| 100 PP_FILEOPENFLAG_WRITE)); |
| 101 tester.AddSequenceElement( |
| 102 new TestOpenNonExistingFileSequenceElement("TestOpenForWriteCreate", |
| 103 PP_OK_COMPLETIONPENDING, |
| 104 PP_OK, |
| 105 PP_FILEOPENFLAG_CREATE | |
| 106 PP_FILEOPENFLAG_WRITE)); |
| 107 tester.AddSequenceElement(new DeleteFile); |
| 108 tester.AddSequenceElement( |
| 109 new TestOpenNonExistingFileSequenceElement( |
| 110 "TestOpenForWriteCreateExclusive", |
| 111 PP_OK_COMPLETIONPENDING, |
| 112 PP_OK, |
| 113 PP_FILEOPENFLAG_WRITE | |
| 114 PP_FILEOPENFLAG_CREATE | |
| 115 PP_FILEOPENFLAG_EXCLUSIVE)); |
| 116 tester.Run(); |
| 117 } |
| 118 |
| 119 void TestOpenExistingFile(PP_FileSystemType system_type) { |
| 120 PP_FileInfo file_info = { 0 }; |
| 121 InitFileInfo(system_type, &file_info); |
| 122 |
| 123 FileIOTester tester(file_info); |
| 124 tester.AddSequenceElement( |
| 125 new TestOpenExistingFileSequenceElement("TestOpenForRead", |
| 126 PP_OK_COMPLETIONPENDING, PP_OK, |
| 127 PP_FILEOPENFLAG_READ)); |
| 128 tester.AddSequenceElement( |
| 129 new TestOpenExistingFileSequenceElement("TestOpenForWrite", |
| 130 PP_OK_COMPLETIONPENDING, PP_OK, |
| 131 PP_FILEOPENFLAG_WRITE)); |
| 132 tester.AddSequenceElement( |
| 133 new TestOpenExistingFileSequenceElement("TestOpenTruncate", |
| 134 PP_ERROR_BADARGUMENT, |
| 135 PP_ERROR_FAILED, |
| 136 PP_FILEOPENFLAG_TRUNCATE)); |
| 137 tester.AddSequenceElement( |
| 138 new TestOpenExistingFileSequenceElement("TestOpenForWriteCreateExclusive", |
| 139 PP_OK_COMPLETIONPENDING, |
| 140 PP_ERROR_FILEEXISTS, |
| 141 PP_FILEOPENFLAG_WRITE | |
| 142 PP_FILEOPENFLAG_CREATE | |
| 143 PP_FILEOPENFLAG_EXCLUSIVE)); |
| 144 tester.AddSequenceElement( |
| 145 new TestOpenExistingFileSequenceElement("TestOpenForWriteCreate", |
| 146 PP_OK_COMPLETIONPENDING, PP_OK, |
| 147 PP_FILEOPENFLAG_WRITE | |
| 148 PP_FILEOPENFLAG_CREATE)); |
| 149 tester.Run(); |
| 150 } |
| 151 |
| 152 } // namespace |
| 153 |
| 154 void TestOpenExistingFileLocalPersistent() { |
| 155 TestOpenExistingFile(PP_FILESYSTEMTYPE_LOCALPERSISTENT); |
| 156 TEST_PASSED; |
| 157 } |
| 158 |
| 159 void TestOpenExistingFileLocalTemporary() { |
| 160 TestOpenExistingFile(PP_FILESYSTEMTYPE_LOCALTEMPORARY); |
| 161 TEST_PASSED; |
| 162 } |
| 163 |
| 164 void TestOpenNonExistingFileLocalPersistent() { |
| 165 TestOpenNonExistingFile(PP_FILESYSTEMTYPE_LOCALPERSISTENT); |
| 166 TEST_PASSED; |
| 167 } |
| 168 |
| 169 void TestOpenNonExistingFileLocalTemporary() { |
| 170 TestOpenNonExistingFile(PP_FILESYSTEMTYPE_LOCALTEMPORARY); |
| 171 TEST_PASSED; |
| 172 } |
OLD | NEW |