Rename newtestsuite to testsuite
[dyninst.git] / testsuite / src / symtab / test_lookup_func.C
1 /*
2  * Copyright (c) 1996-2008 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  * This license is for research uses.  For such uses, there is no
12  * charge. We define "research use" to mean you may freely use it
13  * inside your organization for whatever purposes you see fit. But you
14  * may not re-distribute Paradyn or parts of Paradyn, in any form
15  * source or binary (including derivatives), electronic or otherwise,
16  * to any other organization or entity without our permission.
17  * 
18  * (for other uses, please contact us at paradyn@cs.wisc.edu)
19  * 
20  * All warranties, including without limitation, any warranty of
21  * merchantability or fitness for a particular purpose, are hereby
22  * excluded.
23  * 
24  * By your use of Paradyn, you understand and agree that we (or any
25  * other person or entity with proprietary rights in Paradyn) are
26  * under no obligation to provide either maintenance services,
27  * update services, notices of latent defects, or correction of
28  * defects for Paradyn.
29  * 
30  * Even if advised of the possibility of such damages, under no
31  * circumstances shall we (or any other person or entity with
32  * proprietary rights in the software licensed hereunder) be liable
33  * to you or any third party for direct, indirect, or consequential
34  * damages of any character regardless of type of action, including,
35  * without limitation, loss of profits, loss of use, loss of good
36  * will, or computer failure or malfunction.  You agree to indemnify
37  * us (and any other person or entity with proprietary rights in the
38  * software licensed hereunder) for any and all liability it may
39  * incur to third parties resulting from your use of Paradyn.
40  */
41
42 #include "symtab_comp.h"
43 #include "test_lib.h"
44
45 #include "Symtab.h"
46 #include "Symbol.h"
47 #include "Function.h"
48 #include "Variable.h"
49
50 using namespace Dyninst;
51 using namespace SymtabAPI;
52
53 class test_lookup_func_Mutator : public SymtabMutator {
54 public:
55    test_lookup_func_Mutator() { };
56    virtual test_results_t executeTest();
57 };
58
59 extern "C" DLLEXPORT TestMutator* test_lookup_func_factory()
60 {
61    return new test_lookup_func_Mutator();
62 }
63
64 test_results_t test_lookup_func_Mutator::executeTest()
65 {
66    std::vector<Function *> funcs;
67    bool result = symtab->findFunctionsByName(funcs, std::string("lookup_func"));
68
69    if (!result || !funcs.size() )
70    {
71       logerror("[%s:%u] - Unable to find test_lookup_func\n", 
72                __FILE__, __LINE__);
73       return FAILED;
74    }
75
76    if (funcs.size() != 1)
77    {
78       logerror("[%s:%u] - Too many functions found??: %d\n", 
79                __FILE__, __LINE__, funcs.size());
80       return FAILED;
81    }
82
83    Function *f  = funcs[0];
84
85    if (!f)
86    {
87       logerror("[%s:%u] - NULL function returned\n", 
88                __FILE__, __LINE__);
89       return FAILED;
90    }
91
92    if (0 == f->getOffset())
93    {
94       logerror("[%s:%u] - function with zero offsetn", 
95                __FILE__, __LINE__);
96       return FAILED;
97    }
98
99    std::vector<localVar *> lvars;
100
101    if (!f->getLocalVariables(lvars))
102    {
103       logerror("[%s:%u] - failed to find local vars\n", 
104                __FILE__, __LINE__);
105       return FAILED;
106    }
107
108    if (!lvars.size())
109    {
110       logerror("[%s:%u] - failed to find local vars\n", 
111                __FILE__, __LINE__);
112       return FAILED;
113    }
114
115    if (lvars.size() != 1)
116    {
117       logerror("[%s:%u] - wrong number oflocal vars: %d, not 1\n", 
118                __FILE__, __LINE__, lvars.size());
119       return FAILED;
120    }
121
122    localVar *lv = lvars[0];
123
124    if (!lv)
125    {
126       logerror("[%s:%u] - NULL local var\n", 
127                __FILE__, __LINE__);
128       return FAILED;
129    }
130
131    if (lv->getName() != std::string("my_local_var"))
132    {
133       logerror("[%s:%u] - local vars has bad name: %s, not my_local_var\n", 
134                __FILE__, __LINE__, lv->getName().c_str());
135       return FAILED;
136    }
137
138    std::vector<localVar *> params;
139
140    if (!f->getParams(params))
141    {
142       logerror("[%s:%u] - failed to find params\n", 
143                __FILE__, __LINE__);
144       return FAILED;
145    }
146
147    if (!params.size())
148    {
149       logerror("[%s:%u] - failed to find params\n", 
150                __FILE__, __LINE__);
151       return FAILED;
152    }
153
154    if (params.size() != 1)
155    {
156       logerror("[%s:%u] - wrong number of params: %d, not 1\n", 
157                __FILE__, __LINE__, params.size());
158       return FAILED;
159    }
160
161    localVar *param = params[0];
162
163    if (!param)
164    {
165       logerror("[%s:%u] - NULL param\n", 
166                __FILE__, __LINE__);
167       return FAILED;
168    }
169
170    if (param->getName() != std::string("my_param"))
171    {
172       logerror("[%s:%u] - local vars has bad name: %s, not my_local_var\n", 
173                __FILE__, __LINE__, param->getName().c_str());
174       return FAILED;
175    }
176
177    return PASSED;
178 }
179