libermanifest/test/test.c File Reference

#include <stdio.h>
#include <sys/time.h>
#include <unistd.h>
#include <ermanifest.h>

Go to the source code of this file.

Defines

#define MAX_LEN   1024
#define STROKE_LEN   2000

Functions

void dumparg (int argc, char *argv[])
void usage ()
void testOpen (const char *pathname)
void testWrite (const char *pathname)
void testCreate (const char *pathname)
void testHugeCreate (const char *pathname)
void testBrowserIndexFile (const char *pathName)
void testDel (const char *pathName)
void testSpeXpath (const char *pathname)
void testSample (const char *pathname)
int main (int argc, char *argv[])


Define Documentation

#define MAX_LEN   1024

Copyright (C) 2005-2008 iRex Technologies B.V. All rights reserved.

Definition at line 29 of file test.c.

#define STROKE_LEN   2000

Definition at line 30 of file test.c.


Function Documentation

void dumparg ( int  argc,
char *  argv[] 
)

Definition at line 32 of file test.c.

00033 {
00034     int i = 0; 
00035     fprintf(stderr, "argc %d\n", argc);
00036     for(i = 0; i < argc; ++i)
00037         fprintf(stderr, "argc %d: %s\n", i, argv[i]);
00038 }

int main ( int  argc,
char *  argv[] 
)

Definition at line 375 of file test.c.

00376 {
00377     dumparg(argc, argv);
00378     /*
00379     if (argc != 3)
00380     {
00381         usage();
00382         return 1;
00383     }
00384     */
00385     
00386     // testOpen(argv[1]);
00387     // testCreate(argv[1]);
00388     // testBrowserIndexFile(argv[1]);
00389     // testHugeCreate(argv[1]);
00390     // testDel(argv[1]);
00391     
00392     
00393     // testSpeXpath(argv[1]);
00394     testSample(argv[1]);
00395     return 1;    
00396 }

Here is the call graph for this function:

void testBrowserIndexFile ( const char *  pathName  ) 

Definition at line 233 of file test.c.

00234 {
00235     // time stamp
00236     struct timeval t1, t2;
00237     gettimeofday(&t1, NULL);
00238     
00239     erManifest manifest;
00240     
00241     char url[MAX_LEN]    = {0};
00242     char number[MAX_LEN] = {0};
00243     char type[MAX_LEN]   = {0};
00244     char xpath[MAX_LEN]  = {0};
00245     ermXmlOpenFile(pathName, &manifest);
00246     
00247     printf("open done!\n");
00248     int i = 1, j = 1;
00249     int ret = RET_OK;
00250     while (1)
00251     {
00252         sprintf(xpath, "/package/index/pagelist[%d]", i);
00253         ret = ermXmlGetAttributeString(&manifest, xpath, "type", type, MAX_LEN);
00254         ret = ermXmlGetAttributeString(&manifest, xpath, "count", number, MAX_LEN);
00255         if (RET_ERR == ret) break;
00256         printf("type:\t%s\tcount:\t%s\n", type, number);
00257         
00258         j = 1;
00259         while(1)
00260         {
00261             sprintf(xpath, "/package/index/pagelist[%d]/page[%d]", i, j);
00262          
00263             memset(url, 0, MAX_LEN); memset(number, 0, MAX_LEN);
00264             ermXmlGetAttributeString(&manifest, xpath, "url", url, MAX_LEN);
00265             ret = ermXmlGetAttributeString(&manifest, xpath, "number", number, MAX_LEN);                
00266             
00267             if (RET_ERR == ret) break;
00268             printf("url:\t%s\t", url);
00269             printf("number:\t%s\n", number);
00270             ++j;
00271         }
00272         
00273         ++i;
00274     }
00275     ermXmlClose(&manifest);
00276     
00277     gettimeofday(&t2, NULL);
00278     printf("time used\tsec %ld usec %ld\n", t2.tv_sec -t1.tv_sec,     t2.tv_usec - t1.tv_usec);
00279 }

Here is the call graph for this function:

void testCreate ( const char *  pathname  ) 

Definition at line 147 of file test.c.

