summaryrefslogtreecommitdiff
path: root/unittests/Tooling/CompilationDatabaseTest.cpp
diff options
context:
space:
mode:
authorEdwin Vane <revane@gmail.com>2013-11-17 16:08:04 +0000
committerEdwin Vane <revane@gmail.com>2013-11-17 16:08:04 +0000
commitc8f03423e23d4e093d8149fd924e6fef26a15e94 (patch)
treec360a104cf0db2dd0d3e9246dcfe9c767f457779 /unittests/Tooling/CompilationDatabaseTest.cpp
parentce5b5f13a6c90904040b29b9eb765bb7cd736f0b (diff)
downloadclang-c8f03423e23d4e093d8149fd924e6fef26a15e94.tar.gz
clang-c8f03423e23d4e093d8149fd924e6fef26a15e94.tar.bz2
clang-c8f03423e23d4e093d8149fd924e6fef26a15e94.tar.xz
Relax some preconditions for using FixedCompilationDatabase.
FixedCompilationDatabase (FCD) requires that the arguments it consumes after '--' must not include positional parameters or the argv[0] of the tool. This patch relaxes those restrictions. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@194968 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'unittests/Tooling/CompilationDatabaseTest.cpp')
-rw-r--r--unittests/Tooling/CompilationDatabaseTest.cpp44
1 files changed, 41 insertions, 3 deletions
diff --git a/unittests/Tooling/CompilationDatabaseTest.cpp b/unittests/Tooling/CompilationDatabaseTest.cpp
index 6e18cd3f58..c575dff209 100644
--- a/unittests/Tooling/CompilationDatabaseTest.cpp
+++ b/unittests/Tooling/CompilationDatabaseTest.cpp
@@ -450,7 +450,9 @@ TEST(ParseFixedCompilationDatabase, ReturnsNullWithoutDoubleDash) {
TEST(ParseFixedCompilationDatabase, ReturnsArgumentsAfterDoubleDash) {
int Argc = 5;
- const char *Argv[] = { "1", "2", "--\0no-constant-folding", "3", "4" };
+ const char *Argv[] = {
+ "1", "2", "--\0no-constant-folding", "-DDEF3", "-DDEF4"
+ };
OwningPtr<FixedCompilationDatabase> Database(
FixedCompilationDatabase::loadFromCommandLine(Argc, Argv));
ASSERT_TRUE(Database.isValid());
@@ -460,8 +462,8 @@ TEST(ParseFixedCompilationDatabase, ReturnsArgumentsAfterDoubleDash) {
ASSERT_EQ(".", Result[0].Directory);
std::vector<std::string> CommandLine;
CommandLine.push_back("clang-tool");
- CommandLine.push_back("3");
- CommandLine.push_back("4");
+ CommandLine.push_back("-DDEF3");
+ CommandLine.push_back("-DDEF4");
CommandLine.push_back("source");
ASSERT_EQ(CommandLine, Result[0].CommandLine);
EXPECT_EQ(2, Argc);
@@ -484,5 +486,41 @@ TEST(ParseFixedCompilationDatabase, ReturnsEmptyCommandLine) {
EXPECT_EQ(2, Argc);
}
+TEST(ParseFixedCompilationDatabase, HandlesPositionalArgs) {
+ const char *Argv[] = {"1", "2", "--", "-c", "somefile.cpp", "-DDEF3"};
+ int Argc = sizeof(Argv) / sizeof(char*);
+ OwningPtr<FixedCompilationDatabase> Database(
+ FixedCompilationDatabase::loadFromCommandLine(Argc, Argv));
+ ASSERT_TRUE(Database.isValid());
+ std::vector<CompileCommand> Result =
+ Database->getCompileCommands("source");
+ ASSERT_EQ(1ul, Result.size());
+ ASSERT_EQ(".", Result[0].Directory);
+ std::vector<std::string> Expected;
+ Expected.push_back("clang-tool");
+ Expected.push_back("-c");
+ Expected.push_back("-DDEF3");
+ Expected.push_back("source");
+ ASSERT_EQ(Expected, Result[0].CommandLine);
+ EXPECT_EQ(2, Argc);
+}
+
+TEST(ParseFixedCompilationDatabase, HandlesArgv0) {
+ const char *Argv[] = {"1", "2", "--", "mytool", "somefile.cpp"};
+ int Argc = sizeof(Argv) / sizeof(char*);
+ OwningPtr<FixedCompilationDatabase> Database(
+ FixedCompilationDatabase::loadFromCommandLine(Argc, Argv));
+ ASSERT_TRUE(Database.isValid());
+ std::vector<CompileCommand> Result =
+ Database->getCompileCommands("source");
+ ASSERT_EQ(1ul, Result.size());
+ ASSERT_EQ(".", Result[0].Directory);
+ std::vector<std::string> Expected;
+ Expected.push_back("clang-tool");
+ Expected.push_back("source");
+ ASSERT_EQ(Expected, Result[0].CommandLine);
+ EXPECT_EQ(2, Argc);
+}
+
} // end namespace tooling
} // end namespace clang