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 396ab72fbcb91a71795704747d130f6f0fb569cb..b7acc61887f80c545055f34a8353ef68fbf29708 100644 |
--- a/base/files/memory_mapped_file_unittest.cc |
+++ b/base/files/memory_mapped_file_unittest.cc |
@@ -65,7 +65,7 @@ TEST_F(MemoryMappedFileTest, MapWholeFileByPath) { |
MemoryMappedFile map; |
map.Initialize(temp_file_path()); |
ASSERT_EQ(kFileSize, map.length()); |
- ASSERT_TRUE(map.data() != NULL); |
+ ASSERT_TRUE(map.data() != nullptr); |
EXPECT_TRUE(map.IsValid()); |
ASSERT_TRUE(CheckBufferContents(map.data(), kFileSize, 0)); |
} |
@@ -76,7 +76,7 @@ TEST_F(MemoryMappedFileTest, MapWholeFileByFD) { |
MemoryMappedFile map; |
map.Initialize(File(temp_file_path(), File::FLAG_OPEN | File::FLAG_READ)); |
ASSERT_EQ(kFileSize, map.length()); |
- ASSERT_TRUE(map.data() != NULL); |
+ ASSERT_TRUE(map.data() != nullptr); |
EXPECT_TRUE(map.IsValid()); |
ASSERT_TRUE(CheckBufferContents(map.data(), kFileSize, 0)); |
} |
@@ -87,7 +87,7 @@ TEST_F(MemoryMappedFileTest, MapSmallFile) { |
MemoryMappedFile map; |
map.Initialize(temp_file_path()); |
ASSERT_EQ(kFileSize, map.length()); |
- ASSERT_TRUE(map.data() != NULL); |
+ ASSERT_TRUE(map.data() != nullptr); |
EXPECT_TRUE(map.IsValid()); |
ASSERT_TRUE(CheckBufferContents(map.data(), kFileSize, 0)); |
} |
@@ -100,7 +100,7 @@ TEST_F(MemoryMappedFileTest, MapWholeFileUsingRegion) { |
File file(temp_file_path(), File::FLAG_OPEN | File::FLAG_READ); |
map.Initialize(std::move(file), MemoryMappedFile::Region::kWholeFile); |
ASSERT_EQ(kFileSize, map.length()); |
- ASSERT_TRUE(map.data() != NULL); |
+ ASSERT_TRUE(map.data() != nullptr); |
EXPECT_TRUE(map.IsValid()); |
ASSERT_TRUE(CheckBufferContents(map.data(), kFileSize, 0)); |
} |
@@ -115,7 +115,7 @@ TEST_F(MemoryMappedFileTest, MapPartialRegionAtBeginning) { |
MemoryMappedFile::Region region = {0, kPartialSize}; |
map.Initialize(std::move(file), region); |
ASSERT_EQ(kPartialSize, map.length()); |
- ASSERT_TRUE(map.data() != NULL); |
+ ASSERT_TRUE(map.data() != nullptr); |
EXPECT_TRUE(map.IsValid()); |
ASSERT_TRUE(CheckBufferContents(map.data(), kPartialSize, 0)); |
} |
@@ -131,7 +131,7 @@ TEST_F(MemoryMappedFileTest, MapPartialRegionAtEnd) { |
MemoryMappedFile::Region region = {kOffset, kPartialSize}; |
map.Initialize(std::move(file), region); |
ASSERT_EQ(kPartialSize, map.length()); |
- ASSERT_TRUE(map.data() != NULL); |
+ ASSERT_TRUE(map.data() != nullptr); |
EXPECT_TRUE(map.IsValid()); |
ASSERT_TRUE(CheckBufferContents(map.data(), kPartialSize, kOffset)); |
} |
@@ -148,7 +148,7 @@ TEST_F(MemoryMappedFileTest, MapSmallPartialRegionInTheMiddle) { |
MemoryMappedFile::Region region = {kOffset, kPartialSize}; |
map.Initialize(std::move(file), region); |
ASSERT_EQ(kPartialSize, map.length()); |
- ASSERT_TRUE(map.data() != NULL); |
+ ASSERT_TRUE(map.data() != nullptr); |
EXPECT_TRUE(map.IsValid()); |
ASSERT_TRUE(CheckBufferContents(map.data(), kPartialSize, kOffset)); |
} |
@@ -165,11 +165,79 @@ TEST_F(MemoryMappedFileTest, MapLargePartialRegionInTheMiddle) { |
MemoryMappedFile::Region region = {kOffset, kPartialSize}; |
map.Initialize(std::move(file), region); |
ASSERT_EQ(kPartialSize, map.length()); |
- ASSERT_TRUE(map.data() != NULL); |
+ ASSERT_TRUE(map.data() != nullptr); |
EXPECT_TRUE(map.IsValid()); |
ASSERT_TRUE(CheckBufferContents(map.data(), kPartialSize, kOffset)); |
} |
+TEST_F(MemoryMappedFileTest, WriteableFile) { |
+ const size_t kFileSize = 127; |
+ CreateTemporaryTestFile(kFileSize); |
+ |
+ { |
+ MemoryMappedFile map; |
+ map.Initialize(temp_file_path(), MemoryMappedFile::READ_WRITE); |
+ ASSERT_EQ(kFileSize, map.length()); |
+ ASSERT_TRUE(map.data() != nullptr); |
+ EXPECT_TRUE(map.IsValid()); |
+ ASSERT_TRUE(CheckBufferContents(map.data(), kFileSize, 0)); |
+ |
+ uint8_t* bytes = map.data(); |
+ bytes[0] = 'B'; |
+ bytes[1] = 'a'; |
+ bytes[2] = 'r'; |
+ bytes[kFileSize - 1] = '!'; |
+ EXPECT_FALSE(CheckBufferContents(map.data(), kFileSize, 0)); |
+ EXPECT_TRUE(CheckBufferContents(map.data() + 3, kFileSize - 4, 3)); |
+ } |
+ |
+ int64_t file_size; |
+ ASSERT_TRUE(GetFileSize(temp_file_path(), &file_size)); |
+ EXPECT_EQ(static_cast<int64_t>(kFileSize), file_size); |
+ |
+ std::string contents; |
+ ASSERT_TRUE(ReadFileToString(temp_file_path(), &contents)); |
+ EXPECT_EQ("Bar", contents.substr(0, 3)); |
+ EXPECT_EQ("!", contents.substr(kFileSize - 1, 1)); |
+} |
+ |
+TEST_F(MemoryMappedFileTest, ExtendableFile) { |
+ const size_t kFileSize = 127; |
+ const size_t kFileExtend = 100; |
+ CreateTemporaryTestFile(kFileSize); |
+ |
+ { |
+ File file(temp_file_path(), |
+ File::FLAG_OPEN | File::FLAG_READ | File::FLAG_WRITE); |
+ MemoryMappedFile::Region region = {0, kFileSize + kFileExtend}; |
+ MemoryMappedFile map; |
+ map.Initialize(std::move(file), region, |
+ MemoryMappedFile::READ_WRITE_EXTEND); |
+ EXPECT_EQ(kFileSize + kFileExtend, map.length()); |
+ ASSERT_TRUE(map.data() != nullptr); |
+ EXPECT_TRUE(map.IsValid()); |
+ ASSERT_TRUE(CheckBufferContents(map.data(), kFileSize, 0)); |
+ |
+ uint8_t* bytes = map.data(); |
+ EXPECT_EQ(0, bytes[kFileSize + 0]); |
+ EXPECT_EQ(0, bytes[kFileSize + 1]); |
+ EXPECT_EQ(0, bytes[kFileSize + 2]); |
+ bytes[kFileSize + 0] = 'B'; |
+ bytes[kFileSize + 1] = 'A'; |
+ bytes[kFileSize + 2] = 'Z'; |
+ EXPECT_TRUE(CheckBufferContents(map.data(), kFileSize, 0)); |
+ } |
+ |
+ int64_t file_size; |
+ ASSERT_TRUE(GetFileSize(temp_file_path(), &file_size)); |
+ EXPECT_LE(static_cast<int64_t>(kFileSize + 3), file_size); |
+ EXPECT_GE(static_cast<int64_t>(kFileSize + kFileExtend), file_size); |
+ |
+ std::string contents; |
+ ASSERT_TRUE(ReadFileToString(temp_file_path(), &contents)); |
+ EXPECT_EQ("BAZ", contents.substr(kFileSize, 3)); |
+} |
+ |
} // namespace |
} // namespace base |