diff options
Diffstat (limited to 'lld/unittests/DriverTests/WinLinkDriverTest.cpp')
| -rw-r--r-- | lld/unittests/DriverTests/WinLinkDriverTest.cpp | 98 |
1 files changed, 33 insertions, 65 deletions
diff --git a/lld/unittests/DriverTests/WinLinkDriverTest.cpp b/lld/unittests/DriverTests/WinLinkDriverTest.cpp index fd3cf1b722b..f02c11d8769 100644 --- a/lld/unittests/DriverTests/WinLinkDriverTest.cpp +++ b/lld/unittests/DriverTests/WinLinkDriverTest.cpp @@ -12,90 +12,58 @@ /// //===----------------------------------------------------------------------===// -#include <stdarg.h> +#include "DriverTest.h" -#include "gtest/gtest.h" - -#include "lld/Driver/Driver.h" -#include "lld/Driver/LinkerInput.h" #include "lld/ReaderWriter/PECOFFTargetInfo.h" - -#include "llvm/ADT/STLExtras.h" #include "llvm/Support/COFF.h" -#include "llvm/Support/raw_ostream.h" using namespace llvm; using namespace lld; namespace { -class ParserTest : public testing::Test { +class WinLinkParserTest : public ParserTest<WinLinkDriver, PECOFFTargetInfo> { protected: - void SetUp() { - os.reset(new raw_string_ostream(diags)); - } - - void parse(const char *args, ...) { - std::vector<const char *> vec; - vec.push_back("link.exe"); - vec.push_back(args); - va_list ap; - va_start(ap, args); - while (const char *arg = va_arg(ap, const char *)) - vec.push_back(arg); - va_end(ap); - EXPECT_FALSE(WinLinkDriver::parse(vec.size(), &vec[0], info, *os)); + virtual PECOFFTargetInfo *doParse(int argc, const char **argv, + raw_ostream &diag) { + PECOFFTargetInfo *info = new PECOFFTargetInfo(); + EXPECT_FALSE(WinLinkDriver::parse(argc, argv, *info, diag)); + return info; } - - PECOFFTargetInfo info; - std::string diags; - std::unique_ptr<raw_string_ostream> os; }; -TEST_F(ParserTest, Basic) { - parse("-subsystem", "console", "-out", "a.exe", "a.obj", "b.obj", "c.obj", - nullptr); - - EXPECT_EQ(llvm::COFF::IMAGE_SUBSYSTEM_WINDOWS_CUI, info.getSubsystem()); - EXPECT_EQ("a.exe", info.outputPath()); - - const std::vector<LinkerInput> &inputFiles = info.inputFiles(); - EXPECT_EQ((size_t)3, inputFiles.size()); - EXPECT_EQ("a.obj", inputFiles[0].getPath()); - EXPECT_EQ("b.obj", inputFiles[1].getPath()); - EXPECT_EQ("c.obj", inputFiles[2].getPath()); +TEST_F(WinLinkParserTest, Basic) { + parse("link.exe", "-subsystem", "console", "-out", "a.exe", + "a.obj", "b.obj", "c.obj", nullptr); + EXPECT_EQ(llvm::COFF::IMAGE_SUBSYSTEM_WINDOWS_CUI, info->getSubsystem()); + EXPECT_EQ("a.exe", info->outputPath()); + EXPECT_EQ(3, (int)inputFiles.size()); + EXPECT_EQ("a.obj", inputFiles[0]); + EXPECT_EQ("b.obj", inputFiles[1]); + EXPECT_EQ("c.obj", inputFiles[2]); } -TEST_F(ParserTest, WindowsStyleOption) { - parse("/subsystem:console", "/out:a.exe", "a.obj", nullptr); - - EXPECT_EQ(llvm::COFF::IMAGE_SUBSYSTEM_WINDOWS_CUI, info.getSubsystem()); - EXPECT_EQ("a.exe", info.outputPath()); - - const std::vector<LinkerInput> &inputFiles = info.inputFiles(); - EXPECT_EQ((size_t)1, inputFiles.size()); - EXPECT_EQ("a.obj", inputFiles[0].getPath()); +TEST_F(WinLinkParserTest, WindowsStyleOption) { + parse("link.exe", "/subsystem:console", "/out:a.exe", "a.obj", nullptr); + EXPECT_EQ(llvm::COFF::IMAGE_SUBSYSTEM_WINDOWS_CUI, info->getSubsystem()); + EXPECT_EQ("a.exe", info->outputPath()); + EXPECT_EQ(1, (int)inputFiles.size()); + EXPECT_EQ("a.obj", inputFiles[0]); } -TEST_F(ParserTest, NoFileExtension) { - parse("foo", "bar", nullptr); - - EXPECT_EQ("foo.exe", info.outputPath()); - - const std::vector<LinkerInput> &inputFiles = info.inputFiles(); - EXPECT_EQ((size_t)2, inputFiles.size()); - EXPECT_EQ("foo.obj", inputFiles[0].getPath()); - EXPECT_EQ("bar.obj", inputFiles[1].getPath()); +TEST_F(WinLinkParserTest, NoFileExtension) { + parse("link.exe", "foo", "bar", nullptr); + EXPECT_EQ("foo.exe", info->outputPath()); + EXPECT_EQ(2, (int)inputFiles.size()); + EXPECT_EQ("foo.obj", inputFiles[0]); + EXPECT_EQ("bar.obj", inputFiles[1]); } -TEST_F(ParserTest, NonStandardFileExtension) { - parse("foo.o", nullptr); - - EXPECT_EQ("foo.exe", info.outputPath()); - - const std::vector<LinkerInput> &inputFiles = info.inputFiles(); - EXPECT_EQ((size_t)1, inputFiles.size()); - EXPECT_EQ("foo.o", inputFiles[0].getPath()); +TEST_F(WinLinkParserTest, NonStandardFileExtension) { + parse("link.exe", "foo.o", nullptr); + EXPECT_EQ("foo.exe", info->outputPath()); + EXPECT_EQ(1, (int)inputFiles.size()); + EXPECT_EQ("foo.o", inputFiles[0]); } } // end anonymous namespace |

