diff options
Diffstat (limited to 'llvm/unittests/Support/Path.cpp')
-rw-r--r-- | llvm/unittests/Support/Path.cpp | 52 |
1 files changed, 36 insertions, 16 deletions
diff --git a/llvm/unittests/Support/Path.cpp b/llvm/unittests/Support/Path.cpp index 2aadf89161c..9de46a689cd 100644 --- a/llvm/unittests/Support/Path.cpp +++ b/llvm/unittests/Support/Path.cpp @@ -8,6 +8,7 @@ #include "llvm/Support/Path.h" #include "llvm/ADT/STLExtras.h" +#include "llvm/ADT/ScopeExit.h" #include "llvm/ADT/SmallVector.h" #include "llvm/ADT/Triple.h" #include "llvm/BinaryFormat/Magic.h" @@ -1514,28 +1515,47 @@ TEST_F(FileSystemTest, ReadWriteFileCanReadOrWrite) { verifyWrite(FD, "Buzz", true); } +TEST_F(FileSystemTest, readNativeFile) { + createFileWithData(NonExistantFile, false, fs::CD_CreateNew, "01234"); + FileRemover Cleanup(NonExistantFile); + const auto &Read = [&](size_t ToRead) -> Expected<std::string> { + std::string Buf(ToRead, '?'); + Expected<fs::file_t> FD = fs::openNativeFileForRead(NonExistantFile); + if (!FD) + return FD.takeError(); + auto Close = make_scope_exit([&] { fs::closeFile(*FD); }); + if (Expected<size_t> BytesRead = fs::readNativeFile( + *FD, makeMutableArrayRef(&*Buf.begin(), Buf.size()))) + return Buf.substr(0, *BytesRead); + else + return BytesRead.takeError(); + }; + EXPECT_THAT_EXPECTED(Read(5), HasValue("01234")); + EXPECT_THAT_EXPECTED(Read(3), HasValue("012")); + EXPECT_THAT_EXPECTED(Read(6), HasValue("01234")); +} + TEST_F(FileSystemTest, readNativeFileSlice) { - char Data[10] = {'0', '1', '2', '3', '4', 0, 0, 0, 0, 0}; - createFileWithData(NonExistantFile, false, fs::CD_CreateNew, - StringRef(Data, 5)); + createFileWithData(NonExistantFile, false, fs::CD_CreateNew, "01234"); FileRemover Cleanup(NonExistantFile); Expected<fs::file_t> FD = fs::openNativeFileForRead(NonExistantFile); ASSERT_THAT_EXPECTED(FD, Succeeded()); - char Buf[10]; + auto Close = make_scope_exit([&] { fs::closeFile(*FD); }); const auto &Read = [&](size_t Offset, - size_t ToRead) -> Expected<ArrayRef<char>> { - std::memset(Buf, 0x47, sizeof(Buf)); - if (std::error_code EC = fs::readNativeFileSlice( - *FD, makeMutableArrayRef(Buf, ToRead), Offset)) - return errorCodeToError(EC); - return makeArrayRef(Buf, ToRead); + size_t ToRead) -> Expected<std::string> { + std::string Buf(ToRead, '?'); + if (Expected<size_t> BytesRead = fs::readNativeFileSlice( + *FD, makeMutableArrayRef(&*Buf.begin(), Buf.size()), Offset)) + return Buf.substr(0, *BytesRead); + else + return BytesRead.takeError(); }; - EXPECT_THAT_EXPECTED(Read(0, 5), HasValue(makeArrayRef(Data + 0, 5))); - EXPECT_THAT_EXPECTED(Read(0, 3), HasValue(makeArrayRef(Data + 0, 3))); - EXPECT_THAT_EXPECTED(Read(2, 3), HasValue(makeArrayRef(Data + 2, 3))); - EXPECT_THAT_EXPECTED(Read(0, 6), HasValue(makeArrayRef(Data + 0, 6))); - EXPECT_THAT_EXPECTED(Read(2, 6), HasValue(makeArrayRef(Data + 2, 6))); - EXPECT_THAT_EXPECTED(Read(5, 5), HasValue(makeArrayRef(Data + 5, 5))); + EXPECT_THAT_EXPECTED(Read(0, 5), HasValue("01234")); + EXPECT_THAT_EXPECTED(Read(0, 3), HasValue("012")); + EXPECT_THAT_EXPECTED(Read(2, 3), HasValue("234")); + EXPECT_THAT_EXPECTED(Read(0, 6), HasValue("01234")); + EXPECT_THAT_EXPECTED(Read(2, 6), HasValue("234")); + EXPECT_THAT_EXPECTED(Read(5, 5), HasValue("")); } TEST_F(FileSystemTest, is_local) { |