xref: /llvm-project/llvm/unittests/DebugInfo/LogicalView/LogicalElementsTest.cpp (revision 7fbcc24409efdb37cec79ad461ef383f6ffc5ef2)
1e28b9357SCarlos Alberto Enciso //===- llvm/unittest/DebugInfo/LogicalView/LogicalElementsTest.cpp --------===//
2e28b9357SCarlos Alberto Enciso //
3e28b9357SCarlos Alberto Enciso // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4e28b9357SCarlos Alberto Enciso // See https://llvm.org/LICENSE.txt for license information.
5e28b9357SCarlos Alberto Enciso // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6e28b9357SCarlos Alberto Enciso //
7e28b9357SCarlos Alberto Enciso //===----------------------------------------------------------------------===//
8e28b9357SCarlos Alberto Enciso 
9e28b9357SCarlos Alberto Enciso #include "llvm/DebugInfo/LogicalView/Core/LVLine.h"
10e28b9357SCarlos Alberto Enciso #include "llvm/DebugInfo/LogicalView/Core/LVReader.h"
11e28b9357SCarlos Alberto Enciso #include "llvm/DebugInfo/LogicalView/Core/LVScope.h"
12e28b9357SCarlos Alberto Enciso #include "llvm/DebugInfo/LogicalView/Core/LVSymbol.h"
13e28b9357SCarlos Alberto Enciso #include "llvm/DebugInfo/LogicalView/Core/LVType.h"
14e28b9357SCarlos Alberto Enciso #include "llvm/Support/ScopedPrinter.h"
15e28b9357SCarlos Alberto Enciso #include "llvm/Support/ToolOutputFile.h"
16e28b9357SCarlos Alberto Enciso #include "llvm/Testing/Support/Error.h"
17e28b9357SCarlos Alberto Enciso 
18e28b9357SCarlos Alberto Enciso #include "gtest/gtest.h"
19e28b9357SCarlos Alberto Enciso 
20e28b9357SCarlos Alberto Enciso using namespace llvm;
21e28b9357SCarlos Alberto Enciso using namespace llvm::logicalview;
22e28b9357SCarlos Alberto Enciso 
23e28b9357SCarlos Alberto Enciso namespace {
24e28b9357SCarlos Alberto Enciso 
25e28b9357SCarlos Alberto Enciso class ReaderTestElements : public LVReader {
26*7fbcc244SCarlos Alberto Enciso #define CREATE(VARIABLE, CREATE_FUNCTION)                                      \
27*7fbcc244SCarlos Alberto Enciso   VARIABLE = CREATE_FUNCTION();                                                \
28*7fbcc244SCarlos Alberto Enciso   EXPECT_NE(VARIABLE, nullptr);
29*7fbcc244SCarlos Alberto Enciso 
30e28b9357SCarlos Alberto Enciso   // Types.
31e28b9357SCarlos Alberto Enciso   LVType *IntegerType = nullptr;
32e28b9357SCarlos Alberto Enciso   LVType *UnsignedType = nullptr;
33e28b9357SCarlos Alberto Enciso   LVType *GlobalType = nullptr;
34e28b9357SCarlos Alberto Enciso   LVType *LocalType = nullptr;
35e28b9357SCarlos Alberto Enciso   LVType *NestedType = nullptr;
36e28b9357SCarlos Alberto Enciso   LVTypeDefinition *TypeDefinitionOne = nullptr;
37e28b9357SCarlos Alberto Enciso   LVTypeDefinition *TypeDefinitionTwo = nullptr;
38e28b9357SCarlos Alberto Enciso   LVTypeEnumerator *EnumeratorOne = nullptr;
39e28b9357SCarlos Alberto Enciso   LVTypeEnumerator *EnumeratorTwo = nullptr;
40e28b9357SCarlos Alberto Enciso   LVTypeImport *TypeImport = nullptr;
41e28b9357SCarlos Alberto Enciso   LVTypeParam *TypeParam = nullptr;
42e28b9357SCarlos Alberto Enciso   LVTypeSubrange *TypeSubrange = nullptr;
43e28b9357SCarlos Alberto Enciso 
44e28b9357SCarlos Alberto Enciso   // Scopes.
45e28b9357SCarlos Alberto Enciso   LVScope *NestedScope = nullptr;
46e28b9357SCarlos Alberto Enciso   LVScopeAggregate *Aggregate = nullptr;
47e28b9357SCarlos Alberto Enciso   LVScopeArray *Array = nullptr;
48e28b9357SCarlos Alberto Enciso   LVScopeEnumeration *Enumeration = nullptr;
49e28b9357SCarlos Alberto Enciso   LVScopeFunction *Function = nullptr;
50e28b9357SCarlos Alberto Enciso   LVScopeFunction *ClassFunction = nullptr;
51e28b9357SCarlos Alberto Enciso   LVScopeFunctionInlined *InlinedFunction = nullptr;
52e28b9357SCarlos Alberto Enciso   LVScopeNamespace *Namespace = nullptr;
53e28b9357SCarlos Alberto Enciso 
54e28b9357SCarlos Alberto Enciso   // Symbols.
55e28b9357SCarlos Alberto Enciso   LVSymbol *GlobalVariable = nullptr;
56e28b9357SCarlos Alberto Enciso   LVSymbol *LocalVariable = nullptr;
57e28b9357SCarlos Alberto Enciso   LVSymbol *ClassMember = nullptr;
58e28b9357SCarlos Alberto Enciso   LVSymbol *NestedVariable = nullptr;
59e28b9357SCarlos Alberto Enciso   LVSymbol *Parameter = nullptr;
60e28b9357SCarlos Alberto Enciso 
61e28b9357SCarlos Alberto Enciso   // Lines.
62e28b9357SCarlos Alberto Enciso   LVLine *LocalLine = nullptr;
63e28b9357SCarlos Alberto Enciso   LVLine *NestedLine = nullptr;
64e28b9357SCarlos Alberto Enciso 
65e28b9357SCarlos Alberto Enciso protected:
66e28b9357SCarlos Alberto Enciso   void add(LVScope *Parent, LVElement *Element);
67e28b9357SCarlos Alberto Enciso   void set(LVElement *Element, StringRef Name, LVOffset Offset,
68e28b9357SCarlos Alberto Enciso            uint32_t LineNumber = 0, LVElement *Type = nullptr);
69e28b9357SCarlos Alberto Enciso 
70e28b9357SCarlos Alberto Enciso public:
ReaderTestElements(ScopedPrinter & W)71e28b9357SCarlos Alberto Enciso   ReaderTestElements(ScopedPrinter &W) : LVReader("", "", W) {
72e28b9357SCarlos Alberto Enciso     setInstance(this);
73e28b9357SCarlos Alberto Enciso   }
74e28b9357SCarlos Alberto Enciso 
createScopes()75e28b9357SCarlos Alberto Enciso   Error createScopes() { return LVReader::createScopes(); }
printScopes()76e28b9357SCarlos Alberto Enciso   Error printScopes() { return LVReader::printScopes(); }
77e28b9357SCarlos Alberto Enciso 
78e28b9357SCarlos Alberto Enciso   void createElements();
79e28b9357SCarlos Alberto Enciso   void addElements();
80e28b9357SCarlos Alberto Enciso   void initElements();
81e28b9357SCarlos Alberto Enciso };
82e28b9357SCarlos Alberto Enciso 
83e28b9357SCarlos Alberto Enciso // Helper function to add a logical element to a given scope.
add(LVScope * Parent,LVElement * Child)84e28b9357SCarlos Alberto Enciso void ReaderTestElements::add(LVScope *Parent, LVElement *Child) {
85e28b9357SCarlos Alberto Enciso   Parent->addElement(Child);
86e28b9357SCarlos Alberto Enciso   EXPECT_EQ(Child->getParent(), Parent);
87e28b9357SCarlos Alberto Enciso   EXPECT_EQ(Child->getLevel(), Parent->getLevel() + 1);
88e28b9357SCarlos Alberto Enciso }
89e28b9357SCarlos Alberto Enciso 
90e28b9357SCarlos Alberto Enciso // Helper function to set the initial values for a given logical element.
set(LVElement * Element,StringRef Name,LVOffset Offset,uint32_t LineNumber,LVElement * Type)91e28b9357SCarlos Alberto Enciso void ReaderTestElements::set(LVElement *Element, StringRef Name,
92e28b9357SCarlos Alberto Enciso                              LVOffset Offset, uint32_t LineNumber,
93e28b9357SCarlos Alberto Enciso                              LVElement *Type) {
94e28b9357SCarlos Alberto Enciso   Element->setName(Name);
95e28b9357SCarlos Alberto Enciso   Element->setOffset(Offset);
96e28b9357SCarlos Alberto Enciso   Element->setLineNumber(LineNumber);
97e28b9357SCarlos Alberto Enciso   Element->setType(Type);
98e28b9357SCarlos Alberto Enciso   EXPECT_EQ(Element->getName(), Name);
99e28b9357SCarlos Alberto Enciso   EXPECT_EQ(Element->getOffset(), Offset);
100e28b9357SCarlos Alberto Enciso   EXPECT_EQ(Element->getLineNumber(), LineNumber);
101e28b9357SCarlos Alberto Enciso   EXPECT_EQ(Element->getType(), Type);
102e28b9357SCarlos Alberto Enciso }
103e28b9357SCarlos Alberto Enciso 
104e28b9357SCarlos Alberto Enciso // Create the logical elements.
createElements()105e28b9357SCarlos Alberto Enciso void ReaderTestElements::createElements() {
106e28b9357SCarlos Alberto Enciso   // Create scope root.
107e28b9357SCarlos Alberto Enciso   Error Err = createScopes();
108e28b9357SCarlos Alberto Enciso   ASSERT_THAT_ERROR(std::move(Err), Succeeded());
109e28b9357SCarlos Alberto Enciso   Root = getScopesRoot();
110e28b9357SCarlos Alberto Enciso   ASSERT_NE(Root, nullptr);
111e28b9357SCarlos Alberto Enciso 
112e28b9357SCarlos Alberto Enciso   // Create the logical types.
113*7fbcc244SCarlos Alberto Enciso   CREATE(IntegerType, createType);
114*7fbcc244SCarlos Alberto Enciso   CREATE(UnsignedType, createType);
115*7fbcc244SCarlos Alberto Enciso   CREATE(GlobalType, createType);
116*7fbcc244SCarlos Alberto Enciso   CREATE(LocalType, createType);
117*7fbcc244SCarlos Alberto Enciso   CREATE(NestedType, createType);
118*7fbcc244SCarlos Alberto Enciso   CREATE(EnumeratorOne, createTypeEnumerator);
119*7fbcc244SCarlos Alberto Enciso   CREATE(EnumeratorTwo, createTypeEnumerator);
120*7fbcc244SCarlos Alberto Enciso   CREATE(TypeDefinitionOne, createTypeDefinition);
121*7fbcc244SCarlos Alberto Enciso   CREATE(TypeDefinitionTwo, createTypeDefinition);
122*7fbcc244SCarlos Alberto Enciso   CREATE(TypeSubrange, createTypeSubrange);
123*7fbcc244SCarlos Alberto Enciso   CREATE(TypeParam, createTypeParam);
124*7fbcc244SCarlos Alberto Enciso   CREATE(TypeImport, createTypeImport);
125e28b9357SCarlos Alberto Enciso 
126e28b9357SCarlos Alberto Enciso   // Create the logical scopes.
127*7fbcc244SCarlos Alberto Enciso   CREATE(NestedScope, createScope);
128*7fbcc244SCarlos Alberto Enciso   CREATE(Aggregate, createScopeAggregate);
129*7fbcc244SCarlos Alberto Enciso   CREATE(Array, createScopeArray);
130*7fbcc244SCarlos Alberto Enciso   CREATE(CompileUnit, createScopeCompileUnit);
131*7fbcc244SCarlos Alberto Enciso   CREATE(Enumeration, createScopeEnumeration);
132*7fbcc244SCarlos Alberto Enciso   CREATE(Function, createScopeFunction);
133*7fbcc244SCarlos Alberto Enciso   CREATE(ClassFunction, createScopeFunction);
134*7fbcc244SCarlos Alberto Enciso   CREATE(InlinedFunction, createScopeFunctionInlined);
135*7fbcc244SCarlos Alberto Enciso   CREATE(Namespace, createScopeNamespace);
136e28b9357SCarlos Alberto Enciso 
137e28b9357SCarlos Alberto Enciso   // Create the logical symbols.
138*7fbcc244SCarlos Alberto Enciso   CREATE(GlobalVariable, createSymbol);
139*7fbcc244SCarlos Alberto Enciso   CREATE(LocalVariable, createSymbol);
140*7fbcc244SCarlos Alberto Enciso   CREATE(ClassMember, createSymbol);
141*7fbcc244SCarlos Alberto Enciso   CREATE(NestedVariable, createSymbol);
142*7fbcc244SCarlos Alberto Enciso   CREATE(Parameter, createSymbol);
143e28b9357SCarlos Alberto Enciso 
144e28b9357SCarlos Alberto Enciso   // Create the logical lines.
145*7fbcc244SCarlos Alberto Enciso   CREATE(LocalLine, createLine);
146*7fbcc244SCarlos Alberto Enciso   CREATE(NestedLine, createLine);
147e28b9357SCarlos Alberto Enciso }
148e28b9357SCarlos Alberto Enciso 
149e28b9357SCarlos Alberto Enciso // Create the logical view adding the created logical elements.
addElements()150e28b9357SCarlos Alberto Enciso void ReaderTestElements::addElements() {
151e28b9357SCarlos Alberto Enciso   setCompileUnit(CompileUnit);
152e28b9357SCarlos Alberto Enciso 
153e28b9357SCarlos Alberto Enciso   // Root
154e28b9357SCarlos Alberto Enciso   //   CompileUnit
155e28b9357SCarlos Alberto Enciso   //     IntegerType
156e28b9357SCarlos Alberto Enciso   //     UnsignedType
157e28b9357SCarlos Alberto Enciso   //     Array
158e28b9357SCarlos Alberto Enciso   //       TypeSubrange
159e28b9357SCarlos Alberto Enciso   //     Function
160e28b9357SCarlos Alberto Enciso   //       Parameter
161e28b9357SCarlos Alberto Enciso   //       LocalVariable
162e28b9357SCarlos Alberto Enciso   //       LocalType
163e28b9357SCarlos Alberto Enciso   //       LocalLine
164e28b9357SCarlos Alberto Enciso   //       InlinedFunction
165e28b9357SCarlos Alberto Enciso   //       TypeImport
166e28b9357SCarlos Alberto Enciso   //       TypeParam
167e28b9357SCarlos Alberto Enciso   //       NestedScope
168e28b9357SCarlos Alberto Enciso   //         NestedVariable
169e28b9357SCarlos Alberto Enciso   //         NestedType
170e28b9357SCarlos Alberto Enciso   //         NestedLine
171e28b9357SCarlos Alberto Enciso   //     GlobalVariable
172e28b9357SCarlos Alberto Enciso   //     GlobalType
173e28b9357SCarlos Alberto Enciso   //     Namespace
174e28b9357SCarlos Alberto Enciso   //       Aggregate
175e28b9357SCarlos Alberto Enciso   //         ClassMember
176e28b9357SCarlos Alberto Enciso   //         ClassFunction
177e28b9357SCarlos Alberto Enciso   //       Enumeration
178e28b9357SCarlos Alberto Enciso   //         EnumeratorOne
179e28b9357SCarlos Alberto Enciso   //         EnumeratorTwo
180e28b9357SCarlos Alberto Enciso   //       TypeDefinitionOne
181e28b9357SCarlos Alberto Enciso   //       TypeDefinitionTwo
182e28b9357SCarlos Alberto Enciso 
183e28b9357SCarlos Alberto Enciso   add(Root, CompileUnit);
184e28b9357SCarlos Alberto Enciso   EXPECT_EQ(Root->lineCount(), 0u);
185e28b9357SCarlos Alberto Enciso   EXPECT_EQ(Root->scopeCount(), 1u);
186e28b9357SCarlos Alberto Enciso   EXPECT_EQ(Root->symbolCount(), 0u);
187e28b9357SCarlos Alberto Enciso   EXPECT_EQ(Root->typeCount(), 0u);
188e28b9357SCarlos Alberto Enciso 
189e28b9357SCarlos Alberto Enciso   // Add elements to CompileUnit.
190e28b9357SCarlos Alberto Enciso   add(CompileUnit, IntegerType);
191e28b9357SCarlos Alberto Enciso   add(CompileUnit, UnsignedType);
192e28b9357SCarlos Alberto Enciso   add(CompileUnit, Array);
193e28b9357SCarlos Alberto Enciso   add(CompileUnit, Function);
194e28b9357SCarlos Alberto Enciso   add(CompileUnit, GlobalVariable);
195e28b9357SCarlos Alberto Enciso   add(CompileUnit, GlobalType);
196e28b9357SCarlos Alberto Enciso   add(CompileUnit, Namespace);
197e28b9357SCarlos Alberto Enciso   EXPECT_EQ(CompileUnit->lineCount(), 0u);
198e28b9357SCarlos Alberto Enciso   EXPECT_EQ(CompileUnit->scopeCount(), 3u);
199e28b9357SCarlos Alberto Enciso   EXPECT_EQ(CompileUnit->symbolCount(), 1u);
200e28b9357SCarlos Alberto Enciso   EXPECT_EQ(CompileUnit->typeCount(), 3u);
201e28b9357SCarlos Alberto Enciso 
202e28b9357SCarlos Alberto Enciso   // Add elements to Namespace.
203e28b9357SCarlos Alberto Enciso   add(Namespace, Aggregate);
204e28b9357SCarlos Alberto Enciso   add(Namespace, Enumeration);
205e28b9357SCarlos Alberto Enciso   add(Namespace, TypeDefinitionOne);
206e28b9357SCarlos Alberto Enciso   add(Namespace, TypeDefinitionTwo);
207e28b9357SCarlos Alberto Enciso   EXPECT_EQ(Namespace->lineCount(), 0u);
208e28b9357SCarlos Alberto Enciso   EXPECT_EQ(Namespace->scopeCount(), 2u);
209e28b9357SCarlos Alberto Enciso   EXPECT_EQ(Namespace->symbolCount(), 0u);
210e28b9357SCarlos Alberto Enciso   EXPECT_EQ(Namespace->typeCount(), 2u);
211e28b9357SCarlos Alberto Enciso 
212e28b9357SCarlos Alberto Enciso   // Add elements to Function.
213e28b9357SCarlos Alberto Enciso   add(Function, Parameter);
214e28b9357SCarlos Alberto Enciso   add(Function, LocalVariable);
215e28b9357SCarlos Alberto Enciso   add(Function, LocalType);
216e28b9357SCarlos Alberto Enciso   add(Function, LocalLine);
217e28b9357SCarlos Alberto Enciso   add(Function, InlinedFunction);
218e28b9357SCarlos Alberto Enciso   add(Function, TypeImport);
219e28b9357SCarlos Alberto Enciso   add(Function, TypeParam);
220e28b9357SCarlos Alberto Enciso   add(Function, NestedScope);
221e28b9357SCarlos Alberto Enciso   EXPECT_EQ(Function->lineCount(), 1u);
222e28b9357SCarlos Alberto Enciso   EXPECT_EQ(Function->scopeCount(), 2u);
223e28b9357SCarlos Alberto Enciso   EXPECT_EQ(Function->symbolCount(), 2u);
224e28b9357SCarlos Alberto Enciso   EXPECT_EQ(Function->typeCount(), 3u);
225e28b9357SCarlos Alberto Enciso 
226e28b9357SCarlos Alberto Enciso   // Add elements to NestedScope.
227e28b9357SCarlos Alberto Enciso   add(NestedScope, NestedVariable);
228e28b9357SCarlos Alberto Enciso   add(NestedScope, NestedType);
229e28b9357SCarlos Alberto Enciso   add(NestedScope, NestedLine);
230e28b9357SCarlos Alberto Enciso   EXPECT_EQ(NestedScope->lineCount(), 1u);
231e28b9357SCarlos Alberto Enciso   EXPECT_EQ(NestedScope->scopeCount(), 0u);
232e28b9357SCarlos Alberto Enciso   EXPECT_EQ(NestedScope->symbolCount(), 1u);
233e28b9357SCarlos Alberto Enciso   EXPECT_EQ(NestedScope->typeCount(), 1u);
234e28b9357SCarlos Alberto Enciso 
235e28b9357SCarlos Alberto Enciso   // Add elements to Enumeration.
236e28b9357SCarlos Alberto Enciso   add(Enumeration, EnumeratorOne);
237e28b9357SCarlos Alberto Enciso   add(Enumeration, EnumeratorTwo);
238e28b9357SCarlos Alberto Enciso   EXPECT_EQ(Enumeration->lineCount(), 0u);
239e28b9357SCarlos Alberto Enciso   EXPECT_EQ(Enumeration->scopeCount(), 0u);
240e28b9357SCarlos Alberto Enciso   EXPECT_EQ(Enumeration->symbolCount(), 0u);
241e28b9357SCarlos Alberto Enciso   EXPECT_EQ(Enumeration->typeCount(), 2u);
242e28b9357SCarlos Alberto Enciso 
243e28b9357SCarlos Alberto Enciso   // Add elements to Aggregate.
244e28b9357SCarlos Alberto Enciso   add(Aggregate, ClassMember);
245e28b9357SCarlos Alberto Enciso   add(Aggregate, ClassFunction);
246e28b9357SCarlos Alberto Enciso   EXPECT_EQ(Aggregate->lineCount(), 0u);
247e28b9357SCarlos Alberto Enciso   EXPECT_EQ(Aggregate->scopeCount(), 1u);
248e28b9357SCarlos Alberto Enciso   EXPECT_EQ(Aggregate->symbolCount(), 1u);
249e28b9357SCarlos Alberto Enciso   EXPECT_EQ(Aggregate->typeCount(), 0u);
250e28b9357SCarlos Alberto Enciso 
251e28b9357SCarlos Alberto Enciso   // Add elements to Array.
252e28b9357SCarlos Alberto Enciso   add(Array, TypeSubrange);
253e28b9357SCarlos Alberto Enciso   EXPECT_EQ(Array->lineCount(), 0u);
254e28b9357SCarlos Alberto Enciso   EXPECT_EQ(Array->scopeCount(), 0u);
255e28b9357SCarlos Alberto Enciso   EXPECT_EQ(Array->symbolCount(), 0u);
256e28b9357SCarlos Alberto Enciso   EXPECT_EQ(Array->typeCount(), 1u);
257e28b9357SCarlos Alberto Enciso }
258e28b9357SCarlos Alberto Enciso 
259e28b9357SCarlos Alberto Enciso // Set initial values to logical elements.
initElements()260e28b9357SCarlos Alberto Enciso void ReaderTestElements::initElements() {
261e28b9357SCarlos Alberto Enciso   setFilename("LogicalElements.obj");
262e28b9357SCarlos Alberto Enciso   EXPECT_EQ(getFilename(), "LogicalElements.obj");
263e28b9357SCarlos Alberto Enciso 
264e28b9357SCarlos Alberto Enciso   Root->setFileFormatName("FileFormat");
265e28b9357SCarlos Alberto Enciso   EXPECT_EQ(Root->getFileFormatName(), "FileFormat");
266e28b9357SCarlos Alberto Enciso 
267e28b9357SCarlos Alberto Enciso   // Types.
268e28b9357SCarlos Alberto Enciso   set(IntegerType, "int", 0x1000);
269e28b9357SCarlos Alberto Enciso   set(UnsignedType, "unsigned", 0x1010);
270e28b9357SCarlos Alberto Enciso   set(GlobalType, "GlobalType", 0x1020, 1020);
271e28b9357SCarlos Alberto Enciso   set(LocalType, "LocalType", 0x1030, 1030);
272e28b9357SCarlos Alberto Enciso   set(NestedType, "NestedType", 0x1040, 1040);
273e28b9357SCarlos Alberto Enciso 
274e28b9357SCarlos Alberto Enciso   set(TypeDefinitionOne, "INTEGER", 0x1040, 1040, IntegerType);
275e28b9357SCarlos Alberto Enciso   set(TypeDefinitionTwo, "INT", 0x1050, 1050, TypeDefinitionOne);
276e28b9357SCarlos Alberto Enciso   EXPECT_EQ(TypeDefinitionOne->getUnderlyingType(), IntegerType);
277e28b9357SCarlos Alberto Enciso   EXPECT_EQ(TypeDefinitionTwo->getUnderlyingType(), IntegerType);
278e28b9357SCarlos Alberto Enciso 
279e28b9357SCarlos Alberto Enciso   set(EnumeratorOne, "one", 0x1060, 1060);
280e28b9357SCarlos Alberto Enciso   EnumeratorOne->setValue("blue");
281e28b9357SCarlos Alberto Enciso   EXPECT_EQ(EnumeratorOne->getValue(), "blue");
282e28b9357SCarlos Alberto Enciso 
283e28b9357SCarlos Alberto Enciso   set(EnumeratorTwo, "two", 0x1070, 1070);
284e28b9357SCarlos Alberto Enciso   EnumeratorTwo->setValue("red");
285e28b9357SCarlos Alberto Enciso   EXPECT_EQ(EnumeratorTwo->getValue(), "red");
286e28b9357SCarlos Alberto Enciso 
287e28b9357SCarlos Alberto Enciso   set(TypeSubrange, "", 0x1080, 1080, IntegerType);
288e28b9357SCarlos Alberto Enciso   TypeSubrange->setCount(5);
289e28b9357SCarlos Alberto Enciso   EXPECT_EQ(TypeSubrange->getCount(), 5);
290e28b9357SCarlos Alberto Enciso 
291e28b9357SCarlos Alberto Enciso   TypeSubrange->setLowerBound(10);
292e28b9357SCarlos Alberto Enciso   TypeSubrange->setUpperBound(15);
293e28b9357SCarlos Alberto Enciso   EXPECT_EQ(TypeSubrange->getLowerBound(), 10);
294e28b9357SCarlos Alberto Enciso   EXPECT_EQ(TypeSubrange->getUpperBound(), 15);
295e28b9357SCarlos Alberto Enciso 
296e28b9357SCarlos Alberto Enciso   TypeSubrange->setBounds(20, 25);
297e28b9357SCarlos Alberto Enciso   std::pair<unsigned, unsigned> Pair;
298e28b9357SCarlos Alberto Enciso   Pair = TypeSubrange->getBounds();
299e28b9357SCarlos Alberto Enciso   EXPECT_EQ(Pair.first, 20u);
300e28b9357SCarlos Alberto Enciso   EXPECT_EQ(Pair.second, 25u);
301e28b9357SCarlos Alberto Enciso 
302e28b9357SCarlos Alberto Enciso   set(TypeParam, "INTEGER", 0x1090, 1090, UnsignedType);
303e28b9357SCarlos Alberto Enciso   TypeParam->setValue("10");
304e28b9357SCarlos Alberto Enciso   EXPECT_EQ(TypeParam->getValue(), "10");
305e28b9357SCarlos Alberto Enciso 
306e28b9357SCarlos Alberto Enciso   set(TypeImport, "", 0x1090, 1090, Aggregate);
307e28b9357SCarlos Alberto Enciso   EXPECT_EQ(TypeImport->getType(), Aggregate);
308e28b9357SCarlos Alberto Enciso 
309e28b9357SCarlos Alberto Enciso   // Scopes.
310e28b9357SCarlos Alberto Enciso   set(Aggregate, "Class", 0x2000, 2000);
311e28b9357SCarlos Alberto Enciso   set(Enumeration, "Colors", 0x2010, 2010);
312e28b9357SCarlos Alberto Enciso   set(Function, "function", 0x2020, 2020, GlobalType);
313e28b9357SCarlos Alberto Enciso   set(ClassFunction, "foo", 0x2030, 2030, TypeDefinitionTwo);
314e28b9357SCarlos Alberto Enciso   set(Namespace, "nsp", 0x2040, 2040);
315e28b9357SCarlos Alberto Enciso   set(NestedScope, "", 0x2050, 2050);
316e28b9357SCarlos Alberto Enciso   set(Array, "", 0x2060, 2060, UnsignedType);
317e28b9357SCarlos Alberto Enciso   set(InlinedFunction, "bar", 0x2070, 2070, TypeDefinitionOne);
318e28b9357SCarlos Alberto Enciso   set(CompileUnit, "test.cpp", 0x2080, 2080);
319e28b9357SCarlos Alberto Enciso 
320e28b9357SCarlos Alberto Enciso   // Symbols.
321e28b9357SCarlos Alberto Enciso   set(GlobalVariable, "GlobalVariable", 0x3000, 3000);
322e28b9357SCarlos Alberto Enciso   set(LocalVariable, "LocalVariable", 0x3010, 3010, TypeDefinitionOne);
323e28b9357SCarlos Alberto Enciso   set(ClassMember, "Member", 0x3020, 3020, IntegerType);
324e28b9357SCarlos Alberto Enciso   set(Parameter, "Param", 0x3030, 3030, UnsignedType);
325e28b9357SCarlos Alberto Enciso   set(NestedVariable, "NestedVariable", 0x3040, 3040);
326e28b9357SCarlos Alberto Enciso 
327e28b9357SCarlos Alberto Enciso   // Lines.
328e28b9357SCarlos Alberto Enciso   set(LocalLine, "", 0x4000, 4000);
329e28b9357SCarlos Alberto Enciso   set(NestedLine, "", 0x4010, 4010);
330e28b9357SCarlos Alberto Enciso }
331e28b9357SCarlos Alberto Enciso 
TEST(LogicalViewTest,LogicalElements)332e28b9357SCarlos Alberto Enciso TEST(LogicalViewTest, LogicalElements) {
333e28b9357SCarlos Alberto Enciso   ScopedPrinter W(outs());
334e28b9357SCarlos Alberto Enciso   ReaderTestElements Reader(W);
335e28b9357SCarlos Alberto Enciso 
336e28b9357SCarlos Alberto Enciso   Reader.createElements();
337e28b9357SCarlos Alberto Enciso   Reader.addElements();
338e28b9357SCarlos Alberto Enciso   Reader.initElements();
339e28b9357SCarlos Alberto Enciso }
340e28b9357SCarlos Alberto Enciso 
341e28b9357SCarlos Alberto Enciso } // namespace
342