00148 {
00149     erManifest manifest;
00150     
00151     char data[MAX_LEN] = {0};
00152     /* create a new file, it will overwrite existing file */ 
00153     
00154     ermXmlCreateFile(pathname, &manifest);
00155     printf("create done!\n");
00156         
00157     memset(&data[0], 0, MAX_LEN);
00158     strncpy(data, "abcde", 5);
00159     ermXmlNewString(&manifest, "/", "packet", data);
00160     printf("newstring done!\n");
00161     ermXmlNewString(&manifest, "/packet", "metadata", data);
00162     
00163     ermXmlNewString(&manifest, "/packet/metadata", "y-metadata", data);
00164     
00165     ermXmlNewString(&manifest, "/packet/metadata/y-metadata", "pages", "");
00166     ermXmlNewString(&manifest, "/packet/metadata/y-metadata/pages", "page", "");
00167     ermXmlNewString(&manifest, "/packet/metadata/y-metadata/pages/page[1]", "strokes", "");    
00168     ermXmlNewString(&manifest, "/packet/metadata/y-metadata/pages/page[1]/strokes", "stroke", "");    
00169 
00170     ermXmlNewString(&manifest, "/packet/metadata/y-metadata/pages", "page", "");
00171     ermXmlNewString(&manifest, "/packet/metadata/y-metadata/pages/page[2]", "strokes", "");    
00172     ermXmlNewString(&manifest, "/packet/metadata/y-metadata/pages/page[2]/strokes", "stroke", "");    
00173 
00174     
00175     printf("save done!\n");
00176     ermXmlSaveAndClose(&manifest);
00177 }

Here is the call graph for this function:

void testDel ( const char *  pathName  ) 

Definition at line 281 of file test.c.

00282 {
00283     erManifest manifest;
00284     
00285   
00286     ermXmlOpenFile(pathName, &manifest);
00287     
00288     printf("Open done!\n");
00289 
00290     int i = 0;
00291     for(; i < 10; ++i)
00292     {
00293         ermXmlRemoveNode(&manifest, "/packet/metadata/y-metadata/pages/page[1]");
00294     }
00295     ermXmlSaveAndClose(&manifest);        
00296         
00297 }

Here is the call graph for this function:

void testHugeCreate ( const char *  pathname  ) 

Definition at line 180 of file test.c.

00181 {
00182     erManifest manifest;
00183     
00184     char data[MAX_LEN] = {0};
00185     /* create a new file, it will overwrite existing file */ 
00186     
00187     ermXmlCreateFile(pathname, &manifest);
00188     printf("create done!\n");
00189         
00190     memset(&data[0], 0, MAX_LEN);
00191     strncpy(data, "abcde", 5);
00192     ermXmlNewString(&manifest, "/", "packet", data);
00193     printf("newstring done!\n");
00194     ermXmlNewString(&manifest, "/packet", "metadata", data);
00195     
00196     ermXmlNewString(&manifest, "/packet/metadata", "y-metadata", data);
00197     ermXmlNewString(&manifest, "/packet/metadata/y-metadata", "pages", "");
00198     
00199     int pages = 4; // 100 pages
00200     int i = 1;
00201     char xPath[MAX_LEN] = {0};
00202     char stroke[STROKE_LEN] = {0};
00203     for(;i < pages; ++i)
00204     {
00205         
00206         ermXmlNewString(&manifest, "/packet/metadata/y-metadata/pages", "page", "");
00207         memset(xPath, 0, MAX_LEN);
00208         snprintf(xPath, MAX_LEN, "/packet/metadata/y-metadata/pages/page[%d]", i);
00209         ermXmlNewString(&manifest, xPath, "strokes", "");    
00210         
00211         int strokes = 10;
00212         int j = 1;
00213         strcat(xPath, "/strokes");
00214         
00215         memset(stroke, 'a', STROKE_LEN - 10);
00216         for(;j < strokes; ++j)
00217         {
00218             ermXmlNewString(&manifest, xPath, "stroke", stroke);    
00219         }
00220     }
00221     
00222     i = 1;
00223     snprintf(xPath, MAX_LEN, "/packet/metadata/y-metadata/pages/page[%d]", i);
00224     ermXmlSetString(&manifest, xPath, "");
00225     
00226     xmlDocDump(stderr, manifest.pDoc);
00227     
00228     printf("save done!\n");
00229     ermXmlSaveAndClose(&manifest);
00230 }

Here is the call graph for this function:

void testOpen ( const char *  pathname  ) 

Definition at line 46 of file test.c.

