Index: base/files/memory_mapped_file_unittest.cc |
diff --git a/base/files/memory_mapped_file_unittest.cc b/base/files/memory_mapped_file_unittest.cc |
index 6627d4044287d0f81ddab3cb9b0389399e43da74..efc9be6521674fdf5fe1e2d110e1a00fd8a5b97f 100644 |
--- a/base/files/memory_mapped_file_unittest.cc |
+++ b/base/files/memory_mapped_file_unittest.cc |
@@ -69,7 +69,8 @@ TEST_F(MemoryMappedFileTest, MapWholeFileByFD) { |
const size_t kFileSize = 68 * 1024; |
CreateTemporaryTestFile(kFileSize); |
MemoryMappedFile map; |
- map.Initialize(File(temp_file_path(), File::FLAG_OPEN | File::FLAG_READ)); |
+ map.Initialize(File(temp_file_path(), File::FLAG_OPEN | File::FLAG_READ), |
+ false); |
ASSERT_EQ(kFileSize, map.length()); |
ASSERT_TRUE(map.data() != NULL); |
EXPECT_TRUE(map.IsValid()); |
@@ -93,7 +94,7 @@ TEST_F(MemoryMappedFileTest, MapWholeFileUsingRegion) { |
MemoryMappedFile map; |
File file(temp_file_path(), File::FLAG_OPEN | File::FLAG_READ); |
- map.Initialize(file.Pass(), MemoryMappedFile::Region::kWholeFile); |
+ map.Initialize(file.Pass(), MemoryMappedFile::Region::kWholeFile, false); |
ASSERT_EQ(kFileSize, map.length()); |
ASSERT_TRUE(map.data() != NULL); |
EXPECT_TRUE(map.IsValid()); |
@@ -107,7 +108,7 @@ TEST_F(MemoryMappedFileTest, MapPartialRegionAtBeginning) { |
MemoryMappedFile map; |
File file(temp_file_path(), File::FLAG_OPEN | File::FLAG_READ); |
- map.Initialize(file.Pass(), MemoryMappedFile::Region(0, kPartialSize)); |
+ map.Initialize(file.Pass(), MemoryMappedFile::Region(0, kPartialSize), false); |
ASSERT_EQ(kPartialSize, map.length()); |
ASSERT_TRUE(map.data() != NULL); |
EXPECT_TRUE(map.IsValid()); |
@@ -122,7 +123,8 @@ TEST_F(MemoryMappedFileTest, MapPartialRegionAtEnd) { |
MemoryMappedFile map; |
File file(temp_file_path(), File::FLAG_OPEN | File::FLAG_READ); |
- map.Initialize(file.Pass(), MemoryMappedFile::Region(kOffset, kPartialSize)); |
+ map.Initialize(file.Pass(), MemoryMappedFile::Region(kOffset, kPartialSize), |
+ false); |
ASSERT_EQ(kPartialSize, map.length()); |
ASSERT_TRUE(map.data() != NULL); |
EXPECT_TRUE(map.IsValid()); |
@@ -138,7 +140,8 @@ TEST_F(MemoryMappedFileTest, MapSmallPartialRegionInTheMiddle) { |
MemoryMappedFile map; |
File file(temp_file_path(), File::FLAG_OPEN | File::FLAG_READ); |
- map.Initialize(file.Pass(), MemoryMappedFile::Region(kOffset, kPartialSize)); |
+ map.Initialize(file.Pass(), MemoryMappedFile::Region(kOffset, kPartialSize), |
+ false); |
ASSERT_EQ(kPartialSize, map.length()); |
ASSERT_TRUE(map.data() != NULL); |
EXPECT_TRUE(map.IsValid()); |
@@ -154,13 +157,74 @@ TEST_F(MemoryMappedFileTest, MapLargePartialRegionInTheMiddle) { |
MemoryMappedFile map; |
File file(temp_file_path(), File::FLAG_OPEN | File::FLAG_READ); |
- map.Initialize(file.Pass(), MemoryMappedFile::Region(kOffset, kPartialSize)); |
+ map.Initialize(file.Pass(), MemoryMappedFile::Region(kOffset, kPartialSize), |
+ false); |
ASSERT_EQ(kPartialSize, map.length()); |
ASSERT_TRUE(map.data() != NULL); |
EXPECT_TRUE(map.IsValid()); |
ASSERT_TRUE(CheckBufferContents(map.data(), kPartialSize, kOffset)); |
} |
+TEST_F(MemoryMappedFileTest, MapWholeFileWithWrite) { |
+ const size_t kFileSize = 68 * 1024; |
+ CreateTemporaryTestFile(kFileSize); |
+ MemoryMappedFile* map = new MemoryMappedFile(); |
+ map->Initialize(File(temp_file_path(), File::FLAG_OPEN | |
+ File::FLAG_READ | |
+ File::FLAG_WRITE), true); |
+ ASSERT_EQ(kFileSize, map->length()); |
+ ASSERT_TRUE(map->data() != NULL); |
+ EXPECT_TRUE(map->IsValid()); |
+ ASSERT_TRUE(CheckBufferContents(map->data(), kFileSize, 0)); |
+ |
+ size_t size = 20, offset = 100; |
+ scoped_ptr<uint8[]> test_data(CreateTestBuffer(size, offset)); |
+ memcpy(map->data(), test_data.get(), size); |
+ delete map; |
+ |
+ MemoryMappedFile read_map; |
+ read_map.Initialize(File(temp_file_path(), File::FLAG_OPEN | |
+ File::FLAG_READ), false); |
+ ASSERT_EQ(kFileSize, read_map.length()); |
+ ASSERT_TRUE(read_map.data() != NULL); |
+ EXPECT_TRUE(read_map.IsValid()); |
+ ASSERT_TRUE(CheckBufferContents(read_map.data(), size, offset)); |
+} |
+ |
+TEST_F(MemoryMappedFileTest, MapLargePartialRegionInTheMiddleWithWrite) { |
+ const size_t kFileSize = 157 * 1024; |
+ const size_t kOffset = 1024 * 5 + 32; |
+ const size_t kPartialSize = 16 * 1024 - 32; |
+ |
+ CreateTemporaryTestFile(kFileSize); |
+ MemoryMappedFile* map = new MemoryMappedFile(); |
+ |
+ File file(temp_file_path(), File::FLAG_OPEN | |
+ File::FLAG_READ | |
+ File::FLAG_WRITE); |
+ map->Initialize( |
+ file.Pass(), MemoryMappedFile::Region(kOffset, kPartialSize), true); |
+ ASSERT_EQ(kPartialSize, map->length()); |
+ ASSERT_TRUE(map->data() != NULL); |
+ EXPECT_TRUE(map->IsValid()); |
+ ASSERT_TRUE(CheckBufferContents(map->data(), kPartialSize, kOffset)); |
+ |
+ size_t size = 20, offset = 100; |
+ scoped_ptr<uint8[]> test_data(CreateTestBuffer(size, offset)); |
+ memcpy(map->data(), test_data.get(), size); |
+ delete map; |
+ |
+ MemoryMappedFile read_map; |
+ read_map.Initialize( |
+ File(temp_file_path(), File::FLAG_OPEN | File::FLAG_READ), |
+ MemoryMappedFile::Region(kOffset, kPartialSize), |
+ false); |
+ ASSERT_EQ(kPartialSize, read_map.length()); |
+ ASSERT_TRUE(read_map.data() != NULL); |
+ EXPECT_TRUE(read_map.IsValid()); |
+ ASSERT_TRUE(CheckBufferContents(read_map.data(), size, offset)); |
+} |
+ |
} // namespace |
} // namespace base |