]> git.ipfire.org Git - thirdparty/cups.git/blame - cups/testpwg.c
Merge changes from CUPS 1.5svn-r9374.
[thirdparty/cups.git] / cups / testpwg.c
CommitLineData
54afec33
MS
1/*
2 * "$Id$"
3 *
4 * PWG test program for CUPS.
5 *
6 * Copyright 2009-2010 by Apple Inc.
7 *
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/".
13 *
14 * This file is subject to the Apple OS-Developed Software exception.
15 *
16 * Contents:
17 *
6c48a6ca
MS
18 * main() - Main entry.
19 * test_pagesize() - Test the PWG mapping functions.
20 * test_pwg() - Test the PWG mapping functions.
54afec33
MS
21 */
22
23/*
24 * Include necessary headers...
25 */
26
aaf19ab0 27#include "ppd-private.h"
6c48a6ca 28#include "file-private.h"
54afec33
MS
29
30
31/*
32 * Local functions...
33 */
34
6c48a6ca
MS
35static int test_pwg(_pwg_t *pwg, ppd_file_t *ppd);
36static int test_pagesize(_pwg_t *pwg, ppd_file_t *ppd,
37 const char *ppdsize);
54afec33
MS
38
39
40/*
41 * 'main()' - Main entry.
42 */
43
44int /* O - Exit status */
45main(int argc, /* I - Number of command-line args */
46 char *argv[]) /* I - Command-line arguments */
47{
48 int status; /* Status of tests (0 = success, 1 = fail) */
49 const char *ppdfile; /* PPD filename */
50 ppd_file_t *ppd; /* PPD file */
51 _pwg_t *pwg; /* PWG mapping data */
52 _pwg_media_t *pwgmedia; /* PWG media size */
53
54
55 status = 0;
56
6c48a6ca 57 if (argc < 2 || argc > 3)
54afec33 58 {
6c48a6ca 59 puts("Usage: ./testpwg filename.ppd [jobfile]");
54afec33
MS
60 return (1);
61 }
6c48a6ca
MS
62
63 ppdfile = argv[1];
54afec33
MS
64
65 printf("ppdOpenFile(%s): ", ppdfile);
66 if ((ppd = ppdOpenFile(ppdfile)) == NULL)
67 {
68 ppd_status_t err; /* Last error in file */
69 int line; /* Line number in file */
70
71
72 err = ppdLastError(&line);
73
74 printf("FAIL (%s on line %d)\n", ppdErrorString(err), line);
75
76 return (1);
77 }
78 else
79 puts("PASS");
80
81 fputs("_pwgCreateWithPPD(ppd): ", stdout);
82 if ((pwg = _pwgCreateWithPPD(ppd)) == NULL)
83 {
84 puts("FAIL");
85 status ++;
86 }
87 else
88 {
89 puts("PASS");
6c48a6ca
MS
90 status += test_pwg(pwg, ppd);
91
92 if (argc == 3)
93 {
94 /*
95 * Test PageSize mapping code.
96 */
97
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 */
102
103 if ((fd = open(argv[2], O_RDONLY)) >= 0)
104 {
105 job = ippNew();
106 ippReadFile(fd, job);
107 close(fd);
108
109 if ((media = ippFindAttribute(job, "media", IPP_TAG_ZERO)) != NULL &&
110 media->value_tag != IPP_TAG_NAME &&
111 media->value_tag != IPP_TAG_KEYWORD)
112 media = NULL;
113
114 if (media)
115 printf("_pwgGetPageSize(media=%s): ", media->values[0].string.text);
116 else
117 fputs("_pwgGetPageSize(media-col): ", stdout);
118
119 fflush(stdout);
120
121 if ((pagesize = _pwgGetPageSize(pwg, job, NULL, NULL)) == NULL)
122 {
123 puts("FAIL (Not Found)");
124 status = 1;
125 }
126 else if (media && strcasecmp(pagesize, media->values[0].string.text))
127 {
128 printf("FAIL (Got \"%s\", Expected \"%s\")\n", pagesize,
129 media->values[0].string.text);
130 status = 1;
131 }
132 else
133 printf("PASS (%s)\n", pagesize);
134
135 ippDelete(job);
136 }
137 else
138 {
139 perror(argv[2]);
140 status = 1;
141 }
142 }
54afec33
MS
143
144 /*
145 * _pwgDestroy should never fail...
146 */
147
148 fputs("_pwgDestroy(pwg): ", stdout);
149 _pwgDestroy(pwg);
150 puts("PASS");
151 }
152
7cf5915e
MS
153 fputs("_pwgMediaForPWG(\"iso_a4_210x297mm\"): ", stdout);
154 if ((pwgmedia = _pwgMediaForPWG("iso_a4_210x297mm")) == NULL)
155 {
156 puts("FAIL (not found)");
157 status ++;
158 }
159 else if (strcmp(pwgmedia->pwg, "iso_a4_210x297mm"))
160 {
161 printf("FAIL (%s)\n", pwgmedia->pwg);
162 status ++;
163 }
164 else if (pwgmedia->width != 21000 || pwgmedia->length != 29700)
165 {
166 printf("FAIL (%dx%d)\n", pwgmedia->width, pwgmedia->length);
167 status ++;
168 }
169 else
170 puts("PASS");
171
172 fputs("_pwgMediaForLegacy(\"na-letter\"): ", stdout);
173 if ((pwgmedia = _pwgMediaForLegacy("na-letter")) == NULL)
174 {
175 puts("FAIL (not found)");
176 status ++;
177 }
178 else if (strcmp(pwgmedia->pwg, "na_letter_8.5x11in"))
179 {
180 printf("FAIL (%s)\n", pwgmedia->pwg);
181 status ++;
182 }
183 else if (pwgmedia->width != 21590 || pwgmedia->length != 27940)
184 {
185 printf("FAIL (%dx%d)\n", pwgmedia->width, pwgmedia->length);
186 status ++;
187 }
188 else
189 puts("PASS");
190
191 fputs("_pwgMediaForPPD(\"4x6\"): ", stdout);
192 if ((pwgmedia = _pwgMediaForPPD("4x6")) == NULL)
193 {
194 puts("FAIL (not found)");
195 status ++;
196 }
197 else if (strcmp(pwgmedia->pwg, "na_index-4x6_4x6in"))
198 {
199 printf("FAIL (%s)\n", pwgmedia->pwg);
200 status ++;
201 }
202 else if (pwgmedia->width != 10160 || pwgmedia->length != 15240)
203 {
204 printf("FAIL (%dx%d)\n", pwgmedia->width, pwgmedia->length);
205 status ++;
206 }
207 else
208 puts("PASS");
209
210 fputs("_pwgMediaForPPD(\"10x15cm\"): ", stdout);
211 if ((pwgmedia = _pwgMediaForPPD("10x15cm")) == NULL)
212 {
213 puts("FAIL (not found)");
214 status ++;
215 }
216 else if (strcmp(pwgmedia->pwg, "om_100x150mm_100x150mm"))
217 {
218 printf("FAIL (%s)\n", pwgmedia->pwg);
219 status ++;
220 }
221 else if (pwgmedia->width != 10000 || pwgmedia->length != 15000)
222 {
223 printf("FAIL (%dx%d)\n", pwgmedia->width, pwgmedia->length);
224 status ++;
225 }
226 else
227 puts("PASS");
228
229 fputs("_pwgMediaForPPD(\"Custom.10x15cm\"): ", stdout);
230 if ((pwgmedia = _pwgMediaForPPD("Custom.10x15cm")) == NULL)
231 {
232 puts("FAIL (not found)");
233 status ++;
234 }
235 else if (strcmp(pwgmedia->pwg, "custom_10x15cm_100x150mm"))
236 {
237 printf("FAIL (%s)\n", pwgmedia->pwg);
238 status ++;
239 }
240 else if (pwgmedia->width != 10000 || pwgmedia->length != 15000)
241 {
242 printf("FAIL (%dx%d)\n", pwgmedia->width, pwgmedia->length);
243 status ++;
244 }
245 else
246 puts("PASS");
247
54afec33
MS
248 fputs("_pwgMediaForSize(29700, 42000): ", stdout);
249 if ((pwgmedia = _pwgMediaForSize(29700, 42000)) == NULL)
250 {
251 puts("FAIL (not found)");
252 status ++;
253 }
254 else if (strcmp(pwgmedia->pwg, "iso_a3_297x420mm"))
255 {
256 printf("FAIL (%s)\n", pwgmedia->pwg);
257 status ++;
258 }
259 else
260 puts("PASS");
261
262 return (status);
263}
264
265
6c48a6ca
MS
266/*
267 * 'test_pagesize()' - Test the PWG mapping functions.
268 */
269
270static int /* O - 1 on failure, 0 on success */
271test_pagesize(_pwg_t *pwg, /* I - PWG mapping data */
272 ppd_file_t *ppd, /* I - PPD file */
273 const char *ppdsize) /* I - PPD page size */
274{
275 int status = 0; /* Return status */
276 ipp_t *job; /* Job attributes */
277 const char *pagesize; /* PageSize value */
278
279
280 if (ppdPageSize(ppd, ppdsize))
281 {
282 printf("_pwgGetPageSize(keyword=%s): ", ppdsize);
283 fflush(stdout);
284
285 if ((pagesize = _pwgGetPageSize(pwg, NULL, ppdsize, NULL)) == NULL)
286 {
287 puts("FAIL (Not Found)");
288 status = 1;
289 }
290 else if (strcasecmp(pagesize, ppdsize))
291 {
292 printf("FAIL (Got \"%s\", Expected \"%s\")\n", pagesize, ppdsize);
293 status = 1;
294 }
295 else
296 puts("PASS");
297
298 job = ippNew();
299 ippAddString(job, IPP_TAG_JOB, IPP_TAG_KEYWORD, "media", NULL, ppdsize);
300
301 printf("_pwgGetPageSize(media=%s): ", ppdsize);
302 fflush(stdout);
303
304 if ((pagesize = _pwgGetPageSize(pwg, job, NULL, NULL)) == NULL)
305 {
306 puts("FAIL (Not Found)");
307 status = 1;
308 }
309 else if (strcasecmp(pagesize, ppdsize))
310 {
311 printf("FAIL (Got \"%s\", Expected \"%s\")\n", pagesize, ppdsize);
312 status = 1;
313 }
314 else
315 puts("PASS");
316
317 ippDelete(job);
318 }
319
320 return (status);
321}
322
323
54afec33
MS
324/*
325 * 'test_pwg()' - Test the PWG mapping functions.
326 */
327
328static int /* O - 1 on failure, 0 on success */
6c48a6ca
MS
329test_pwg(_pwg_t *pwg, /* I - PWG mapping data */
330 ppd_file_t *ppd) /* I - PPD file */
54afec33
MS
331{
332 int i, /* Looping var */
333 status = 0; /* Return status */
334 _pwg_t *pwg2; /* Loaded data */
335 _pwg_size_t *size, /* Size from original */
336 *size2; /* Size from saved */
337 _pwg_map_t *map, /* Map from original */
338 *map2; /* Map from saved */
339
340
341 /*
342 * Verify that we can write and read back the same data...
343 */
344
345 fputs("_pwgWriteFile(test.pwg): ", stdout);
346 if (!_pwgWriteFile(pwg, "test.pwg"))
347 {
348 puts("FAIL");
349 status ++;
350 }
351 else
352 puts("PASS");
353
354 fputs("_pwgCreateWithFile(test.pwg): ", stdout);
355 if ((pwg2 = _pwgCreateWithFile("test.pwg")) == NULL)
356 {
357 puts("FAIL");
358 status ++;
359 }
360 else
361 {
362 if (pwg2->num_sizes != pwg->num_sizes)
363 {
364 if (!status)
365 puts("FAIL");
366
367 printf(" SAVED num_sizes=%d, ORIG num_sizes=%d\n", pwg2->num_sizes,
368 pwg->num_sizes);
369
370 status ++;
371 }
372 else
373 {
374 for (i = pwg->num_sizes, size = pwg->sizes, size2 = pwg2->sizes;
375 i > 0;
376 i --, size ++, size2 ++)
377 {
378 if (strcmp(size2->map.pwg, size->map.pwg) ||
379 strcmp(size2->map.ppd, size->map.ppd) ||
380 size2->width != size->width ||
381 size2->length != size->length ||
382 size2->left != size->left ||
383 size2->bottom != size->bottom ||
384 size2->right != size->right ||
385 size2->top != size->top)
386 {
387 if (!status)
388 puts("FAIL");
389
390 if (strcmp(size->map.pwg, size2->map.pwg))
391 printf(" SAVED size->map.pwg=\"%s\", ORIG "
392 "size->map.pwg=\"%s\"\n", size2->map.pwg, size->map.pwg);
393
394 if (strcmp(size2->map.ppd, size->map.ppd))
395 printf(" SAVED size->map.ppd=\"%s\", ORIG "
396 "size->map.ppd=\"%s\"\n", size2->map.ppd, size->map.ppd);
397
398 if (size2->width != size->width)
399 printf(" SAVED size->width=%d, ORIG size->width=%d\n",
400 size2->width, size->width);
401
402 if (size2->length != size->length)
403 printf(" SAVED size->length=%d, ORIG size->length=%d\n",
404 size2->length, size->length);
405
406 if (size2->left != size->left)
407 printf(" SAVED size->left=%d, ORIG size->left=%d\n",
408 size2->left, size->left);
409
410 if (size2->bottom != size->bottom)
411 printf(" SAVED size->bottom=%d, ORIG size->bottom=%d\n",
412 size2->bottom, size->bottom);
413
414 if (size2->right != size->right)
415 printf(" SAVED size->right=%d, ORIG size->right=%d\n",
416 size2->right, size->right);
417
418 if (size2->top != size->top)
419 printf(" SAVED size->top=%d, ORIG size->top=%d\n",
420 size2->top, size->top);
421
422 status ++;
423 break;
424 }
425 }
426
427 for (i = pwg->num_sources, map = pwg->sources, map2 = pwg2->sources;
428 i > 0;
429 i --, map ++, map2 ++)
430 {
431 if (strcmp(map2->pwg, map->pwg) ||
432 strcmp(map2->ppd, map->ppd))
433 {
434 if (!status)
435 puts("FAIL");
436
437 if (strcmp(map->pwg, map2->pwg))
438 printf(" SAVED source->pwg=\"%s\", ORIG source->pwg=\"%s\"\n",
439 map2->pwg, map->pwg);
440
441 if (strcmp(map2->ppd, map->ppd))
442 printf(" SAVED source->ppd=\"%s\", ORIG source->ppd=\"%s\"\n",
443 map2->ppd, map->ppd);
444
445 status ++;
446 break;
447 }
448 }
449
450 for (i = pwg->num_types, map = pwg->types, map2 = pwg2->types;
451 i > 0;
452 i --, map ++, map2 ++)
453 {
454 if (strcmp(map2->pwg, map->pwg) ||
455 strcmp(map2->ppd, map->ppd))
456 {
457 if (!status)
458 puts("FAIL");
459
460 if (strcmp(map->pwg, map2->pwg))
461 printf(" SAVED type->pwg=\"%s\", ORIG type->pwg=\"%s\"\n",
462 map2->pwg, map->pwg);
463
464 if (strcmp(map2->ppd, map->ppd))
465 printf(" SAVED type->ppd=\"%s\", ORIG type->ppd=\"%s\"\n",
466 map2->ppd, map->ppd);
467
468 status ++;
469 break;
470 }
471 }
472 }
473
474 if (!status)
475 puts("PASS");
6c48a6ca
MS
476
477 _pwgDestroy(pwg2);
54afec33
MS
478 }
479
6c48a6ca
MS
480 /*
481 * Test PageSize mapping code...
482 */
483
484 status += test_pagesize(pwg, ppd, "Letter");
485 status += test_pagesize(pwg, ppd, "na-letter");
486 status += test_pagesize(pwg, ppd, "A4");
487 status += test_pagesize(pwg, ppd, "iso-a4");
488
54afec33
MS
489 return (status);
490}
491
492
493/*
494 * End of "$Id$".
495 */