00047 {
00048     erManifest manifest;
00049 
00050     ermXmlOpenFile(pathname, &manifest);
00051 
00052     char data[MAX_LEN] = {0};
00053     
00054     // test memory leak
00055     fprintf(stderr, "test memory leak\n");
00056     int i = 0;
00057     for( ; i < 10000000; ++i)
00058     {
00059         ermXmlGetString(&manifest, "/package/metadata/dc-metadata/Title", data, MAX_LEN); 
00060     }
00061     fprintf(stderr, "\n\ntest done!!!!!!!\n\n");
00062     sleep(100);        
00063     fprintf(stderr, "result: %s\n", data);
00064     
00065     ermXmlGetString(&manifest, "/package/metadata/dc-metadata/Description", data, MAX_LEN); 
00066     fprintf(stderr, "result: %s\n", data);
00067 
00068 
00069     ermXmlGetString(&manifest, "/package/metadata/dc-metadata/Date", data, MAX_LEN); 
00070     fprintf(stderr, "result: %s\n", data);
00071 
00072     ermXmlGetString(&manifest, "/package/metadata/dc-metadata/Format", data, MAX_LEN); 
00073     fprintf(stderr, "result: %s\n", data);
00074 
00075     ermXmlGetString(&manifest, "/package/metadata/dc-metadata/Identifier", data, MAX_LEN); 
00076     fprintf(stderr, "result: %s\n", data);
00077     
00078     ermXmlGetString(&manifest, "/package/metadata/dc-metadata/Language", data, MAX_LEN); 
00079     fprintf(stderr, "result: %s\n", data);
00080 
00081     ermXmlGetString(&manifest, "/package/metadata/dc-metadata/Type", data, MAX_LEN); 
00082     fprintf(stderr, "result: %s\n", data);
00083 
00084     ermXmlGetString(&manifest, "/package/metadata/dc-metadata/Type", data, MAX_LEN); 
00085     fprintf(stderr, "result: %s\n", data);
00086 
00087 
00088     ermXmlGetString(&manifest, "/package/metadata/y-metadata/FileSize", data, MAX_LEN); 
00089     fprintf(stderr, "result: %s\n", data);
00090 
00091     int itemSize = -1;
00092     ermXmlGetInt(&manifest, "/package/metadata/y-metadata/ItemSize", &itemSize); 
00093     fprintf(stderr, "result: %d\n", itemSize);
00094 
00095     ermXmlClose(&manifest);
00096 }

Here is the call graph for this function:

void testSample ( const char *  pathname  ) 

Definition at line 328 of file test.c.

00329 {
00330     erManifest manifest;
00331     
00332     char data[MAX_LEN] = {0};
00333     /* create a new file, it will overwrite existing file */ 
00334     
00335     ermXmlCreateFile(pathname, &manifest);
00336     printf("create done!\n");
00337         
00338     memset(&data[0], 0, MAX_LEN);
00339     ermXmlNewString(&manifest, "/", "packet", "");
00340     printf("newstring done!\n");
00341     ermXmlNewString(&manifest, "/packet", "metadata", "");
00342     sleep(1);
00343     printf("1 done!\n");
00344     
00345     ermXmlNewString(&manifest, "/packet/metadata", "y-metadata", "");
00346   
00347     ermXmlNewString(&manifest, "/packet/metadata/y-metadata", "pages", "");
00348 
00349     ermXmlNewString(&manifest, "/packet/metadata", "index", "");    
00350     
00351     ermXmlNewString(&manifest, "/packet/metadata/index", "pagelist", "");
00352  
00353     ermXmlSetAttributeString(&manifest, "/packet/metadata/index/pagelist", "type", "irfanview", 9); 
00354     ermXmlSetAttributeInt(&manifest, "/packet/metadata/index/pagelist", "count", 689); 
00355         
00356     printf("going to create page list!\n");    
00357     int pages = 689; 
00358     int i = 1;
00359     char xPath[MAX_LEN] = {0};
00360     char tmp[MAX_LEN] = {0};
00361     for(i = 1;i <= pages; ++i)
00362     {
00363         ermXmlNewString(&manifest, "/packet/metadata/index/pagelist", "page", "");
00364         memset(xPath, 0, MAX_LEN);
00365         snprintf(xPath, MAX_LEN, "/packet/metadata/index/pagelist/page[%d]", i);
00366         snprintf(tmp, MAX_LEN, "%03d", i);
00367         ermXmlSetAttributeString(&manifest, xPath, "number", tmp, strlen(tmp));    
00368         ermXmlSetAttributeString(&manifest, xPath, "url", "pagl04.html",11);    
00369     }
00370     ermXmlSaveAndClose(&manifest);
00371 }

