]>
Commit | Line | Data |
---|---|---|
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 |
35 | static int test_pwg(_pwg_t *pwg, ppd_file_t *ppd); |
36 | static 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 | ||
44 | int /* O - Exit status */ | |
45 | main(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 | ||
270 | static int /* O - 1 on failure, 0 on success */ | |
271 | test_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 | ||
328 | static int /* O - 1 on failure, 0 on success */ | |
6c48a6ca MS |
329 | test_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 | */ |