]>
git.ipfire.org Git - thirdparty/cups.git/blob - cups/testpwg.c
4 * PWG test program for CUPS.
6 * Copyright 2009-2013 by Apple Inc.
8 * These coded instructions, statements, and computer programs are the
9 * property of Apple Inc. and are protected by Federal copyright
10 * law. Distribution and use rights are outlined in the file "LICENSE.txt"
11 * which should have been included with this file. If this file is
12 * file is missing or damaged, see the license at "http://www.cups.org/".
14 * This file is subject to the Apple OS-Developed Software exception.
18 * main() - Main entry.
19 * test_pagesize() - Test the PWG mapping functions.
20 * test_ppd_cache() - Test the PPD cache functions.
24 * Include necessary headers...
27 #include "ppd-private.h"
28 #include "file-private.h"
35 static int test_pagesize(_ppd_cache_t
*pc
, ppd_file_t
*ppd
,
37 static int test_ppd_cache(_ppd_cache_t
*pc
, ppd_file_t
*ppd
);
41 * 'main()' - Main entry.
44 int /* O - Exit status */
45 main(int argc
, /* I - Number of command-line args */
46 char *argv
[]) /* I - Command-line arguments */
48 int status
; /* Status of tests (0 = success, 1 = fail) */
49 const char *ppdfile
; /* PPD filename */
50 ppd_file_t
*ppd
; /* PPD file */
51 _ppd_cache_t
*pc
; /* PPD cache and PWG mapping data */
52 pwg_media_t
*pwgmedia
; /* PWG media size */
57 if (argc
< 2 || argc
> 3)
59 puts("Usage: ./testpwg filename.ppd [jobfile]");
65 printf("ppdOpenFile(%s): ", ppdfile
);
66 if ((ppd
= ppdOpenFile(ppdfile
)) == NULL
)
68 ppd_status_t err
; /* Last error in file */
69 int line
; /* Line number in file */
72 err
= ppdLastError(&line
);
74 printf("FAIL (%s on line %d)\n", ppdErrorString(err
), line
);
81 fputs("_ppdCacheCreateWithPPD(ppd): ", stdout
);
82 if ((pc
= _ppdCacheCreateWithPPD(ppd
)) == NULL
)
90 status
+= test_ppd_cache(pc
, ppd
);
95 * Test PageSize mapping code.
98 int fd
; /* Job file descriptor */
99 const char *pagesize
; /* PageSize value */
100 ipp_t
*job
; /* Job attributes */
101 ipp_attribute_t
*media
; /* Media attribute */
103 if ((fd
= open(argv
[2], O_RDONLY
)) >= 0)
106 ippReadFile(fd
, job
);
109 if ((media
= ippFindAttribute(job
, "media", IPP_TAG_ZERO
)) != NULL
&&
110 media
->value_tag
!= IPP_TAG_NAME
&&
111 media
->value_tag
!= IPP_TAG_KEYWORD
)
115 printf("_ppdCacheGetPageSize(media=%s): ",
116 media
->values
[0].string
.text
);
118 fputs("_ppdCacheGetPageSize(media-col): ", stdout
);
122 if ((pagesize
= _ppdCacheGetPageSize(pc
, job
, NULL
, NULL
)) == NULL
)
124 puts("FAIL (Not Found)");
127 else if (media
&& _cups_strcasecmp(pagesize
, media
->values
[0].string
.text
))
129 printf("FAIL (Got \"%s\", Expected \"%s\")\n", pagesize
,
130 media
->values
[0].string
.text
);
134 printf("PASS (%s)\n", pagesize
);
146 * _ppdCacheDestroy should never fail...
149 fputs("_ppdCacheDestroy(pc): ", stdout
);
150 _ppdCacheDestroy(pc
);
154 fputs("pwgMediaForPWG(\"iso_a4_210x297mm\"): ", stdout
);
155 if ((pwgmedia
= pwgMediaForPWG("iso_a4_210x297mm")) == NULL
)
157 puts("FAIL (not found)");
160 else if (strcmp(pwgmedia
->pwg
, "iso_a4_210x297mm"))
162 printf("FAIL (%s)\n", pwgmedia
->pwg
);
165 else if (pwgmedia
->width
!= 21000 || pwgmedia
->length
!= 29700)
167 printf("FAIL (%dx%d)\n", pwgmedia
->width
, pwgmedia
->length
);
173 fputs("pwgMediaForLegacy(\"na-letter\"): ", stdout
);
174 if ((pwgmedia
= pwgMediaForLegacy("na-letter")) == NULL
)
176 puts("FAIL (not found)");
179 else if (strcmp(pwgmedia
->pwg
, "na_letter_8.5x11in"))
181 printf("FAIL (%s)\n", pwgmedia
->pwg
);
184 else if (pwgmedia
->width
!= 21590 || pwgmedia
->length
!= 27940)
186 printf("FAIL (%dx%d)\n", pwgmedia
->width
, pwgmedia
->length
);
192 fputs("pwgMediaForPPD(\"4x6\"): ", stdout
);
193 if ((pwgmedia
= pwgMediaForPPD("4x6")) == NULL
)
195 puts("FAIL (not found)");
198 else if (strcmp(pwgmedia
->pwg
, "na_index-4x6_4x6in"))
200 printf("FAIL (%s)\n", pwgmedia
->pwg
);
203 else if (pwgmedia
->width
!= 10160 || pwgmedia
->length
!= 15240)
205 printf("FAIL (%dx%d)\n", pwgmedia
->width
, pwgmedia
->length
);
211 fputs("pwgMediaForPPD(\"10x15cm\"): ", stdout
);
212 if ((pwgmedia
= pwgMediaForPPD("10x15cm")) == NULL
)
214 puts("FAIL (not found)");
217 else if (strcmp(pwgmedia
->pwg
, "om_100x150mm_100x150mm"))
219 printf("FAIL (%s)\n", pwgmedia
->pwg
);
222 else if (pwgmedia
->width
!= 10000 || pwgmedia
->length
!= 15000)
224 printf("FAIL (%dx%d)\n", pwgmedia
->width
, pwgmedia
->length
);
230 fputs("pwgMediaForPPD(\"Custom.10x15cm\"): ", stdout
);
231 if ((pwgmedia
= pwgMediaForPPD("Custom.10x15cm")) == NULL
)
233 puts("FAIL (not found)");
236 else if (strcmp(pwgmedia
->pwg
, "custom_10x15cm_100x150mm"))
238 printf("FAIL (%s)\n", pwgmedia
->pwg
);
241 else if (pwgmedia
->width
!= 10000 || pwgmedia
->length
!= 15000)
243 printf("FAIL (%dx%d)\n", pwgmedia
->width
, pwgmedia
->length
);
249 fputs("pwgMediaForSize(29700, 42000): ", stdout
);
250 if ((pwgmedia
= pwgMediaForSize(29700, 42000)) == NULL
)
252 puts("FAIL (not found)");
255 else if (strcmp(pwgmedia
->pwg
, "iso_a3_297x420mm"))
257 printf("FAIL (%s)\n", pwgmedia
->pwg
);
263 fputs("pwgMediaForSize(9842, 19050): ", stdout
);
264 if ((pwgmedia
= pwgMediaForSize(9842, 19050)) == NULL
)
266 puts("FAIL (not found)");
269 else if (strcmp(pwgmedia
->pwg
, "na_monarch_3.875x7.5in"))
271 printf("FAIL (%s)\n", pwgmedia
->pwg
);
275 printf("PASS (%s)\n", pwgmedia
->pwg
);
277 fputs("pwgMediaForSize(9800, 19000): ", stdout
);
278 if ((pwgmedia
= pwgMediaForSize(9800, 19000)) == NULL
)
280 puts("FAIL (not found)");
283 else if (strcmp(pwgmedia
->pwg
, "jpn_you6_98x190mm"))
285 printf("FAIL (%s)\n", pwgmedia
->pwg
);
289 printf("PASS (%s)\n", pwgmedia
->pwg
);
296 * 'test_pagesize()' - Test the PWG mapping functions.
299 static int /* O - 1 on failure, 0 on success */
300 test_pagesize(_ppd_cache_t
*pc
, /* I - PWG mapping data */
301 ppd_file_t
*ppd
, /* I - PPD file */
302 const char *ppdsize
) /* I - PPD page size */
304 int status
= 0; /* Return status */
305 ipp_t
*job
; /* Job attributes */
306 const char *pagesize
; /* PageSize value */
309 if (ppdPageSize(ppd
, ppdsize
))
311 printf("_ppdCacheGetPageSize(keyword=%s): ", ppdsize
);
314 if ((pagesize
= _ppdCacheGetPageSize(pc
, NULL
, ppdsize
, NULL
)) == NULL
)
316 puts("FAIL (Not Found)");
319 else if (_cups_strcasecmp(pagesize
, ppdsize
))
321 printf("FAIL (Got \"%s\", Expected \"%s\")\n", pagesize
, ppdsize
);
328 ippAddString(job
, IPP_TAG_JOB
, IPP_TAG_KEYWORD
, "media", NULL
, ppdsize
);
330 printf("_ppdCacheGetPageSize(media=%s): ", ppdsize
);
333 if ((pagesize
= _ppdCacheGetPageSize(pc
, job
, NULL
, NULL
)) == NULL
)
335 puts("FAIL (Not Found)");
338 else if (_cups_strcasecmp(pagesize
, ppdsize
))
340 printf("FAIL (Got \"%s\", Expected \"%s\")\n", pagesize
, ppdsize
);
354 * 'test_ppd_cache()' - Test the PPD cache functions.
357 static int /* O - 1 on failure, 0 on success */
358 test_ppd_cache(_ppd_cache_t
*pc
, /* I - PWG mapping data */
359 ppd_file_t
*ppd
) /* I - PPD file */
361 int i
, /* Looping var */
362 status
= 0; /* Return status */
363 _ppd_cache_t
*pc2
; /* Loaded data */
364 pwg_size_t
*size
, /* Size from original */
365 *size2
; /* Size from saved */
366 pwg_map_t
*map
, /* Map from original */
367 *map2
; /* Map from saved */
371 * Verify that we can write and read back the same data...
374 fputs("_ppdCacheWriteFile(test.pwg): ", stdout
);
375 if (!_ppdCacheWriteFile(pc
, "test.pwg", NULL
))
383 fputs("_ppdCacheCreateWithFile(test.pwg): ", stdout
);
384 if ((pc2
= _ppdCacheCreateWithFile("test.pwg", NULL
)) == NULL
)
391 // TODO: FINISH ADDING ALL VALUES IN STRUCTURE
392 if (pc2
->num_sizes
!= pc
->num_sizes
)
397 printf(" SAVED num_sizes=%d, ORIG num_sizes=%d\n", pc2
->num_sizes
,
404 for (i
= pc
->num_sizes
, size
= pc
->sizes
, size2
= pc2
->sizes
;
406 i
--, size
++, size2
++)
408 if (strcmp(size2
->map
.pwg
, size
->map
.pwg
) ||
409 strcmp(size2
->map
.ppd
, size
->map
.ppd
) ||
410 size2
->width
!= size
->width
||
411 size2
->length
!= size
->length
||
412 size2
->left
!= size
->left
||
413 size2
->bottom
!= size
->bottom
||
414 size2
->right
!= size
->right
||
415 size2
->top
!= size
->top
)
420 if (strcmp(size
->map
.pwg
, size2
->map
.pwg
))
421 printf(" SAVED size->map.pwg=\"%s\", ORIG "
422 "size->map.pwg=\"%s\"\n", size2
->map
.pwg
, size
->map
.pwg
);
424 if (strcmp(size2
->map
.ppd
, size
->map
.ppd
))
425 printf(" SAVED size->map.ppd=\"%s\", ORIG "
426 "size->map.ppd=\"%s\"\n", size2
->map
.ppd
, size
->map
.ppd
);
428 if (size2
->width
!= size
->width
)
429 printf(" SAVED size->width=%d, ORIG size->width=%d\n",
430 size2
->width
, size
->width
);
432 if (size2
->length
!= size
->length
)
433 printf(" SAVED size->length=%d, ORIG size->length=%d\n",
434 size2
->length
, size
->length
);
436 if (size2
->left
!= size
->left
)
437 printf(" SAVED size->left=%d, ORIG size->left=%d\n",
438 size2
->left
, size
->left
);
440 if (size2
->bottom
!= size
->bottom
)
441 printf(" SAVED size->bottom=%d, ORIG size->bottom=%d\n",
442 size2
->bottom
, size
->bottom
);
444 if (size2
->right
!= size
->right
)
445 printf(" SAVED size->right=%d, ORIG size->right=%d\n",
446 size2
->right
, size
->right
);
448 if (size2
->top
!= size
->top
)
449 printf(" SAVED size->top=%d, ORIG size->top=%d\n",
450 size2
->top
, size
->top
);
457 for (i
= pc
->num_sources
, map
= pc
->sources
, map2
= pc2
->sources
;
459 i
--, map
++, map2
++)
461 if (strcmp(map2
->pwg
, map
->pwg
) ||
462 strcmp(map2
->ppd
, map
->ppd
))
467 if (strcmp(map
->pwg
, map2
->pwg
))
468 printf(" SAVED source->pwg=\"%s\", ORIG source->pwg=\"%s\"\n",
469 map2
->pwg
, map
->pwg
);
471 if (strcmp(map2
->ppd
, map
->ppd
))
472 printf(" SAVED source->ppd=\"%s\", ORIG source->ppd=\"%s\"\n",
473 map2
->ppd
, map
->ppd
);
480 for (i
= pc
->num_types
, map
= pc
->types
, map2
= pc2
->types
;
482 i
--, map
++, map2
++)
484 if (strcmp(map2
->pwg
, map
->pwg
) ||
485 strcmp(map2
->ppd
, map
->ppd
))
490 if (strcmp(map
->pwg
, map2
->pwg
))
491 printf(" SAVED type->pwg=\"%s\", ORIG type->pwg=\"%s\"\n",
492 map2
->pwg
, map
->pwg
);
494 if (strcmp(map2
->ppd
, map
->ppd
))
495 printf(" SAVED type->ppd=\"%s\", ORIG type->ppd=\"%s\"\n",
496 map2
->ppd
, map
->ppd
);
507 _ppdCacheDestroy(pc2
);
511 * Test PageSize mapping code...
514 status
+= test_pagesize(pc
, ppd
, "Letter");
515 status
+= test_pagesize(pc
, ppd
, "na-letter");
516 status
+= test_pagesize(pc
, ppd
, "A4");
517 status
+= test_pagesize(pc
, ppd
, "iso-a4");