brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.1 KiB · 8fafca4 Raw
82 lines · cpp
1//===- YAML2ObjTest.cpp --------------------------------------------===//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 "llvm/ObjectYAML/yaml2obj.h"10#include "llvm/ADT/SmallString.h"11#include "llvm/Object/ObjectFile.h"12#include "llvm/Support/Error.h"13#include "llvm/Support/YAMLTraits.h"14#include "llvm/Testing/Support/Error.h"15#include "gtest/gtest.h"16 17using namespace llvm;18using namespace object;19using namespace yaml;20 21TEST(yaml2ObjectFile, ELF) {22  bool ErrorReported = false;23  auto ErrHandler = [&](const Twine &Msg) { ErrorReported = true; };24 25  SmallString<0> Storage;26  std::unique_ptr<ObjectFile> Obj = yaml2ObjectFile(Storage, R"(27--- !ELF28FileHeader:29  Class:    ELFCLASS6430  Data:     ELFDATA2LSB31  Type:     ET_REL32  Machine:  EM_X86_64)", ErrHandler);33 34  ASSERT_FALSE(ErrorReported);35  ASSERT_TRUE(Obj);36  ASSERT_TRUE(Obj->isELF());37  ASSERT_TRUE(Obj->isRelocatableObject());38}39 40TEST(yaml2ObjectFile, Errors) {41  std::vector<std::string> Errors;42  auto ErrHandler = [&](const Twine &Msg) {43    Errors.push_back("ObjectYAML: " + Msg.str());44  };45 46  SmallString<0> Storage;47  StringRef Yaml = R"(48--- !ELF49FileHeader:50  Class:    ELFCLASS6451  Data:     ELFDATA2LSB52  Type:     ET_REL53  Machine:  EM_X86_6454Symbols:55  - Name: foo56  - Name: foo57  - Name: foo58)";59 60  // 1. Test yaml2ObjectFile().61 62  std::unique_ptr<ObjectFile> Obj = yaml2ObjectFile(Storage, Yaml, ErrHandler);63 64  ASSERT_FALSE(Obj);65  ASSERT_TRUE(Errors.size() == 2);66  ASSERT_TRUE(Errors[0] == "ObjectYAML: repeated symbol name: 'foo'");67  ASSERT_TRUE(Errors[1] == Errors[0]);68 69  // 2. Test convertYAML(). 70 71  Errors.clear();72  Storage.clear();73  raw_svector_ostream OS(Storage);74 75  yaml::Input YIn(Yaml);76  bool Res = convertYAML(YIn, OS, ErrHandler);77  ASSERT_FALSE(Res);78  ASSERT_TRUE(Errors.size() == 2);79  ASSERT_TRUE(Errors[0] == "ObjectYAML: repeated symbol name: 'foo'");80  ASSERT_TRUE(Errors[1] == Errors[0]);81}82