Mercurial > hg > CbC > CbC_llvm
comparison llvm/unittests/ObjectYAML/YAML2ObjTest.cpp @ 150:1d019706d866
LLVM10
author | anatofuz |
---|---|
date | Thu, 13 Feb 2020 15:10:13 +0900 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
147:c2174574ed3a | 150:1d019706d866 |
---|---|
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-exception | |
6 // | |
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 | |
17 using namespace llvm; | |
18 using namespace object; | |
19 using namespace yaml; | |
20 | |
21 TEST(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 --- !ELF | |
28 FileHeader: | |
29 Class: ELFCLASS64 | |
30 Data: ELFDATA2LSB | |
31 Type: ET_REL | |
32 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 | |
40 TEST(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 --- !ELF | |
49 FileHeader: | |
50 Class: ELFCLASS64 | |
51 Data: ELFDATA2LSB | |
52 Type: ET_REL | |
53 Machine: EM_X86_64 | |
54 Symbols: | |
55 - Name: foo | |
56 - Name: foo | |
57 - Name: foo | |
58 )"; | |
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 } |