|  | //===- llvm/unittest/Support/FileUtilitiesTest.cpp - unit tests -----------===// | 
|  | // | 
|  | // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. | 
|  | // See https://llvm.org/LICENSE.txt for license information. | 
|  | // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception | 
|  | // | 
|  | //===----------------------------------------------------------------------===// | 
|  |  | 
|  | #include "llvm/Support/FileUtilities.h" | 
|  | #include "llvm/Support/Errc.h" | 
|  | #include "llvm/Support/ErrorHandling.h" | 
|  | #include "llvm/Support/FileSystem.h" | 
|  | #include "llvm/Support/MemoryBuffer.h" | 
|  | #include "llvm/Support/Path.h" | 
|  | #include "gtest/gtest.h" | 
|  | #include <fstream> | 
|  |  | 
|  | using namespace llvm; | 
|  | using namespace llvm::sys; | 
|  |  | 
|  | #define ASSERT_NO_ERROR(x)                                                     \ | 
|  | if (std::error_code ASSERT_NO_ERROR_ec = x) {                                \ | 
|  | SmallString<128> MessageStorage;                                           \ | 
|  | raw_svector_ostream Message(MessageStorage);                               \ | 
|  | Message << #x ": did not return errc::success.\n"                          \ | 
|  | << "error number: " << ASSERT_NO_ERROR_ec.value() << "\n"          \ | 
|  | << "error message: " << ASSERT_NO_ERROR_ec.message() << "\n";      \ | 
|  | GTEST_FATAL_FAILURE_(MessageStorage.c_str());                              \ | 
|  | } else {                                                                     \ | 
|  | } | 
|  |  | 
|  | namespace { | 
|  | TEST(writeFileAtomicallyTest, Test) { | 
|  | // Create unique temporary directory for these tests | 
|  | SmallString<128> RootTestDirectory; | 
|  | ASSERT_NO_ERROR( | 
|  | fs::createUniqueDirectory("writeFileAtomicallyTest", RootTestDirectory)); | 
|  |  | 
|  | SmallString<128> FinalTestfilePath(RootTestDirectory); | 
|  | sys::path::append(FinalTestfilePath, "foo.txt"); | 
|  | const std::string TempUniqTestFileModel = | 
|  | std::string(FinalTestfilePath) + "-%%%%%%%%"; | 
|  | const std::string TestfileContent = "fooFOOfoo"; | 
|  |  | 
|  | llvm::Error Err = llvm::writeFileAtomically(TempUniqTestFileModel, FinalTestfilePath, TestfileContent); | 
|  | ASSERT_FALSE(static_cast<bool>(Err)); | 
|  |  | 
|  | std::ifstream FinalFileStream(std::string(FinalTestfilePath.str())); | 
|  | std::string FinalFileContent; | 
|  | FinalFileStream >> FinalFileContent; | 
|  | ASSERT_EQ(FinalFileContent, TestfileContent); | 
|  | } | 
|  | } // anonymous namespace |