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");