aboutsummaryrefslogtreecommitdiff
path: root/llvm/unittests/Support/CommandLineTest.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/unittests/Support/CommandLineTest.cpp')
-rw-r--r--llvm/unittests/Support/CommandLineTest.cpp45
1 files changed, 38 insertions, 7 deletions
diff --git a/llvm/unittests/Support/CommandLineTest.cpp b/llvm/unittests/Support/CommandLineTest.cpp
index dd6e122..26e82d1 100644
--- a/llvm/unittests/Support/CommandLineTest.cpp
+++ b/llvm/unittests/Support/CommandLineTest.cpp
@@ -871,7 +871,7 @@ TEST(CommandLineTest, ResponseFiles) {
llvm::BumpPtrAllocator A;
llvm::cl::ExpansionContext ECtx(A, llvm::cl::TokenizeGNUCommandLine);
ECtx.setVFS(&FS).setCurrentDir(TestRoot).setRelativeNames(true);
- ASSERT_TRUE(ECtx.expandResponseFiles(Argv));
+ ASSERT_FALSE((bool)ECtx.expandResponseFiles(Argv));
EXPECT_THAT(Argv, testing::Pointwise(
StringEquality(),
{"test/test", "-flag_1", "-option_1", "-option_2",
@@ -933,7 +933,14 @@ TEST(CommandLineTest, RecursiveResponseFiles) {
#endif
llvm::cl::ExpansionContext ECtx(A, Tokenizer);
ECtx.setVFS(&FS).setCurrentDir(TestRoot);
- ASSERT_FALSE(ECtx.expandResponseFiles(Argv));
+ llvm::Error Err = ECtx.expandResponseFiles(Argv);
+ ASSERT_TRUE((bool)Err);
+ SmallString<128> FilePath = SelfFilePath;
+ std::error_code EC = FS.makeAbsolute(FilePath);
+ ASSERT_FALSE((bool)EC);
+ std::string ExpectedMessage =
+ std::string("recursive expansion of: '") + std::string(FilePath) + "'";
+ ASSERT_TRUE(toString(std::move(Err)) == ExpectedMessage);
EXPECT_THAT(Argv,
testing::Pointwise(StringEquality(),
@@ -971,7 +978,7 @@ TEST(CommandLineTest, ResponseFilesAtArguments) {
BumpPtrAllocator A;
llvm::cl::ExpansionContext ECtx(A, cl::TokenizeGNUCommandLine);
ECtx.setVFS(&FS).setCurrentDir(TestRoot);
- ASSERT_FALSE(ECtx.expandResponseFiles(Argv));
+ ASSERT_FALSE((bool)ECtx.expandResponseFiles(Argv));
// ASSERT instead of EXPECT to prevent potential out-of-bounds access.
ASSERT_EQ(Argv.size(), 1 + NON_RSP_AT_ARGS + 2);
@@ -1005,7 +1012,7 @@ TEST(CommandLineTest, ResponseFileRelativePath) {
BumpPtrAllocator A;
llvm::cl::ExpansionContext ECtx(A, cl::TokenizeGNUCommandLine);
ECtx.setVFS(&FS).setCurrentDir(TestRoot).setRelativeNames(true);
- ASSERT_TRUE(ECtx.expandResponseFiles(Argv));
+ ASSERT_FALSE((bool)ECtx.expandResponseFiles(Argv));
EXPECT_THAT(Argv,
testing::Pointwise(StringEquality(), {"test/test", "-flag"}));
}
@@ -1025,7 +1032,7 @@ TEST(CommandLineTest, ResponseFileEOLs) {
llvm::cl::ExpansionContext ECtx(A, cl::TokenizeWindowsCommandLine);
ECtx.setVFS(&FS).setCurrentDir(TestRoot).setMarkEOLs(true).setRelativeNames(
true);
- ASSERT_TRUE(ECtx.expandResponseFiles(Argv));
+ ASSERT_FALSE((bool)ECtx.expandResponseFiles(Argv));
const char *Expected[] = {"clang", "-Xclang", "-Wno-whatever", nullptr,
"input.cpp"};
ASSERT_EQ(std::size(Expected), Argv.size());
@@ -1038,6 +1045,30 @@ TEST(CommandLineTest, ResponseFileEOLs) {
}
}
+TEST(CommandLineTest, BadResponseFile) {
+ BumpPtrAllocator A;
+ StringSaver Saver(A);
+ TempDir ADir("dir", /*Unique*/ true);
+ SmallString<128> AFilePath = ADir.path();
+ llvm::sys::path::append(AFilePath, "file.rsp");
+ std::string AFileExp = std::string("@") + std::string(AFilePath.str());
+ SmallVector<const char *, 2> Argv = {"clang", AFileExp.c_str()};
+
+ bool Res = cl::ExpandResponseFiles(Saver, cl::TokenizeGNUCommandLine, Argv);
+ ASSERT_TRUE(Res);
+ ASSERT_EQ(2U, Argv.size());
+ ASSERT_STREQ(Argv[0], "clang");
+ ASSERT_STREQ(Argv[1], AFileExp.c_str());
+
+ std::string ADirExp = std::string("@") + std::string(ADir.path());
+ Argv = {"clang", ADirExp.c_str()};
+ Res = cl::ExpandResponseFiles(Saver, cl::TokenizeGNUCommandLine, Argv);
+ ASSERT_FALSE(Res);
+ ASSERT_EQ(2U, Argv.size());
+ ASSERT_STREQ(Argv[0], "clang");
+ ASSERT_STREQ(Argv[1], ADirExp.c_str());
+}
+
TEST(CommandLineTest, SetDefaultValue) {
cl::ResetCommandLineParser();
@@ -1145,9 +1176,9 @@ TEST(CommandLineTest, ReadConfigFile) {
llvm::BumpPtrAllocator A;
llvm::cl::ExpansionContext ECtx(A, cl::tokenizeConfigFile);
- bool Result = ECtx.readConfigFile(ConfigFile.path(), Argv);
+ llvm::Error Result = ECtx.readConfigFile(ConfigFile.path(), Argv);
- EXPECT_TRUE(Result);
+ EXPECT_FALSE((bool)Result);
EXPECT_EQ(Argv.size(), 13U);
EXPECT_STREQ(Argv[0], "-option_1");
EXPECT_STREQ(Argv[1],