115ab7bc3SDuncan P. N. Exon Smith //===- TempPathTest.cpp ---------------------------------------------------===//
215ab7bc3SDuncan P. N. Exon Smith //
315ab7bc3SDuncan P. N. Exon Smith // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
415ab7bc3SDuncan P. N. Exon Smith // See https://llvm.org/LICENSE.txt for license information.
515ab7bc3SDuncan P. N. Exon Smith // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
615ab7bc3SDuncan P. N. Exon Smith //
715ab7bc3SDuncan P. N. Exon Smith //===----------------------------------------------------------------------===//
815ab7bc3SDuncan P. N. Exon Smith
915ab7bc3SDuncan P. N. Exon Smith #include "llvm/Support/FileSystem.h"
1015ab7bc3SDuncan P. N. Exon Smith #include "llvm/Support/MemoryBuffer.h"
1115ab7bc3SDuncan P. N. Exon Smith #include "llvm/Testing/Support/SupportHelpers.h"
1215ab7bc3SDuncan P. N. Exon Smith #include "gtest/gtest.h"
1315ab7bc3SDuncan P. N. Exon Smith
1415ab7bc3SDuncan P. N. Exon Smith using namespace llvm;
1515ab7bc3SDuncan P. N. Exon Smith using llvm::unittest::TempDir;
1615ab7bc3SDuncan P. N. Exon Smith using llvm::unittest::TempFile;
1715ab7bc3SDuncan P. N. Exon Smith using llvm::unittest::TempLink;
1815ab7bc3SDuncan P. N. Exon Smith
1915ab7bc3SDuncan P. N. Exon Smith namespace {
2015ab7bc3SDuncan P. N. Exon Smith
TEST(TempPathTest,TempDir)2115ab7bc3SDuncan P. N. Exon Smith TEST(TempPathTest, TempDir) {
22*77c90c8cSKazu Hirata std::optional<TempDir> Dir1, Dir2;
2315ab7bc3SDuncan P. N. Exon Smith StringRef Prefix = "temp-path-test";
2415ab7bc3SDuncan P. N. Exon Smith Dir1.emplace(Prefix, /*Unique=*/true);
2515ab7bc3SDuncan P. N. Exon Smith EXPECT_EQ(Prefix,
2615ab7bc3SDuncan P. N. Exon Smith sys::path::filename(Dir1->path()).take_front(Prefix.size()));
2715ab7bc3SDuncan P. N. Exon Smith EXPECT_NE(Prefix, sys::path::filename(Dir1->path()));
2815ab7bc3SDuncan P. N. Exon Smith
2915ab7bc3SDuncan P. N. Exon Smith std::string Path = Dir1->path().str();
3015ab7bc3SDuncan P. N. Exon Smith ASSERT_TRUE(sys::fs::exists(Path));
3115ab7bc3SDuncan P. N. Exon Smith
3215ab7bc3SDuncan P. N. Exon Smith Dir2 = std::move(*Dir1);
3315ab7bc3SDuncan P. N. Exon Smith ASSERT_EQ(Path, Dir2->path());
3415ab7bc3SDuncan P. N. Exon Smith ASSERT_TRUE(sys::fs::exists(Path));
3515ab7bc3SDuncan P. N. Exon Smith
36b6a01caaSKazu Hirata Dir1 = std::nullopt;
3715ab7bc3SDuncan P. N. Exon Smith ASSERT_TRUE(sys::fs::exists(Path));
3815ab7bc3SDuncan P. N. Exon Smith
39b6a01caaSKazu Hirata Dir2 = std::nullopt;
4015ab7bc3SDuncan P. N. Exon Smith ASSERT_FALSE(sys::fs::exists(Path));
4115ab7bc3SDuncan P. N. Exon Smith }
4215ab7bc3SDuncan P. N. Exon Smith
TEST(TempPathTest,TempFile)4315ab7bc3SDuncan P. N. Exon Smith TEST(TempPathTest, TempFile) {
4415ab7bc3SDuncan P. N. Exon Smith TempDir D("temp-path-test", /*Unique=*/true);
4515ab7bc3SDuncan P. N. Exon Smith ASSERT_TRUE(sys::fs::exists(D.path()));
4615ab7bc3SDuncan P. N. Exon Smith
47*77c90c8cSKazu Hirata std::optional<TempFile> File1, File2;
4815ab7bc3SDuncan P. N. Exon Smith File1.emplace(D.path("file"), "suffix", "content");
4915ab7bc3SDuncan P. N. Exon Smith EXPECT_EQ("file.suffix", sys::path::filename(File1->path()));
5015ab7bc3SDuncan P. N. Exon Smith {
5115ab7bc3SDuncan P. N. Exon Smith ErrorOr<std::unique_ptr<MemoryBuffer>> Buffer =
5215ab7bc3SDuncan P. N. Exon Smith MemoryBuffer::getFile(File1->path());
5315ab7bc3SDuncan P. N. Exon Smith ASSERT_TRUE(Buffer);
5415ab7bc3SDuncan P. N. Exon Smith ASSERT_EQ("content", (*Buffer)->getBuffer());
5515ab7bc3SDuncan P. N. Exon Smith }
5615ab7bc3SDuncan P. N. Exon Smith
5715ab7bc3SDuncan P. N. Exon Smith std::string Path = File1->path().str();
5815ab7bc3SDuncan P. N. Exon Smith ASSERT_TRUE(sys::fs::exists(Path));
5915ab7bc3SDuncan P. N. Exon Smith
6015ab7bc3SDuncan P. N. Exon Smith File2 = std::move(*File1);
6115ab7bc3SDuncan P. N. Exon Smith ASSERT_EQ(Path, File2->path());
6215ab7bc3SDuncan P. N. Exon Smith ASSERT_TRUE(sys::fs::exists(Path));
6315ab7bc3SDuncan P. N. Exon Smith
64b6a01caaSKazu Hirata File1 = std::nullopt;
6515ab7bc3SDuncan P. N. Exon Smith ASSERT_TRUE(sys::fs::exists(Path));
6615ab7bc3SDuncan P. N. Exon Smith
67b6a01caaSKazu Hirata File2 = std::nullopt;
6815ab7bc3SDuncan P. N. Exon Smith ASSERT_FALSE(sys::fs::exists(Path));
6915ab7bc3SDuncan P. N. Exon Smith }
7015ab7bc3SDuncan P. N. Exon Smith
TEST(TempPathTest,TempLink)7115ab7bc3SDuncan P. N. Exon Smith TEST(TempPathTest, TempLink) {
7215ab7bc3SDuncan P. N. Exon Smith TempDir D("temp-path-test", /*Unique=*/true);
7315ab7bc3SDuncan P. N. Exon Smith ASSERT_TRUE(sys::fs::exists(D.path()));
7415ab7bc3SDuncan P. N. Exon Smith TempFile File(D.path("file"), "suffix", "content");
7515ab7bc3SDuncan P. N. Exon Smith
76*77c90c8cSKazu Hirata std::optional<TempLink> Link1, Link2;
7715ab7bc3SDuncan P. N. Exon Smith Link1.emplace(File.path(), D.path("link"));
7815ab7bc3SDuncan P. N. Exon Smith EXPECT_EQ("link", sys::path::filename(Link1->path()));
7915ab7bc3SDuncan P. N. Exon Smith {
8015ab7bc3SDuncan P. N. Exon Smith ErrorOr<std::unique_ptr<MemoryBuffer>> Buffer =
8115ab7bc3SDuncan P. N. Exon Smith MemoryBuffer::getFile(Link1->path());
8215ab7bc3SDuncan P. N. Exon Smith ASSERT_TRUE(Buffer);
8315ab7bc3SDuncan P. N. Exon Smith ASSERT_EQ("content", (*Buffer)->getBuffer());
8415ab7bc3SDuncan P. N. Exon Smith }
8515ab7bc3SDuncan P. N. Exon Smith
8615ab7bc3SDuncan P. N. Exon Smith std::string Path = Link1->path().str();
8715ab7bc3SDuncan P. N. Exon Smith ASSERT_TRUE(sys::fs::exists(Path));
8815ab7bc3SDuncan P. N. Exon Smith
8915ab7bc3SDuncan P. N. Exon Smith Link2 = std::move(*Link1);
9015ab7bc3SDuncan P. N. Exon Smith ASSERT_EQ(Path, Link2->path());
9115ab7bc3SDuncan P. N. Exon Smith ASSERT_TRUE(sys::fs::exists(Path));
9215ab7bc3SDuncan P. N. Exon Smith
93b6a01caaSKazu Hirata Link1 = std::nullopt;
9415ab7bc3SDuncan P. N. Exon Smith ASSERT_TRUE(sys::fs::exists(Path));
9515ab7bc3SDuncan P. N. Exon Smith
96b6a01caaSKazu Hirata Link2 = std::nullopt;
9715ab7bc3SDuncan P. N. Exon Smith ASSERT_FALSE(sys::fs::exists(Path));
9815ab7bc3SDuncan P. N. Exon Smith }
9915ab7bc3SDuncan P. N. Exon Smith
10015ab7bc3SDuncan P. N. Exon Smith } // namespace
101