Here is the call graph for this function:

void testSpeXpath ( const char *  pathname  ) 

Definition at line 299 of file test.c.

00300 {
00301     erManifest manifest;
00302 
00303     if (RET_OK !=ermXmlOpenFile(pathname, &manifest))
00304     {
00305         fprintf(stderr, "could not open file!\n");
00306         return;
00307     }
00308 
00309     char xPath[1024] = {0};
00310     char data[MAX_LEN] = {0};
00311     snprintf(xPath, 1024, "//page[@id=\"%s\"]", "1");
00312     fprintf(stderr, "%s\n", xPath);
00313     if (RET_ERR == ermXmlExist(&manifest, xPath))
00314     {
00315         fprintf(stderr, "error!\n");
00316         ermXmlClose(&manifest);
00317         return;
00318     }
00319     
00320     strncat(xPath, "/strokes/stroke", 1024);
00321     ermXmlGetString(&manifest, xPath, data, MAX_LEN); 
00322     fprintf(stderr, "result: %s\n", data);
00323 
00324     ermXmlClose(&manifest);
00325 }

Here is the call graph for this function:

void testWrite ( const char *  pathname  ) 

Definition at line 99 of file test.c.

00100 {
00101     erManifest manifest;
00102     
00103     ermXmlOpenFile(pathname, &manifest);
00104 
00105     char data[MAX_LEN] = {0};
00106 
00107     char *des = "This is a demo test!这是一个中文测试";
00108     if (RET_OK == ermXmlSetString(&manifest, "/package/metadata/dc-metadata/Description", des))
00109         printf("set string ok!\n");
00110     else
00111         printf("set string failed!\n");
00112 
00113     ermXmlGetString(&manifest, "/package/metadata/dc-metadata/Description", data, MAX_LEN); 
00114     fprintf(stderr, "result: %s\n", data);
00115     
00116     int itemSize = 4567890;
00117     ermXmlSetInt(&manifest, "/package/metadata/y-metadata/ItemSize", itemSize);
00118     
00119     ermXmlNewString(&manifest, "/package/metadata/y-metadata", "a", "content of a");
00120     ermXmlNewString(&manifest, "/package/metadata/y-metadata/a", "b", "content of b");
00121     ermXmlNewString(&manifest, "/package/metadata/y-metadata/a/b", "c", "content of c");        
00122     ermXmlNewString(&manifest, "/package/metadata/y-metadata/a/b/c", "d", "content of d");
00123     ermXmlNewInt(&manifest, "/package/metadata/y-metadata/a/b/c/d", "e", 987654);    
00124 
00125     
00126     /* test attributes */            
00127     /* "/package/index/pagelist[@type='paper']" */
00128     ermXmlGetAttributeString(&manifest, "/package/index/pagelist[1]/page", "url", data, MAX_LEN);
00129     fprintf(stderr, "result: %s\n", data);
00130     ermXmlGetAttributeString(&manifest, "/package/index/pagelist[2]/page", "url", data, MAX_LEN);
00131     fprintf(stderr, "result: %s\n", data);
00132     ermXmlGetAttributeString(&manifest, "/package/index/pagelist[3]/page", "url", data, MAX_LEN);        
00133     fprintf(stderr, "result: %s\n", data);
00134     
00135     /* try to change */    
00136     char *attr = "this is attribute test这是中文属性测试";
00137     strncpy(&data[0], attr, strlen(attr));
00138     ermXmlSetAttributeString(&manifest, "/package/index/pagelist[1]/page", "url", data, MAX_LEN);
00139 
00140     /* add a new attribute */    
00141     ermXmlSetAttributeString(&manifest, "/package/index/pagelist[1]/page", "abc", data, MAX_LEN);            
00142     
00143     ermXmlSaveAndClose(&manifest);
00144 }

Here is the call graph for this function:

void usage (  ) 

Definition at line 40 of file test.c.

00041 {
00042     fprintf(stderr, "Usage:\n");
00043     fprintf(stderr, "  <inputfilename> <outputfilename>\n");
00044 }


Generated on Sun Dec 14 17:11:55 2008 by  doxygen 1.5.6