Mercurial > hg > CbC > CbC_llvm
diff llvm/unittests/ObjectYAML/YAML2ObjTest.cpp @ 150:1d019706d866
LLVM10
author | anatofuz |
---|---|
date | Thu, 13 Feb 2020 15:10:13 +0900 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/llvm/unittests/ObjectYAML/YAML2ObjTest.cpp Thu Feb 13 15:10:13 2020 +0900 @@ -0,0 +1,81 @@ +//===- 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]); +}