|
|
@@ -21,29 +21,38 @@ using ::testing::ElementsAre;
|
|
|
using ::testing::HasSubstr;
|
|
|
using ::testing::StrEq;
|
|
|
|
|
|
-TEST(DriverTest, FullCommandErrors) {
|
|
|
- TestRawOstream test_output_stream;
|
|
|
- TestRawOstream test_error_stream;
|
|
|
- Driver driver = Driver(test_output_stream, test_error_stream);
|
|
|
+static constexpr llvm::StringLiteral TestFileName = "test_file.carbon";
|
|
|
|
|
|
- EXPECT_FALSE(driver.RunFullCommand({}));
|
|
|
- EXPECT_THAT(test_error_stream.TakeStr(), HasSubstr("ERROR"));
|
|
|
+class DriverTest : public testing::Test {
|
|
|
+ protected:
|
|
|
+ DriverTest() : driver_(fs_, test_output_stream_, test_error_stream_) {}
|
|
|
|
|
|
- EXPECT_FALSE(driver.RunFullCommand({"foo"}));
|
|
|
- EXPECT_THAT(test_error_stream.TakeStr(), HasSubstr("ERROR"));
|
|
|
+ auto CreateTestFile(llvm::StringRef text) -> void {
|
|
|
+ fs_.addFile(TestFileName, /*ModificationTime=*/0,
|
|
|
+ llvm::MemoryBuffer::getMemBuffer(text));
|
|
|
+ }
|
|
|
|
|
|
- EXPECT_FALSE(driver.RunFullCommand({"foo --bar --baz"}));
|
|
|
- EXPECT_THAT(test_error_stream.TakeStr(), HasSubstr("ERROR"));
|
|
|
-}
|
|
|
+ llvm::vfs::InMemoryFileSystem fs_;
|
|
|
+ TestRawOstream test_output_stream_;
|
|
|
+ TestRawOstream test_error_stream_;
|
|
|
+ Driver driver_;
|
|
|
+};
|
|
|
+
|
|
|
+TEST_F(DriverTest, FullCommandErrors) {
|
|
|
+ EXPECT_FALSE(driver_.RunFullCommand({}));
|
|
|
+ EXPECT_THAT(test_error_stream_.TakeStr(), HasSubstr("ERROR"));
|
|
|
+
|
|
|
+ EXPECT_FALSE(driver_.RunFullCommand({"foo"}));
|
|
|
+ EXPECT_THAT(test_error_stream_.TakeStr(), HasSubstr("ERROR"));
|
|
|
|
|
|
-TEST(DriverTest, Help) {
|
|
|
- TestRawOstream test_output_stream;
|
|
|
- TestRawOstream test_error_stream;
|
|
|
- Driver driver = Driver(test_output_stream, test_error_stream);
|
|
|
+ EXPECT_FALSE(driver_.RunFullCommand({"foo --bar --baz"}));
|
|
|
+ EXPECT_THAT(test_error_stream_.TakeStr(), HasSubstr("ERROR"));
|
|
|
+}
|
|
|
|
|
|
- EXPECT_TRUE(driver.RunHelpSubcommand(ConsoleDiagnosticConsumer(), {}));
|
|
|
- EXPECT_THAT(test_error_stream.TakeStr(), StrEq(""));
|
|
|
- auto help_text = test_output_stream.TakeStr();
|
|
|
+TEST_F(DriverTest, Help) {
|
|
|
+ EXPECT_TRUE(driver_.RunHelpSubcommand(ConsoleDiagnosticConsumer(), {}));
|
|
|
+ EXPECT_THAT(test_error_stream_.TakeStr(), StrEq(""));
|
|
|
+ auto help_text = test_output_stream_.TakeStr();
|
|
|
|
|
|
// Help text should mention each subcommand.
|
|
|
#define CARBON_SUBCOMMAND(Name, Spelling, ...) \
|
|
|
@@ -51,56 +60,33 @@ TEST(DriverTest, Help) {
|
|
|
#include "toolchain/driver/flags.def"
|
|
|
|
|
|
// Check that the subcommand dispatch works.
|
|
|
- EXPECT_TRUE(driver.RunFullCommand({"help"}));
|
|
|
- EXPECT_THAT(test_error_stream.TakeStr(), StrEq(""));
|
|
|
- EXPECT_THAT(test_output_stream.TakeStr(), StrEq(help_text));
|
|
|
+ EXPECT_TRUE(driver_.RunFullCommand({"help"}));
|
|
|
+ EXPECT_THAT(test_error_stream_.TakeStr(), StrEq(""));
|
|
|
+ EXPECT_THAT(test_output_stream_.TakeStr(), StrEq(help_text));
|
|
|
}
|
|
|
|
|
|
-TEST(DriverTest, HelpErrors) {
|
|
|
- TestRawOstream test_output_stream;
|
|
|
- TestRawOstream test_error_stream;
|
|
|
- Driver driver = Driver(test_output_stream, test_error_stream);
|
|
|
-
|
|
|
- EXPECT_FALSE(driver.RunHelpSubcommand(ConsoleDiagnosticConsumer(), {"foo"}));
|
|
|
- EXPECT_THAT(test_output_stream.TakeStr(), StrEq(""));
|
|
|
- EXPECT_THAT(test_error_stream.TakeStr(), HasSubstr("ERROR"));
|
|
|
-
|
|
|
- EXPECT_FALSE(driver.RunHelpSubcommand(ConsoleDiagnosticConsumer(), {"help"}));
|
|
|
- EXPECT_THAT(test_output_stream.TakeStr(), StrEq(""));
|
|
|
- EXPECT_THAT(test_error_stream.TakeStr(), HasSubstr("ERROR"));
|
|
|
+TEST_F(DriverTest, HelpErrors) {
|
|
|
+ EXPECT_FALSE(driver_.RunHelpSubcommand(ConsoleDiagnosticConsumer(), {"foo"}));
|
|
|
+ EXPECT_THAT(test_output_stream_.TakeStr(), StrEq(""));
|
|
|
+ EXPECT_THAT(test_error_stream_.TakeStr(), HasSubstr("ERROR"));
|
|
|
|
|
|
EXPECT_FALSE(
|
|
|
- driver.RunHelpSubcommand(ConsoleDiagnosticConsumer(), {"--xyz"}));
|
|
|
- EXPECT_THAT(test_output_stream.TakeStr(), StrEq(""));
|
|
|
- EXPECT_THAT(test_error_stream.TakeStr(), HasSubstr("ERROR"));
|
|
|
-}
|
|
|
+ driver_.RunHelpSubcommand(ConsoleDiagnosticConsumer(), {"help"}));
|
|
|
+ EXPECT_THAT(test_output_stream_.TakeStr(), StrEq(""));
|
|
|
+ EXPECT_THAT(test_error_stream_.TakeStr(), HasSubstr("ERROR"));
|
|
|
|
|
|
-auto CreateTestFile(llvm::StringRef text) -> std::string {
|
|
|
- int fd = -1;
|
|
|
- llvm::SmallString<1024> path;
|
|
|
- auto ec = llvm::sys::fs::createTemporaryFile("test_file", ".txt", fd, path);
|
|
|
- if (ec) {
|
|
|
- llvm::report_fatal_error(llvm::Twine("Failed to create temporary file: ") +
|
|
|
- ec.message());
|
|
|
- }
|
|
|
-
|
|
|
- llvm::raw_fd_ostream s(fd, /*shouldClose=*/true);
|
|
|
- s << text;
|
|
|
- s.close();
|
|
|
-
|
|
|
- return path.str().str();
|
|
|
+ EXPECT_FALSE(
|
|
|
+ driver_.RunHelpSubcommand(ConsoleDiagnosticConsumer(), {"--xyz"}));
|
|
|
+ EXPECT_THAT(test_output_stream_.TakeStr(), StrEq(""));
|
|
|
+ EXPECT_THAT(test_error_stream_.TakeStr(), HasSubstr("ERROR"));
|
|
|
}
|
|
|
|
|
|
-TEST(DriverTest, DumpTokens) {
|
|
|
- TestRawOstream test_output_stream;
|
|
|
- TestRawOstream test_error_stream;
|
|
|
- Driver driver = Driver(test_output_stream, test_error_stream);
|
|
|
-
|
|
|
- auto test_file_path = CreateTestFile("Hello World");
|
|
|
- EXPECT_TRUE(driver.RunDumpSubcommand(ConsoleDiagnosticConsumer(),
|
|
|
- {"tokens", test_file_path}));
|
|
|
- EXPECT_THAT(test_error_stream.TakeStr(), StrEq(""));
|
|
|
- auto tokenized_text = test_output_stream.TakeStr();
|
|
|
+TEST_F(DriverTest, DumpTokens) {
|
|
|
+ CreateTestFile("Hello World");
|
|
|
+ EXPECT_TRUE(driver_.RunDumpSubcommand(ConsoleDiagnosticConsumer(),
|
|
|
+ {"tokens", TestFileName}));
|
|
|
+ EXPECT_THAT(test_error_stream_.TakeStr(), StrEq(""));
|
|
|
+ auto tokenized_text = test_output_stream_.TakeStr();
|
|
|
|
|
|
EXPECT_THAT(Yaml::Value::FromText(tokenized_text),
|
|
|
ElementsAre(Yaml::SequenceValue{
|
|
|
@@ -128,53 +114,45 @@ TEST(DriverTest, DumpTokens) {
|
|
|
{"spelling", ""}}}));
|
|
|
|
|
|
// Check that the subcommand dispatch works.
|
|
|
- EXPECT_TRUE(driver.RunFullCommand({"dump", "tokens", test_file_path}));
|
|
|
- EXPECT_THAT(test_error_stream.TakeStr(), StrEq(""));
|
|
|
- EXPECT_THAT(test_output_stream.TakeStr(), StrEq(tokenized_text));
|
|
|
+ EXPECT_TRUE(driver_.RunFullCommand({"dump", "tokens", TestFileName}));
|
|
|
+ EXPECT_THAT(test_error_stream_.TakeStr(), StrEq(""));
|
|
|
+ EXPECT_THAT(test_output_stream_.TakeStr(), StrEq(tokenized_text));
|
|
|
}
|
|
|
|
|
|
-TEST(DriverTest, DumpErrors) {
|
|
|
- TestRawOstream test_output_stream;
|
|
|
- TestRawOstream test_error_stream;
|
|
|
- Driver driver = Driver(test_output_stream, test_error_stream);
|
|
|
-
|
|
|
- EXPECT_FALSE(driver.RunDumpSubcommand(ConsoleDiagnosticConsumer(), {"foo"}));
|
|
|
- EXPECT_THAT(test_output_stream.TakeStr(), StrEq(""));
|
|
|
- EXPECT_THAT(test_error_stream.TakeStr(), HasSubstr("ERROR"));
|
|
|
+TEST_F(DriverTest, DumpErrors) {
|
|
|
+ EXPECT_FALSE(driver_.RunDumpSubcommand(ConsoleDiagnosticConsumer(), {"foo"}));
|
|
|
+ EXPECT_THAT(test_output_stream_.TakeStr(), StrEq(""));
|
|
|
+ EXPECT_THAT(test_error_stream_.TakeStr(), HasSubstr("ERROR"));
|
|
|
|
|
|
EXPECT_FALSE(
|
|
|
- driver.RunDumpSubcommand(ConsoleDiagnosticConsumer(), {"--xyz"}));
|
|
|
- EXPECT_THAT(test_output_stream.TakeStr(), StrEq(""));
|
|
|
- EXPECT_THAT(test_error_stream.TakeStr(), HasSubstr("ERROR"));
|
|
|
+ driver_.RunDumpSubcommand(ConsoleDiagnosticConsumer(), {"--xyz"}));
|
|
|
+ EXPECT_THAT(test_output_stream_.TakeStr(), StrEq(""));
|
|
|
+ EXPECT_THAT(test_error_stream_.TakeStr(), HasSubstr("ERROR"));
|
|
|
|
|
|
EXPECT_FALSE(
|
|
|
- driver.RunDumpSubcommand(ConsoleDiagnosticConsumer(), {"tokens"}));
|
|
|
- EXPECT_THAT(test_output_stream.TakeStr(), StrEq(""));
|
|
|
- EXPECT_THAT(test_error_stream.TakeStr(), HasSubstr("ERROR"));
|
|
|
-
|
|
|
- EXPECT_FALSE(driver.RunDumpSubcommand(ConsoleDiagnosticConsumer(),
|
|
|
- {"tokens", "/not/a/real/file/name"}));
|
|
|
- EXPECT_THAT(test_output_stream.TakeStr(), StrEq(""));
|
|
|
- EXPECT_THAT(test_error_stream.TakeStr(), HasSubstr("ERROR"));
|
|
|
+ driver_.RunDumpSubcommand(ConsoleDiagnosticConsumer(), {"tokens"}));
|
|
|
+ EXPECT_THAT(test_output_stream_.TakeStr(), StrEq(""));
|
|
|
+ EXPECT_THAT(test_error_stream_.TakeStr(), HasSubstr("ERROR"));
|
|
|
+
|
|
|
+ EXPECT_FALSE(driver_.RunDumpSubcommand(ConsoleDiagnosticConsumer(),
|
|
|
+ {"tokens", "/not/a/real/file/name"}));
|
|
|
+ EXPECT_THAT(test_output_stream_.TakeStr(), StrEq(""));
|
|
|
+ EXPECT_THAT(test_error_stream_.TakeStr(), HasSubstr("ERROR"));
|
|
|
}
|
|
|
|
|
|
-TEST(DriverTest, DumpParseTree) {
|
|
|
- TestRawOstream test_output_stream;
|
|
|
- TestRawOstream test_error_stream;
|
|
|
- Driver driver = Driver(test_output_stream, test_error_stream);
|
|
|
-
|
|
|
- auto test_file_path = CreateTestFile("var v: Int = 42;");
|
|
|
- EXPECT_TRUE(driver.RunDumpSubcommand(ConsoleDiagnosticConsumer(),
|
|
|
- {"parse-tree", test_file_path}));
|
|
|
- EXPECT_THAT(test_error_stream.TakeStr(), StrEq(""));
|
|
|
+TEST_F(DriverTest, DumpParseTree) {
|
|
|
+ CreateTestFile("var v: Int = 42;");
|
|
|
+ EXPECT_TRUE(driver_.RunDumpSubcommand(ConsoleDiagnosticConsumer(),
|
|
|
+ {"parse-tree", TestFileName}));
|
|
|
+ EXPECT_THAT(test_error_stream_.TakeStr(), StrEq(""));
|
|
|
// Verify there is output without examining it.
|
|
|
- EXPECT_FALSE(test_output_stream.TakeStr().empty());
|
|
|
+ EXPECT_FALSE(test_output_stream_.TakeStr().empty());
|
|
|
|
|
|
// Check that the subcommand dispatch works.
|
|
|
- EXPECT_TRUE(driver.RunFullCommand({"dump", "parse-tree", test_file_path}));
|
|
|
- EXPECT_THAT(test_error_stream.TakeStr(), StrEq(""));
|
|
|
+ EXPECT_TRUE(driver_.RunFullCommand({"dump", "parse-tree", TestFileName}));
|
|
|
+ EXPECT_THAT(test_error_stream_.TakeStr(), StrEq(""));
|
|
|
// Verify there is output without examining it.
|
|
|
- EXPECT_FALSE(test_output_stream.TakeStr().empty());
|
|
|
+ EXPECT_FALSE(test_output_stream_.TakeStr().empty());
|
|
|
}
|
|
|
|
|
|
} // namespace
|