//===- lld/unittest/DriverTest.h ------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// #include "lld/Driver/Driver.h" #include "llvm/Support/raw_ostream.h" #include "gtest/gtest.h" #include namespace { using namespace llvm; using namespace lld; template class ParserTest : public testing::Test { protected: virtual const LinkingContext *linkingContext() = 0; std::string &errorMessage() { return _errorMessage; } // Convenience method for getting number of input files. int inputFileCount() { return linkingContext()->getNodes().size(); } // Convenience method for getting i'th input files name. std::string inputFile(int index) { Node &node = *linkingContext()->getNodes()[index]; if (node.kind() == Node::Kind::File) return cast(&node)->getFile()->path(); llvm_unreachable("not handling other types of input files"); } // For unit tests to call driver with various command lines. bool parse(const char *args, ...) { // Construct command line options from varargs. std::vector vec; 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); // Call the parser. raw_string_ostream os(_errorMessage); return D::parse(vec, _ctx, os); } T _ctx; std::string _errorMessage; }; }