diff options
Diffstat (limited to 'unittests/Support/MemoryBufferTest.cpp')
-rw-r--r-- | unittests/Support/MemoryBufferTest.cpp | 33 |
1 files changed, 31 insertions, 2 deletions
diff --git a/unittests/Support/MemoryBufferTest.cpp b/unittests/Support/MemoryBufferTest.cpp index 5e3c8db02791..034b2ea9495d 100644 --- a/unittests/Support/MemoryBufferTest.cpp +++ b/unittests/Support/MemoryBufferTest.cpp @@ -116,13 +116,13 @@ TEST_F(MemoryBufferTest, make_new) { EXPECT_TRUE(nullptr != Two.get()); // 0-initialized buffer with no name - OwningBuffer Three(MemoryBuffer::getNewMemBuffer(321, data)); + OwningBuffer Three(WritableMemoryBuffer::getNewMemBuffer(321, data)); EXPECT_TRUE(nullptr != Three.get()); for (size_t i = 0; i < 321; ++i) EXPECT_EQ(0, Three->getBufferStart()[0]); // 0-initialized buffer with name - OwningBuffer Four(MemoryBuffer::getNewMemBuffer(123, "zeros")); + OwningBuffer Four(WritableMemoryBuffer::getNewMemBuffer(123, "zeros")); EXPECT_TRUE(nullptr != Four.get()); for (size_t i = 0; i < 123; ++i) EXPECT_EQ(0, Four->getBufferStart()[0]); @@ -260,4 +260,33 @@ TEST_F(MemoryBufferTest, writableSlice) { for (size_t i = 0; i < MB.getBufferSize(); i += 0x10) EXPECT_EQ("0123456789abcdef", MB.getBuffer().substr(i, 0x10)) << "i: " << i; } + +TEST_F(MemoryBufferTest, writeThroughFile) { + // Create a file initialized with some data + int FD; + SmallString<64> TestPath; + sys::fs::createTemporaryFile("MemoryBufferTest_WriteThrough", "temp", FD, + TestPath); + FileRemover Cleanup(TestPath); + raw_fd_ostream OF(FD, true); + OF << "0123456789abcdef"; + OF.close(); + { + auto MBOrError = WriteThroughMemoryBuffer::getFile(TestPath); + ASSERT_FALSE(MBOrError.getError()); + // Write some data. It should be mapped readwrite, so that upon completion + // the original file contents are modified. + WriteThroughMemoryBuffer &MB = **MBOrError; + ASSERT_EQ(16u, MB.getBufferSize()); + char *Start = MB.getBufferStart(); + ASSERT_EQ(MB.getBufferEnd(), MB.getBufferStart() + MB.getBufferSize()); + ::memset(Start, 'x', MB.getBufferSize()); + } + + auto MBOrError = MemoryBuffer::getFile(TestPath); + ASSERT_FALSE(MBOrError.getError()); + auto &MB = **MBOrError; + ASSERT_EQ(16u, MB.getBufferSize()); + EXPECT_EQ("xxxxxxxxxxxxxxxx", MB.getBuffer()); +} } |