source: trunk/tests/c/nom-play.c

Last change on this file was 361, checked in by cinc, 17 years ago

More unit test stuff.

  • Property svn:executable set to *
File size: 10.7 KB
Line 
1/* ***** BEGIN LICENSE BLOCK *****
2* Version: CDDL 1.0/LGPL 2.1
3*
4* The contents of this file are subject to the COMMON DEVELOPMENT AND
5* DISTRIBUTION LICENSE (CDDL) Version 1.0 (the "License"); you may not use
6* this file except in compliance with the License. You may obtain a copy of
7* the License at http://www.sun.com/cddl/
8*
9* Software distributed under the License is distributed on an "AS IS" basis,
10* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
11* for the specific language governing rights and limitations under the
12* License.
13*
14* The Original Code is "NOM" Netlabs Object Model
15*
16* The Initial Developer of the Original Code is
17* netlabs.org: Chris Wohlgemuth <cinc-ml@netlabs.org>.
18* Portions created by the Initial Developer are Copyright (C) 2007
19* the Initial Developer. All Rights Reserved.
20*
21* Contributor(s):
22*
23* Alternatively, the contents of this file may be used under the terms of
24* the GNU Lesser General Public License Version 2.1 (the "LGPL"), in which
25* case the provisions of the LGPL are applicable instead of those above. If
26* you wish to allow use of your version of this file only under the terms of
27* the LGPL, and not to allow others to use your version of this file under
28* the terms of the CDDL, indicate your decision by deleting the provisions
29* above and replace them with the notice and other provisions required by the
30* LGPL. If you do not delete the provisions above, a recipient may use your
31* version of this file under the terms of any one of the CDDL or the LGPL.
32*
33* ***** END LICENSE BLOCK ***** */
34#ifdef __OS2__
35# define INCL_DOSPROCESS
36# define INCL_DOS
37# define INCL_DOSPROFILE
38# define INCL_DOSERRORS
39# include <os2.h>
40#endif /* __OS2__ */
41
42#include <stdio.h>
43#include <stdlib.h>
44#include <string.h>
45
46#ifdef HAVE_IO_H
47# include <io.h>
48#endif
49#ifdef HAVE_UNISTD_H
50# include <unistd.h>
51#endif
52#include <fcntl.h>
53#include <sys/stat.h>
54
55#include <glib.h>
56#include <glib/gprintf.h>
57
58#include "nom.h"
59#include "nomtk.h"
60#include "nomgc.h"
61
62#include "aclass.h"
63#include "bclass.h"
64#include "nomarray.h"
65#include "nomstring.h"
66#include "nommethod.h"
67#include "nomtestresult.h"
68#include "testnomobject.h"
69
70#define ULONG_TESTVALUE_1 0xffeeddcc
71#define ULONG_TESTVALUE_2 0x55aa1122
72#define ULONG_TESTVALUE_BCLASS_1 0x50403020
73#define ULONG_TESTVALUE_BCLASS_2 0xf0e0d0c0
74
75AClass* createAClassObject()
76{
77 AClass* aClass;
78
79 aClass=AClassNew();
80
81 if(nomIsObj(aClass))
82 g_message("AClass creation\t\t\t\tOK\n");
83 else
84 g_message("AClass creation\t\t\t\t\tFAILED\n");
85 return aClass;
86}
87
88AClass* createBClassObject()
89{
90 BClass* bClass;
91
92 bClass=BClassNew();
93
94 if(nomIsObj(bClass))
95 g_message("BClass creation\t\t\t\tOK\n");
96 else
97 g_message("BClass creation\t\t\t\t\tFAILED\n");
98 return bClass;
99}
100
101void tstAClassInstanceVarInitValues(AClass * aObject)
102{
103 gulong ulRC;
104
105 g_message("================================================================");
106 g_message("===== Testing init values of instance variables. Must be 0 =====");
107 g_message("================================================================");
108
109 ulRC=_tstQueryUlongVar1(aObject, NULL);
110 g_message("Calling tstQueryUlongVar1():\t%ld\t\t%s", ulRC, (0!=ulRC ? "FAILED" : "OK"));
111 g_assert(0==ulRC);
112
113 ulRC=_tstQueryUlongVar2(aObject, NULL);
114 g_message("Calling tstQueryUlongVar2():\t%ld\t\t%s\n", ulRC, (0!=ulRC ? "FAILED" : "OK"));
115 g_assert(0==ulRC);
116}
117
118
119void tstBClassInstanceVarInitValues(BClass * aObject)
120{
121 gulong ulRC;
122
123 g_message("================================================================");
124 g_message("===== Testing init values of instance variables. Must be 0 =====");
125 g_message("================================================================");
126
127 ulRC=_tstQueryBClassUlongVar1(aObject, NULL);
128 g_message("Calling tstQueryBClassUlongVar1():\t%ld\t\t%s", ulRC, (0!=ulRC ? "FAILED" : "OK"));
129 g_assert(0==ulRC);
130
131 ulRC=_tstQueryBClassUlongVar2(aObject, NULL);
132 g_message("Calling tstQueryBClassUlongVar2():\t%ld\t\t%s\n", ulRC, (0!=ulRC ? "FAILED" : "OK"));
133 g_assert(0==ulRC);
134}
135
136
137void tstSetAClassInstanceVar(AClass * aObject)
138{
139 gulong ulRC;
140
141 g_message("========================================================");
142 g_message("===== Testing setting of AClass instance variables =====");
143 g_message("========================================================");
144 /* Set 1. value */
145 _tstSetUlongVar1(aObject, ULONG_TESTVALUE_1, NULL);
146 ulRC=_tstQueryUlongVar1(aObject, NULL);
147 g_message("Calling tstQueryUlongVar1():\t0x%lx\t\t%s", ulRC, (ULONG_TESTVALUE_1!=ulRC ? "FAILED" : "OK"));
148 g_assert(ULONG_TESTVALUE_1==ulRC);
149
150 ulRC=_tstQueryUlongVar2(aObject, NULL);
151 g_message("Calling tstQueryUlongVar2():\t0x%lx\t\t\t%s\n", ulRC, (0!=ulRC ? "FAILED" : "OK"));
152 g_assert(0==ulRC);
153
154 /* Set 2. value */
155 _tstSetUlongVar2(aObject, ULONG_TESTVALUE_2, NULL);
156 ulRC=_tstQueryUlongVar1(aObject, NULL);
157 g_message("Calling tstQueryUlongVar1():\t0x%lx\t\t%s", ulRC, (ULONG_TESTVALUE_1!=ulRC ? "FAILED" : "OK"));
158 g_assert(ULONG_TESTVALUE_1==ulRC);
159
160 ulRC=_tstQueryUlongVar2(aObject, NULL);
161 g_message("Calling tstQueryUlongVar2():\t0x%lx\t\t%s\n\n", ulRC, (ULONG_TESTVALUE_2!=ulRC ? "FAILED" : "OK"));
162 g_assert(ULONG_TESTVALUE_2==ulRC);
163}
164
165void tstSetBClassInstanceVar(BClass * aObject)
166{
167 gulong ulRC;
168
169 g_message("========================================================");
170 g_message("===== Testing setting of BClass instance variables =====");
171 g_message("========================================================");
172 /* Set 1. value */
173 _tstSetBClassUlongVar1(aObject, ULONG_TESTVALUE_BCLASS_1, NULL);
174
175 /* AClass */
176 ulRC=_tstQueryUlongVar1(aObject, NULL);
177 g_message("Calling tstQueryUlongVar1():\t0x%lx\t\t%s", ulRC, (ULONG_TESTVALUE_1!=ulRC ? "FAILED" : "OK"));
178 g_assert(ULONG_TESTVALUE_1==ulRC);
179 ulRC=_tstQueryUlongVar2(aObject, NULL);
180 g_message("Calling tstQueryUlongVar2():\t0x%lx\t\t%s", ulRC, (ULONG_TESTVALUE_2!=ulRC ? "FAILED" : "OK"));
181 g_assert(ULONG_TESTVALUE_2==ulRC);
182
183 /* BClass*/
184 ulRC=_tstQueryBClassUlongVar1(aObject, NULL);
185 g_message("Calling tstQueryBClassUlongVar1():\t0x%lx\t\t%s", ulRC, (ULONG_TESTVALUE_BCLASS_1!=ulRC ? "FAILED" : "OK"));
186 g_assert(ULONG_TESTVALUE_BCLASS_1==ulRC);
187
188 ulRC=_tstQueryBClassUlongVar2(aObject, NULL);
189 g_message("Calling tstQueryBClassUlongVar2():\t0x%lx\t\t\t%s\n\n", ulRC, (0!=ulRC ? "FAILED" : "OK"));
190 g_assert(0==ulRC);
191
192
193
194 /* Set 2. value */
195 _tstSetBClassUlongVar2(aObject, ULONG_TESTVALUE_BCLASS_2, NULL);
196
197 /* AClass */
198 ulRC=_tstQueryUlongVar1(aObject, NULL);
199 g_message("Calling tstQueryUlongVar1():\t0x%lx\t\t%s", ulRC, (ULONG_TESTVALUE_1!=ulRC ? "FAILED" : "OK"));
200 g_assert(ULONG_TESTVALUE_1==ulRC);
201 ulRC=_tstQueryUlongVar2(aObject, NULL);
202 g_message("Calling tstQueryUlongVar2():\t0x%lx\t\t%s", ulRC, (ULONG_TESTVALUE_2!=ulRC ? "FAILED" : "OK"));
203 g_assert(ULONG_TESTVALUE_2==ulRC);
204
205 /* BClass*/
206 ulRC=_tstQueryBClassUlongVar1(aObject, NULL);
207 g_message("Calling tstQueryBClassUlongVar1():\t0x%lx\t\t%s", ulRC, (ULONG_TESTVALUE_BCLASS_1!=ulRC ? "FAILED" : "OK"));
208 g_assert(ULONG_TESTVALUE_BCLASS_1==ulRC);
209
210 ulRC=_tstQueryBClassUlongVar2(aObject, NULL);
211 g_message("Calling tstQueryBClassUlongVar2():\t0x%lx\t\t%s\n\n", ulRC, (ULONG_TESTVALUE_BCLASS_2!=ulRC ? "FAILED" : "OK"));
212 g_assert(ULONG_TESTVALUE_BCLASS_2==ulRC);
213
214}
215
216
217void printTestResults(NOMArray* nArray)
218{
219 int a;
220
221 for(a=0; a < NOMArray_length(nArray, NULL) ; a++)
222 {
223 g_message("Test '%s()': %s", _queryString(NOMTestResult_queryName(NOMArray_queryObjectAtIdx(nArray, a, NULL), NULL), NULL),
224 NOMTestResult_success(NOMArray_queryObjectAtIdx(nArray, a, NULL), NULL) ? "Ok" : "Not ok");
225 }
226}
227
228/**
229 Main entry point for the idl compiler.
230 */
231int main(int argc, char **argv)
232{
233 NOMClassMgr *NOMClassMgrObject;
234 HREGDLL hReg=NULL;
235 AClass* aObject;
236 BClass* bObject;
237 NOMArray* nArray;
238 TestNomObject* tstNomObject;
239 int a;
240
241#if 0
242 /* Preload the DLL otherwise it won't be found by the GC registering function */
243 if((rc=DosLoadModule(uchrError, sizeof(uchrError),"nobjtk.dll", &hModuleGC))!=NO_ERROR)
244 {
245 printf("DosLoadmodule for nobjtk.dll failed with rc=0x%x because of module %s.\n", (int)rc, uchrError);
246 return 1;
247 };
248 fprintf(stderr, "DLL handle for nobjtk.dll is: 0x%x\n", (int)hModuleGC);
249#endif
250 nomInitGarbageCollection(NULL);
251
252 /* Register DLLs with the garbage collector */
253 hReg=nomBeginRegisterDLLWithGC();
254 if(NULL==hReg)
255 return 1;
256
257#if 0
258 //g_assert(nomRegisterDLLByName(hReg, "GLIB2.DLL" ));
259 //g_assert(nomRegisterDLLByName(hReg, "GOBJECT2.DLL"));
260 g_assert(nomRegisterDLLByName(hReg, "GMODULE2.DLL"));
261 g_assert(nomRegisterDLLByName(hReg, "GDK2.DLL"));
262 g_assert(nomRegisterDLLByName(hReg, "GDKPIX2.DLL"));
263 g_assert(nomRegisterDLLByName(hReg, "GTK2.DLL" ));
264 g_assert(nomRegisterDLLByName(hReg, "ATK.DLL" ));
265#endif
266 g_assert(nomRegisterDLLByName(hReg, "NOBJTK.DLL"));
267
268 nomEndRegisterDLLWithGC(hReg);
269
270 g_message("NOM test application started.");
271
272 /* Init NOM */
273 NOMClassMgrObject=nomEnvironmentNew();
274
275 nomPrintf("\n");
276 g_message("Testing NOMObject");
277 tstNomObject=TestNomObjectNew();
278 _setClassMgrObject(tstNomObject, NOMClassMgrObject, NULL);
279 nArray=_runTests(tstNomObject, NULL);
280 printTestResults(nArray);
281 exit(0);
282
283 g_message("\n");
284 g_message("================================================================");
285 g_message("===== Testing AClass, child of NOMObject =====");
286 g_message("================================================================");
287 /* Try to create an AClass object */
288 aObject=createAClassObject();
289 g_assert(aObject);
290
291 nArray=_nomGetMethodList(aObject, FALSE, NULL);
292 g_message("Num methods: %d", NOMArray_length(nArray, NULL));
293
294 for(a=0; a < NOMArray_length(nArray, NULL) ; a++)
295 {
296 typedef void* NOMLINK nomProc(void*, void*);
297
298 nomProc* nProc=_queryMethodToken(NOMArray_queryObjectAtIdx(nArray, a, NULL), NULL);
299
300 g_message(" Method %s %x", _queryString(_getName(NOMArray_queryObjectAtIdx(nArray, a, NULL), NULL), NULL),
301 _queryMethodToken(NOMArray_queryObjectAtIdx(nArray, a, NULL), NULL));
302 if(a==0)
303 nProc(aObject, NULL);
304 }
305
306 exit(1);
307
308 /* -- Call methods on the object --- */
309 tstAClassInstanceVarInitValues(aObject);
310 tstSetAClassInstanceVar(aObject);
311
312 g_message("================================================================");
313 g_message("===== Testing BClass, child of AClass =====");
314 g_message("================================================================");
315 /* Try to create an AClass object */
316 bObject=createBClassObject();
317 g_assert(bObject);
318
319 tstAClassInstanceVarInitValues(bObject);
320 tstBClassInstanceVarInitValues(bObject);
321
322 tstSetAClassInstanceVar(bObject);
323 tstSetBClassInstanceVar(bObject);
324
325 return 0;
326};
327
328
329
330
331
332
333
334
Note: See TracBrowser for help on using the repository browser.