/[ascend]/trunk/ascend/general/test/test_ospath.c
ViewVC logotype

Annotation of /trunk/ascend/general/test/test_ospath.c

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2335 - (hide annotations) (download) (as text)
Sun Dec 26 03:24:37 2010 UTC (9 years, 10 months ago) by jpye
File MIME type: text/x-csrc
File size: 14295 byte(s)
Fixed bug with ospath_isroot.
1 johnpye 607 /* ASCEND modelling environment
2     Copyright (C) 2006 Carnegie Mellon University
3    
4     This program is free software; you can redistribute it and/or modify
5     it under the terms of the GNU General Public License as published by
6     the Free Software Foundation; either version 2, or (at your option)
7     any later version.
8    
9     This program is distributed in the hope that it will be useful,
10     but WITHOUT ANY WARRANTY; without even the implied warranty of
11     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12     GNU General Public License for more details.
13    
14     You should have received a copy of the GNU General Public License
15     along with this program; if not, write to the Free Software
16     Foundation, Inc., 59 Temple Place - Suite 330,
17     Boston, MA 02111-1307, USA.
18     *//**
19     @file
20     CUnit tests for the ospath.c module.
21 jpye 2335 by John Pye.
22 johnpye 607 */
23    
24 jpye 2018 #include <ascend/general/ospath.h>
25 johnpye 607 #include <CUnit/CUnit.h>
26    
27     FilePathTestFn ospath_searchpath_testexists;
28    
29 johnpye 998 #define NDEBUG
30    
31 johnpye 607 #ifndef NDEBUG
32     # include <assert.h>
33     # define M(MSG) fprintf(stderr,"%s:%d: (%s) %s\n",__FILE__,__LINE__,__FUNCTION__,MSG);fflush(stderr);fflush(stderr)
34     # define MC(CLR,MSG) fprintf(stderr,"%c[%sm%s:%d: (%s) %s%c[0m\n",27,CLR,__FILE__,__LINE__,__FUNCTION__,MSG,27);fflush(stderr)
35     # define MM(MSG) MC("34",MSG)
36     # define X(VAR) fprintf(stderr,"%s:%d: (%s) %s=%s\n",__FILE__,__LINE__,__FUNCTION__,#VAR,VAR);fflush(stderr)
37     # define C(VAR) fprintf(stderr,"%s:%d: (%s) %s=%c\n",__FILE__,__LINE__,__FUNCTION__,#VAR,VAR);fflush(stderr)
38     # define V(VAR) fprintf(stderr,"%s:%d: (%s) %s=%d\n",__FILE__,__LINE__,__FUNCTION__,#VAR,(VAR));fflush(stderr)
39     # define D(VAR) fprintf(stderr,"%s:%d: (%s) %s=",__FILE__,__LINE__,__FUNCTION__,#VAR);ospath_debug(VAR);fflush(stderr)
40     # define DD(VAR) fprintf(stderr,"\033[34;1m%s:%d: (%s)\033[0m %s=",__FILE__, __LINE__,__FUNCTION__, #VAR);ospath_debug(VAR);fflush(stderr)
41     #else
42     # include <assert.h>
43     # define M(MSG) ((void)0)
44     # define MC(CLR,MSG) ((void)0)
45     # define X(VAR) ((void)0)
46     # define C(VAR) ((void)0)
47     # define V(VAR) ((void)0)
48     # define D(VAR) ((void)0)
49     # define DD(VAR) ((void)0)
50     # define MM(VAR) ((void)0)
51     #endif
52    
53 johnpye 998 #ifndef MEMUSED
54     # define MEMUSED(N) CU_TEST(ascmeminuse()==(N))
55     #endif
56    
57 johnpye 607 /**
58 johnpye 998 This is a sample searchpath test function. Assumes the 'userdata' is a
59 johnpye 607 relative FilePath which is appended to path, and then if it matches
60     the path \GTK\bin\johnpye\extfn, returns true. This is of
61     course a fairly useless test function, so it's just for testing.
62     */
63     int ospath_searchpath_testexists(struct FilePath *path,void *file){
64     struct FilePath *fp, *fp1, *fp2;
65     fp = (struct FilePath *)file;
66     D(fp);
67     fp1 = ospath_concat(path,fp);
68     D(fp1);
69    
70     #ifdef WINPATHS
71     fp2 = ospath_new("c:\\GTK\\bin\\johnpye\\extfn");
72     #else
73     fp2 = ospath_new("/GTK/bin/johnpye/extfn");
74     #endif
75    
76     char *t=ospath_str(fp1);
77     MC("1",t);
78     FREE(t);
79    
80     t=ospath_str(fp2);
81     MC("31;1",t);
82     FREE(t);
83    
84     if(ospath_cmp(fp1,fp2)==0){
85     MC("32","MATCH");
86 johnpye 998 ospath_free(fp1);
87     ospath_free(fp2);
88 johnpye 607 return 1;
89     }
90     MC("31","NO MATCH");
91 johnpye 998 ospath_free(fp1);
92     ospath_free(fp2);
93 johnpye 607 return 0;
94     }
95    
96    
97     // switch to boldface for messages in 'main'
98     #undef D
99     #define D DD
100     #undef M
101     #define M MM
102    
103 johnpye 998 static void test_ospath_getparent(void){
104     struct FilePath *fp1, *fp2, *fp3;
105 johnpye 607
106     //------------------------
107    
108     fp1 = ospath_new_from_posix("/usr/local/hello/");
109     fp2 = ospath_getparent(fp1);
110     fp3 = ospath_new_from_posix("/usr/local");
111    
112     D(fp1);
113     D(fp2);
114     D(fp3);
115     CU_TEST(ospath_cmp(fp2,fp3)==0);
116 jpye 2335 if(ospath_cmp(fp2,fp3)==0)M("Passed 'getparent' test\n");
117 johnpye 607
118     ospath_free(fp1); ospath_free(fp2); ospath_free(fp3);
119    
120 johnpye 998 MEMUSED(0);
121     }
122 johnpye 607 //------------------------
123    
124 johnpye 998 static void test_ospath_cleanup(void){
125     struct FilePath *fp1, *fp2;
126    
127     fp1 = ospath_new_from_posix("/usr/include/../local");
128     fp2 = ospath_new_from_posix("/usr/local");
129    
130     D(fp1);
131     D(fp2);
132     CU_TEST(ospath_cmp(fp1,fp2)==0);
133     M("Passed 'cleanup' test\n");
134    
135     ospath_free(fp1); ospath_free(fp2);
136     MEMUSED(0);
137     }
138     //------------------------
139    
140     static void test_ospath_newfromposix(void){
141    
142     struct FilePath *fp1, *fp2;
143    
144 johnpye 607 fp1 = ospath_new_from_posix("models/johnpye/extfn/extfntest");
145     D(fp1);
146     fp2 = ospath_new("models\\johnpye\\extfn\\extfntest");
147     D(fp2);
148     D(fp1);
149     CU_TEST(ospath_cmp(fp1,fp2)==0);
150     M("Passed 'new_from_posix' test\n");
151    
152     ospath_free(fp1);
153     ospath_free(fp2);
154 johnpye 998 MEMUSED(0);
155     }
156     //------------------------
157 johnpye 607
158 johnpye 998 static void test_ospath_secondcleanup(void){
159     struct FilePath *fp1, *fp2, *fp3;
160 johnpye 607 fp1 = ospath_new(".\\src/.\\images\\..\\\\movies\\");
161     fp2 = ospath_new(".\\src\\movies");
162    
163     D(fp1);
164     D(fp2);
165    
166     CU_TEST(ospath_cmp(fp1,fp2)==0);
167     M("Passed mid-path '..' cleanup test\n");
168    
169     ospath_free(fp2);
170    
171     fp2 = ospath_new("./src/movies\\kubrick");
172     fp3 = ospath_getparent(fp2);
173    
174     D(fp2);
175     D(fp3);
176    
177     CU_TEST(ospath_cmp(fp1,fp3)==0);
178     M("Passed 'second cleanup' test\n");
179    
180 johnpye 998 ospath_free(fp1);
181     ospath_free(fp2);
182     ospath_free(fp3);
183     MEMUSED(0);
184     }
185 johnpye 607 //------------------------
186    
187 johnpye 998 static void test_ospath_append(void){
188    
189     struct FilePath *fp2, *fp3, *fp4;
190    
191 johnpye 607 fp2 = ospath_new("\\home\\john");
192     fp3 = ospath_new("where\\mojo");
193    
194     D(fp2);
195     D(fp3);
196    
197     ospath_append(fp2,fp3);
198    
199     D(fp2);
200    
201     fp4 = ospath_new("\\home\\john\\where\\mojo\\");
202    
203     D(fp2);
204     CU_TEST(ospath_cmp(fp2,fp4)==0);
205     M("Passed 'append' test\n");
206    
207     ospath_free(fp3);
208     ospath_free(fp2);
209 johnpye 998 ospath_free(fp4);
210     MEMUSED(0);
211     }
212 johnpye 607 //---------------------------
213    
214 johnpye 998 static void test_ospath_appendupup(void){
215    
216     struct FilePath *fp2, *fp3, *fp4;
217    
218 johnpye 607 fp3 = ospath_new_noclean("../..");
219     D(fp3);
220    
221     // test with appending ../.. to an existing path
222     fp2 = ospath_new("\\home\\john");
223     M("ORIGINAL PATH");
224     D(fp2);
225     ospath_append(fp2,fp3);
226     M("AFTER APPENDING ../..");
227     D(fp2);
228    
229     M("GETTING ROOT");
230     fp4 = ospath_root(fp2);
231     M("ROOT FOUND:");
232     D(fp4);
233    
234     CU_TEST(ospath_cmp(fp2,fp4)==0);
235     M("Passed 'append ../..' test\n");
236    
237     ospath_free(fp2);
238     ospath_free(fp3);
239     ospath_free(fp4);
240 johnpye 998 MEMUSED(0);
241     }
242 johnpye 607 //-------------------------
243    
244 johnpye 998 static void test_ospath_up(void){
245    
246     struct FilePath *fp1, *fp2;
247    
248 johnpye 607 fp1 = ospath_new("~\\somewhere\\..");
249     fp2 = ospath_new("~/.");
250    
251     CU_TEST(ospath_cmp(fp1,fp2)==0);
252    
253     D(fp2);
254    
255     ospath_free(fp1);
256     ospath_free(fp2);
257    
258     fp1 = ospath_new("/usr/local/include");
259     fp2 = ospath_new("/usr/include/../local/include");
260    
261     D(fp1);
262     D(fp2);
263    
264     CU_TEST(ospath_cmp(fp1,fp2)==0);
265     M("Passed another mid-path '..' test\n");
266    
267     ospath_free(fp1);
268     ospath_free(fp2);
269 johnpye 998 MEMUSED(0);
270     }
271 johnpye 607 //---------------------------
272    
273 johnpye 998 static void test_ospath_concat(void){
274    
275     struct FilePath *fp1, *fp2, *fp3, *fp4;
276    
277 johnpye 607 fp1 = ospath_new("/home");
278     fp2 = ospath_new("john");
279     fp3 = ospath_concat(fp1, fp2);
280    
281     fp4 = ospath_new("/home/john");
282    
283     CU_TEST(ospath_cmp(fp3,fp4)==0);
284     M("Passed 'ospath_concat' test\n");
285    
286     ospath_free(fp1); ospath_free(fp2); ospath_free(fp3); ospath_free(fp4);
287    
288     fp1 = ospath_new("c:/Program Files");
289     fp2 = ospath_new("GnuWin32\\bin");
290     fp3 = ospath_concat(fp1, fp2);
291    
292     fp4 = ospath_new("c:/Program Files/GnuWin32/bin");
293    
294     CU_TEST(ospath_cmp(fp3,fp4)==0);
295     M("Passed 'ospath_concat' test\n");
296    
297     ospath_free(fp1); ospath_free(fp2); ospath_free(fp3); ospath_free(fp4);
298 johnpye 998 MEMUSED(0);
299     }
300 johnpye 607 //---------------------------
301    
302 johnpye 998 static void test_ospath_concatmixedslash(void){
303    
304     struct FilePath *fp1, *fp2, *fp3, *fp4;
305    
306 johnpye 607 fp1 = ospath_new("c:/Program Files/");
307     fp2 = ospath_new("GnuWin32\\bin");
308     fp3 = ospath_concat(fp1, fp2);
309    
310     fp4 = ospath_new("c:/Program Files/GnuWin32/bin");
311    
312     CU_TEST(ospath_cmp(fp3,fp4)==0);
313     M("Passed trailing-slash 'ospath_concat' test\n");
314    
315     ospath_free(fp1); ospath_free(fp2); ospath_free(fp3); ospath_free(fp4);
316 johnpye 998 MEMUSED(0);
317     }
318 johnpye 607 //---------------------------
319    
320 johnpye 998 static void test_ospath_trailingslash(void){
321    
322     struct FilePath *fp1, *fp2, *fp3, *fp4;
323    
324 johnpye 607 fp1 = ospath_new("c:/Program Files/GnuWin32/bin");
325     fp2 = ospath_new("johnpye/extfn");
326     fp3 = ospath_concat(fp1, fp2);
327    
328     fp4 = ospath_new("c:/Program Files/GnuWin32/bin/johnpye/extfn");
329    
330     CU_TEST(ospath_cmp(fp3,fp4)==0);
331     M("Passed trailing-slash 'ospath_concat' test\n");
332    
333     ospath_free(fp1); ospath_free(fp2); ospath_free(fp3); ospath_free(fp4);
334 johnpye 998 MEMUSED(0);
335     }
336 johnpye 607 //---------------------------
337    
338 johnpye 998 static void test_ospath_searchpath(void){
339    
340     struct FilePath *fp1, *fp2, *fp3;
341     struct FilePath **pp, **p1;// will be returned null-terminated
342     #ifdef WINPATHS
343     char pathtext[]="c:\\Program Files\\GnuWin32\\bin;c:\\GTK\\bin;e:\\ascend\\;..\\..\\pygtk";
344     #else
345     char pathtext[]="\\Program Files\\GnuWin32\\bin:\\GTK\\bin:\\ascend\\:..\\..\\pygtk";
346     #endif
347    
348 johnpye 607 pp = ospath_searchpath_new(pathtext);
349    
350     for(p1=pp; *p1!=NULL; ++p1){
351     D(*p1);
352     }
353    
354     #ifdef WINPATHS
355     fp1 = ospath_new("c:\\program files\\GnuWin32\\bin");
356     #else
357     fp1 = ospath_new("\\Program Files\\GnuWin32\\bin");
358     #endif
359    
360     CU_TEST(pp[0]!=NULL);
361     CU_TEST(fp1!=NULL);
362    
363     D(fp1);
364     D(pp[0]);
365    
366     CU_TEST(ospath_cmp(pp[0],fp1)==0);
367    
368    
369     fp2 = ospath_new_noclean("johnpye/extfn");
370     D(fp2);
371    
372     fflush(stderr);
373    
374     fp3 = ospath_searchpath_iterate(pp,&ospath_searchpath_testexists,(void*)fp2);
375    
376     CU_TEST(fp3!=NULL);
377     D(fp3);
378     D(pp[1]);
379    
380     CU_TEST(ospath_cmp(fp3,pp[1])==0);
381     M("Passed path-search test\n");
382    
383     ospath_free(fp1);
384     ospath_free(fp2);
385     ospath_searchpath_free(pp);
386 johnpye 998 MEMUSED(0);
387     }
388 johnpye 607 //-------------------------------
389    
390 johnpye 998 static void test_ospath_searchpath2(void){
391    
392     struct FilePath *fp2, *fp3;
393     struct FilePath **pp, **p1;// will be returned null-terminated
394     #ifdef WINPATHS
395     char pathtext2[]="c:\\Program Files\\ASCEND\\models";
396     #else
397     char pathtext2[]="/usr/local/ascend/models";
398     #endif
399    
400 johnpye 607 M("Path-search test 2...");
401    
402     pp = ospath_searchpath_new(pathtext2);
403    
404     CU_TEST(pp!=NULL);
405    
406     for (p1=pp; *p1!=NULL; ++p1){
407     D(*p1);
408     }
409    
410     fp2 = ospath_new_noclean("johnpye/extfn/extfntest");
411     D(fp2);
412    
413     fp3 = ospath_searchpath_iterate(pp,&ospath_searchpath_testexists,(void*)fp2);
414     CU_TEST(fp3==NULL);
415    
416     M("Passed path-search test 2\n");
417    
418     ospath_free(fp2);
419     ospath_free(fp3);
420     ospath_searchpath_free(pp);
421 johnpye 998 MEMUSED(0);
422     }
423 johnpye 607 //-------------------------------
424    
425 johnpye 998 static void test_ospath_basefilename(void){
426    
427     struct FilePath *fp1;
428     char *s1;
429    
430 johnpye 607 fp1 = ospath_new("/usr/share/data/ascend/models/johnpye/extfn/extfntest.a4c");
431     D(fp1);
432     s1 = ospath_getbasefilename(fp1);
433     X(s1);
434     CU_TEST(strcmp(s1,"extfntest.a4c")==0);
435     M("Passed getbasefilename test\n");
436    
437     ospath_free(fp1);
438     FREE(s1);
439    
440     fp1 = ospath_new("extfntest.a4c");
441     D(fp1);
442     s1 = ospath_getbasefilename(fp1);
443     X(s1);
444     CU_TEST(strcmp(s1,"extfntest.a4c")==0);
445     M("Passed getbasefilename test 2\n");
446    
447     ospath_free(fp1);
448     FREE(s1);
449    
450     fp1 = ospath_new("/here/is/my/path.dir/");
451     D(fp1);
452     s1 = ospath_getbasefilename(fp1);
453     X(s1);
454     CU_TEST(NULL==s1);
455     M("Passed getbasefilename test 3\n");
456    
457     ospath_free(fp1);
458 johnpye 939 if(s1)FREE(s1);
459 johnpye 607
460     #ifdef WINPATHS
461     fp1 = ospath_new("c:extfntest.a4c");
462     D(fp1);
463     s1 = ospath_getbasefilename(fp1);
464     X(s1);
465     CU_TEST(strcmp(s1,"extfntest.a4c")==0);
466     M("Passed getbasefilename test WINPATHS\n");
467    
468     ospath_free(fp1);
469     FREE(s1);
470     #endif
471 johnpye 998 MEMUSED(0);
472     }
473 johnpye 607 //-------------------------------
474    
475 johnpye 998 static void test_ospath_getfilestem(void){
476    
477     struct FilePath *fp1;
478     char *s1;
479    
480 johnpye 607 fp1 = ospath_new("/usr/share/data/ascend/models/johnpye/extfn/extfntest.a4c");
481     D(fp1);
482     s1 = ospath_getfilestem(fp1);
483     X(s1);
484     CU_TEST(strcmp(s1,"extfntest")==0);
485     M("Passed getfilestem test\n");
486    
487     ospath_free(fp1);
488     FREE(s1);
489    
490     fp1 = ospath_new("/usr/share/data/ascend/models/johnpye/extfn/extfntest");
491     D(fp1);
492     s1 = ospath_getfilestem(fp1);
493     X(s1);
494     CU_TEST(strcmp(s1,"extfntest")==0);
495     M("Passed getfilestem test 2\n");
496    
497     ospath_free(fp1);
498     FREE(s1);
499    
500     fp1 = ospath_new("/usr/share/data/ascend/.ascend.ini");
501     D(fp1);
502     s1 = ospath_getfilestem(fp1);
503     X(s1);
504     CU_TEST(strcmp(s1,".ascend")==0);
505     M("Passed getfilestem test 3\n");
506    
507     ospath_free(fp1);
508     FREE(s1);
509    
510     fp1 = ospath_new("~/.vimrc");
511     D(fp1);
512     s1 = ospath_getfilestem(fp1);
513     X(s1);
514     CU_TEST(strcmp(s1,".vimrc")==0);
515     M("Passed getfilestem test 3\n");
516    
517     ospath_free(fp1);
518     FREE(s1);
519    
520     fp1 = ospath_new("~/src/ascend-0.9.5-1.jdpipe.src.rpm");
521     D(fp1);
522     s1 = ospath_getfilestem(fp1);
523     X(s1);
524     CU_TEST(strcmp(s1,"ascend-0.9.5-1.jdpipe.src")==0);
525     M("Passed getfilestem test 4\n");
526    
527     ospath_free(fp1);
528     FREE(s1);
529    
530     fp1 = ospath_new("~/dir1/dir2/");
531     D(fp1);
532     s1 = ospath_getfilestem(fp1);
533     X(s1);
534     CU_TEST(NULL==s1);
535     M("Passed getfilestem test 5\n");
536    
537     ospath_free(fp1);
538 johnpye 939 if(s1)FREE(s1);
539 johnpye 998 MEMUSED(0);
540     }
541 johnpye 607 //-------------------------------
542    
543 johnpye 998 static void test_ospath_getbasefileext(void){
544    
545     struct FilePath *fp1;
546     char *s1;
547    
548 johnpye 607 fp1 = ospath_new("~/src/ascend-0.9.5-1.jdpipe.src.rpm");
549     D(fp1);
550     s1 = ospath_getfileext(fp1);
551     X(s1);
552     CU_TEST(strcmp(s1,".rpm")==0);
553     M("Passed getbasefileext test\n");
554    
555     ospath_free(fp1);
556     FREE(s1);
557    
558     fp1 = ospath_new("~/.vimrc");
559     D(fp1);
560     s1 = ospath_getfileext(fp1);
561     X(s1);
562     CU_TEST(s1==NULL);
563     M("Passed getbasefileext test 2\n");
564    
565     ospath_free(fp1);
566 johnpye 939 if(s1)FREE(s1);
567 johnpye 607
568     fp1 = ospath_new("./ascend4");
569     D(fp1);
570     s1 = ospath_getfileext(fp1);
571     X(s1);
572     CU_TEST(s1==NULL);
573     M("Passed getbasefileext test 3\n");
574    
575     ospath_free(fp1);
576 johnpye 939 if(s1)FREE(s1);
577 johnpye 998 MEMUSED(0);
578     }
579 johnpye 607 //-------------------------------
580    
581 johnpye 998 static void test_ospath_getdir(void){
582    
583     struct FilePath *fp1, *fp2, *fp3;
584    
585 johnpye 607 fp1 = ospath_new("/home/myfile");
586     fp2 = ospath_getdir(fp1);
587     fp3 = ospath_new("/home");
588     CU_TEST(ospath_cmp(fp2,fp3)==0);
589     M("Passed ospath_getdir test\n");
590    
591     ospath_free(fp1);
592     ospath_free(fp2);
593     ospath_free(fp3);
594    
595     fp1 = ospath_new("/home/myfile.ext");
596     fp2 = ospath_getdir(fp1);
597     fp3 = ospath_new("/home");
598     CU_TEST(ospath_cmp(fp2,fp3)==0);
599     M("Passed ospath_getdir test 2\n");
600    
601     ospath_free(fp1);
602     ospath_free(fp2);
603     ospath_free(fp3);
604    
605     fp1 = ospath_new("/home/mydir/");
606     fp2 = ospath_getdir(fp1);
607     fp3 = ospath_new("/home/mydir");
608     CU_TEST(ospath_cmp(fp2,fp3)==0);
609     M("Passed ospath_getdir test 3\n");
610    
611     ospath_free(fp1);
612     ospath_free(fp2);
613     ospath_free(fp3);
614 johnpye 998 MEMUSED(0);
615 johnpye 607 }
616    
617     /*===========================================================================*/
618     /* Registration information */
619    
620 johnpye 998 #define T(N) {#N, test_ospath_##N }
621 johnpye 607 static CU_TestInfo ospath_test_list[] = {
622 johnpye 998 T(getparent)
623     ,T(cleanup)
624     ,T(newfromposix)
625     ,T(secondcleanup)
626     ,T(append)
627     ,T(appendupup)
628     ,T(up)
629     ,T(concat)
630     ,T(concatmixedslash)
631     ,T(trailingslash)
632     ,T(searchpath)
633     ,T(searchpath2)
634     ,T(basefilename)
635     ,T(getfilestem)
636     ,T(getbasefileext)
637     ,T(getdir)
638     ,CU_TEST_INFO_NULL
639 johnpye 607 };
640 johnpye 998 #undef T
641 johnpye 607
642     static CU_SuiteInfo suites[] = {
643 jpye 1643 {"general_ospath", NULL, NULL, ospath_test_list},
644 johnpye 607 CU_SUITE_INFO_NULL
645     };
646    
647     /*-------------------------------------------------------------------*/
648     CU_ErrorCode test_register_general_ospath(void)
649     {
650     return CU_register_suites(suites);
651     }

john.pye@anu.edu.au
ViewVC Help
Powered by ViewVC 1.1.22