From 9c7750eeaec7e3e9e2cf4e0be6be399f1b64ead9 Mon Sep 17 00:00:00 2001 From: "Tareq A. Siraj" Date: Wed, 10 Jul 2013 16:09:36 +0000 Subject: Generate a unique filename for a given header This patch is in preparation for writing the header replacement to disk. Added getUniqueHeaderName() that generates a unique header filename in the same directory as the header file. Differential Revision: http://llvm-reviews.chandlerc.com/D1104 llvm-svn: 186007 --- .../cpp11-migrate/UniqueHeaderNameTest.cpp | 61 ++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 clang-tools-extra/unittests/cpp11-migrate/UniqueHeaderNameTest.cpp (limited to 'clang-tools-extra/unittests/cpp11-migrate/UniqueHeaderNameTest.cpp') diff --git a/clang-tools-extra/unittests/cpp11-migrate/UniqueHeaderNameTest.cpp b/clang-tools-extra/unittests/cpp11-migrate/UniqueHeaderNameTest.cpp new file mode 100644 index 00000000000..4f75ec85501 --- /dev/null +++ b/clang-tools-extra/unittests/cpp11-migrate/UniqueHeaderNameTest.cpp @@ -0,0 +1,61 @@ +//===- unittests/cpp11-migrate/UniqueHeaderNameTest.cpp -------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// +// +// Test for the generateReplacementsFileName() in FileOverrides.h +// +//===----------------------------------------------------------------------===// + +#include "gtest/gtest.h" +#include "Core/FileOverrides.h" +#include "llvm/Support/FileSystem.h" +#include "llvm/Support/Path.h" +#include "llvm/Support/Regex.h" +#include "llvm/Support/system_error.h" + +TEST(UniqueHeaderName, testUniqueHeaderName) { + using namespace llvm::sys::path; + + llvm::SmallString<32> TmpDir; + system_temp_directory(true, TmpDir); + + llvm::SmallString<128> SourceFile(TmpDir); + append(SourceFile, "project/lib/feature.cpp"); + native(SourceFile.c_str(), SourceFile); + + llvm::SmallString<128> HeaderFile(TmpDir); + append(HeaderFile, "project/include/feature.h"); + native(HeaderFile.c_str(), HeaderFile); + + llvm::SmallString<128> ExpectedName("^feature.cpp_feature.h_[0-9a-f]{2}_[0-9a-f]{2}_[0-9a-f]{2}_[0-9a-f]{2}_[0-9a-f]{2}_[0-9a-f]{2}.yaml$"); + + llvm::SmallString<128> ActualName; + llvm::SmallString<128> Error; + bool Result = + generateReplacementsFileName(SourceFile, HeaderFile, ActualName, Error); + + ASSERT_TRUE(Result); + EXPECT_TRUE(Error.empty()); + + // We need to check the directory name and filename separately since on + // Windows, the path separator is '\' which is a regex escape character. + llvm::SmallString<128> ExpectedHeaderPath = + llvm::sys::path::parent_path(HeaderFile); + llvm::SmallString<128> ActualHeaderPath = + llvm::sys::path::parent_path(ActualName); + llvm::SmallString<128> ActualHeaderName = + llvm::sys::path::filename(ActualName); + + EXPECT_STREQ(ExpectedHeaderPath.c_str(), ActualHeaderPath.c_str()); + + llvm::Regex R(ExpectedName); + ASSERT_TRUE(R.match(ActualHeaderName)) + << "ExpectedName: " << ExpectedName.c_str() + << "\nActualName: " << ActualName.c_str(); + ASSERT_TRUE(Error.empty()) << "Error: " << Error.c_str(); +} -- cgit v1.2.3