source: trunk/tests/c/test-nom.c@ 362

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

Added testing of NOMObject base methods

File size: 10.1 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
65/* For unit test */
66#include "nomarray.h"
67#include "nomstring.h"
68#include "nommethod.h"
69#include "nomtestresult.h"
70#include "testnomobject.h"
71
72
73#define ULONG_TESTVALUE_1 0xffeeddcc
74#define ULONG_TESTVALUE_2 0x55aa1122
75#define ULONG_TESTVALUE_BCLASS_1 0x50403020
76#define ULONG_TESTVALUE_BCLASS_2 0xf0e0d0c0
77
78AClass* createAClassObject()
79{
80 AClass* aClass;
81
82 aClass=AClassNew();
83
84 if(nomIsObj(aClass))
85 g_message("AClass creation\t\t\t\tOK\n");
86 else
87 g_message("AClass creation\t\t\t\t\tFAILED\n");
88 return aClass;
89}
90
91AClass* createBClassObject()
92{
93 BClass* bClass;
94
95 bClass=BClassNew();
96
97 if(nomIsObj(bClass))
98 g_message("BClass creation\t\t\t\tOK\n");
99 else
100 g_message("BClass creation\t\t\t\t\tFAILED\n");
101 return bClass;
102}
103
104void tstAClassInstanceVarInitValues(AClass * aObject)
105{
106 gulong ulRC;
107
108 g_message("================================================================");
109 g_message("===== Testing init values of instance variables. Must be 0 =====");
110 g_message("================================================================");
111
112 ulRC=_tstQueryUlongVar1(aObject, NULL);
113 g_message("Calling tstQueryUlongVar1():\t%ld\t\t%s", ulRC, (0!=ulRC ? "FAILED" : "OK"));
114 g_assert(0==ulRC);
115
116 ulRC=_tstQueryUlongVar2(aObject, NULL);
117 g_message("Calling tstQueryUlongVar2():\t%ld\t\t%s\n", ulRC, (0!=ulRC ? "FAILED" : "OK"));
118 g_assert(0==ulRC);
119}
120
121
122void tstBClassInstanceVarInitValues(BClass * aObject)
123{
124 gulong ulRC;
125
126 g_message("================================================================");
127 g_message("===== Testing init values of instance variables. Must be 0 =====");
128 g_message("================================================================");
129
130 ulRC=_tstQueryBClassUlongVar1(aObject, NULL);
131 g_message("Calling tstQueryBClassUlongVar1():\t%ld\t\t%s", ulRC, (0!=ulRC ? "FAILED" : "OK"));
132 g_assert(0==ulRC);
133
134 ulRC=_tstQueryBClassUlongVar2(aObject, NULL);
135 g_message("Calling tstQueryBClassUlongVar2():\t%ld\t\t%s\n", ulRC, (0!=ulRC ? "FAILED" : "OK"));
136 g_assert(0==ulRC);
137}
138
139
140void tstSetAClassInstanceVar(AClass * aObject)
141{
142 gulong ulRC;
143
144 g_message("========================================================");
145 g_message("===== Testing setting of AClass instance variables =====");
146 g_message("========================================================");
147 /* Set 1. value */
148 _tstSetUlongVar1(aObject, ULONG_TESTVALUE_1, NULL);
149 ulRC=_tstQueryUlongVar1(aObject, NULL);
150 g_message("Calling tstQueryUlongVar1():\t0x%lx\t\t%s", ulRC, (ULONG_TESTVALUE_1!=ulRC ? "FAILED" : "OK"));
151 g_assert(ULONG_TESTVALUE_1==ulRC);
152
153 ulRC=_tstQueryUlongVar2(aObject, NULL);
154 g_message("Calling tstQueryUlongVar2():\t0x%lx\t\t\t%s\n", ulRC, (0!=ulRC ? "FAILED" : "OK"));
155 g_assert(0==ulRC);
156
157 /* Set 2. value */
158 _tstSetUlongVar2(aObject, ULONG_TESTVALUE_2, NULL);
159 ulRC=_tstQueryUlongVar1(aObject, NULL);
160 g_message("Calling tstQueryUlongVar1():\t0x%lx\t\t%s", ulRC, (ULONG_TESTVALUE_1!=ulRC ? "FAILED" : "OK"));
161 g_assert(ULONG_TESTVALUE_1==ulRC);
162
163 ulRC=_tstQueryUlongVar2(aObject, NULL);
164 g_message("Calling tstQueryUlongVar2():\t0x%lx\t\t%s\n\n", ulRC, (ULONG_TESTVALUE_2!=ulRC ? "FAILED" : "OK"));
165 g_assert(ULONG_TESTVALUE_2==ulRC);
166}
167
168void tstSetBClassInstanceVar(BClass * aObject)
169{
170 gulong ulRC;
171
172 g_message("========================================================");
173 g_message("===== Testing setting of BClass instance variables =====");
174 g_message("========================================================");
175 /* Set 1. value */
176 _tstSetBClassUlongVar1(aObject, ULONG_TESTVALUE_BCLASS_1, NULL);
177
178 /* AClass */
179 ulRC=_tstQueryUlongVar1(aObject, NULL);
180 g_message("Calling tstQueryUlongVar1():\t0x%lx\t\t%s", ulRC, (ULONG_TESTVALUE_1!=ulRC ? "FAILED" : "OK"));
181 g_assert(ULONG_TESTVALUE_1==ulRC);
182 ulRC=_tstQueryUlongVar2(aObject, NULL);
183 g_message("Calling tstQueryUlongVar2():\t0x%lx\t\t%s", ulRC, (ULONG_TESTVALUE_2!=ulRC ? "FAILED" : "OK"));
184 g_assert(ULONG_TESTVALUE_2==ulRC);
185
186 /* BClass*/
187 ulRC=_tstQueryBClassUlongVar1(aObject, NULL);
188 g_message("Calling tstQueryBClassUlongVar1():\t0x%lx\t\t%s", ulRC, (ULONG_TESTVALUE_BCLASS_1!=ulRC ? "FAILED" : "OK"));
189 g_assert(ULONG_TESTVALUE_BCLASS_1==ulRC);
190
191 ulRC=_tstQueryBClassUlongVar2(aObject, NULL);
192 g_message("Calling tstQueryBClassUlongVar2():\t0x%lx\t\t\t%s\n\n", ulRC, (0!=ulRC ? "FAILED" : "OK"));
193 g_assert(0==ulRC);
194
195
196
197 /* Set 2. value */
198 _tstSetBClassUlongVar2(aObject, ULONG_TESTVALUE_BCLASS_2, NULL);
199
200 /* AClass */
201 ulRC=_tstQueryUlongVar1(aObject, NULL);
202 g_message("Calling tstQueryUlongVar1():\t0x%lx\t\t%s", ulRC, (ULONG_TESTVALUE_1!=ulRC ? "FAILED" : "OK"));
203 g_assert(ULONG_TESTVALUE_1==ulRC);
204 ulRC=_tstQueryUlongVar2(aObject, NULL);
205 g_message("Calling tstQueryUlongVar2():\t0x%lx\t\t%s", ulRC, (ULONG_TESTVALUE_2!=ulRC ? "FAILED" : "OK"));
206 g_assert(ULONG_TESTVALUE_2==ulRC);
207
208 /* BClass*/
209 ulRC=_tstQueryBClassUlongVar1(aObject, NULL);
210 g_message("Calling tstQueryBClassUlongVar1():\t0x%lx\t\t%s", ulRC, (ULONG_TESTVALUE_BCLASS_1!=ulRC ? "FAILED" : "OK"));
211 g_assert(ULONG_TESTVALUE_BCLASS_1==ulRC);
212
213 ulRC=_tstQueryBClassUlongVar2(aObject, NULL);
214 g_message("Calling tstQueryBClassUlongVar2():\t0x%lx\t\t%s\n\n", ulRC, (ULONG_TESTVALUE_BCLASS_2!=ulRC ? "FAILED" : "OK"));
215 g_assert(ULONG_TESTVALUE_BCLASS_2==ulRC);
216
217}
218
219
220static void printTestResults(NOMArray* nArray)
221{
222 int a;
223
224 for(a=0; a < NOMArray_length(nArray, NULL) ; a++)
225 {
226 g_message("Test '%s()': %s", _queryString(NOMTestResult_queryName(NOMArray_queryObjectAtIdx(nArray, a, NULL), NULL), NULL),
227 NOMTestResult_success(NOMArray_queryObjectAtIdx(nArray, a, NULL), NULL) ? "Ok" : "Not ok");
228 }
229}
230
231
232/**
233 Main entry point for the idl compiler.
234 */
235int main(int argc, char **argv)
236{
237 NOMClassMgr *NOMClassMgrObject;
238 HREGDLL hReg=NULL;
239 AClass* aObject;
240 BClass* bObject;
241
242 /* Unit test */
243 NOMArray* nArray;
244 TestNomObject* tstNomObject;
245 int a;
246
247#if 0
248 /* Preload the DLL otherwise it won't be found by the GC registering function */
249 if((rc=DosLoadModule(uchrError, sizeof(uchrError),"nobjtk.dll", &hModuleGC))!=NO_ERROR)
250 {
251 printf("DosLoadmodule for nobjtk.dll failed with rc=0x%x because of module %s.\n", (int)rc, uchrError);
252 return 1;
253 };
254 fprintf(stderr, "DLL handle for nobjtk.dll is: 0x%x\n", (int)hModuleGC);
255#endif
256 nomInitGarbageCollection(NULL);
257
258 /* Register DLLs with the garbage collector */
259 hReg=nomBeginRegisterDLLWithGC();
260 if(NULL==hReg)
261 return 1;
262
263#if 0
264 //g_assert(nomRegisterDLLByName(hReg, "GLIB2.DLL" ));
265 //g_assert(nomRegisterDLLByName(hReg, "GOBJECT2.DLL"));
266 g_assert(nomRegisterDLLByName(hReg, "GMODULE2.DLL"));
267 g_assert(nomRegisterDLLByName(hReg, "GDK2.DLL"));
268 g_assert(nomRegisterDLLByName(hReg, "GDKPIX2.DLL"));
269 g_assert(nomRegisterDLLByName(hReg, "GTK2.DLL" ));
270 g_assert(nomRegisterDLLByName(hReg, "ATK.DLL" ));
271#endif
272 g_assert(nomRegisterDLLByName(hReg, "NOBJTK.DLL"));
273
274 nomEndRegisterDLLWithGC(hReg);
275
276 g_message("NOM test application started.");
277
278 /* Init NOM */
279 NOMClassMgrObject=nomEnvironmentNew();
280
281 g_message("\n");
282 g_message("================================================================");
283 g_message("===== Testing AClass, child of NOMObject =====");
284 g_message("================================================================");
285 /* Try to create an AClass object */
286 aObject=createAClassObject();
287 g_assert(aObject);
288
289 /* -- Call methods on the object --- */
290 tstAClassInstanceVarInitValues(aObject);
291 tstSetAClassInstanceVar(aObject);
292
293 g_message("================================================================");
294 g_message("===== Testing BClass, child of AClass =====");
295 g_message("================================================================");
296 /* Try to create an AClass object */
297 bObject=createBClassObject();
298 g_assert(bObject);
299
300 tstAClassInstanceVarInitValues(bObject);
301 tstBClassInstanceVarInitValues(bObject);
302
303 tstSetAClassInstanceVar(bObject);
304 tstSetBClassInstanceVar(bObject);
305
306 nomPrintf("\n");
307 g_message("Testing NOMObject");
308 tstNomObject=TestNomObjectNew();
309 _setClassMgrObject(tstNomObject, NOMClassMgrObject, NULL);
310 nArray=_runTests(tstNomObject, NULL);
311 printTestResults(nArray);
312
313 return 0;
314};
315
316
317
318
319
320
321
322
Note: See TracBrowser for help on using the repository browser.