OLD | NEW |
1 /* Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 /* Copyright (c) 2012 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 | 5 |
6 #include <fcntl.h> | 6 #include <fcntl.h> |
7 #include <string.h> | 7 #include <string.h> |
8 #include <gmock/gmock.h> | 8 #include <gmock/gmock.h> |
9 #include <ppapi/c/ppb_file_io.h> | 9 #include <ppapi/c/ppb_file_io.h> |
| 10 #include <ppapi/c/pp_directory_entry.h> |
10 #include <ppapi/c/pp_errors.h> | 11 #include <ppapi/c/pp_errors.h> |
11 #include <ppapi/c/pp_instance.h> | 12 #include <ppapi/c/pp_instance.h> |
12 #if defined(WIN32) | 13 #if defined(WIN32) |
13 #include <windows.h> // For Sleep() | 14 #include <windows.h> // For Sleep() |
14 #endif | 15 #endif |
15 | 16 |
16 #include "mock_util.h" | 17 #include "mock_util.h" |
17 #include "nacl_io/mount_html5fs.h" | 18 #include "nacl_io/mount_html5fs.h" |
18 #include "nacl_io/osdirent.h" | 19 #include "nacl_io/osdirent.h" |
19 #include "pepper_interface_mock.h" | 20 #include "pepper_interface_mock.h" |
(...skipping 146 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
166 }; | 167 }; |
167 | 168 |
168 void MountHtml5FsNodeSyncTest::SetUp() { | 169 void MountHtml5FsNodeSyncTest::SetUp() { |
169 MountHtml5FsNodeTest::SetUp(); | 170 MountHtml5FsNodeTest::SetUp(); |
170 SetUpFilesystemExpectations(PP_FILESYSTEMTYPE_LOCALPERSISTENT, 0); | 171 SetUpFilesystemExpectations(PP_FILESYSTEMTYPE_LOCALPERSISTENT, 0); |
171 InitFilesystem(); | 172 InitFilesystem(); |
172 SetUpNodeExpectations(); | 173 SetUpNodeExpectations(); |
173 InitNode(); | 174 InitNode(); |
174 } | 175 } |
175 | 176 |
176 void ReadEntriesAction(const PP_ArrayOutput& output) { | 177 void ReadDirectoryEntriesAction(const PP_ArrayOutput& output) { |
177 const int fileref_resource_1 = 238; | 178 const int fileref_resource_1 = 238; |
178 const int fileref_resource_2 = 239; | 179 const int fileref_resource_2 = 239; |
179 | 180 |
180 std::vector<PP_DirectoryEntry_Dev> entries; | 181 std::vector<PP_DirectoryEntry> entries; |
181 PP_DirectoryEntry_Dev entry1 = { fileref_resource_1, PP_FILETYPE_REGULAR }; | 182 PP_DirectoryEntry entry1 = { fileref_resource_1, PP_FILETYPE_REGULAR }; |
182 PP_DirectoryEntry_Dev entry2 = { fileref_resource_2, PP_FILETYPE_REGULAR }; | 183 PP_DirectoryEntry entry2 = { fileref_resource_2, PP_FILETYPE_REGULAR }; |
183 entries.push_back(entry1); | 184 entries.push_back(entry1); |
184 entries.push_back(entry2); | 185 entries.push_back(entry2); |
185 | 186 |
186 void* dest = output.GetDataBuffer( | 187 void* dest = output.GetDataBuffer( |
187 output.user_data, 2, sizeof(PP_DirectoryEntry_Dev)); | 188 output.user_data, 2, sizeof(PP_DirectoryEntry)); |
188 memcpy(dest, &entries[0], sizeof(PP_DirectoryEntry_Dev) * 2); | 189 memcpy(dest, &entries[0], sizeof(PP_DirectoryEntry) * 2); |
189 } | 190 } |
190 | 191 |
191 class MountHtml5FsNodeAsyncTest : public MountHtml5FsNodeTest { | 192 class MountHtml5FsNodeAsyncTest : public MountHtml5FsNodeTest { |
192 public: | 193 public: |
193 virtual void SetUp(); | 194 virtual void SetUp(); |
194 virtual void TearDown(); | 195 virtual void TearDown(); |
195 | 196 |
196 private: | 197 private: |
197 static void* ThreadThunk(void* param); | 198 static void* ThreadThunk(void* param); |
198 void Thread(); | 199 void Thread(); |
(...skipping 198 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
397 TEST_F(MountHtml5FsNodeSyncTest, Truncate) { | 398 TEST_F(MountHtml5FsNodeSyncTest, Truncate) { |
398 const int size = 123; | 399 const int size = 123; |
399 EXPECT_CALL(*fileio_, SetLength(fileio_resource_, size, _)) | 400 EXPECT_CALL(*fileio_, SetLength(fileio_resource_, size, _)) |
400 .WillOnce(Return(int32_t(PP_OK))); | 401 .WillOnce(Return(int32_t(PP_OK))); |
401 | 402 |
402 int result = node_->Truncate(size); | 403 int result = node_->Truncate(size); |
403 EXPECT_EQ(0, result); | 404 EXPECT_EQ(0, result); |
404 } | 405 } |
405 | 406 |
406 TEST_F(MountHtml5FsNodeSyncTest, GetDents) { | 407 TEST_F(MountHtml5FsNodeSyncTest, GetDents) { |
407 const int dir_reader_resource = 237; | |
408 const int fileref_resource_1 = 238; | 408 const int fileref_resource_1 = 238; |
409 const int fileref_resource_2 = 239; | 409 const int fileref_resource_2 = 239; |
410 | 410 |
411 const int fileref_name_id_1 = 240; | 411 const int fileref_name_id_1 = 240; |
412 const char fileref_name_cstr_1[] = "bar"; | 412 const char fileref_name_cstr_1[] = "bar"; |
413 PP_Var fileref_name_1; | 413 PP_Var fileref_name_1; |
414 fileref_name_1.type = PP_VARTYPE_STRING; | 414 fileref_name_1.type = PP_VARTYPE_STRING; |
415 fileref_name_1.value.as_id = fileref_name_id_1; | 415 fileref_name_1.value.as_id = fileref_name_id_1; |
416 | 416 |
417 const int fileref_name_id_2 = 241; | 417 const int fileref_name_id_2 = 241; |
418 const char fileref_name_cstr_2[] = "quux"; | 418 const char fileref_name_cstr_2[] = "quux"; |
419 PP_Var fileref_name_2; | 419 PP_Var fileref_name_2; |
420 fileref_name_2.type = PP_VARTYPE_STRING; | 420 fileref_name_2.type = PP_VARTYPE_STRING; |
421 fileref_name_2.value.as_id = fileref_name_id_2; | 421 fileref_name_2.value.as_id = fileref_name_id_2; |
422 | 422 |
423 VarInterfaceMock* var = ppapi_->GetVarInterface(); | 423 VarInterfaceMock* var = ppapi_->GetVarInterface(); |
424 DirectoryReaderInterfaceMock* dir_reader = | |
425 ppapi_->GetDirectoryReaderInterface(); | |
426 | 424 |
427 EXPECT_CALL(*dir_reader, Create(fileref_resource_)) | 425 EXPECT_CALL(*fileref_, ReadDirectoryEntries(fileref_resource_, _, _)) |
428 .WillOnce(Return(dir_reader_resource)); | 426 .WillOnce(DoAll(WithArgs<1>(Invoke(ReadDirectoryEntriesAction)), |
429 EXPECT_CALL(*dir_reader, ReadEntries(dir_reader_resource, _, _)) | |
430 .WillOnce(DoAll(WithArgs<1>(Invoke(ReadEntriesAction)), | |
431 Return(int32_t(PP_OK)))); | 427 Return(int32_t(PP_OK)))); |
432 | 428 |
433 EXPECT_CALL(*fileref_, GetName(fileref_resource_1)) | 429 EXPECT_CALL(*fileref_, GetName(fileref_resource_1)) |
434 .WillOnce(Return(fileref_name_1)); | 430 .WillOnce(Return(fileref_name_1)); |
435 EXPECT_CALL(*fileref_, GetName(fileref_resource_2)) | 431 EXPECT_CALL(*fileref_, GetName(fileref_resource_2)) |
436 .WillOnce(Return(fileref_name_2)); | 432 .WillOnce(Return(fileref_name_2)); |
437 | 433 |
438 EXPECT_CALL(*var, VarToUtf8(IsEqualToVar(fileref_name_1), _)) | 434 EXPECT_CALL(*var, VarToUtf8(IsEqualToVar(fileref_name_1), _)) |
439 .WillOnce(Return(fileref_name_cstr_1)); | 435 .WillOnce(Return(fileref_name_cstr_1)); |
440 EXPECT_CALL(*var, VarToUtf8(IsEqualToVar(fileref_name_2), _)) | 436 EXPECT_CALL(*var, VarToUtf8(IsEqualToVar(fileref_name_2), _)) |
441 .WillOnce(Return(fileref_name_cstr_2)); | 437 .WillOnce(Return(fileref_name_cstr_2)); |
442 | 438 |
443 EXPECT_CALL(*ppapi_, ReleaseResource(dir_reader_resource)); | |
444 EXPECT_CALL(*ppapi_, ReleaseResource(fileref_resource_1)); | 439 EXPECT_CALL(*ppapi_, ReleaseResource(fileref_resource_1)); |
445 EXPECT_CALL(*ppapi_, ReleaseResource(fileref_resource_2)); | 440 EXPECT_CALL(*ppapi_, ReleaseResource(fileref_resource_2)); |
446 | 441 |
447 struct dirent dirents[2]; | 442 struct dirent dirents[2]; |
448 memset(&dirents[0], 0, sizeof(dirents)); | 443 memset(&dirents[0], 0, sizeof(dirents)); |
449 int result = node_->GetDents(0, &dirents[0], sizeof(dirent) * 2); | 444 int result = node_->GetDents(0, &dirents[0], sizeof(dirent) * 2); |
450 | 445 |
451 EXPECT_EQ(0, result); | 446 EXPECT_EQ(0, result); |
452 EXPECT_STREQ(&fileref_name_cstr_1[0], &dirents[0].d_name[0]); | 447 EXPECT_STREQ(&fileref_name_cstr_1[0], &dirents[0].d_name[0]); |
453 EXPECT_STREQ(&fileref_name_cstr_2[0], &dirents[1].d_name[0]); | 448 EXPECT_STREQ(&fileref_name_cstr_2[0], &dirents[1].d_name[0]); |
454 } | 449 } |
OLD | NEW |