| //===- YAML2ObjTest.cpp --------------------------------------------===// | 
 | // | 
 | // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. | 
 | // See https://llvm.org/LICENSE.txt for license information. | 
 | // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception | 
 | // | 
 | //===----------------------------------------------------------------------===// | 
 |  | 
 | #include "llvm/ObjectYAML/yaml2obj.h" | 
 | #include "llvm/ADT/SmallString.h" | 
 | #include "llvm/Object/ObjectFile.h" | 
 | #include "llvm/Support/Error.h" | 
 | #include "llvm/Support/YAMLTraits.h" | 
 | #include "llvm/Testing/Support/Error.h" | 
 | #include "gtest/gtest.h" | 
 |  | 
 | using namespace llvm; | 
 | using namespace object; | 
 | using namespace yaml; | 
 |  | 
 | TEST(yaml2ObjectFile, ELF) { | 
 |   bool ErrorReported = false; | 
 |   auto ErrHandler = [&](const Twine &Msg) { ErrorReported = true; }; | 
 |  | 
 |   SmallString<0> Storage; | 
 |   std::unique_ptr<ObjectFile> Obj = yaml2ObjectFile(Storage, R"( | 
 | --- !ELF | 
 | FileHeader: | 
 |   Class:    ELFCLASS64 | 
 |   Data:     ELFDATA2LSB | 
 |   Type:     ET_REL | 
 |   Machine:  EM_X86_64)", ErrHandler); | 
 |  | 
 |   ASSERT_FALSE(ErrorReported); | 
 |   ASSERT_TRUE(Obj); | 
 |   ASSERT_TRUE(Obj->isELF()); | 
 |   ASSERT_TRUE(Obj->isRelocatableObject()); | 
 | } | 
 |  | 
 | TEST(yaml2ObjectFile, Errors) { | 
 |   std::vector<std::string> Errors; | 
 |   auto ErrHandler = [&](const Twine &Msg) { | 
 |     Errors.push_back("ObjectYAML: " + Msg.str()); | 
 |   }; | 
 |  | 
 |   SmallString<0> Storage; | 
 |   StringRef Yaml = R"( | 
 | --- !ELF | 
 | FileHeader: | 
 |   Class:    ELFCLASS64 | 
 |   Data:     ELFDATA2LSB | 
 |   Type:     ET_REL | 
 |   Machine:  EM_X86_64 | 
 | Symbols: | 
 |   - Name: foo | 
 |   - Name: foo | 
 |   - Name: foo | 
 | )"; | 
 |  | 
 |   // 1. Test yaml2ObjectFile(). | 
 |  | 
 |   std::unique_ptr<ObjectFile> Obj = yaml2ObjectFile(Storage, Yaml, ErrHandler); | 
 |  | 
 |   ASSERT_FALSE(Obj); | 
 |   ASSERT_TRUE(Errors.size() == 2); | 
 |   ASSERT_TRUE(Errors[0] == "ObjectYAML: repeated symbol name: 'foo'"); | 
 |   ASSERT_TRUE(Errors[1] == Errors[0]); | 
 |  | 
 |   // 2. Test convertYAML().  | 
 |  | 
 |   Errors.clear(); | 
 |   Storage.clear(); | 
 |   raw_svector_ostream OS(Storage); | 
 |  | 
 |   yaml::Input YIn(Yaml); | 
 |   bool Res = convertYAML(YIn, OS, ErrHandler); | 
 |   ASSERT_FALSE(Res); | 
 |   ASSERT_TRUE(Errors.size() == 2); | 
 |   ASSERT_TRUE(Errors[0] == "ObjectYAML: repeated symbol name: 'foo'"); | 
 |   ASSERT_TRUE(Errors[1] == Errors[0]); | 
 | } |