Files
carbon-lang/toolchain/install/install_paths_test_helpers.cpp
T
Jon Ross-Perkins e382e6fd97 Refactor FindPreludeFiles into InstallPaths (#4268)
From the driver's perspective, `FindPreludeFiles` is closely tied to
`compile`. This makes it difficult to refactor commands without
affecting the test dependencies on `FindPreludeFiles`. `InstallPaths`
seems like a decent home since it is responsible for the install
structure.

I'm switching to an `Error` return to allow callers to choose how to
handle it (e.g., in file tests, we typically don't want the direct error
stream).
2024-09-04 22:22:48 +00:00

30 lines
1.1 KiB
C++

// Part of the Carbon Language project, under the Apache License v2.0 with LLVM
// Exceptions. See /LICENSE for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
#include "toolchain/install/install_paths_test_helpers.h"
#include "testing/base/global_exe_path.h"
namespace Carbon::Testing {
// Prepares the VFS with prelude files from the real filesystem. Primarily for
// tests.
auto AddPreludeFilesToVfs(InstallPaths install_paths,
llvm::vfs::InMemoryFileSystem* vfs) -> void {
// Load the prelude into the test VFS.
auto real_fs = llvm::vfs::getRealFileSystem();
auto prelude = install_paths.FindPreludeFiles();
CARBON_CHECK(prelude.ok()) << prelude.error();
for (const auto& path : *prelude) {
llvm::ErrorOr<std::unique_ptr<llvm::MemoryBuffer>> file =
real_fs->getBufferForFile(path);
CARBON_CHECK(file) << "Error getting file: " << file.getError().message();
bool added = vfs->addFile(path, /*ModificationTime=*/0, std::move(*file));
CARBON_CHECK(added) << "Duplicate file: " << path;
}
}
} // namespace Carbon::Testing