2 * PWG unit test program for CUPS.
4 * Copyright 2009-2016 by Apple Inc.
6 * These coded instructions, statements, and computer programs are the
7 * property of Apple Inc. and are protected by Federal copyright
8 * law. Distribution and use rights are outlined in the file "LICENSE.txt"
9 * which should have been included with this file. If this file is
10 * missing or damaged, see the license at "http://www.cups.org/".
12 * This file is subject to the Apple OS-Developed Software exception.
16 * Include necessary headers...
19 #include "ppd-private.h"
20 #include "file-private.h"
27 static int test_pagesize(_ppd_cache_t *pc, ppd_file_t *ppd,
29 static int test_ppd_cache(_ppd_cache_t *pc, ppd_file_t *ppd);
33 * 'main()' - Main entry.
36 int /* O - Exit status */
37 main(int argc, /* I - Number of command-line args */
38 char *argv[]) /* I - Command-line arguments */
40 int status; /* Status of tests (0 = success, 1 = fail) */
41 const char *ppdfile; /* PPD filename */
42 ppd_file_t *ppd; /* PPD file */
43 _ppd_cache_t *pc; /* PPD cache and PWG mapping data */
44 const pwg_media_t *pwgmedia; /* PWG media size */
45 size_t i, /* Looping var */
46 num_media; /* Number of media sizes */
47 const pwg_media_t *mediatable; /* Media size table */
48 int dupmedia = 0; /* Duplicate media sizes? */
53 if (argc < 2 || argc > 3)
55 puts("Usage: ./testpwg filename.ppd [jobfile]");
61 printf("ppdOpenFile(%s): ", ppdfile);
62 if ((ppd = ppdOpenFile(ppdfile)) == NULL)
64 ppd_status_t err; /* Last error in file */
65 int line; /* Line number in file */
68 err = ppdLastError(&line);
70 printf("FAIL (%s on line %d)\n", ppdErrorString(err), line);
77 fputs("_ppdCacheCreateWithPPD(ppd): ", stdout);
78 if ((pc = _ppdCacheCreateWithPPD(ppd)) == NULL)
86 status += test_ppd_cache(pc, ppd);
91 * Test PageSize mapping code.
94 int fd; /* Job file descriptor */
95 const char *pagesize; /* PageSize value */
96 ipp_t *job; /* Job attributes */
97 ipp_attribute_t *media; /* Media attribute */
99 if ((fd = open(argv[2], O_RDONLY)) >= 0)
102 ippReadFile(fd, job);
105 if ((media = ippFindAttribute(job, "media", IPP_TAG_ZERO)) != NULL &&
106 media->value_tag != IPP_TAG_NAME &&
107 media->value_tag != IPP_TAG_KEYWORD)
111 printf("_ppdCacheGetPageSize(media=%s): ",
112 media->values[0].string.text);
114 fputs("_ppdCacheGetPageSize(media-col): ", stdout);
118 if ((pagesize = _ppdCacheGetPageSize(pc, job, NULL, NULL)) == NULL)
120 puts("FAIL (Not Found)");
123 else if (media && _cups_strcasecmp(pagesize, media->values[0].string.text))
125 printf("FAIL (Got \"%s\", Expected \"%s\")\n", pagesize,
126 media->values[0].string.text);
130 printf("PASS (%s)\n", pagesize);
142 * _ppdCacheDestroy should never fail...
145 fputs("_ppdCacheDestroy(pc): ", stdout);
146 _ppdCacheDestroy(pc);
150 fputs("pwgMediaForPWG(\"iso_a4_210x297mm\"): ", stdout);
151 if ((pwgmedia = pwgMediaForPWG("iso_a4_210x297mm")) == NULL)
153 puts("FAIL (not found)");
156 else if (strcmp(pwgmedia->pwg, "iso_a4_210x297mm"))
158 printf("FAIL (%s)\n", pwgmedia->pwg);
161 else if (pwgmedia->width != 21000 || pwgmedia->length != 29700)
163 printf("FAIL (%dx%d)\n", pwgmedia->width, pwgmedia->length);
169 fputs("pwgMediaForPWG(\"roll_max_36.1025x3622.0472in\"): ", stdout);
170 if ((pwgmedia = pwgMediaForPWG("roll_max_36.1025x3622.0472in")) == NULL)
172 puts("FAIL (not found)");
175 else if (pwgmedia->width != 91700 || pwgmedia->length != 9199999)
177 printf("FAIL (%dx%d)\n", pwgmedia->width, pwgmedia->length);
181 printf("PASS (%dx%d)\n", pwgmedia->width, pwgmedia->length);
183 fputs("pwgMediaForPWG(\"disc_test_10x100mm\"): ", stdout);
184 if ((pwgmedia = pwgMediaForPWG("disc_test_10x100mm")) == NULL)
186 puts("FAIL (not found)");
189 else if (pwgmedia->width != 10000 || pwgmedia->length != 10000)
191 printf("FAIL (%dx%d)\n", pwgmedia->width, pwgmedia->length);
195 printf("PASS (%dx%d)\n", pwgmedia->width, pwgmedia->length);
197 fputs("pwgMediaForLegacy(\"na-letter\"): ", stdout);
198 if ((pwgmedia = pwgMediaForLegacy("na-letter")) == NULL)
200 puts("FAIL (not found)");
203 else if (strcmp(pwgmedia->pwg, "na_letter_8.5x11in"))
205 printf("FAIL (%s)\n", pwgmedia->pwg);
208 else if (pwgmedia->width != 21590 || pwgmedia->length != 27940)
210 printf("FAIL (%dx%d)\n", pwgmedia->width, pwgmedia->length);
216 fputs("pwgMediaForPPD(\"4x6\"): ", stdout);
217 if ((pwgmedia = pwgMediaForPPD("4x6")) == NULL)
219 puts("FAIL (not found)");
222 else if (strcmp(pwgmedia->pwg, "na_index-4x6_4x6in"))
224 printf("FAIL (%s)\n", pwgmedia->pwg);
227 else if (pwgmedia->width != 10160 || pwgmedia->length != 15240)
229 printf("FAIL (%dx%d)\n", pwgmedia->width, pwgmedia->length);
235 fputs("pwgMediaForPPD(\"10x15cm\"): ", stdout);
236 if ((pwgmedia = pwgMediaForPPD("10x15cm")) == NULL)
238 puts("FAIL (not found)");
241 else if (strcmp(pwgmedia->pwg, "om_100x150mm_100x150mm"))
243 printf("FAIL (%s)\n", pwgmedia->pwg);
246 else if (pwgmedia->width != 10000 || pwgmedia->length != 15000)
248 printf("FAIL (%dx%d)\n", pwgmedia->width, pwgmedia->length);
254 fputs("pwgMediaForPPD(\"Custom.10x15cm\"): ", stdout);
255 if ((pwgmedia = pwgMediaForPPD("Custom.10x15cm")) == NULL)
257 puts("FAIL (not found)");
260 else if (strcmp(pwgmedia->pwg, "custom_10x15cm_100x150mm"))
262 printf("FAIL (%s)\n", pwgmedia->pwg);
265 else if (pwgmedia->width != 10000 || pwgmedia->length != 15000)
267 printf("FAIL (%dx%d)\n", pwgmedia->width, pwgmedia->length);
273 fputs("pwgMediaForSize(29700, 42000): ", stdout);
274 if ((pwgmedia = pwgMediaForSize(29700, 42000)) == NULL)
276 puts("FAIL (not found)");
279 else if (strcmp(pwgmedia->pwg, "iso_a3_297x420mm"))
281 printf("FAIL (%s)\n", pwgmedia->pwg);
287 fputs("pwgMediaForSize(9842, 19050): ", stdout);
288 if ((pwgmedia = pwgMediaForSize(9842, 19050)) == NULL)
290 puts("FAIL (not found)");
293 else if (strcmp(pwgmedia->pwg, "na_monarch_3.875x7.5in"))
295 printf("FAIL (%s)\n", pwgmedia->pwg);
299 printf("PASS (%s)\n", pwgmedia->pwg);
301 fputs("pwgMediaForSize(9800, 19000): ", stdout);
302 if ((pwgmedia = pwgMediaForSize(9800, 19000)) == NULL)
304 puts("FAIL (not found)");
307 else if (strcmp(pwgmedia->pwg, "jpn_you6_98x190mm"))
309 printf("FAIL (%s)\n", pwgmedia->pwg);
313 printf("PASS (%s)\n", pwgmedia->pwg);
315 fputs("Duplicate size test: ", stdout);
316 for (mediatable = _pwgMediaTable(&num_media);
318 num_media --, mediatable ++)
320 for (i = num_media - 1, pwgmedia = mediatable + 1; i > 0; i --, pwgmedia ++)
322 if (pwgmedia->width == mediatable->width &&
323 pwgmedia->length == mediatable->length)
332 printf(" %s and %s have the same dimensions (%dx%d)\n",
333 pwgmedia->pwg, mediatable->pwg, pwgmedia->width,
347 * 'test_pagesize()' - Test the PWG mapping functions.
350 static int /* O - 1 on failure, 0 on success */
351 test_pagesize(_ppd_cache_t *pc, /* I - PWG mapping data */
352 ppd_file_t *ppd, /* I - PPD file */
353 const char *ppdsize) /* I - PPD page size */
355 int status = 0; /* Return status */
356 ipp_t *job; /* Job attributes */
357 const char *pagesize; /* PageSize value */
360 if (ppdPageSize(ppd, ppdsize))
362 printf("_ppdCacheGetPageSize(keyword=%s): ", ppdsize);
365 if ((pagesize = _ppdCacheGetPageSize(pc, NULL, ppdsize, NULL)) == NULL)
367 puts("FAIL (Not Found)");
370 else if (_cups_strcasecmp(pagesize, ppdsize))
372 printf("FAIL (Got \"%s\", Expected \"%s\")\n", pagesize, ppdsize);
379 ippAddString(job, IPP_TAG_JOB, IPP_TAG_KEYWORD, "media", NULL, ppdsize);
381 printf("_ppdCacheGetPageSize(media=%s): ", ppdsize);
384 if ((pagesize = _ppdCacheGetPageSize(pc, job, NULL, NULL)) == NULL)
386 puts("FAIL (Not Found)");
389 else if (_cups_strcasecmp(pagesize, ppdsize))
391 printf("FAIL (Got \"%s\", Expected \"%s\")\n", pagesize, ppdsize);
405 * 'test_ppd_cache()' - Test the PPD cache functions.
408 static int /* O - 1 on failure, 0 on success */
409 test_ppd_cache(_ppd_cache_t *pc, /* I - PWG mapping data */
410 ppd_file_t *ppd) /* I - PPD file */
412 int i, /* Looping var */
413 status = 0; /* Return status */
414 _ppd_cache_t *pc2; /* Loaded data */
415 pwg_size_t *size, /* Size from original */
416 *size2; /* Size from saved */
417 pwg_map_t *map, /* Map from original */
418 *map2; /* Map from saved */
422 * Verify that we can write and read back the same data...
425 fputs("_ppdCacheWriteFile(test.pwg): ", stdout);
426 if (!_ppdCacheWriteFile(pc, "test.pwg", NULL))
434 fputs("_ppdCacheCreateWithFile(test.pwg): ", stdout);
435 if ((pc2 = _ppdCacheCreateWithFile("test.pwg", NULL)) == NULL)
442 // TODO: FINISH ADDING ALL VALUES IN STRUCTURE
443 if (pc2->num_sizes != pc->num_sizes)
448 printf(" SAVED num_sizes=%d, ORIG num_sizes=%d\n", pc2->num_sizes,
455 for (i = pc->num_sizes, size = pc->sizes, size2 = pc2->sizes;
457 i --, size ++, size2 ++)
459 if (strcmp(size2->map.pwg, size->map.pwg) ||
460 strcmp(size2->map.ppd, size->map.ppd) ||
461 size2->width != size->width ||
462 size2->length != size->length ||
463 size2->left != size->left ||
464 size2->bottom != size->bottom ||
465 size2->right != size->right ||
466 size2->top != size->top)
471 if (strcmp(size->map.pwg, size2->map.pwg))
472 printf(" SAVED size->map.pwg=\"%s\", ORIG "
473 "size->map.pwg=\"%s\"\n", size2->map.pwg, size->map.pwg);
475 if (strcmp(size2->map.ppd, size->map.ppd))
476 printf(" SAVED size->map.ppd=\"%s\", ORIG "
477 "size->map.ppd=\"%s\"\n", size2->map.ppd, size->map.ppd);
479 if (size2->width != size->width)
480 printf(" SAVED size->width=%d, ORIG size->width=%d\n",
481 size2->width, size->width);
483 if (size2->length != size->length)
484 printf(" SAVED size->length=%d, ORIG size->length=%d\n",
485 size2->length, size->length);
487 if (size2->left != size->left)
488 printf(" SAVED size->left=%d, ORIG size->left=%d\n",
489 size2->left, size->left);
491 if (size2->bottom != size->bottom)
492 printf(" SAVED size->bottom=%d, ORIG size->bottom=%d\n",
493 size2->bottom, size->bottom);
495 if (size2->right != size->right)
496 printf(" SAVED size->right=%d, ORIG size->right=%d\n",
497 size2->right, size->right);
499 if (size2->top != size->top)
500 printf(" SAVED size->top=%d, ORIG size->top=%d\n",
501 size2->top, size->top);
508 for (i = pc->num_sources, map = pc->sources, map2 = pc2->sources;
510 i --, map ++, map2 ++)
512 if (strcmp(map2->pwg, map->pwg) ||
513 strcmp(map2->ppd, map->ppd))
518 if (strcmp(map->pwg, map2->pwg))
519 printf(" SAVED source->pwg=\"%s\", ORIG source->pwg=\"%s\"\n",
520 map2->pwg, map->pwg);
522 if (strcmp(map2->ppd, map->ppd))
523 printf(" SAVED source->ppd=\"%s\", ORIG source->ppd=\"%s\"\n",
524 map2->ppd, map->ppd);
531 for (i = pc->num_types, map = pc->types, map2 = pc2->types;
533 i --, map ++, map2 ++)
535 if (strcmp(map2->pwg, map->pwg) ||
536 strcmp(map2->ppd, map->ppd))
541 if (strcmp(map->pwg, map2->pwg))
542 printf(" SAVED type->pwg=\"%s\", ORIG type->pwg=\"%s\"\n",
543 map2->pwg, map->pwg);
545 if (strcmp(map2->ppd, map->ppd))
546 printf(" SAVED type->ppd=\"%s\", ORIG type->ppd=\"%s\"\n",
547 map2->ppd, map->ppd);
558 _ppdCacheDestroy(pc2);
562 * Test PageSize mapping code...
565 status += test_pagesize(pc, ppd, "Letter");
566 status += test_pagesize(pc, ppd, "na-letter");
567 status += test_pagesize(pc, ppd, "A4");
568 status += test_pagesize(pc, ppd, "iso-a4");