]>
git.ipfire.org Git - thirdparty/cups.git/blob - cups/testpwg.c
2 * PWG unit test program for CUPS.
4 * Copyright 2009-2016 by Apple Inc.
6 * Licensed under Apache License v2.0. See the file "LICENSE" for more information.
10 * Include necessary headers...
13 #include "ppd-private.h"
14 #include "file-private.h"
21 static int test_pagesize(_ppd_cache_t
*pc
, ppd_file_t
*ppd
,
23 static int test_ppd_cache(_ppd_cache_t
*pc
, ppd_file_t
*ppd
);
27 * 'main()' - Main entry.
30 int /* O - Exit status */
31 main(int argc
, /* I - Number of command-line args */
32 char *argv
[]) /* I - Command-line arguments */
34 int status
; /* Status of tests (0 = success, 1 = fail) */
35 const char *ppdfile
; /* PPD filename */
36 ppd_file_t
*ppd
; /* PPD file */
37 _ppd_cache_t
*pc
; /* PPD cache and PWG mapping data */
38 const pwg_media_t
*pwgmedia
; /* PWG media size */
39 size_t i
, /* Looping var */
40 num_media
; /* Number of media sizes */
41 const pwg_media_t
*mediatable
; /* Media size table */
42 int dupmedia
= 0; /* Duplicate media sizes? */
47 if (argc
< 2 || argc
> 3)
49 puts("Usage: ./testpwg filename.ppd [jobfile]");
55 printf("ppdOpenFile(%s): ", ppdfile
);
56 if ((ppd
= ppdOpenFile(ppdfile
)) == NULL
)
58 ppd_status_t err
; /* Last error in file */
59 int line
; /* Line number in file */
62 err
= ppdLastError(&line
);
64 printf("FAIL (%s on line %d)\n", ppdErrorString(err
), line
);
71 fputs("_ppdCacheCreateWithPPD(ppd): ", stdout
);
72 if ((pc
= _ppdCacheCreateWithPPD(ppd
)) == NULL
)
80 status
+= test_ppd_cache(pc
, ppd
);
85 * Test PageSize mapping code.
88 int fd
; /* Job file descriptor */
89 const char *pagesize
; /* PageSize value */
90 ipp_t
*job
; /* Job attributes */
91 ipp_attribute_t
*media
; /* Media attribute */
93 if ((fd
= open(argv
[2], O_RDONLY
)) >= 0)
99 if ((media
= ippFindAttribute(job
, "media", IPP_TAG_ZERO
)) != NULL
&&
100 media
->value_tag
!= IPP_TAG_NAME
&&
101 media
->value_tag
!= IPP_TAG_KEYWORD
)
105 printf("_ppdCacheGetPageSize(media=%s): ",
106 media
->values
[0].string
.text
);
108 fputs("_ppdCacheGetPageSize(media-col): ", stdout
);
112 if ((pagesize
= _ppdCacheGetPageSize(pc
, job
, NULL
, NULL
)) == NULL
)
114 puts("FAIL (Not Found)");
117 else if (media
&& _cups_strcasecmp(pagesize
, media
->values
[0].string
.text
))
119 printf("FAIL (Got \"%s\", Expected \"%s\")\n", pagesize
,
120 media
->values
[0].string
.text
);
124 printf("PASS (%s)\n", pagesize
);
136 * _ppdCacheDestroy should never fail...
139 fputs("_ppdCacheDestroy(pc): ", stdout
);
140 _ppdCacheDestroy(pc
);
144 fputs("pwgMediaForPWG(\"iso_a4_210x297mm\"): ", stdout
);
145 if ((pwgmedia
= pwgMediaForPWG("iso_a4_210x297mm")) == NULL
)
147 puts("FAIL (not found)");
150 else if (strcmp(pwgmedia
->pwg
, "iso_a4_210x297mm"))
152 printf("FAIL (%s)\n", pwgmedia
->pwg
);
155 else if (pwgmedia
->width
!= 21000 || pwgmedia
->length
!= 29700)
157 printf("FAIL (%dx%d)\n", pwgmedia
->width
, pwgmedia
->length
);
163 fputs("pwgMediaForPWG(\"roll_max_36.1025x3622.0472in\"): ", stdout
);
164 if ((pwgmedia
= pwgMediaForPWG("roll_max_36.1025x3622.0472in")) == NULL
)
166 puts("FAIL (not found)");
169 else if (pwgmedia
->width
!= 91700 || pwgmedia
->length
!= 9199999)
171 printf("FAIL (%dx%d)\n", pwgmedia
->width
, pwgmedia
->length
);
175 printf("PASS (%dx%d)\n", pwgmedia
->width
, pwgmedia
->length
);
177 fputs("pwgMediaForPWG(\"disc_test_10x100mm\"): ", stdout
);
178 if ((pwgmedia
= pwgMediaForPWG("disc_test_10x100mm")) == NULL
)
180 puts("FAIL (not found)");
183 else if (pwgmedia
->width
!= 10000 || pwgmedia
->length
!= 10000)
185 printf("FAIL (%dx%d)\n", pwgmedia
->width
, pwgmedia
->length
);
189 printf("PASS (%dx%d)\n", pwgmedia
->width
, pwgmedia
->length
);
191 fputs("pwgMediaForLegacy(\"na-letter\"): ", stdout
);
192 if ((pwgmedia
= pwgMediaForLegacy("na-letter")) == NULL
)
194 puts("FAIL (not found)");
197 else if (strcmp(pwgmedia
->pwg
, "na_letter_8.5x11in"))
199 printf("FAIL (%s)\n", pwgmedia
->pwg
);
202 else if (pwgmedia
->width
!= 21590 || pwgmedia
->length
!= 27940)
204 printf("FAIL (%dx%d)\n", pwgmedia
->width
, pwgmedia
->length
);
210 fputs("pwgMediaForPPD(\"4x6\"): ", stdout
);
211 if ((pwgmedia
= pwgMediaForPPD("4x6")) == NULL
)
213 puts("FAIL (not found)");
216 else if (strcmp(pwgmedia
->pwg
, "na_index-4x6_4x6in"))
218 printf("FAIL (%s)\n", pwgmedia
->pwg
);
221 else if (pwgmedia
->width
!= 10160 || pwgmedia
->length
!= 15240)
223 printf("FAIL (%dx%d)\n", pwgmedia
->width
, pwgmedia
->length
);
229 fputs("pwgMediaForPPD(\"10x15cm\"): ", stdout
);
230 if ((pwgmedia
= pwgMediaForPPD("10x15cm")) == NULL
)
232 puts("FAIL (not found)");
235 else if (strcmp(pwgmedia
->pwg
, "om_100x150mm_100x150mm"))
237 printf("FAIL (%s)\n", pwgmedia
->pwg
);
240 else if (pwgmedia
->width
!= 10000 || pwgmedia
->length
!= 15000)
242 printf("FAIL (%dx%d)\n", pwgmedia
->width
, pwgmedia
->length
);
248 fputs("pwgMediaForPPD(\"Custom.10x15cm\"): ", stdout
);
249 if ((pwgmedia
= pwgMediaForPPD("Custom.10x15cm")) == NULL
)
251 puts("FAIL (not found)");
254 else if (strcmp(pwgmedia
->pwg
, "custom_10x15cm_100x150mm"))
256 printf("FAIL (%s)\n", pwgmedia
->pwg
);
259 else if (pwgmedia
->width
!= 10000 || pwgmedia
->length
!= 15000)
261 printf("FAIL (%dx%d)\n", pwgmedia
->width
, pwgmedia
->length
);
267 fputs("pwgMediaForSize(29700, 42000): ", stdout
);
268 if ((pwgmedia
= pwgMediaForSize(29700, 42000)) == NULL
)
270 puts("FAIL (not found)");
273 else if (strcmp(pwgmedia
->pwg
, "iso_a3_297x420mm"))
275 printf("FAIL (%s)\n", pwgmedia
->pwg
);
281 fputs("pwgMediaForSize(9842, 19050): ", stdout
);
282 if ((pwgmedia
= pwgMediaForSize(9842, 19050)) == NULL
)
284 puts("FAIL (not found)");
287 else if (strcmp(pwgmedia
->pwg
, "na_monarch_3.875x7.5in"))
289 printf("FAIL (%s)\n", pwgmedia
->pwg
);
293 printf("PASS (%s)\n", pwgmedia
->pwg
);
295 fputs("pwgMediaForSize(9800, 19000): ", stdout
);
296 if ((pwgmedia
= pwgMediaForSize(9800, 19000)) == NULL
)
298 puts("FAIL (not found)");
301 else if (strcmp(pwgmedia
->pwg
, "jpn_you6_98x190mm"))
303 printf("FAIL (%s)\n", pwgmedia
->pwg
);
307 printf("PASS (%s)\n", pwgmedia
->pwg
);
309 fputs("Duplicate size test: ", stdout
);
310 for (mediatable
= _pwgMediaTable(&num_media
);
312 num_media
--, mediatable
++)
314 for (i
= num_media
- 1, pwgmedia
= mediatable
+ 1; i
> 0; i
--, pwgmedia
++)
316 if (pwgmedia
->width
== mediatable
->width
&&
317 pwgmedia
->length
== mediatable
->length
)
326 printf(" %s and %s have the same dimensions (%dx%d)\n",
327 pwgmedia
->pwg
, mediatable
->pwg
, pwgmedia
->width
,
341 * 'test_pagesize()' - Test the PWG mapping functions.
344 static int /* O - 1 on failure, 0 on success */
345 test_pagesize(_ppd_cache_t
*pc
, /* I - PWG mapping data */
346 ppd_file_t
*ppd
, /* I - PPD file */
347 const char *ppdsize
) /* I - PPD page size */
349 int status
= 0; /* Return status */
350 ipp_t
*job
; /* Job attributes */
351 const char *pagesize
; /* PageSize value */
354 if (ppdPageSize(ppd
, ppdsize
))
356 printf("_ppdCacheGetPageSize(keyword=%s): ", ppdsize
);
359 if ((pagesize
= _ppdCacheGetPageSize(pc
, NULL
, ppdsize
, NULL
)) == NULL
)
361 puts("FAIL (Not Found)");
364 else if (_cups_strcasecmp(pagesize
, ppdsize
))
366 printf("FAIL (Got \"%s\", Expected \"%s\")\n", pagesize
, ppdsize
);
373 ippAddString(job
, IPP_TAG_JOB
, IPP_TAG_KEYWORD
, "media", NULL
, ppdsize
);
375 printf("_ppdCacheGetPageSize(media=%s): ", ppdsize
);
378 if ((pagesize
= _ppdCacheGetPageSize(pc
, job
, NULL
, NULL
)) == NULL
)
380 puts("FAIL (Not Found)");
383 else if (_cups_strcasecmp(pagesize
, ppdsize
))
385 printf("FAIL (Got \"%s\", Expected \"%s\")\n", pagesize
, ppdsize
);
399 * 'test_ppd_cache()' - Test the PPD cache functions.
402 static int /* O - 1 on failure, 0 on success */
403 test_ppd_cache(_ppd_cache_t
*pc
, /* I - PWG mapping data */
404 ppd_file_t
*ppd
) /* I - PPD file */
406 int i
, /* Looping var */
407 status
= 0; /* Return status */
408 _ppd_cache_t
*pc2
; /* Loaded data */
409 pwg_size_t
*size
, /* Size from original */
410 *size2
; /* Size from saved */
411 pwg_map_t
*map
, /* Map from original */
412 *map2
; /* Map from saved */
416 * Verify that we can write and read back the same data...
419 fputs("_ppdCacheWriteFile(test.pwg): ", stdout
);
420 if (!_ppdCacheWriteFile(pc
, "test.pwg", NULL
))
428 fputs("_ppdCacheCreateWithFile(test.pwg): ", stdout
);
429 if ((pc2
= _ppdCacheCreateWithFile("test.pwg", NULL
)) == NULL
)
436 // TODO: FINISH ADDING ALL VALUES IN STRUCTURE
437 if (pc2
->num_sizes
!= pc
->num_sizes
)
442 printf(" SAVED num_sizes=%d, ORIG num_sizes=%d\n", pc2
->num_sizes
,
449 for (i
= pc
->num_sizes
, size
= pc
->sizes
, size2
= pc2
->sizes
;
451 i
--, size
++, size2
++)
453 if (strcmp(size2
->map
.pwg
, size
->map
.pwg
) ||
454 strcmp(size2
->map
.ppd
, size
->map
.ppd
) ||
455 size2
->width
!= size
->width
||
456 size2
->length
!= size
->length
||
457 size2
->left
!= size
->left
||
458 size2
->bottom
!= size
->bottom
||
459 size2
->right
!= size
->right
||
460 size2
->top
!= size
->top
)
465 if (strcmp(size
->map
.pwg
, size2
->map
.pwg
))
466 printf(" SAVED size->map.pwg=\"%s\", ORIG "
467 "size->map.pwg=\"%s\"\n", size2
->map
.pwg
, size
->map
.pwg
);
469 if (strcmp(size2
->map
.ppd
, size
->map
.ppd
))
470 printf(" SAVED size->map.ppd=\"%s\", ORIG "
471 "size->map.ppd=\"%s\"\n", size2
->map
.ppd
, size
->map
.ppd
);
473 if (size2
->width
!= size
->width
)
474 printf(" SAVED size->width=%d, ORIG size->width=%d\n",
475 size2
->width
, size
->width
);
477 if (size2
->length
!= size
->length
)
478 printf(" SAVED size->length=%d, ORIG size->length=%d\n",
479 size2
->length
, size
->length
);
481 if (size2
->left
!= size
->left
)
482 printf(" SAVED size->left=%d, ORIG size->left=%d\n",
483 size2
->left
, size
->left
);
485 if (size2
->bottom
!= size
->bottom
)
486 printf(" SAVED size->bottom=%d, ORIG size->bottom=%d\n",
487 size2
->bottom
, size
->bottom
);
489 if (size2
->right
!= size
->right
)
490 printf(" SAVED size->right=%d, ORIG size->right=%d\n",
491 size2
->right
, size
->right
);
493 if (size2
->top
!= size
->top
)
494 printf(" SAVED size->top=%d, ORIG size->top=%d\n",
495 size2
->top
, size
->top
);
502 for (i
= pc
->num_sources
, map
= pc
->sources
, map2
= pc2
->sources
;
504 i
--, map
++, map2
++)
506 if (strcmp(map2
->pwg
, map
->pwg
) ||
507 strcmp(map2
->ppd
, map
->ppd
))
512 if (strcmp(map
->pwg
, map2
->pwg
))
513 printf(" SAVED source->pwg=\"%s\", ORIG source->pwg=\"%s\"\n",
514 map2
->pwg
, map
->pwg
);
516 if (strcmp(map2
->ppd
, map
->ppd
))
517 printf(" SAVED source->ppd=\"%s\", ORIG source->ppd=\"%s\"\n",
518 map2
->ppd
, map
->ppd
);
525 for (i
= pc
->num_types
, map
= pc
->types
, map2
= pc2
->types
;
527 i
--, map
++, map2
++)
529 if (strcmp(map2
->pwg
, map
->pwg
) ||
530 strcmp(map2
->ppd
, map
->ppd
))
535 if (strcmp(map
->pwg
, map2
->pwg
))
536 printf(" SAVED type->pwg=\"%s\", ORIG type->pwg=\"%s\"\n",
537 map2
->pwg
, map
->pwg
);
539 if (strcmp(map2
->ppd
, map
->ppd
))
540 printf(" SAVED type->ppd=\"%s\", ORIG type->ppd=\"%s\"\n",
541 map2
->ppd
, map
->ppd
);
552 _ppdCacheDestroy(pc2
);
556 * Test PageSize mapping code...
559 status
+= test_pagesize(pc
, ppd
, "Letter");
560 status
+= test_pagesize(pc
, ppd
, "na-letter");
561 status
+= test_pagesize(pc
, ppd
, "A4");
562 status
+= test_pagesize(pc
, ppd
, "iso-a4");