brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.8 KiB · 822e3b2 Raw
147 lines · cpp
1//===- unittests/InstallAPI/FileList.cpp - File List Tests ---------------===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8 9#include "clang/InstallAPI/FileList.h"10#include "clang/InstallAPI/HeaderFile.h"11#include "llvm/ADT/StringRef.h"12#include "llvm/Support/MemoryBuffer.h"13#include "llvm/Testing/Support/Error.h"14#include "gtest/gtest.h"15 16using namespace llvm;17using namespace clang::installapi;18 19namespace FileListTests {20 21static inline void testValidFileList(std::string Input, HeaderSeq &Expected) {22  auto InputBuf = MemoryBuffer::getMemBuffer(Input);23  HeaderSeq Headers;24  llvm::Error Err = FileListReader::loadHeaders(std::move(InputBuf), Headers);25  ASSERT_THAT_ERROR(std::move(Err), Succeeded());26 27  EXPECT_EQ(Expected.size(), Headers.size());28  EXPECT_EQ(Headers, Expected);29}30 31TEST(FileList, Version3) {32  static const char Input[] = R"({33    "version" : "3",34    "headers" : [35      {36        "type" : "public",37        "path" : "/tmp/dst/usr/include/foo.h",38        "language" : "objective-c"39      },40      {41        "type" : "private",42        "path" : "/tmp/dst/usr/local/include/bar.h",43        "language" : "objective-c++"44      },45      {46        "type" : "project",47        "path" : "/tmp/src/baz.h"48      }49    ]50  })";51 52  HeaderSeq Expected = {53      {"/tmp/dst/usr/include/foo.h", HeaderType::Public, "foo.h",54       clang::Language::ObjC},55      {"/tmp/dst/usr/local/include/bar.h", HeaderType::Private, "bar.h",56       clang::Language::ObjCXX},57      {"/tmp/src/baz.h", HeaderType::Project, "", std::nullopt}};58 59  testValidFileList(Input, Expected);60}61 62TEST(FileList, Version1) {63  static const char Input[] = R"({64    "version" : "1",65    "headers" : [66      {67        "type" : "public",68        "path" : "/usr/include/foo.h"69      },70      {71        "type" : "private",72        "path" : "/usr/local/include/bar.h"73      }74    ]75  })";76 77  HeaderSeq Expected = {78      {"/usr/include/foo.h", HeaderType::Public, "foo.h", std::nullopt},79      {"/usr/local/include/bar.h", HeaderType::Private, "bar.h", std::nullopt},80  };81 82  testValidFileList(Input, Expected);83}84 85TEST(FileList, Version2) {86  static const auto Input = R"({87    "version" : "2",88    "headers" : [89      {90        "type" : "public",91        "path" : "/usr/include/foo.h"92      },93      {94        "type" : "project",95        "path" : "src/bar.h"96      }97    ]98  })";99  HeaderSeq Expected = {100      {"/usr/include/foo.h", HeaderType::Public, "foo.h", std::nullopt},101      {"src/bar.h", HeaderType::Project, "", std::nullopt},102  };103 104  testValidFileList(Input, Expected);105}106 107TEST(FileList, MissingVersion) {108  static const char Input[] = R"({109    "headers" : [110      {111        "type" : "public",112        "path" : "/usr/include/foo.h"113      },114      {115        "type" : "private",116        "path" : "/usr/local/include/bar.h"117      }118    ]119  })";120  auto InputBuf = MemoryBuffer::getMemBuffer(Input);121  HeaderSeq Headers;122  llvm::Error Err = FileListReader::loadHeaders(std::move(InputBuf), Headers);123  EXPECT_THAT_ERROR(124      std::move(Err),125      FailedWithMessage(126          "invalid input format: required field 'version' not specified\n"));127}128 129TEST(FileList, InvalidTypes) {130  static const char Input[] = R"({131    "version" : "1",132    "headers" : [133      {134        "type" : "project",135        "path" : "/usr/include/foo.h"136      }137    ]138  })";139  auto InputBuf = MemoryBuffer::getMemBuffer(Input);140  HeaderSeq Headers;141  llvm::Error Err = FileListReader::loadHeaders(std::move(InputBuf), Headers);142  EXPECT_THAT_ERROR(143      std::move(Err),144      FailedWithMessage("invalid input format: unsupported header type\n"));145}146} // namespace FileListTests147