Update copyright to LGPL on all files
[dyninst.git] / testsuite / src / symtab / test_lookup_func.C
1 /*
2  * Copyright (c) 1996-2009 Barton P. Miller
3  * 
4  * We provide the Paradyn Parallel Performance Tools (below
5  * described as "Paradyn") on an AS IS basis, and do not warrant its
6  * validity or performance.  We reserve the right to update, modify,
7  * or discontinue this software at any time.  We shall have no
8  * obligation to supply such updates or modifications or any other
9  * form of support to you.
10  * 
11  * By your use of Paradyn, you understand and agree that we (or any
12  * other person or entity with proprietary rights in Paradyn) are
13  * under no obligation to provide either maintenance services,
14  * update services, notices of latent defects, or correction of
15  * defects for Paradyn.
16  * 
17  * This library is free software; you can redistribute it and/or
18  * modify it under the terms of the GNU Lesser General Public
19  * License as published by the Free Software Foundation; either
20  * version 2.1 of the License, or (at your option) any later version.
21  * 
22  * This library is distributed in the hope that it will be useful,
23  * but WITHOUT ANY WARRANTY; without even the implied warranty of
24  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
25  * Lesser General Public License for more details.
26  * 
27  * You should have received a copy of the GNU Lesser General Public
28  * License along with this library; if not, write to the Free Software
29  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
30  */
31
32 #include "symtab_comp.h"
33 #include "test_lib.h"
34
35 #include "Symtab.h"
36 #include "Symbol.h"
37 #include "Function.h"
38 #include "Variable.h"
39
40 using namespace Dyninst;
41 using namespace SymtabAPI;
42
43 class test_lookup_func_Mutator : public SymtabMutator {
44 public:
45    test_lookup_func_Mutator() { };
46    virtual test_results_t executeTest();
47 };
48
49 extern "C" DLLEXPORT TestMutator* test_lookup_func_factory()
50 {
51    return new test_lookup_func_Mutator();
52 }
53
54 test_results_t test_lookup_func_Mutator::executeTest()
55 {
56    std::vector<Function *> funcs;
57    bool result = symtab->findFunctionsByName(funcs, std::string("lookup_func"));
58
59    if (!result || !funcs.size() )
60    {
61       logerror("[%s:%u] - Unable to find test_lookup_func\n", 
62                __FILE__, __LINE__);
63       return FAILED;
64    }
65
66    if (funcs.size() != 1)
67    {
68       logerror("[%s:%u] - Too many functions found??: %d\n", 
69                __FILE__, __LINE__, funcs.size());
70       return FAILED;
71    }
72
73    Function *f  = funcs[0];
74
75    if (!f)
76    {
77       logerror("[%s:%u] - NULL function returned\n", 
78                __FILE__, __LINE__);
79       return FAILED;
80    }
81
82    if (0 == f->getOffset())
83    {
84       logerror("[%s:%u] - function with zero offsetn", 
85                __FILE__, __LINE__);
86       return FAILED;
87    }
88
89    std::vector<localVar *> lvars;
90
91    if (!f->getLocalVariables(lvars))
92    {
93       logerror("[%s:%u] - failed to find local vars\n", 
94                __FILE__, __LINE__);
95       return FAILED;
96    }
97
98    if (!lvars.size())
99    {
100       logerror("[%s:%u] - failed to find local vars\n", 
101                __FILE__, __LINE__);
102       return FAILED;
103    }
104
105    if (lvars.size() != 1)
106    {
107       logerror("[%s:%u] - wrong number oflocal vars: %d, not 1\n", 
108                __FILE__, __LINE__, lvars.size());
109       return FAILED;
110    }
111
112    localVar *lv = lvars[0];
113
114    if (!lv)
115    {
116       logerror("[%s:%u] - NULL local var\n", 
117                __FILE__, __LINE__);
118       return FAILED;
119    }
120
121    if (lv->getName() != std::string("my_local_var"))
122    {
123       logerror("[%s:%u] - local vars has bad name: %s, not my_local_var\n", 
124                __FILE__, __LINE__, lv->getName().c_str());
125       return FAILED;
126    }
127
128    std::vector<localVar *> params;
129
130    if (!f->getParams(params))
131    {
132       logerror("[%s:%u] - failed to find params\n", 
133                __FILE__, __LINE__);
134       return FAILED;
135    }
136
137    if (!params.size())
138    {
139       logerror("[%s:%u] - failed to find params\n", 
140                __FILE__, __LINE__);
141       return FAILED;
142    }
143
144    if (params.size() != 1)
145    {
146       logerror("[%s:%u] - wrong number of params: %d, not 1\n", 
147                __FILE__, __LINE__, params.size());
148       return FAILED;
149    }
150
151    localVar *param = params[0];
152
153    if (!param)
154    {
155       logerror("[%s:%u] - NULL param\n", 
156                __FILE__, __LINE__);
157       return FAILED;
158    }
159
160    if (param->getName() != std::string("my_param"))
161    {
162       logerror("[%s:%u] - local vars has bad name: %s, not my_local_var\n", 
163                __FILE__, __LINE__, param->getName().c_str());
164       return FAILED;
165    }
166
167
168    return PASSED;
169 }
170