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