Default the moves and delete the copies for TempFile, matching TempDir and TempLink, and add tests for all of them to confirm that the destructor is not harmful after it has been moved from. Differential Revision: https://reviews.llvm.org/D120691
101 lines
2.7 KiB
C++
101 lines
2.7 KiB
C++
//===- TempPathTest.cpp ---------------------------------------------------===//
|
|
//
|
|
// 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/FileSystem.h"
|
|
#include "llvm/Support/MemoryBuffer.h"
|
|
#include "llvm/Testing/Support/SupportHelpers.h"
|
|
#include "gtest/gtest.h"
|
|
|
|
using namespace llvm;
|
|
using llvm::unittest::TempDir;
|
|
using llvm::unittest::TempFile;
|
|
using llvm::unittest::TempLink;
|
|
|
|
namespace {
|
|
|
|
TEST(TempPathTest, TempDir) {
|
|
Optional<TempDir> Dir1, Dir2;
|
|
StringRef Prefix = "temp-path-test";
|
|
Dir1.emplace(Prefix, /*Unique=*/true);
|
|
EXPECT_EQ(Prefix,
|
|
sys::path::filename(Dir1->path()).take_front(Prefix.size()));
|
|
EXPECT_NE(Prefix, sys::path::filename(Dir1->path()));
|
|
|
|
std::string Path = Dir1->path().str();
|
|
ASSERT_TRUE(sys::fs::exists(Path));
|
|
|
|
Dir2 = std::move(*Dir1);
|
|
ASSERT_EQ(Path, Dir2->path());
|
|
ASSERT_TRUE(sys::fs::exists(Path));
|
|
|
|
Dir1 = None;
|
|
ASSERT_TRUE(sys::fs::exists(Path));
|
|
|
|
Dir2 = None;
|
|
ASSERT_FALSE(sys::fs::exists(Path));
|
|
}
|
|
|
|
TEST(TempPathTest, TempFile) {
|
|
TempDir D("temp-path-test", /*Unique=*/true);
|
|
ASSERT_TRUE(sys::fs::exists(D.path()));
|
|
|
|
Optional<TempFile> File1, File2;
|
|
File1.emplace(D.path("file"), "suffix", "content");
|
|
EXPECT_EQ("file.suffix", sys::path::filename(File1->path()));
|
|
{
|
|
ErrorOr<std::unique_ptr<MemoryBuffer>> Buffer =
|
|
MemoryBuffer::getFile(File1->path());
|
|
ASSERT_TRUE(Buffer);
|
|
ASSERT_EQ("content", (*Buffer)->getBuffer());
|
|
}
|
|
|
|
std::string Path = File1->path().str();
|
|
ASSERT_TRUE(sys::fs::exists(Path));
|
|
|
|
File2 = std::move(*File1);
|
|
ASSERT_EQ(Path, File2->path());
|
|
ASSERT_TRUE(sys::fs::exists(Path));
|
|
|
|
File1 = None;
|
|
ASSERT_TRUE(sys::fs::exists(Path));
|
|
|
|
File2 = None;
|
|
ASSERT_FALSE(sys::fs::exists(Path));
|
|
}
|
|
|
|
TEST(TempPathTest, TempLink) {
|
|
TempDir D("temp-path-test", /*Unique=*/true);
|
|
ASSERT_TRUE(sys::fs::exists(D.path()));
|
|
TempFile File(D.path("file"), "suffix", "content");
|
|
|
|
Optional<TempLink> Link1, Link2;
|
|
Link1.emplace(File.path(), D.path("link"));
|
|
EXPECT_EQ("link", sys::path::filename(Link1->path()));
|
|
{
|
|
ErrorOr<std::unique_ptr<MemoryBuffer>> Buffer =
|
|
MemoryBuffer::getFile(Link1->path());
|
|
ASSERT_TRUE(Buffer);
|
|
ASSERT_EQ("content", (*Buffer)->getBuffer());
|
|
}
|
|
|
|
std::string Path = Link1->path().str();
|
|
ASSERT_TRUE(sys::fs::exists(Path));
|
|
|
|
Link2 = std::move(*Link1);
|
|
ASSERT_EQ(Path, Link2->path());
|
|
ASSERT_TRUE(sys::fs::exists(Path));
|
|
|
|
Link1 = None;
|
|
ASSERT_TRUE(sys::fs::exists(Path));
|
|
|
|
Link2 = None;
|
|
ASSERT_FALSE(sys::fs::exists(Path));
|
|
}
|
|
|
|
} // namespace
|