Sync file handling logic in RewriterTestContext.h and RefactoringTest.cpp.

They are mostly duplicated and got out of sync during the PathV1 removal. We
should factor the code somewhere, but for now a FIXME will do.

llvm-svn: 185019
This commit is contained in:
Rafael Espindola 2013-06-26 21:02:22 +00:00
parent 2782dacfbc
commit 8b96094420
1 changed files with 18 additions and 24 deletions

View File

@ -45,12 +45,7 @@ class RewriterTestContext {
Diagnostics.setClient(&DiagnosticPrinter, false);
}
~RewriterTestContext() {
if (!TemporaryDirectory.empty()) {
uint32_t RemovedCount = 0;
llvm::sys::fs::remove_all(TemporaryDirectory.str(), RemovedCount);
}
}
~RewriterTestContext() {}
FileID createInMemoryFile(StringRef Name, StringRef Content) {
const llvm::MemoryBuffer *Source =
@ -62,26 +57,25 @@ class RewriterTestContext {
return Sources.createFileID(Entry, SourceLocation(), SrcMgr::C_User);
}
// FIXME: this code is mostly a duplicate of
// unittests/Tooling/RefactoringTest.cpp. Figure out a way to share it.
FileID createOnDiskFile(StringRef Name, StringRef Content) {
if (TemporaryDirectory.empty()) {
int FD;
bool error =
llvm::sys::fs::unique_file("rewriter-test-%%-%%-%%-%%/anchor", FD,
TemporaryDirectory);
assert(!error); (void)error;
llvm::raw_fd_ostream Closer(FD, /*shouldClose=*/true);
TemporaryDirectory = llvm::sys::path::parent_path(TemporaryDirectory);
}
SmallString<1024> Path(TemporaryDirectory);
llvm::sys::path::append(Path, Name);
std::string ErrorInfo;
llvm::raw_fd_ostream OutStream(Path.c_str(),
ErrorInfo, llvm::raw_fd_ostream::F_Binary);
assert(ErrorInfo.empty());
SmallString<1024> Path;
int FD;
llvm::error_code EC =
llvm::sys::fs::unique_file(Twine(Name) + "%%%%%%", FD, Path);
assert(!EC);
(void)EC;
llvm::raw_fd_ostream OutStream(FD, true);
OutStream << Content;
OutStream.close();
const FileEntry *File = Files.getFile(Path);
assert(File != NULL);
StringRef Found = TemporaryFiles.GetOrCreateValue(Name, Path.str()).second;
assert(Found == Path);
(void)Found;
return Sources.createFileID(File, SourceLocation(), SrcMgr::C_User);
}
@ -101,8 +95,8 @@ class RewriterTestContext {
}
std::string getFileContentFromDisk(StringRef Name) {
SmallString<1024> Path(TemporaryDirectory.str());
llvm::sys::path::append(Path, Name);
std::string Path = TemporaryFiles.lookup(Name);
assert(!Path.empty());
// We need to read directly from the FileManager without relaying through
// a FileEntry, as otherwise we'd read through an already opened file
// descriptor, which might not see the changes made.
@ -120,7 +114,7 @@ class RewriterTestContext {
Rewriter Rewrite;
// Will be set once on disk files are generated.
SmallString<128> TemporaryDirectory;
llvm::StringMap<std::string> TemporaryFiles;
};
} // end namespace clang