1*5e7646d2SAndroid Build Coastguard Worker /*
2*5e7646d2SAndroid Build Coastguard Worker * PPD test program for CUPS.
3*5e7646d2SAndroid Build Coastguard Worker *
4*5e7646d2SAndroid Build Coastguard Worker * Copyright © 2007-2018 by Apple Inc.
5*5e7646d2SAndroid Build Coastguard Worker * Copyright © 1997-2006 by Easy Software Products.
6*5e7646d2SAndroid Build Coastguard Worker *
7*5e7646d2SAndroid Build Coastguard Worker * Licensed under Apache License v2.0. See the file "LICENSE" for more
8*5e7646d2SAndroid Build Coastguard Worker * information.
9*5e7646d2SAndroid Build Coastguard Worker */
10*5e7646d2SAndroid Build Coastguard Worker
11*5e7646d2SAndroid Build Coastguard Worker /*
12*5e7646d2SAndroid Build Coastguard Worker * Include necessary headers...
13*5e7646d2SAndroid Build Coastguard Worker */
14*5e7646d2SAndroid Build Coastguard Worker
15*5e7646d2SAndroid Build Coastguard Worker #undef _CUPS_NO_DEPRECATED
16*5e7646d2SAndroid Build Coastguard Worker #include "cups-private.h"
17*5e7646d2SAndroid Build Coastguard Worker #include "ppd-private.h"
18*5e7646d2SAndroid Build Coastguard Worker #include "raster-private.h"
19*5e7646d2SAndroid Build Coastguard Worker #include <sys/stat.h>
20*5e7646d2SAndroid Build Coastguard Worker #ifdef _WIN32
21*5e7646d2SAndroid Build Coastguard Worker # include <io.h>
22*5e7646d2SAndroid Build Coastguard Worker #else
23*5e7646d2SAndroid Build Coastguard Worker # include <unistd.h>
24*5e7646d2SAndroid Build Coastguard Worker # include <fcntl.h>
25*5e7646d2SAndroid Build Coastguard Worker #endif /* _WIN32 */
26*5e7646d2SAndroid Build Coastguard Worker #include <math.h>
27*5e7646d2SAndroid Build Coastguard Worker
28*5e7646d2SAndroid Build Coastguard Worker
29*5e7646d2SAndroid Build Coastguard Worker /*
30*5e7646d2SAndroid Build Coastguard Worker * Local functions...
31*5e7646d2SAndroid Build Coastguard Worker */
32*5e7646d2SAndroid Build Coastguard Worker
33*5e7646d2SAndroid Build Coastguard Worker static int do_ppd_tests(const char *filename, int num_options, cups_option_t *options);
34*5e7646d2SAndroid Build Coastguard Worker static int do_ps_tests(void);
35*5e7646d2SAndroid Build Coastguard Worker static void print_changes(cups_page_header2_t *header, cups_page_header2_t *expected);
36*5e7646d2SAndroid Build Coastguard Worker
37*5e7646d2SAndroid Build Coastguard Worker
38*5e7646d2SAndroid Build Coastguard Worker /*
39*5e7646d2SAndroid Build Coastguard Worker * Test data...
40*5e7646d2SAndroid Build Coastguard Worker */
41*5e7646d2SAndroid Build Coastguard Worker
42*5e7646d2SAndroid Build Coastguard Worker static const char *dsc_code =
43*5e7646d2SAndroid Build Coastguard Worker "[{\n"
44*5e7646d2SAndroid Build Coastguard Worker "%%BeginFeature: *PageSize Tabloid\n"
45*5e7646d2SAndroid Build Coastguard Worker "<</PageSize[792 1224]>>setpagedevice\n"
46*5e7646d2SAndroid Build Coastguard Worker "%%EndFeature\n"
47*5e7646d2SAndroid Build Coastguard Worker "} stopped cleartomark\n";
48*5e7646d2SAndroid Build Coastguard Worker static const char *setpagedevice_code =
49*5e7646d2SAndroid Build Coastguard Worker "<<"
50*5e7646d2SAndroid Build Coastguard Worker "/MediaClass(Media Class)"
51*5e7646d2SAndroid Build Coastguard Worker "/MediaColor((Media Color))"
52*5e7646d2SAndroid Build Coastguard Worker "/MediaType(Media\\\\Type)"
53*5e7646d2SAndroid Build Coastguard Worker "/OutputType<416263>"
54*5e7646d2SAndroid Build Coastguard Worker "/AdvanceDistance 1000"
55*5e7646d2SAndroid Build Coastguard Worker "/AdvanceMedia 1"
56*5e7646d2SAndroid Build Coastguard Worker "/Collate false"
57*5e7646d2SAndroid Build Coastguard Worker "/CutMedia 2"
58*5e7646d2SAndroid Build Coastguard Worker "/Duplex true"
59*5e7646d2SAndroid Build Coastguard Worker "/HWResolution[100 200]"
60*5e7646d2SAndroid Build Coastguard Worker "/InsertSheet true"
61*5e7646d2SAndroid Build Coastguard Worker "/Jog 3"
62*5e7646d2SAndroid Build Coastguard Worker "/LeadingEdge 1"
63*5e7646d2SAndroid Build Coastguard Worker "/ManualFeed true"
64*5e7646d2SAndroid Build Coastguard Worker "/MediaPosition 8#777"
65*5e7646d2SAndroid Build Coastguard Worker "/MediaWeight 16#fe01"
66*5e7646d2SAndroid Build Coastguard Worker "/MirrorPrint true"
67*5e7646d2SAndroid Build Coastguard Worker "/NegativePrint true"
68*5e7646d2SAndroid Build Coastguard Worker "/NumCopies 1"
69*5e7646d2SAndroid Build Coastguard Worker "/Orientation 1"
70*5e7646d2SAndroid Build Coastguard Worker "/OutputFaceUp true"
71*5e7646d2SAndroid Build Coastguard Worker "/PageSize[612 792.1]"
72*5e7646d2SAndroid Build Coastguard Worker "/Separations true"
73*5e7646d2SAndroid Build Coastguard Worker "/TraySwitch true"
74*5e7646d2SAndroid Build Coastguard Worker "/Tumble true"
75*5e7646d2SAndroid Build Coastguard Worker "/cupsMediaType 2"
76*5e7646d2SAndroid Build Coastguard Worker "/cupsColorOrder 1"
77*5e7646d2SAndroid Build Coastguard Worker "/cupsColorSpace 1"
78*5e7646d2SAndroid Build Coastguard Worker "/cupsCompression 1"
79*5e7646d2SAndroid Build Coastguard Worker "/cupsRowCount 1"
80*5e7646d2SAndroid Build Coastguard Worker "/cupsRowFeed 1"
81*5e7646d2SAndroid Build Coastguard Worker "/cupsRowStep 1"
82*5e7646d2SAndroid Build Coastguard Worker "/cupsBorderlessScalingFactor 1.001"
83*5e7646d2SAndroid Build Coastguard Worker "/cupsInteger0 1"
84*5e7646d2SAndroid Build Coastguard Worker "/cupsInteger1 2"
85*5e7646d2SAndroid Build Coastguard Worker "/cupsInteger2 3"
86*5e7646d2SAndroid Build Coastguard Worker "/cupsInteger3 4"
87*5e7646d2SAndroid Build Coastguard Worker "/cupsInteger4 5"
88*5e7646d2SAndroid Build Coastguard Worker "/cupsInteger5 6"
89*5e7646d2SAndroid Build Coastguard Worker "/cupsInteger6 7"
90*5e7646d2SAndroid Build Coastguard Worker "/cupsInteger7 8"
91*5e7646d2SAndroid Build Coastguard Worker "/cupsInteger8 9"
92*5e7646d2SAndroid Build Coastguard Worker "/cupsInteger9 10"
93*5e7646d2SAndroid Build Coastguard Worker "/cupsInteger10 11"
94*5e7646d2SAndroid Build Coastguard Worker "/cupsInteger11 12"
95*5e7646d2SAndroid Build Coastguard Worker "/cupsInteger12 13"
96*5e7646d2SAndroid Build Coastguard Worker "/cupsInteger13 14"
97*5e7646d2SAndroid Build Coastguard Worker "/cupsInteger14 15"
98*5e7646d2SAndroid Build Coastguard Worker "/cupsInteger15 16"
99*5e7646d2SAndroid Build Coastguard Worker "/cupsReal0 1.1"
100*5e7646d2SAndroid Build Coastguard Worker "/cupsReal1 2.1"
101*5e7646d2SAndroid Build Coastguard Worker "/cupsReal2 3.1"
102*5e7646d2SAndroid Build Coastguard Worker "/cupsReal3 4.1"
103*5e7646d2SAndroid Build Coastguard Worker "/cupsReal4 5.1"
104*5e7646d2SAndroid Build Coastguard Worker "/cupsReal5 6.1"
105*5e7646d2SAndroid Build Coastguard Worker "/cupsReal6 7.1"
106*5e7646d2SAndroid Build Coastguard Worker "/cupsReal7 8.1"
107*5e7646d2SAndroid Build Coastguard Worker "/cupsReal8 9.1"
108*5e7646d2SAndroid Build Coastguard Worker "/cupsReal9 10.1"
109*5e7646d2SAndroid Build Coastguard Worker "/cupsReal10 11.1"
110*5e7646d2SAndroid Build Coastguard Worker "/cupsReal11 12.1"
111*5e7646d2SAndroid Build Coastguard Worker "/cupsReal12 13.1"
112*5e7646d2SAndroid Build Coastguard Worker "/cupsReal13 14.1"
113*5e7646d2SAndroid Build Coastguard Worker "/cupsReal14 15.1"
114*5e7646d2SAndroid Build Coastguard Worker "/cupsReal15 16.1"
115*5e7646d2SAndroid Build Coastguard Worker "/cupsString0(1)"
116*5e7646d2SAndroid Build Coastguard Worker "/cupsString1(2)"
117*5e7646d2SAndroid Build Coastguard Worker "/cupsString2(3)"
118*5e7646d2SAndroid Build Coastguard Worker "/cupsString3(4)"
119*5e7646d2SAndroid Build Coastguard Worker "/cupsString4(5)"
120*5e7646d2SAndroid Build Coastguard Worker "/cupsString5(6)"
121*5e7646d2SAndroid Build Coastguard Worker "/cupsString6(7)"
122*5e7646d2SAndroid Build Coastguard Worker "/cupsString7(8)"
123*5e7646d2SAndroid Build Coastguard Worker "/cupsString8(9)"
124*5e7646d2SAndroid Build Coastguard Worker "/cupsString9(10)"
125*5e7646d2SAndroid Build Coastguard Worker "/cupsString10(11)"
126*5e7646d2SAndroid Build Coastguard Worker "/cupsString11(12)"
127*5e7646d2SAndroid Build Coastguard Worker "/cupsString12(13)"
128*5e7646d2SAndroid Build Coastguard Worker "/cupsString13(14)"
129*5e7646d2SAndroid Build Coastguard Worker "/cupsString14(15)"
130*5e7646d2SAndroid Build Coastguard Worker "/cupsString15(16)"
131*5e7646d2SAndroid Build Coastguard Worker "/cupsMarkerType(Marker Type)"
132*5e7646d2SAndroid Build Coastguard Worker "/cupsRenderingIntent(Rendering Intent)"
133*5e7646d2SAndroid Build Coastguard Worker "/cupsPageSizeName(Letter)"
134*5e7646d2SAndroid Build Coastguard Worker "/cupsPreferredBitsPerColor 17"
135*5e7646d2SAndroid Build Coastguard Worker ">> setpagedevice";
136*5e7646d2SAndroid Build Coastguard Worker
137*5e7646d2SAndroid Build Coastguard Worker static cups_page_header2_t setpagedevice_header =
138*5e7646d2SAndroid Build Coastguard Worker {
139*5e7646d2SAndroid Build Coastguard Worker "Media Class", /* MediaClass */
140*5e7646d2SAndroid Build Coastguard Worker "(Media Color)", /* MediaColor */
141*5e7646d2SAndroid Build Coastguard Worker "Media\\Type", /* MediaType */
142*5e7646d2SAndroid Build Coastguard Worker "Abc", /* OutputType */
143*5e7646d2SAndroid Build Coastguard Worker 1000, /* AdvanceDistance */
144*5e7646d2SAndroid Build Coastguard Worker CUPS_ADVANCE_FILE, /* AdvanceMedia */
145*5e7646d2SAndroid Build Coastguard Worker CUPS_FALSE, /* Collate */
146*5e7646d2SAndroid Build Coastguard Worker CUPS_CUT_JOB, /* CutMedia */
147*5e7646d2SAndroid Build Coastguard Worker CUPS_TRUE, /* Duplex */
148*5e7646d2SAndroid Build Coastguard Worker { 100, 200 }, /* HWResolution */
149*5e7646d2SAndroid Build Coastguard Worker { 0, 0, 0, 0 }, /* ImagingBoundingBox */
150*5e7646d2SAndroid Build Coastguard Worker CUPS_TRUE, /* InsertSheet */
151*5e7646d2SAndroid Build Coastguard Worker CUPS_JOG_SET, /* Jog */
152*5e7646d2SAndroid Build Coastguard Worker CUPS_EDGE_RIGHT, /* LeadingEdge */
153*5e7646d2SAndroid Build Coastguard Worker { 0, 0 }, /* Margins */
154*5e7646d2SAndroid Build Coastguard Worker CUPS_TRUE, /* ManualFeed */
155*5e7646d2SAndroid Build Coastguard Worker 0777, /* MediaPosition */
156*5e7646d2SAndroid Build Coastguard Worker 0xfe01, /* MediaWeight */
157*5e7646d2SAndroid Build Coastguard Worker CUPS_TRUE, /* MirrorPrint */
158*5e7646d2SAndroid Build Coastguard Worker CUPS_TRUE, /* NegativePrint */
159*5e7646d2SAndroid Build Coastguard Worker 1, /* NumCopies */
160*5e7646d2SAndroid Build Coastguard Worker CUPS_ORIENT_90, /* Orientation */
161*5e7646d2SAndroid Build Coastguard Worker CUPS_TRUE, /* OutputFaceUp */
162*5e7646d2SAndroid Build Coastguard Worker { 612, 792 }, /* PageSize */
163*5e7646d2SAndroid Build Coastguard Worker CUPS_TRUE, /* Separations */
164*5e7646d2SAndroid Build Coastguard Worker CUPS_TRUE, /* TraySwitch */
165*5e7646d2SAndroid Build Coastguard Worker CUPS_TRUE, /* Tumble */
166*5e7646d2SAndroid Build Coastguard Worker 0, /* cupsWidth */
167*5e7646d2SAndroid Build Coastguard Worker 0, /* cupsHeight */
168*5e7646d2SAndroid Build Coastguard Worker 2, /* cupsMediaType */
169*5e7646d2SAndroid Build Coastguard Worker 0, /* cupsBitsPerColor */
170*5e7646d2SAndroid Build Coastguard Worker 0, /* cupsBitsPerPixel */
171*5e7646d2SAndroid Build Coastguard Worker 0, /* cupsBytesPerLine */
172*5e7646d2SAndroid Build Coastguard Worker CUPS_ORDER_BANDED, /* cupsColorOrder */
173*5e7646d2SAndroid Build Coastguard Worker CUPS_CSPACE_RGB, /* cupsColorSpace */
174*5e7646d2SAndroid Build Coastguard Worker 1, /* cupsCompression */
175*5e7646d2SAndroid Build Coastguard Worker 1, /* cupsRowCount */
176*5e7646d2SAndroid Build Coastguard Worker 1, /* cupsRowFeed */
177*5e7646d2SAndroid Build Coastguard Worker 1, /* cupsRowStep */
178*5e7646d2SAndroid Build Coastguard Worker 0, /* cupsNumColors */
179*5e7646d2SAndroid Build Coastguard Worker 1.001f, /* cupsBorderlessScalingFactor */
180*5e7646d2SAndroid Build Coastguard Worker { 612.0f, 792.1f }, /* cupsPageSize */
181*5e7646d2SAndroid Build Coastguard Worker { 0.0f, 0.0f, 0.0f, 0.0f }, /* cupsImagingBBox */
182*5e7646d2SAndroid Build Coastguard Worker { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 },
183*5e7646d2SAndroid Build Coastguard Worker /* cupsInteger[16] */
184*5e7646d2SAndroid Build Coastguard Worker { 1.1f, 2.1f, 3.1f, 4.1f, 5.1f, 6.1f, 7.1f, 8.1f, 9.1f, 10.1f, 11.1f, 12.1f, 13.1f, 14.1f, 15.1f, 16.1f }, /* cupsReal[16] */
185*5e7646d2SAndroid Build Coastguard Worker { "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13",
186*5e7646d2SAndroid Build Coastguard Worker "14", "15", "16" }, /* cupsString[16] */
187*5e7646d2SAndroid Build Coastguard Worker "Marker Type", /* cupsMarkerType */
188*5e7646d2SAndroid Build Coastguard Worker "Rendering Intent", /* cupsRenderingIntent */
189*5e7646d2SAndroid Build Coastguard Worker "Letter" /* cupsPageSizeName */
190*5e7646d2SAndroid Build Coastguard Worker };
191*5e7646d2SAndroid Build Coastguard Worker
192*5e7646d2SAndroid Build Coastguard Worker static const char *default_code =
193*5e7646d2SAndroid Build Coastguard Worker "[{\n"
194*5e7646d2SAndroid Build Coastguard Worker "%%BeginFeature: *InstalledDuplexer False\n"
195*5e7646d2SAndroid Build Coastguard Worker "%%EndFeature\n"
196*5e7646d2SAndroid Build Coastguard Worker "} stopped cleartomark\n"
197*5e7646d2SAndroid Build Coastguard Worker "[{\n"
198*5e7646d2SAndroid Build Coastguard Worker "%%BeginFeature: *PageRegion Letter\n"
199*5e7646d2SAndroid Build Coastguard Worker "PageRegion=Letter\n"
200*5e7646d2SAndroid Build Coastguard Worker "%%EndFeature\n"
201*5e7646d2SAndroid Build Coastguard Worker "} stopped cleartomark\n"
202*5e7646d2SAndroid Build Coastguard Worker "[{\n"
203*5e7646d2SAndroid Build Coastguard Worker "%%BeginFeature: *InputSlot Tray\n"
204*5e7646d2SAndroid Build Coastguard Worker "InputSlot=Tray\n"
205*5e7646d2SAndroid Build Coastguard Worker "%%EndFeature\n"
206*5e7646d2SAndroid Build Coastguard Worker "} stopped cleartomark\n"
207*5e7646d2SAndroid Build Coastguard Worker "[{\n"
208*5e7646d2SAndroid Build Coastguard Worker "%%BeginFeature: *OutputBin Tray1\n"
209*5e7646d2SAndroid Build Coastguard Worker "OutputBin=Tray1\n"
210*5e7646d2SAndroid Build Coastguard Worker "%%EndFeature\n"
211*5e7646d2SAndroid Build Coastguard Worker "} stopped cleartomark\n"
212*5e7646d2SAndroid Build Coastguard Worker "[{\n"
213*5e7646d2SAndroid Build Coastguard Worker "%%BeginFeature: *MediaType Plain\n"
214*5e7646d2SAndroid Build Coastguard Worker "MediaType=Plain\n"
215*5e7646d2SAndroid Build Coastguard Worker "%%EndFeature\n"
216*5e7646d2SAndroid Build Coastguard Worker "} stopped cleartomark\n"
217*5e7646d2SAndroid Build Coastguard Worker "[{\n"
218*5e7646d2SAndroid Build Coastguard Worker "%%BeginFeature: *IntOption None\n"
219*5e7646d2SAndroid Build Coastguard Worker "%%EndFeature\n"
220*5e7646d2SAndroid Build Coastguard Worker "} stopped cleartomark\n"
221*5e7646d2SAndroid Build Coastguard Worker "[{\n"
222*5e7646d2SAndroid Build Coastguard Worker "%%BeginFeature: *StringOption None\n"
223*5e7646d2SAndroid Build Coastguard Worker "%%EndFeature\n"
224*5e7646d2SAndroid Build Coastguard Worker "} stopped cleartomark\n";
225*5e7646d2SAndroid Build Coastguard Worker
226*5e7646d2SAndroid Build Coastguard Worker static const char *custom_code =
227*5e7646d2SAndroid Build Coastguard Worker "[{\n"
228*5e7646d2SAndroid Build Coastguard Worker "%%BeginFeature: *InstalledDuplexer False\n"
229*5e7646d2SAndroid Build Coastguard Worker "%%EndFeature\n"
230*5e7646d2SAndroid Build Coastguard Worker "} stopped cleartomark\n"
231*5e7646d2SAndroid Build Coastguard Worker "[{\n"
232*5e7646d2SAndroid Build Coastguard Worker "%%BeginFeature: *InputSlot Tray\n"
233*5e7646d2SAndroid Build Coastguard Worker "InputSlot=Tray\n"
234*5e7646d2SAndroid Build Coastguard Worker "%%EndFeature\n"
235*5e7646d2SAndroid Build Coastguard Worker "} stopped cleartomark\n"
236*5e7646d2SAndroid Build Coastguard Worker "[{\n"
237*5e7646d2SAndroid Build Coastguard Worker "%%BeginFeature: *MediaType Plain\n"
238*5e7646d2SAndroid Build Coastguard Worker "MediaType=Plain\n"
239*5e7646d2SAndroid Build Coastguard Worker "%%EndFeature\n"
240*5e7646d2SAndroid Build Coastguard Worker "} stopped cleartomark\n"
241*5e7646d2SAndroid Build Coastguard Worker "[{\n"
242*5e7646d2SAndroid Build Coastguard Worker "%%BeginFeature: *OutputBin Tray1\n"
243*5e7646d2SAndroid Build Coastguard Worker "OutputBin=Tray1\n"
244*5e7646d2SAndroid Build Coastguard Worker "%%EndFeature\n"
245*5e7646d2SAndroid Build Coastguard Worker "} stopped cleartomark\n"
246*5e7646d2SAndroid Build Coastguard Worker "[{\n"
247*5e7646d2SAndroid Build Coastguard Worker "%%BeginFeature: *IntOption None\n"
248*5e7646d2SAndroid Build Coastguard Worker "%%EndFeature\n"
249*5e7646d2SAndroid Build Coastguard Worker "} stopped cleartomark\n"
250*5e7646d2SAndroid Build Coastguard Worker "[{\n"
251*5e7646d2SAndroid Build Coastguard Worker "%%BeginFeature: *CustomStringOption True\n"
252*5e7646d2SAndroid Build Coastguard Worker "(value\\0502\\051)\n"
253*5e7646d2SAndroid Build Coastguard Worker "(value 1)\n"
254*5e7646d2SAndroid Build Coastguard Worker "StringOption=Custom\n"
255*5e7646d2SAndroid Build Coastguard Worker "%%EndFeature\n"
256*5e7646d2SAndroid Build Coastguard Worker "} stopped cleartomark\n"
257*5e7646d2SAndroid Build Coastguard Worker "[{\n"
258*5e7646d2SAndroid Build Coastguard Worker "%%BeginFeature: *CustomPageSize True\n"
259*5e7646d2SAndroid Build Coastguard Worker "400\n"
260*5e7646d2SAndroid Build Coastguard Worker "500\n"
261*5e7646d2SAndroid Build Coastguard Worker "0\n"
262*5e7646d2SAndroid Build Coastguard Worker "0\n"
263*5e7646d2SAndroid Build Coastguard Worker "0\n"
264*5e7646d2SAndroid Build Coastguard Worker "PageSize=Custom\n"
265*5e7646d2SAndroid Build Coastguard Worker "%%EndFeature\n"
266*5e7646d2SAndroid Build Coastguard Worker "} stopped cleartomark\n";
267*5e7646d2SAndroid Build Coastguard Worker
268*5e7646d2SAndroid Build Coastguard Worker static const char *default2_code =
269*5e7646d2SAndroid Build Coastguard Worker "[{\n"
270*5e7646d2SAndroid Build Coastguard Worker "%%BeginFeature: *InstalledDuplexer False\n"
271*5e7646d2SAndroid Build Coastguard Worker "%%EndFeature\n"
272*5e7646d2SAndroid Build Coastguard Worker "} stopped cleartomark\n"
273*5e7646d2SAndroid Build Coastguard Worker "[{\n"
274*5e7646d2SAndroid Build Coastguard Worker "%%BeginFeature: *InputSlot Tray\n"
275*5e7646d2SAndroid Build Coastguard Worker "InputSlot=Tray\n"
276*5e7646d2SAndroid Build Coastguard Worker "%%EndFeature\n"
277*5e7646d2SAndroid Build Coastguard Worker "} stopped cleartomark\n"
278*5e7646d2SAndroid Build Coastguard Worker "[{\n"
279*5e7646d2SAndroid Build Coastguard Worker "%%BeginFeature: *Quality Normal\n"
280*5e7646d2SAndroid Build Coastguard Worker "Quality=Normal\n"
281*5e7646d2SAndroid Build Coastguard Worker "%%EndFeature\n"
282*5e7646d2SAndroid Build Coastguard Worker "} stopped cleartomark\n"
283*5e7646d2SAndroid Build Coastguard Worker "[{\n"
284*5e7646d2SAndroid Build Coastguard Worker "%%BeginFeature: *IntOption None\n"
285*5e7646d2SAndroid Build Coastguard Worker "%%EndFeature\n"
286*5e7646d2SAndroid Build Coastguard Worker "} stopped cleartomark\n"
287*5e7646d2SAndroid Build Coastguard Worker "[{\n"
288*5e7646d2SAndroid Build Coastguard Worker "%%BeginFeature: *StringOption None\n"
289*5e7646d2SAndroid Build Coastguard Worker "%%EndFeature\n"
290*5e7646d2SAndroid Build Coastguard Worker "} stopped cleartomark\n";
291*5e7646d2SAndroid Build Coastguard Worker
292*5e7646d2SAndroid Build Coastguard Worker
293*5e7646d2SAndroid Build Coastguard Worker /*
294*5e7646d2SAndroid Build Coastguard Worker * 'main()' - Main entry.
295*5e7646d2SAndroid Build Coastguard Worker */
296*5e7646d2SAndroid Build Coastguard Worker
297*5e7646d2SAndroid Build Coastguard Worker int /* O - Exit status */
main(int argc,char * argv[])298*5e7646d2SAndroid Build Coastguard Worker main(int argc, /* I - Number of command-line arguments */
299*5e7646d2SAndroid Build Coastguard Worker char *argv[]) /* I - Command-line arguments */
300*5e7646d2SAndroid Build Coastguard Worker {
301*5e7646d2SAndroid Build Coastguard Worker int i; /* Looping var */
302*5e7646d2SAndroid Build Coastguard Worker ppd_file_t *ppd = NULL; /* PPD file loaded from disk */
303*5e7646d2SAndroid Build Coastguard Worker int status; /* Status of tests (0 = success, 1 = fail) */
304*5e7646d2SAndroid Build Coastguard Worker int conflicts; /* Number of conflicts */
305*5e7646d2SAndroid Build Coastguard Worker char *s; /* String */
306*5e7646d2SAndroid Build Coastguard Worker char buffer[8192]; /* String buffer */
307*5e7646d2SAndroid Build Coastguard Worker const char *text, /* Localized text */
308*5e7646d2SAndroid Build Coastguard Worker *val; /* Option value */
309*5e7646d2SAndroid Build Coastguard Worker int num_options; /* Number of options */
310*5e7646d2SAndroid Build Coastguard Worker cups_option_t *options; /* Options */
311*5e7646d2SAndroid Build Coastguard Worker ppd_size_t minsize, /* Minimum size */
312*5e7646d2SAndroid Build Coastguard Worker maxsize, /* Maximum size */
313*5e7646d2SAndroid Build Coastguard Worker *size; /* Current size */
314*5e7646d2SAndroid Build Coastguard Worker ppd_attr_t *attr; /* Current attribute */
315*5e7646d2SAndroid Build Coastguard Worker _ppd_cache_t *pc; /* PPD cache */
316*5e7646d2SAndroid Build Coastguard Worker
317*5e7646d2SAndroid Build Coastguard Worker
318*5e7646d2SAndroid Build Coastguard Worker status = 0;
319*5e7646d2SAndroid Build Coastguard Worker
320*5e7646d2SAndroid Build Coastguard Worker if (argc == 1)
321*5e7646d2SAndroid Build Coastguard Worker {
322*5e7646d2SAndroid Build Coastguard Worker /*
323*5e7646d2SAndroid Build Coastguard Worker * Setup directories for locale stuff...
324*5e7646d2SAndroid Build Coastguard Worker */
325*5e7646d2SAndroid Build Coastguard Worker
326*5e7646d2SAndroid Build Coastguard Worker if (access("locale", 0))
327*5e7646d2SAndroid Build Coastguard Worker {
328*5e7646d2SAndroid Build Coastguard Worker mkdir("locale", 0777);
329*5e7646d2SAndroid Build Coastguard Worker mkdir("locale/fr", 0777);
330*5e7646d2SAndroid Build Coastguard Worker symlink("../../../locale/cups_fr.po", "locale/fr/cups_fr.po");
331*5e7646d2SAndroid Build Coastguard Worker mkdir("locale/zh_TW", 0777);
332*5e7646d2SAndroid Build Coastguard Worker symlink("../../../locale/cups_zh_TW.po", "locale/zh_TW/cups_zh_TW.po");
333*5e7646d2SAndroid Build Coastguard Worker }
334*5e7646d2SAndroid Build Coastguard Worker
335*5e7646d2SAndroid Build Coastguard Worker putenv("LOCALEDIR=locale");
336*5e7646d2SAndroid Build Coastguard Worker putenv("SOFTWARE=CUPS");
337*5e7646d2SAndroid Build Coastguard Worker
338*5e7646d2SAndroid Build Coastguard Worker /*
339*5e7646d2SAndroid Build Coastguard Worker * Do tests with test.ppd...
340*5e7646d2SAndroid Build Coastguard Worker */
341*5e7646d2SAndroid Build Coastguard Worker
342*5e7646d2SAndroid Build Coastguard Worker fputs("ppdOpenFile(test.ppd): ", stdout);
343*5e7646d2SAndroid Build Coastguard Worker
344*5e7646d2SAndroid Build Coastguard Worker if ((ppd = _ppdOpenFile("test.ppd", _PPD_LOCALIZATION_ALL)) != NULL)
345*5e7646d2SAndroid Build Coastguard Worker puts("PASS");
346*5e7646d2SAndroid Build Coastguard Worker else
347*5e7646d2SAndroid Build Coastguard Worker {
348*5e7646d2SAndroid Build Coastguard Worker ppd_status_t err; /* Last error in file */
349*5e7646d2SAndroid Build Coastguard Worker int line; /* Line number in file */
350*5e7646d2SAndroid Build Coastguard Worker
351*5e7646d2SAndroid Build Coastguard Worker
352*5e7646d2SAndroid Build Coastguard Worker status ++;
353*5e7646d2SAndroid Build Coastguard Worker err = ppdLastError(&line);
354*5e7646d2SAndroid Build Coastguard Worker
355*5e7646d2SAndroid Build Coastguard Worker printf("FAIL (%s on line %d)\n", ppdErrorString(err), line);
356*5e7646d2SAndroid Build Coastguard Worker }
357*5e7646d2SAndroid Build Coastguard Worker
358*5e7646d2SAndroid Build Coastguard Worker fputs("ppdFindAttr(wildcard): ", stdout);
359*5e7646d2SAndroid Build Coastguard Worker if ((attr = ppdFindAttr(ppd, "cupsTest", NULL)) == NULL)
360*5e7646d2SAndroid Build Coastguard Worker {
361*5e7646d2SAndroid Build Coastguard Worker status ++;
362*5e7646d2SAndroid Build Coastguard Worker puts("FAIL (not found)");
363*5e7646d2SAndroid Build Coastguard Worker }
364*5e7646d2SAndroid Build Coastguard Worker else if (strcmp(attr->name, "cupsTest") || strcmp(attr->spec, "Foo"))
365*5e7646d2SAndroid Build Coastguard Worker {
366*5e7646d2SAndroid Build Coastguard Worker status ++;
367*5e7646d2SAndroid Build Coastguard Worker printf("FAIL (got \"%s %s\")\n", attr->name, attr->spec);
368*5e7646d2SAndroid Build Coastguard Worker }
369*5e7646d2SAndroid Build Coastguard Worker else
370*5e7646d2SAndroid Build Coastguard Worker puts("PASS");
371*5e7646d2SAndroid Build Coastguard Worker
372*5e7646d2SAndroid Build Coastguard Worker fputs("ppdFindNextAttr(wildcard): ", stdout);
373*5e7646d2SAndroid Build Coastguard Worker if ((attr = ppdFindNextAttr(ppd, "cupsTest", NULL)) == NULL)
374*5e7646d2SAndroid Build Coastguard Worker {
375*5e7646d2SAndroid Build Coastguard Worker status ++;
376*5e7646d2SAndroid Build Coastguard Worker puts("FAIL (not found)");
377*5e7646d2SAndroid Build Coastguard Worker }
378*5e7646d2SAndroid Build Coastguard Worker else if (strcmp(attr->name, "cupsTest") || strcmp(attr->spec, "Bar"))
379*5e7646d2SAndroid Build Coastguard Worker {
380*5e7646d2SAndroid Build Coastguard Worker status ++;
381*5e7646d2SAndroid Build Coastguard Worker printf("FAIL (got \"%s %s\")\n", attr->name, attr->spec);
382*5e7646d2SAndroid Build Coastguard Worker }
383*5e7646d2SAndroid Build Coastguard Worker else
384*5e7646d2SAndroid Build Coastguard Worker puts("PASS");
385*5e7646d2SAndroid Build Coastguard Worker
386*5e7646d2SAndroid Build Coastguard Worker fputs("ppdFindAttr(Foo): ", stdout);
387*5e7646d2SAndroid Build Coastguard Worker if ((attr = ppdFindAttr(ppd, "cupsTest", "Foo")) == NULL)
388*5e7646d2SAndroid Build Coastguard Worker {
389*5e7646d2SAndroid Build Coastguard Worker status ++;
390*5e7646d2SAndroid Build Coastguard Worker puts("FAIL (not found)");
391*5e7646d2SAndroid Build Coastguard Worker }
392*5e7646d2SAndroid Build Coastguard Worker else if (strcmp(attr->name, "cupsTest") || strcmp(attr->spec, "Foo"))
393*5e7646d2SAndroid Build Coastguard Worker {
394*5e7646d2SAndroid Build Coastguard Worker status ++;
395*5e7646d2SAndroid Build Coastguard Worker printf("FAIL (got \"%s %s\")\n", attr->name, attr->spec);
396*5e7646d2SAndroid Build Coastguard Worker }
397*5e7646d2SAndroid Build Coastguard Worker else
398*5e7646d2SAndroid Build Coastguard Worker puts("PASS");
399*5e7646d2SAndroid Build Coastguard Worker
400*5e7646d2SAndroid Build Coastguard Worker fputs("ppdFindNextAttr(Foo): ", stdout);
401*5e7646d2SAndroid Build Coastguard Worker if ((attr = ppdFindNextAttr(ppd, "cupsTest", "Foo")) != NULL)
402*5e7646d2SAndroid Build Coastguard Worker {
403*5e7646d2SAndroid Build Coastguard Worker status ++;
404*5e7646d2SAndroid Build Coastguard Worker printf("FAIL (got \"%s %s\")\n", attr->name, attr->spec);
405*5e7646d2SAndroid Build Coastguard Worker }
406*5e7646d2SAndroid Build Coastguard Worker else
407*5e7646d2SAndroid Build Coastguard Worker puts("PASS");
408*5e7646d2SAndroid Build Coastguard Worker
409*5e7646d2SAndroid Build Coastguard Worker fputs("ppdMarkDefaults: ", stdout);
410*5e7646d2SAndroid Build Coastguard Worker ppdMarkDefaults(ppd);
411*5e7646d2SAndroid Build Coastguard Worker
412*5e7646d2SAndroid Build Coastguard Worker if ((conflicts = ppdConflicts(ppd)) == 0)
413*5e7646d2SAndroid Build Coastguard Worker puts("PASS");
414*5e7646d2SAndroid Build Coastguard Worker else
415*5e7646d2SAndroid Build Coastguard Worker {
416*5e7646d2SAndroid Build Coastguard Worker status ++;
417*5e7646d2SAndroid Build Coastguard Worker printf("FAIL (%d conflicts)\n", conflicts);
418*5e7646d2SAndroid Build Coastguard Worker }
419*5e7646d2SAndroid Build Coastguard Worker
420*5e7646d2SAndroid Build Coastguard Worker fputs("ppdEmitString (defaults): ", stdout);
421*5e7646d2SAndroid Build Coastguard Worker if ((s = ppdEmitString(ppd, PPD_ORDER_ANY, 0.0)) != NULL &&
422*5e7646d2SAndroid Build Coastguard Worker !strcmp(s, default_code))
423*5e7646d2SAndroid Build Coastguard Worker puts("PASS");
424*5e7646d2SAndroid Build Coastguard Worker else
425*5e7646d2SAndroid Build Coastguard Worker {
426*5e7646d2SAndroid Build Coastguard Worker status ++;
427*5e7646d2SAndroid Build Coastguard Worker printf("FAIL (%d bytes instead of %d)\n", s ? (int)strlen(s) : 0,
428*5e7646d2SAndroid Build Coastguard Worker (int)strlen(default_code));
429*5e7646d2SAndroid Build Coastguard Worker
430*5e7646d2SAndroid Build Coastguard Worker if (s)
431*5e7646d2SAndroid Build Coastguard Worker puts(s);
432*5e7646d2SAndroid Build Coastguard Worker }
433*5e7646d2SAndroid Build Coastguard Worker
434*5e7646d2SAndroid Build Coastguard Worker if (s)
435*5e7646d2SAndroid Build Coastguard Worker free(s);
436*5e7646d2SAndroid Build Coastguard Worker
437*5e7646d2SAndroid Build Coastguard Worker fputs("ppdEmitString (custom size and string): ", stdout);
438*5e7646d2SAndroid Build Coastguard Worker ppdMarkOption(ppd, "PageSize", "Custom.400x500");
439*5e7646d2SAndroid Build Coastguard Worker ppdMarkOption(ppd, "StringOption", "{String1=\"value 1\" String2=value(2)}");
440*5e7646d2SAndroid Build Coastguard Worker
441*5e7646d2SAndroid Build Coastguard Worker if ((s = ppdEmitString(ppd, PPD_ORDER_ANY, 0.0)) != NULL &&
442*5e7646d2SAndroid Build Coastguard Worker !strcmp(s, custom_code))
443*5e7646d2SAndroid Build Coastguard Worker puts("PASS");
444*5e7646d2SAndroid Build Coastguard Worker else
445*5e7646d2SAndroid Build Coastguard Worker {
446*5e7646d2SAndroid Build Coastguard Worker status ++;
447*5e7646d2SAndroid Build Coastguard Worker printf("FAIL (%d bytes instead of %d)\n", s ? (int)strlen(s) : 0,
448*5e7646d2SAndroid Build Coastguard Worker (int)strlen(custom_code));
449*5e7646d2SAndroid Build Coastguard Worker
450*5e7646d2SAndroid Build Coastguard Worker if (s)
451*5e7646d2SAndroid Build Coastguard Worker puts(s);
452*5e7646d2SAndroid Build Coastguard Worker }
453*5e7646d2SAndroid Build Coastguard Worker
454*5e7646d2SAndroid Build Coastguard Worker if (s)
455*5e7646d2SAndroid Build Coastguard Worker free(s);
456*5e7646d2SAndroid Build Coastguard Worker
457*5e7646d2SAndroid Build Coastguard Worker /*
458*5e7646d2SAndroid Build Coastguard Worker * Test constraints...
459*5e7646d2SAndroid Build Coastguard Worker */
460*5e7646d2SAndroid Build Coastguard Worker
461*5e7646d2SAndroid Build Coastguard Worker fputs("cupsGetConflicts(InputSlot=Envelope): ", stdout);
462*5e7646d2SAndroid Build Coastguard Worker ppdMarkOption(ppd, "PageSize", "Letter");
463*5e7646d2SAndroid Build Coastguard Worker
464*5e7646d2SAndroid Build Coastguard Worker num_options = cupsGetConflicts(ppd, "InputSlot", "Envelope", &options);
465*5e7646d2SAndroid Build Coastguard Worker if (num_options != 2 ||
466*5e7646d2SAndroid Build Coastguard Worker (val = cupsGetOption("PageRegion", num_options, options)) == NULL ||
467*5e7646d2SAndroid Build Coastguard Worker _cups_strcasecmp(val, "Letter") ||
468*5e7646d2SAndroid Build Coastguard Worker (val = cupsGetOption("PageSize", num_options, options)) == NULL ||
469*5e7646d2SAndroid Build Coastguard Worker _cups_strcasecmp(val, "Letter"))
470*5e7646d2SAndroid Build Coastguard Worker {
471*5e7646d2SAndroid Build Coastguard Worker printf("FAIL (%d options:", num_options);
472*5e7646d2SAndroid Build Coastguard Worker for (i = 0; i < num_options; i ++)
473*5e7646d2SAndroid Build Coastguard Worker printf(" %s=%s", options[i].name, options[i].value);
474*5e7646d2SAndroid Build Coastguard Worker puts(")");
475*5e7646d2SAndroid Build Coastguard Worker status ++;
476*5e7646d2SAndroid Build Coastguard Worker }
477*5e7646d2SAndroid Build Coastguard Worker else
478*5e7646d2SAndroid Build Coastguard Worker puts("PASS");
479*5e7646d2SAndroid Build Coastguard Worker
480*5e7646d2SAndroid Build Coastguard Worker fputs("ppdConflicts(): ", stdout);
481*5e7646d2SAndroid Build Coastguard Worker ppdMarkOption(ppd, "InputSlot", "Envelope");
482*5e7646d2SAndroid Build Coastguard Worker
483*5e7646d2SAndroid Build Coastguard Worker if ((conflicts = ppdConflicts(ppd)) == 2)
484*5e7646d2SAndroid Build Coastguard Worker puts("PASS (2)");
485*5e7646d2SAndroid Build Coastguard Worker else
486*5e7646d2SAndroid Build Coastguard Worker {
487*5e7646d2SAndroid Build Coastguard Worker printf("FAIL (%d)\n", conflicts);
488*5e7646d2SAndroid Build Coastguard Worker status ++;
489*5e7646d2SAndroid Build Coastguard Worker }
490*5e7646d2SAndroid Build Coastguard Worker
491*5e7646d2SAndroid Build Coastguard Worker fputs("cupsResolveConflicts(InputSlot=Envelope): ", stdout);
492*5e7646d2SAndroid Build Coastguard Worker num_options = 0;
493*5e7646d2SAndroid Build Coastguard Worker options = NULL;
494*5e7646d2SAndroid Build Coastguard Worker if (!cupsResolveConflicts(ppd, "InputSlot", "Envelope", &num_options,
495*5e7646d2SAndroid Build Coastguard Worker &options))
496*5e7646d2SAndroid Build Coastguard Worker {
497*5e7646d2SAndroid Build Coastguard Worker puts("FAIL (Unable to resolve)");
498*5e7646d2SAndroid Build Coastguard Worker status ++;
499*5e7646d2SAndroid Build Coastguard Worker }
500*5e7646d2SAndroid Build Coastguard Worker else if (num_options != 2 ||
501*5e7646d2SAndroid Build Coastguard Worker !cupsGetOption("PageSize", num_options, options))
502*5e7646d2SAndroid Build Coastguard Worker {
503*5e7646d2SAndroid Build Coastguard Worker printf("FAIL (%d options:", num_options);
504*5e7646d2SAndroid Build Coastguard Worker for (i = 0; i < num_options; i ++)
505*5e7646d2SAndroid Build Coastguard Worker printf(" %s=%s", options[i].name, options[i].value);
506*5e7646d2SAndroid Build Coastguard Worker puts(")");
507*5e7646d2SAndroid Build Coastguard Worker status ++;
508*5e7646d2SAndroid Build Coastguard Worker }
509*5e7646d2SAndroid Build Coastguard Worker else
510*5e7646d2SAndroid Build Coastguard Worker puts("PASS (Resolved by changing PageSize)");
511*5e7646d2SAndroid Build Coastguard Worker
512*5e7646d2SAndroid Build Coastguard Worker cupsFreeOptions(num_options, options);
513*5e7646d2SAndroid Build Coastguard Worker
514*5e7646d2SAndroid Build Coastguard Worker fputs("cupsResolveConflicts(No option/choice): ", stdout);
515*5e7646d2SAndroid Build Coastguard Worker num_options = 0;
516*5e7646d2SAndroid Build Coastguard Worker options = NULL;
517*5e7646d2SAndroid Build Coastguard Worker if (cupsResolveConflicts(ppd, NULL, NULL, &num_options, &options) &&
518*5e7646d2SAndroid Build Coastguard Worker num_options == 1 && !_cups_strcasecmp(options[0].name, "InputSlot") &&
519*5e7646d2SAndroid Build Coastguard Worker !_cups_strcasecmp(options[0].value, "Tray"))
520*5e7646d2SAndroid Build Coastguard Worker puts("PASS (Resolved by changing InputSlot)");
521*5e7646d2SAndroid Build Coastguard Worker else if (num_options > 0)
522*5e7646d2SAndroid Build Coastguard Worker {
523*5e7646d2SAndroid Build Coastguard Worker printf("FAIL (%d options:", num_options);
524*5e7646d2SAndroid Build Coastguard Worker for (i = 0; i < num_options; i ++)
525*5e7646d2SAndroid Build Coastguard Worker printf(" %s=%s", options[i].name, options[i].value);
526*5e7646d2SAndroid Build Coastguard Worker puts(")");
527*5e7646d2SAndroid Build Coastguard Worker status ++;
528*5e7646d2SAndroid Build Coastguard Worker }
529*5e7646d2SAndroid Build Coastguard Worker else
530*5e7646d2SAndroid Build Coastguard Worker {
531*5e7646d2SAndroid Build Coastguard Worker puts("FAIL (Unable to resolve)");
532*5e7646d2SAndroid Build Coastguard Worker status ++;
533*5e7646d2SAndroid Build Coastguard Worker }
534*5e7646d2SAndroid Build Coastguard Worker cupsFreeOptions(num_options, options);
535*5e7646d2SAndroid Build Coastguard Worker
536*5e7646d2SAndroid Build Coastguard Worker fputs("ppdInstallableConflict(): ", stdout);
537*5e7646d2SAndroid Build Coastguard Worker if (ppdInstallableConflict(ppd, "Duplex", "DuplexNoTumble") &&
538*5e7646d2SAndroid Build Coastguard Worker !ppdInstallableConflict(ppd, "Duplex", "None"))
539*5e7646d2SAndroid Build Coastguard Worker puts("PASS");
540*5e7646d2SAndroid Build Coastguard Worker else if (!ppdInstallableConflict(ppd, "Duplex", "DuplexNoTumble"))
541*5e7646d2SAndroid Build Coastguard Worker {
542*5e7646d2SAndroid Build Coastguard Worker puts("FAIL (Duplex=DuplexNoTumble did not conflict)");
543*5e7646d2SAndroid Build Coastguard Worker status ++;
544*5e7646d2SAndroid Build Coastguard Worker }
545*5e7646d2SAndroid Build Coastguard Worker else
546*5e7646d2SAndroid Build Coastguard Worker {
547*5e7646d2SAndroid Build Coastguard Worker puts("FAIL (Duplex=None conflicted)");
548*5e7646d2SAndroid Build Coastguard Worker status ++;
549*5e7646d2SAndroid Build Coastguard Worker }
550*5e7646d2SAndroid Build Coastguard Worker
551*5e7646d2SAndroid Build Coastguard Worker /*
552*5e7646d2SAndroid Build Coastguard Worker * ppdPageSizeLimits
553*5e7646d2SAndroid Build Coastguard Worker */
554*5e7646d2SAndroid Build Coastguard Worker
555*5e7646d2SAndroid Build Coastguard Worker fputs("ppdPageSizeLimits: ", stdout);
556*5e7646d2SAndroid Build Coastguard Worker if (ppdPageSizeLimits(ppd, &minsize, &maxsize))
557*5e7646d2SAndroid Build Coastguard Worker {
558*5e7646d2SAndroid Build Coastguard Worker if (fabs(minsize.width - 36.0) > 0.001 || fabs(minsize.length - 36.0) > 0.001 ||
559*5e7646d2SAndroid Build Coastguard Worker fabs(maxsize.width - 1080.0) > 0.001 || fabs(maxsize.length - 86400.0) > 0.001)
560*5e7646d2SAndroid Build Coastguard Worker {
561*5e7646d2SAndroid Build Coastguard Worker printf("FAIL (got min=%.3fx%.3f, max=%.3fx%.3f, "
562*5e7646d2SAndroid Build Coastguard Worker "expected min=36x36, max=1080x86400)\n", minsize.width,
563*5e7646d2SAndroid Build Coastguard Worker minsize.length, maxsize.width, maxsize.length);
564*5e7646d2SAndroid Build Coastguard Worker status ++;
565*5e7646d2SAndroid Build Coastguard Worker }
566*5e7646d2SAndroid Build Coastguard Worker else
567*5e7646d2SAndroid Build Coastguard Worker puts("PASS");
568*5e7646d2SAndroid Build Coastguard Worker }
569*5e7646d2SAndroid Build Coastguard Worker else
570*5e7646d2SAndroid Build Coastguard Worker {
571*5e7646d2SAndroid Build Coastguard Worker puts("FAIL (returned 0)");
572*5e7646d2SAndroid Build Coastguard Worker status ++;
573*5e7646d2SAndroid Build Coastguard Worker }
574*5e7646d2SAndroid Build Coastguard Worker
575*5e7646d2SAndroid Build Coastguard Worker /*
576*5e7646d2SAndroid Build Coastguard Worker * cupsMarkOptions with PWG and IPP size names.
577*5e7646d2SAndroid Build Coastguard Worker */
578*5e7646d2SAndroid Build Coastguard Worker
579*5e7646d2SAndroid Build Coastguard Worker fputs("cupsMarkOptions(media=iso-a4): ", stdout);
580*5e7646d2SAndroid Build Coastguard Worker num_options = cupsAddOption("media", "iso-a4", 0, &options);
581*5e7646d2SAndroid Build Coastguard Worker cupsMarkOptions(ppd, num_options, options);
582*5e7646d2SAndroid Build Coastguard Worker cupsFreeOptions(num_options, options);
583*5e7646d2SAndroid Build Coastguard Worker
584*5e7646d2SAndroid Build Coastguard Worker size = ppdPageSize(ppd, NULL);
585*5e7646d2SAndroid Build Coastguard Worker if (!size || strcmp(size->name, "A4"))
586*5e7646d2SAndroid Build Coastguard Worker {
587*5e7646d2SAndroid Build Coastguard Worker printf("FAIL (%s)\n", size ? size->name : "unknown");
588*5e7646d2SAndroid Build Coastguard Worker status ++;
589*5e7646d2SAndroid Build Coastguard Worker }
590*5e7646d2SAndroid Build Coastguard Worker else
591*5e7646d2SAndroid Build Coastguard Worker puts("PASS");
592*5e7646d2SAndroid Build Coastguard Worker
593*5e7646d2SAndroid Build Coastguard Worker fputs("cupsMarkOptions(media=na_letter_8.5x11in): ", stdout);
594*5e7646d2SAndroid Build Coastguard Worker num_options = cupsAddOption("media", "na_letter_8.5x11in", 0, &options);
595*5e7646d2SAndroid Build Coastguard Worker cupsMarkOptions(ppd, num_options, options);
596*5e7646d2SAndroid Build Coastguard Worker cupsFreeOptions(num_options, options);
597*5e7646d2SAndroid Build Coastguard Worker
598*5e7646d2SAndroid Build Coastguard Worker size = ppdPageSize(ppd, NULL);
599*5e7646d2SAndroid Build Coastguard Worker if (!size || strcmp(size->name, "Letter"))
600*5e7646d2SAndroid Build Coastguard Worker {
601*5e7646d2SAndroid Build Coastguard Worker printf("FAIL (%s)\n", size ? size->name : "unknown");
602*5e7646d2SAndroid Build Coastguard Worker status ++;
603*5e7646d2SAndroid Build Coastguard Worker }
604*5e7646d2SAndroid Build Coastguard Worker else
605*5e7646d2SAndroid Build Coastguard Worker puts("PASS");
606*5e7646d2SAndroid Build Coastguard Worker
607*5e7646d2SAndroid Build Coastguard Worker fputs("cupsMarkOptions(media=oe_letter-fullbleed_8.5x11in): ", stdout);
608*5e7646d2SAndroid Build Coastguard Worker num_options = cupsAddOption("media", "oe_letter-fullbleed_8.5x11in", 0,
609*5e7646d2SAndroid Build Coastguard Worker &options);
610*5e7646d2SAndroid Build Coastguard Worker cupsMarkOptions(ppd, num_options, options);
611*5e7646d2SAndroid Build Coastguard Worker cupsFreeOptions(num_options, options);
612*5e7646d2SAndroid Build Coastguard Worker
613*5e7646d2SAndroid Build Coastguard Worker size = ppdPageSize(ppd, NULL);
614*5e7646d2SAndroid Build Coastguard Worker if (!size || strcmp(size->name, "Letter.Fullbleed"))
615*5e7646d2SAndroid Build Coastguard Worker {
616*5e7646d2SAndroid Build Coastguard Worker printf("FAIL (%s)\n", size ? size->name : "unknown");
617*5e7646d2SAndroid Build Coastguard Worker status ++;
618*5e7646d2SAndroid Build Coastguard Worker }
619*5e7646d2SAndroid Build Coastguard Worker else
620*5e7646d2SAndroid Build Coastguard Worker puts("PASS");
621*5e7646d2SAndroid Build Coastguard Worker
622*5e7646d2SAndroid Build Coastguard Worker fputs("cupsMarkOptions(media=A4): ", stdout);
623*5e7646d2SAndroid Build Coastguard Worker num_options = cupsAddOption("media", "A4", 0, &options);
624*5e7646d2SAndroid Build Coastguard Worker cupsMarkOptions(ppd, num_options, options);
625*5e7646d2SAndroid Build Coastguard Worker cupsFreeOptions(num_options, options);
626*5e7646d2SAndroid Build Coastguard Worker
627*5e7646d2SAndroid Build Coastguard Worker size = ppdPageSize(ppd, NULL);
628*5e7646d2SAndroid Build Coastguard Worker if (!size || strcmp(size->name, "A4"))
629*5e7646d2SAndroid Build Coastguard Worker {
630*5e7646d2SAndroid Build Coastguard Worker printf("FAIL (%s)\n", size ? size->name : "unknown");
631*5e7646d2SAndroid Build Coastguard Worker status ++;
632*5e7646d2SAndroid Build Coastguard Worker }
633*5e7646d2SAndroid Build Coastguard Worker else
634*5e7646d2SAndroid Build Coastguard Worker puts("PASS");
635*5e7646d2SAndroid Build Coastguard Worker
636*5e7646d2SAndroid Build Coastguard Worker /*
637*5e7646d2SAndroid Build Coastguard Worker * Custom sizes...
638*5e7646d2SAndroid Build Coastguard Worker */
639*5e7646d2SAndroid Build Coastguard Worker
640*5e7646d2SAndroid Build Coastguard Worker fputs("cupsMarkOptions(media=Custom.8x10in): ", stdout);
641*5e7646d2SAndroid Build Coastguard Worker num_options = cupsAddOption("media", "Custom.8x10in", 0, &options);
642*5e7646d2SAndroid Build Coastguard Worker cupsMarkOptions(ppd, num_options, options);
643*5e7646d2SAndroid Build Coastguard Worker cupsFreeOptions(num_options, options);
644*5e7646d2SAndroid Build Coastguard Worker
645*5e7646d2SAndroid Build Coastguard Worker size = ppdPageSize(ppd, NULL);
646*5e7646d2SAndroid Build Coastguard Worker if (!size || strcmp(size->name, "Custom") ||
647*5e7646d2SAndroid Build Coastguard Worker fabs(size->width - 576.0) > 0.001 ||
648*5e7646d2SAndroid Build Coastguard Worker fabs(size->length - 720.0) > 0.001)
649*5e7646d2SAndroid Build Coastguard Worker {
650*5e7646d2SAndroid Build Coastguard Worker printf("FAIL (%s - %gx%g)\n", size ? size->name : "unknown",
651*5e7646d2SAndroid Build Coastguard Worker size ? size->width : 0.0, size ? size->length : 0.0);
652*5e7646d2SAndroid Build Coastguard Worker status ++;
653*5e7646d2SAndroid Build Coastguard Worker }
654*5e7646d2SAndroid Build Coastguard Worker else
655*5e7646d2SAndroid Build Coastguard Worker puts("PASS");
656*5e7646d2SAndroid Build Coastguard Worker
657*5e7646d2SAndroid Build Coastguard Worker /*
658*5e7646d2SAndroid Build Coastguard Worker * Test localization...
659*5e7646d2SAndroid Build Coastguard Worker */
660*5e7646d2SAndroid Build Coastguard Worker
661*5e7646d2SAndroid Build Coastguard Worker fputs("ppdLocalizeIPPReason(text): ", stdout);
662*5e7646d2SAndroid Build Coastguard Worker if (ppdLocalizeIPPReason(ppd, "foo", NULL, buffer, sizeof(buffer)) &&
663*5e7646d2SAndroid Build Coastguard Worker !strcmp(buffer, "Foo Reason"))
664*5e7646d2SAndroid Build Coastguard Worker puts("PASS");
665*5e7646d2SAndroid Build Coastguard Worker else
666*5e7646d2SAndroid Build Coastguard Worker {
667*5e7646d2SAndroid Build Coastguard Worker status ++;
668*5e7646d2SAndroid Build Coastguard Worker printf("FAIL (\"%s\" instead of \"Foo Reason\")\n", buffer);
669*5e7646d2SAndroid Build Coastguard Worker }
670*5e7646d2SAndroid Build Coastguard Worker
671*5e7646d2SAndroid Build Coastguard Worker fputs("ppdLocalizeIPPReason(http): ", stdout);
672*5e7646d2SAndroid Build Coastguard Worker if (ppdLocalizeIPPReason(ppd, "foo", "http", buffer, sizeof(buffer)) &&
673*5e7646d2SAndroid Build Coastguard Worker !strcmp(buffer, "http://foo/bar.html"))
674*5e7646d2SAndroid Build Coastguard Worker puts("PASS");
675*5e7646d2SAndroid Build Coastguard Worker else
676*5e7646d2SAndroid Build Coastguard Worker {
677*5e7646d2SAndroid Build Coastguard Worker status ++;
678*5e7646d2SAndroid Build Coastguard Worker printf("FAIL (\"%s\" instead of \"http://foo/bar.html\")\n", buffer);
679*5e7646d2SAndroid Build Coastguard Worker }
680*5e7646d2SAndroid Build Coastguard Worker
681*5e7646d2SAndroid Build Coastguard Worker fputs("ppdLocalizeIPPReason(help): ", stdout);
682*5e7646d2SAndroid Build Coastguard Worker if (ppdLocalizeIPPReason(ppd, "foo", "help", buffer, sizeof(buffer)) &&
683*5e7646d2SAndroid Build Coastguard Worker !strcmp(buffer, "help:anchor='foo'%20bookID=Vendor%20Help"))
684*5e7646d2SAndroid Build Coastguard Worker puts("PASS");
685*5e7646d2SAndroid Build Coastguard Worker else
686*5e7646d2SAndroid Build Coastguard Worker {
687*5e7646d2SAndroid Build Coastguard Worker status ++;
688*5e7646d2SAndroid Build Coastguard Worker printf("FAIL (\"%s\" instead of \"help:anchor='foo'%%20bookID=Vendor%%20Help\")\n", buffer);
689*5e7646d2SAndroid Build Coastguard Worker }
690*5e7646d2SAndroid Build Coastguard Worker
691*5e7646d2SAndroid Build Coastguard Worker fputs("ppdLocalizeIPPReason(file): ", stdout);
692*5e7646d2SAndroid Build Coastguard Worker if (ppdLocalizeIPPReason(ppd, "foo", "file", buffer, sizeof(buffer)) &&
693*5e7646d2SAndroid Build Coastguard Worker !strcmp(buffer, "/help/foo/bar.html"))
694*5e7646d2SAndroid Build Coastguard Worker puts("PASS");
695*5e7646d2SAndroid Build Coastguard Worker else
696*5e7646d2SAndroid Build Coastguard Worker {
697*5e7646d2SAndroid Build Coastguard Worker status ++;
698*5e7646d2SAndroid Build Coastguard Worker printf("FAIL (\"%s\" instead of \"/help/foo/bar.html\")\n", buffer);
699*5e7646d2SAndroid Build Coastguard Worker }
700*5e7646d2SAndroid Build Coastguard Worker
701*5e7646d2SAndroid Build Coastguard Worker putenv("LANG=fr");
702*5e7646d2SAndroid Build Coastguard Worker putenv("LC_ALL=fr");
703*5e7646d2SAndroid Build Coastguard Worker putenv("LC_CTYPE=fr");
704*5e7646d2SAndroid Build Coastguard Worker putenv("LC_MESSAGES=fr");
705*5e7646d2SAndroid Build Coastguard Worker
706*5e7646d2SAndroid Build Coastguard Worker fputs("ppdLocalizeIPPReason(fr text): ", stdout);
707*5e7646d2SAndroid Build Coastguard Worker if (ppdLocalizeIPPReason(ppd, "foo", NULL, buffer, sizeof(buffer)) &&
708*5e7646d2SAndroid Build Coastguard Worker !strcmp(buffer, "La Long Foo Reason"))
709*5e7646d2SAndroid Build Coastguard Worker puts("PASS");
710*5e7646d2SAndroid Build Coastguard Worker else
711*5e7646d2SAndroid Build Coastguard Worker {
712*5e7646d2SAndroid Build Coastguard Worker status ++;
713*5e7646d2SAndroid Build Coastguard Worker printf("FAIL (\"%s\" instead of \"La Long Foo Reason\")\n", buffer);
714*5e7646d2SAndroid Build Coastguard Worker }
715*5e7646d2SAndroid Build Coastguard Worker
716*5e7646d2SAndroid Build Coastguard Worker putenv("LANG=zh_TW");
717*5e7646d2SAndroid Build Coastguard Worker putenv("LC_ALL=zh_TW");
718*5e7646d2SAndroid Build Coastguard Worker putenv("LC_CTYPE=zh_TW");
719*5e7646d2SAndroid Build Coastguard Worker putenv("LC_MESSAGES=zh_TW");
720*5e7646d2SAndroid Build Coastguard Worker
721*5e7646d2SAndroid Build Coastguard Worker fputs("ppdLocalizeIPPReason(zh_TW text): ", stdout);
722*5e7646d2SAndroid Build Coastguard Worker if (ppdLocalizeIPPReason(ppd, "foo", NULL, buffer, sizeof(buffer)) &&
723*5e7646d2SAndroid Build Coastguard Worker !strcmp(buffer, "Number 1 Foo Reason"))
724*5e7646d2SAndroid Build Coastguard Worker puts("PASS");
725*5e7646d2SAndroid Build Coastguard Worker else
726*5e7646d2SAndroid Build Coastguard Worker {
727*5e7646d2SAndroid Build Coastguard Worker status ++;
728*5e7646d2SAndroid Build Coastguard Worker printf("FAIL (\"%s\" instead of \"Number 1 Foo Reason\")\n", buffer);
729*5e7646d2SAndroid Build Coastguard Worker }
730*5e7646d2SAndroid Build Coastguard Worker
731*5e7646d2SAndroid Build Coastguard Worker /*
732*5e7646d2SAndroid Build Coastguard Worker * cupsMarkerName localization...
733*5e7646d2SAndroid Build Coastguard Worker */
734*5e7646d2SAndroid Build Coastguard Worker
735*5e7646d2SAndroid Build Coastguard Worker putenv("LANG=en");
736*5e7646d2SAndroid Build Coastguard Worker putenv("LC_ALL=en");
737*5e7646d2SAndroid Build Coastguard Worker putenv("LC_CTYPE=en");
738*5e7646d2SAndroid Build Coastguard Worker putenv("LC_MESSAGES=en");
739*5e7646d2SAndroid Build Coastguard Worker
740*5e7646d2SAndroid Build Coastguard Worker fputs("ppdLocalizeMarkerName(bogus): ", stdout);
741*5e7646d2SAndroid Build Coastguard Worker
742*5e7646d2SAndroid Build Coastguard Worker if ((text = ppdLocalizeMarkerName(ppd, "bogus")) != NULL)
743*5e7646d2SAndroid Build Coastguard Worker {
744*5e7646d2SAndroid Build Coastguard Worker status ++;
745*5e7646d2SAndroid Build Coastguard Worker printf("FAIL (\"%s\" instead of NULL)\n", text);
746*5e7646d2SAndroid Build Coastguard Worker }
747*5e7646d2SAndroid Build Coastguard Worker else
748*5e7646d2SAndroid Build Coastguard Worker puts("PASS");
749*5e7646d2SAndroid Build Coastguard Worker
750*5e7646d2SAndroid Build Coastguard Worker fputs("ppdLocalizeMarkerName(cyan): ", stdout);
751*5e7646d2SAndroid Build Coastguard Worker
752*5e7646d2SAndroid Build Coastguard Worker if ((text = ppdLocalizeMarkerName(ppd, "cyan")) != NULL &&
753*5e7646d2SAndroid Build Coastguard Worker !strcmp(text, "Cyan Toner"))
754*5e7646d2SAndroid Build Coastguard Worker puts("PASS");
755*5e7646d2SAndroid Build Coastguard Worker else
756*5e7646d2SAndroid Build Coastguard Worker {
757*5e7646d2SAndroid Build Coastguard Worker status ++;
758*5e7646d2SAndroid Build Coastguard Worker printf("FAIL (\"%s\" instead of \"Cyan Toner\")\n",
759*5e7646d2SAndroid Build Coastguard Worker text ? text : "(null)");
760*5e7646d2SAndroid Build Coastguard Worker }
761*5e7646d2SAndroid Build Coastguard Worker
762*5e7646d2SAndroid Build Coastguard Worker putenv("LANG=fr");
763*5e7646d2SAndroid Build Coastguard Worker putenv("LC_ALL=fr");
764*5e7646d2SAndroid Build Coastguard Worker putenv("LC_CTYPE=fr");
765*5e7646d2SAndroid Build Coastguard Worker putenv("LC_MESSAGES=fr");
766*5e7646d2SAndroid Build Coastguard Worker
767*5e7646d2SAndroid Build Coastguard Worker fputs("ppdLocalizeMarkerName(fr cyan): ", stdout);
768*5e7646d2SAndroid Build Coastguard Worker if ((text = ppdLocalizeMarkerName(ppd, "cyan")) != NULL &&
769*5e7646d2SAndroid Build Coastguard Worker !strcmp(text, "La Toner Cyan"))
770*5e7646d2SAndroid Build Coastguard Worker puts("PASS");
771*5e7646d2SAndroid Build Coastguard Worker else
772*5e7646d2SAndroid Build Coastguard Worker {
773*5e7646d2SAndroid Build Coastguard Worker status ++;
774*5e7646d2SAndroid Build Coastguard Worker printf("FAIL (\"%s\" instead of \"La Toner Cyan\")\n",
775*5e7646d2SAndroid Build Coastguard Worker text ? text : "(null)");
776*5e7646d2SAndroid Build Coastguard Worker }
777*5e7646d2SAndroid Build Coastguard Worker
778*5e7646d2SAndroid Build Coastguard Worker putenv("LANG=zh_TW");
779*5e7646d2SAndroid Build Coastguard Worker putenv("LC_ALL=zh_TW");
780*5e7646d2SAndroid Build Coastguard Worker putenv("LC_CTYPE=zh_TW");
781*5e7646d2SAndroid Build Coastguard Worker putenv("LC_MESSAGES=zh_TW");
782*5e7646d2SAndroid Build Coastguard Worker
783*5e7646d2SAndroid Build Coastguard Worker fputs("ppdLocalizeMarkerName(zh_TW cyan): ", stdout);
784*5e7646d2SAndroid Build Coastguard Worker if ((text = ppdLocalizeMarkerName(ppd, "cyan")) != NULL &&
785*5e7646d2SAndroid Build Coastguard Worker !strcmp(text, "Number 1 Cyan Toner"))
786*5e7646d2SAndroid Build Coastguard Worker puts("PASS");
787*5e7646d2SAndroid Build Coastguard Worker else
788*5e7646d2SAndroid Build Coastguard Worker {
789*5e7646d2SAndroid Build Coastguard Worker status ++;
790*5e7646d2SAndroid Build Coastguard Worker printf("FAIL (\"%s\" instead of \"Number 1 Cyan Toner\")\n",
791*5e7646d2SAndroid Build Coastguard Worker text ? text : "(null)");
792*5e7646d2SAndroid Build Coastguard Worker }
793*5e7646d2SAndroid Build Coastguard Worker
794*5e7646d2SAndroid Build Coastguard Worker ppdClose(ppd);
795*5e7646d2SAndroid Build Coastguard Worker
796*5e7646d2SAndroid Build Coastguard Worker /*
797*5e7646d2SAndroid Build Coastguard Worker * Test new constraints...
798*5e7646d2SAndroid Build Coastguard Worker */
799*5e7646d2SAndroid Build Coastguard Worker
800*5e7646d2SAndroid Build Coastguard Worker fputs("ppdOpenFile(test2.ppd): ", stdout);
801*5e7646d2SAndroid Build Coastguard Worker
802*5e7646d2SAndroid Build Coastguard Worker if ((ppd = ppdOpenFile("test2.ppd")) != NULL)
803*5e7646d2SAndroid Build Coastguard Worker puts("PASS");
804*5e7646d2SAndroid Build Coastguard Worker else
805*5e7646d2SAndroid Build Coastguard Worker {
806*5e7646d2SAndroid Build Coastguard Worker ppd_status_t err; /* Last error in file */
807*5e7646d2SAndroid Build Coastguard Worker int line; /* Line number in file */
808*5e7646d2SAndroid Build Coastguard Worker
809*5e7646d2SAndroid Build Coastguard Worker
810*5e7646d2SAndroid Build Coastguard Worker status ++;
811*5e7646d2SAndroid Build Coastguard Worker err = ppdLastError(&line);
812*5e7646d2SAndroid Build Coastguard Worker
813*5e7646d2SAndroid Build Coastguard Worker printf("FAIL (%s on line %d)\n", ppdErrorString(err), line);
814*5e7646d2SAndroid Build Coastguard Worker }
815*5e7646d2SAndroid Build Coastguard Worker
816*5e7646d2SAndroid Build Coastguard Worker fputs("ppdMarkDefaults: ", stdout);
817*5e7646d2SAndroid Build Coastguard Worker ppdMarkDefaults(ppd);
818*5e7646d2SAndroid Build Coastguard Worker
819*5e7646d2SAndroid Build Coastguard Worker if ((conflicts = ppdConflicts(ppd)) == 0)
820*5e7646d2SAndroid Build Coastguard Worker puts("PASS");
821*5e7646d2SAndroid Build Coastguard Worker else
822*5e7646d2SAndroid Build Coastguard Worker {
823*5e7646d2SAndroid Build Coastguard Worker status ++;
824*5e7646d2SAndroid Build Coastguard Worker printf("FAIL (%d conflicts)\n", conflicts);
825*5e7646d2SAndroid Build Coastguard Worker }
826*5e7646d2SAndroid Build Coastguard Worker
827*5e7646d2SAndroid Build Coastguard Worker fputs("ppdEmitString (defaults): ", stdout);
828*5e7646d2SAndroid Build Coastguard Worker if ((s = ppdEmitString(ppd, PPD_ORDER_ANY, 0.0)) != NULL &&
829*5e7646d2SAndroid Build Coastguard Worker !strcmp(s, default2_code))
830*5e7646d2SAndroid Build Coastguard Worker puts("PASS");
831*5e7646d2SAndroid Build Coastguard Worker else
832*5e7646d2SAndroid Build Coastguard Worker {
833*5e7646d2SAndroid Build Coastguard Worker status ++;
834*5e7646d2SAndroid Build Coastguard Worker printf("FAIL (%d bytes instead of %d)\n", s ? (int)strlen(s) : 0,
835*5e7646d2SAndroid Build Coastguard Worker (int)strlen(default2_code));
836*5e7646d2SAndroid Build Coastguard Worker
837*5e7646d2SAndroid Build Coastguard Worker if (s)
838*5e7646d2SAndroid Build Coastguard Worker puts(s);
839*5e7646d2SAndroid Build Coastguard Worker }
840*5e7646d2SAndroid Build Coastguard Worker
841*5e7646d2SAndroid Build Coastguard Worker if (s)
842*5e7646d2SAndroid Build Coastguard Worker free(s);
843*5e7646d2SAndroid Build Coastguard Worker
844*5e7646d2SAndroid Build Coastguard Worker fputs("ppdConflicts(): ", stdout);
845*5e7646d2SAndroid Build Coastguard Worker ppdMarkOption(ppd, "PageSize", "Env10");
846*5e7646d2SAndroid Build Coastguard Worker ppdMarkOption(ppd, "InputSlot", "Envelope");
847*5e7646d2SAndroid Build Coastguard Worker ppdMarkOption(ppd, "Quality", "Photo");
848*5e7646d2SAndroid Build Coastguard Worker
849*5e7646d2SAndroid Build Coastguard Worker if ((conflicts = ppdConflicts(ppd)) == 1)
850*5e7646d2SAndroid Build Coastguard Worker puts("PASS (1)");
851*5e7646d2SAndroid Build Coastguard Worker else
852*5e7646d2SAndroid Build Coastguard Worker {
853*5e7646d2SAndroid Build Coastguard Worker printf("FAIL (%d)\n", conflicts);
854*5e7646d2SAndroid Build Coastguard Worker status ++;
855*5e7646d2SAndroid Build Coastguard Worker }
856*5e7646d2SAndroid Build Coastguard Worker
857*5e7646d2SAndroid Build Coastguard Worker fputs("cupsResolveConflicts(Quality=Photo): ", stdout);
858*5e7646d2SAndroid Build Coastguard Worker num_options = 0;
859*5e7646d2SAndroid Build Coastguard Worker options = NULL;
860*5e7646d2SAndroid Build Coastguard Worker if (cupsResolveConflicts(ppd, "Quality", "Photo", &num_options,
861*5e7646d2SAndroid Build Coastguard Worker &options))
862*5e7646d2SAndroid Build Coastguard Worker {
863*5e7646d2SAndroid Build Coastguard Worker printf("FAIL (%d options:", num_options);
864*5e7646d2SAndroid Build Coastguard Worker for (i = 0; i < num_options; i ++)
865*5e7646d2SAndroid Build Coastguard Worker printf(" %s=%s", options[i].name, options[i].value);
866*5e7646d2SAndroid Build Coastguard Worker puts(")");
867*5e7646d2SAndroid Build Coastguard Worker status ++;
868*5e7646d2SAndroid Build Coastguard Worker }
869*5e7646d2SAndroid Build Coastguard Worker else
870*5e7646d2SAndroid Build Coastguard Worker puts("PASS (Unable to resolve)");
871*5e7646d2SAndroid Build Coastguard Worker cupsFreeOptions(num_options, options);
872*5e7646d2SAndroid Build Coastguard Worker
873*5e7646d2SAndroid Build Coastguard Worker fputs("cupsResolveConflicts(No option/choice): ", stdout);
874*5e7646d2SAndroid Build Coastguard Worker num_options = 0;
875*5e7646d2SAndroid Build Coastguard Worker options = NULL;
876*5e7646d2SAndroid Build Coastguard Worker if (cupsResolveConflicts(ppd, NULL, NULL, &num_options, &options) &&
877*5e7646d2SAndroid Build Coastguard Worker num_options == 1 && !_cups_strcasecmp(options->name, "Quality") &&
878*5e7646d2SAndroid Build Coastguard Worker !_cups_strcasecmp(options->value, "Normal"))
879*5e7646d2SAndroid Build Coastguard Worker puts("PASS");
880*5e7646d2SAndroid Build Coastguard Worker else if (num_options > 0)
881*5e7646d2SAndroid Build Coastguard Worker {
882*5e7646d2SAndroid Build Coastguard Worker printf("FAIL (%d options:", num_options);
883*5e7646d2SAndroid Build Coastguard Worker for (i = 0; i < num_options; i ++)
884*5e7646d2SAndroid Build Coastguard Worker printf(" %s=%s", options[i].name, options[i].value);
885*5e7646d2SAndroid Build Coastguard Worker puts(")");
886*5e7646d2SAndroid Build Coastguard Worker status ++;
887*5e7646d2SAndroid Build Coastguard Worker }
888*5e7646d2SAndroid Build Coastguard Worker else
889*5e7646d2SAndroid Build Coastguard Worker {
890*5e7646d2SAndroid Build Coastguard Worker puts("FAIL (Unable to resolve!)");
891*5e7646d2SAndroid Build Coastguard Worker status ++;
892*5e7646d2SAndroid Build Coastguard Worker }
893*5e7646d2SAndroid Build Coastguard Worker cupsFreeOptions(num_options, options);
894*5e7646d2SAndroid Build Coastguard Worker
895*5e7646d2SAndroid Build Coastguard Worker fputs("cupsResolveConflicts(loop test): ", stdout);
896*5e7646d2SAndroid Build Coastguard Worker ppdMarkOption(ppd, "PageSize", "A4");
897*5e7646d2SAndroid Build Coastguard Worker ppdMarkOption(ppd, "InputSlot", "Tray");
898*5e7646d2SAndroid Build Coastguard Worker ppdMarkOption(ppd, "Quality", "Photo");
899*5e7646d2SAndroid Build Coastguard Worker num_options = 0;
900*5e7646d2SAndroid Build Coastguard Worker options = NULL;
901*5e7646d2SAndroid Build Coastguard Worker if (!cupsResolveConflicts(ppd, NULL, NULL, &num_options, &options))
902*5e7646d2SAndroid Build Coastguard Worker puts("PASS");
903*5e7646d2SAndroid Build Coastguard Worker else if (num_options > 0)
904*5e7646d2SAndroid Build Coastguard Worker {
905*5e7646d2SAndroid Build Coastguard Worker printf("FAIL (%d options:", num_options);
906*5e7646d2SAndroid Build Coastguard Worker for (i = 0; i < num_options; i ++)
907*5e7646d2SAndroid Build Coastguard Worker printf(" %s=%s", options[i].name, options[i].value);
908*5e7646d2SAndroid Build Coastguard Worker puts(")");
909*5e7646d2SAndroid Build Coastguard Worker }
910*5e7646d2SAndroid Build Coastguard Worker else
911*5e7646d2SAndroid Build Coastguard Worker puts("FAIL (No conflicts!)");
912*5e7646d2SAndroid Build Coastguard Worker
913*5e7646d2SAndroid Build Coastguard Worker fputs("ppdInstallableConflict(): ", stdout);
914*5e7646d2SAndroid Build Coastguard Worker if (ppdInstallableConflict(ppd, "Duplex", "DuplexNoTumble") &&
915*5e7646d2SAndroid Build Coastguard Worker !ppdInstallableConflict(ppd, "Duplex", "None"))
916*5e7646d2SAndroid Build Coastguard Worker puts("PASS");
917*5e7646d2SAndroid Build Coastguard Worker else if (!ppdInstallableConflict(ppd, "Duplex", "DuplexNoTumble"))
918*5e7646d2SAndroid Build Coastguard Worker {
919*5e7646d2SAndroid Build Coastguard Worker puts("FAIL (Duplex=DuplexNoTumble did not conflict)");
920*5e7646d2SAndroid Build Coastguard Worker status ++;
921*5e7646d2SAndroid Build Coastguard Worker }
922*5e7646d2SAndroid Build Coastguard Worker else
923*5e7646d2SAndroid Build Coastguard Worker {
924*5e7646d2SAndroid Build Coastguard Worker puts("FAIL (Duplex=None conflicted)");
925*5e7646d2SAndroid Build Coastguard Worker status ++;
926*5e7646d2SAndroid Build Coastguard Worker }
927*5e7646d2SAndroid Build Coastguard Worker
928*5e7646d2SAndroid Build Coastguard Worker /*
929*5e7646d2SAndroid Build Coastguard Worker * ppdPageSizeLimits
930*5e7646d2SAndroid Build Coastguard Worker */
931*5e7646d2SAndroid Build Coastguard Worker
932*5e7646d2SAndroid Build Coastguard Worker ppdMarkDefaults(ppd);
933*5e7646d2SAndroid Build Coastguard Worker
934*5e7646d2SAndroid Build Coastguard Worker fputs("ppdPageSizeLimits(default): ", stdout);
935*5e7646d2SAndroid Build Coastguard Worker if (ppdPageSizeLimits(ppd, &minsize, &maxsize))
936*5e7646d2SAndroid Build Coastguard Worker {
937*5e7646d2SAndroid Build Coastguard Worker if (fabs(minsize.width - 36.0) > 0.001 || fabs(minsize.length - 36.0) > 0.001 ||
938*5e7646d2SAndroid Build Coastguard Worker fabs(maxsize.width - 1080.0) > 0.001 || fabs(maxsize.length - 86400.0) > 0.001)
939*5e7646d2SAndroid Build Coastguard Worker {
940*5e7646d2SAndroid Build Coastguard Worker printf("FAIL (got min=%.0fx%.0f, max=%.0fx%.0f, "
941*5e7646d2SAndroid Build Coastguard Worker "expected min=36x36, max=1080x86400)\n", minsize.width,
942*5e7646d2SAndroid Build Coastguard Worker minsize.length, maxsize.width, maxsize.length);
943*5e7646d2SAndroid Build Coastguard Worker status ++;
944*5e7646d2SAndroid Build Coastguard Worker }
945*5e7646d2SAndroid Build Coastguard Worker else
946*5e7646d2SAndroid Build Coastguard Worker puts("PASS");
947*5e7646d2SAndroid Build Coastguard Worker }
948*5e7646d2SAndroid Build Coastguard Worker else
949*5e7646d2SAndroid Build Coastguard Worker {
950*5e7646d2SAndroid Build Coastguard Worker puts("FAIL (returned 0)");
951*5e7646d2SAndroid Build Coastguard Worker status ++;
952*5e7646d2SAndroid Build Coastguard Worker }
953*5e7646d2SAndroid Build Coastguard Worker
954*5e7646d2SAndroid Build Coastguard Worker ppdMarkOption(ppd, "InputSlot", "Manual");
955*5e7646d2SAndroid Build Coastguard Worker
956*5e7646d2SAndroid Build Coastguard Worker fputs("ppdPageSizeLimits(InputSlot=Manual): ", stdout);
957*5e7646d2SAndroid Build Coastguard Worker if (ppdPageSizeLimits(ppd, &minsize, &maxsize))
958*5e7646d2SAndroid Build Coastguard Worker {
959*5e7646d2SAndroid Build Coastguard Worker if (fabs(minsize.width - 100.0) > 0.001 || fabs(minsize.length - 100.0) > 0.001 ||
960*5e7646d2SAndroid Build Coastguard Worker fabs(maxsize.width - 1000.0) > 0.001 || fabs(maxsize.length - 1000.0) > 0.001)
961*5e7646d2SAndroid Build Coastguard Worker {
962*5e7646d2SAndroid Build Coastguard Worker printf("FAIL (got min=%.0fx%.0f, max=%.0fx%.0f, "
963*5e7646d2SAndroid Build Coastguard Worker "expected min=100x100, max=1000x1000)\n", minsize.width,
964*5e7646d2SAndroid Build Coastguard Worker minsize.length, maxsize.width, maxsize.length);
965*5e7646d2SAndroid Build Coastguard Worker status ++;
966*5e7646d2SAndroid Build Coastguard Worker }
967*5e7646d2SAndroid Build Coastguard Worker else
968*5e7646d2SAndroid Build Coastguard Worker puts("PASS");
969*5e7646d2SAndroid Build Coastguard Worker }
970*5e7646d2SAndroid Build Coastguard Worker else
971*5e7646d2SAndroid Build Coastguard Worker {
972*5e7646d2SAndroid Build Coastguard Worker puts("FAIL (returned 0)");
973*5e7646d2SAndroid Build Coastguard Worker status ++;
974*5e7646d2SAndroid Build Coastguard Worker }
975*5e7646d2SAndroid Build Coastguard Worker
976*5e7646d2SAndroid Build Coastguard Worker ppdMarkOption(ppd, "Quality", "Photo");
977*5e7646d2SAndroid Build Coastguard Worker
978*5e7646d2SAndroid Build Coastguard Worker fputs("ppdPageSizeLimits(Quality=Photo): ", stdout);
979*5e7646d2SAndroid Build Coastguard Worker if (ppdPageSizeLimits(ppd, &minsize, &maxsize))
980*5e7646d2SAndroid Build Coastguard Worker {
981*5e7646d2SAndroid Build Coastguard Worker if (fabs(minsize.width - 200.0) > 0.001 || fabs(minsize.length - 200.0) > 0.001 ||
982*5e7646d2SAndroid Build Coastguard Worker fabs(maxsize.width - 1000.0) > 0.001 || fabs(maxsize.length - 1000.0) > 0.001)
983*5e7646d2SAndroid Build Coastguard Worker {
984*5e7646d2SAndroid Build Coastguard Worker printf("FAIL (got min=%.0fx%.0f, max=%.0fx%.0f, "
985*5e7646d2SAndroid Build Coastguard Worker "expected min=200x200, max=1000x1000)\n", minsize.width,
986*5e7646d2SAndroid Build Coastguard Worker minsize.length, maxsize.width, maxsize.length);
987*5e7646d2SAndroid Build Coastguard Worker status ++;
988*5e7646d2SAndroid Build Coastguard Worker }
989*5e7646d2SAndroid Build Coastguard Worker else
990*5e7646d2SAndroid Build Coastguard Worker puts("PASS");
991*5e7646d2SAndroid Build Coastguard Worker }
992*5e7646d2SAndroid Build Coastguard Worker else
993*5e7646d2SAndroid Build Coastguard Worker {
994*5e7646d2SAndroid Build Coastguard Worker puts("FAIL (returned 0)");
995*5e7646d2SAndroid Build Coastguard Worker status ++;
996*5e7646d2SAndroid Build Coastguard Worker }
997*5e7646d2SAndroid Build Coastguard Worker
998*5e7646d2SAndroid Build Coastguard Worker ppdMarkOption(ppd, "InputSlot", "Tray");
999*5e7646d2SAndroid Build Coastguard Worker
1000*5e7646d2SAndroid Build Coastguard Worker fputs("ppdPageSizeLimits(Quality=Photo): ", stdout);
1001*5e7646d2SAndroid Build Coastguard Worker if (ppdPageSizeLimits(ppd, &minsize, &maxsize))
1002*5e7646d2SAndroid Build Coastguard Worker {
1003*5e7646d2SAndroid Build Coastguard Worker if (fabs(minsize.width - 300.0) > 0.001 || fabs(minsize.length - 300.0) > 0.001 ||
1004*5e7646d2SAndroid Build Coastguard Worker fabs(maxsize.width - 1080.0) > 0.001 || fabs(maxsize.length - 86400.0) > 0.001)
1005*5e7646d2SAndroid Build Coastguard Worker {
1006*5e7646d2SAndroid Build Coastguard Worker printf("FAIL (got min=%.0fx%.0f, max=%.0fx%.0f, "
1007*5e7646d2SAndroid Build Coastguard Worker "expected min=300x300, max=1080x86400)\n", minsize.width,
1008*5e7646d2SAndroid Build Coastguard Worker minsize.length, maxsize.width, maxsize.length);
1009*5e7646d2SAndroid Build Coastguard Worker status ++;
1010*5e7646d2SAndroid Build Coastguard Worker }
1011*5e7646d2SAndroid Build Coastguard Worker else
1012*5e7646d2SAndroid Build Coastguard Worker puts("PASS");
1013*5e7646d2SAndroid Build Coastguard Worker }
1014*5e7646d2SAndroid Build Coastguard Worker else
1015*5e7646d2SAndroid Build Coastguard Worker {
1016*5e7646d2SAndroid Build Coastguard Worker puts("FAIL (returned 0)");
1017*5e7646d2SAndroid Build Coastguard Worker status ++;
1018*5e7646d2SAndroid Build Coastguard Worker }
1019*5e7646d2SAndroid Build Coastguard Worker
1020*5e7646d2SAndroid Build Coastguard Worker status += do_ps_tests();
1021*5e7646d2SAndroid Build Coastguard Worker }
1022*5e7646d2SAndroid Build Coastguard Worker else if (!strcmp(argv[1], "--raster"))
1023*5e7646d2SAndroid Build Coastguard Worker {
1024*5e7646d2SAndroid Build Coastguard Worker for (status = 0, num_options = 0, options = NULL, i = 1; i < argc; i ++)
1025*5e7646d2SAndroid Build Coastguard Worker {
1026*5e7646d2SAndroid Build Coastguard Worker if (argv[i][0] == '-')
1027*5e7646d2SAndroid Build Coastguard Worker {
1028*5e7646d2SAndroid Build Coastguard Worker if (argv[i][1] == 'o')
1029*5e7646d2SAndroid Build Coastguard Worker {
1030*5e7646d2SAndroid Build Coastguard Worker if (argv[i][2])
1031*5e7646d2SAndroid Build Coastguard Worker num_options = cupsParseOptions(argv[i] + 2, num_options, &options);
1032*5e7646d2SAndroid Build Coastguard Worker else
1033*5e7646d2SAndroid Build Coastguard Worker {
1034*5e7646d2SAndroid Build Coastguard Worker i ++;
1035*5e7646d2SAndroid Build Coastguard Worker if (i < argc)
1036*5e7646d2SAndroid Build Coastguard Worker num_options = cupsParseOptions(argv[i], num_options, &options);
1037*5e7646d2SAndroid Build Coastguard Worker else
1038*5e7646d2SAndroid Build Coastguard Worker {
1039*5e7646d2SAndroid Build Coastguard Worker puts("Usage: testppd --raster [-o name=value ...] [filename.ppd ...]");
1040*5e7646d2SAndroid Build Coastguard Worker return (1);
1041*5e7646d2SAndroid Build Coastguard Worker }
1042*5e7646d2SAndroid Build Coastguard Worker }
1043*5e7646d2SAndroid Build Coastguard Worker }
1044*5e7646d2SAndroid Build Coastguard Worker else
1045*5e7646d2SAndroid Build Coastguard Worker {
1046*5e7646d2SAndroid Build Coastguard Worker puts("Usage: testppd --raster [-o name=value ...] [filename.ppd ...]");
1047*5e7646d2SAndroid Build Coastguard Worker return (1);
1048*5e7646d2SAndroid Build Coastguard Worker }
1049*5e7646d2SAndroid Build Coastguard Worker }
1050*5e7646d2SAndroid Build Coastguard Worker else
1051*5e7646d2SAndroid Build Coastguard Worker status += do_ppd_tests(argv[i], num_options, options);
1052*5e7646d2SAndroid Build Coastguard Worker }
1053*5e7646d2SAndroid Build Coastguard Worker
1054*5e7646d2SAndroid Build Coastguard Worker cupsFreeOptions(num_options, options);
1055*5e7646d2SAndroid Build Coastguard Worker }
1056*5e7646d2SAndroid Build Coastguard Worker else if (!strncmp(argv[1], "ipp://", 6) || !strncmp(argv[1], "ipps://", 7))
1057*5e7646d2SAndroid Build Coastguard Worker {
1058*5e7646d2SAndroid Build Coastguard Worker /*
1059*5e7646d2SAndroid Build Coastguard Worker * ipp://... or ipps://...
1060*5e7646d2SAndroid Build Coastguard Worker */
1061*5e7646d2SAndroid Build Coastguard Worker
1062*5e7646d2SAndroid Build Coastguard Worker http_t *http; /* Connection to printer */
1063*5e7646d2SAndroid Build Coastguard Worker ipp_t *request, /* Get-Printer-Attributes request */
1064*5e7646d2SAndroid Build Coastguard Worker *response; /* Get-Printer-Attributes response */
1065*5e7646d2SAndroid Build Coastguard Worker char scheme[32], /* URI scheme */
1066*5e7646d2SAndroid Build Coastguard Worker userpass[256], /* Username:password */
1067*5e7646d2SAndroid Build Coastguard Worker host[256], /* Hostname */
1068*5e7646d2SAndroid Build Coastguard Worker resource[256]; /* Resource path */
1069*5e7646d2SAndroid Build Coastguard Worker int port; /* Port number */
1070*5e7646d2SAndroid Build Coastguard Worker static const char * const pattrs[] =/* Requested printer attributes */
1071*5e7646d2SAndroid Build Coastguard Worker {
1072*5e7646d2SAndroid Build Coastguard Worker "job-template",
1073*5e7646d2SAndroid Build Coastguard Worker "printer-defaults",
1074*5e7646d2SAndroid Build Coastguard Worker "printer-description",
1075*5e7646d2SAndroid Build Coastguard Worker "media-col-database"
1076*5e7646d2SAndroid Build Coastguard Worker };
1077*5e7646d2SAndroid Build Coastguard Worker
1078*5e7646d2SAndroid Build Coastguard Worker if (httpSeparateURI(HTTP_URI_CODING_ALL, argv[1], scheme, sizeof(scheme), userpass, sizeof(userpass), host, sizeof(host), &port, resource, sizeof(resource)) < HTTP_URI_STATUS_OK)
1079*5e7646d2SAndroid Build Coastguard Worker {
1080*5e7646d2SAndroid Build Coastguard Worker printf("Bad URI \"%s\".\n", argv[1]);
1081*5e7646d2SAndroid Build Coastguard Worker return (1);
1082*5e7646d2SAndroid Build Coastguard Worker }
1083*5e7646d2SAndroid Build Coastguard Worker
1084*5e7646d2SAndroid Build Coastguard Worker http = httpConnect2(host, port, NULL, AF_UNSPEC, !strcmp(scheme, "ipps") ? HTTP_ENCRYPTION_ALWAYS : HTTP_ENCRYPTION_IF_REQUESTED, 1, 30000, NULL);
1085*5e7646d2SAndroid Build Coastguard Worker if (!http)
1086*5e7646d2SAndroid Build Coastguard Worker {
1087*5e7646d2SAndroid Build Coastguard Worker printf("Unable to connect to \"%s:%d\": %s\n", host, port, cupsLastErrorString());
1088*5e7646d2SAndroid Build Coastguard Worker return (1);
1089*5e7646d2SAndroid Build Coastguard Worker }
1090*5e7646d2SAndroid Build Coastguard Worker
1091*5e7646d2SAndroid Build Coastguard Worker request = ippNewRequest(IPP_OP_GET_PRINTER_ATTRIBUTES);
1092*5e7646d2SAndroid Build Coastguard Worker ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, argv[1]);
1093*5e7646d2SAndroid Build Coastguard Worker ippAddStrings(request, IPP_TAG_OPERATION, IPP_TAG_KEYWORD, "requested-attributes", sizeof(pattrs) / sizeof(pattrs[0]), NULL, pattrs);
1094*5e7646d2SAndroid Build Coastguard Worker response = cupsDoRequest(http, request, resource);
1095*5e7646d2SAndroid Build Coastguard Worker
1096*5e7646d2SAndroid Build Coastguard Worker if (_ppdCreateFromIPP(buffer, sizeof(buffer), response))
1097*5e7646d2SAndroid Build Coastguard Worker printf("Created PPD: %s\n", buffer);
1098*5e7646d2SAndroid Build Coastguard Worker else
1099*5e7646d2SAndroid Build Coastguard Worker puts("Unable to create PPD.");
1100*5e7646d2SAndroid Build Coastguard Worker
1101*5e7646d2SAndroid Build Coastguard Worker ippDelete(response);
1102*5e7646d2SAndroid Build Coastguard Worker httpClose(http);
1103*5e7646d2SAndroid Build Coastguard Worker return (0);
1104*5e7646d2SAndroid Build Coastguard Worker }
1105*5e7646d2SAndroid Build Coastguard Worker else
1106*5e7646d2SAndroid Build Coastguard Worker {
1107*5e7646d2SAndroid Build Coastguard Worker const char *filename; /* PPD filename */
1108*5e7646d2SAndroid Build Coastguard Worker struct stat fileinfo; /* File information */
1109*5e7646d2SAndroid Build Coastguard Worker
1110*5e7646d2SAndroid Build Coastguard Worker
1111*5e7646d2SAndroid Build Coastguard Worker if (strchr(argv[1], ':'))
1112*5e7646d2SAndroid Build Coastguard Worker {
1113*5e7646d2SAndroid Build Coastguard Worker /*
1114*5e7646d2SAndroid Build Coastguard Worker * Server PPD...
1115*5e7646d2SAndroid Build Coastguard Worker */
1116*5e7646d2SAndroid Build Coastguard Worker
1117*5e7646d2SAndroid Build Coastguard Worker if ((filename = cupsGetServerPPD(CUPS_HTTP_DEFAULT, argv[1])) == NULL)
1118*5e7646d2SAndroid Build Coastguard Worker {
1119*5e7646d2SAndroid Build Coastguard Worker printf("%s: %s\n", argv[1], cupsLastErrorString());
1120*5e7646d2SAndroid Build Coastguard Worker return (1);
1121*5e7646d2SAndroid Build Coastguard Worker }
1122*5e7646d2SAndroid Build Coastguard Worker }
1123*5e7646d2SAndroid Build Coastguard Worker else if (!strncmp(argv[1], "-d", 2))
1124*5e7646d2SAndroid Build Coastguard Worker {
1125*5e7646d2SAndroid Build Coastguard Worker const char *printer; /* Printer name */
1126*5e7646d2SAndroid Build Coastguard Worker
1127*5e7646d2SAndroid Build Coastguard Worker if (argv[1][2])
1128*5e7646d2SAndroid Build Coastguard Worker printer = argv[1] + 2;
1129*5e7646d2SAndroid Build Coastguard Worker else if (argv[2])
1130*5e7646d2SAndroid Build Coastguard Worker printer = argv[2];
1131*5e7646d2SAndroid Build Coastguard Worker else
1132*5e7646d2SAndroid Build Coastguard Worker {
1133*5e7646d2SAndroid Build Coastguard Worker puts("Usage: ./testppd -d printer");
1134*5e7646d2SAndroid Build Coastguard Worker return (1);
1135*5e7646d2SAndroid Build Coastguard Worker }
1136*5e7646d2SAndroid Build Coastguard Worker
1137*5e7646d2SAndroid Build Coastguard Worker filename = cupsGetPPD(printer);
1138*5e7646d2SAndroid Build Coastguard Worker
1139*5e7646d2SAndroid Build Coastguard Worker if (!filename)
1140*5e7646d2SAndroid Build Coastguard Worker {
1141*5e7646d2SAndroid Build Coastguard Worker printf("%s: %s\n", printer, cupsLastErrorString());
1142*5e7646d2SAndroid Build Coastguard Worker return (1);
1143*5e7646d2SAndroid Build Coastguard Worker }
1144*5e7646d2SAndroid Build Coastguard Worker }
1145*5e7646d2SAndroid Build Coastguard Worker else
1146*5e7646d2SAndroid Build Coastguard Worker filename = argv[1];
1147*5e7646d2SAndroid Build Coastguard Worker
1148*5e7646d2SAndroid Build Coastguard Worker if (lstat(filename, &fileinfo))
1149*5e7646d2SAndroid Build Coastguard Worker {
1150*5e7646d2SAndroid Build Coastguard Worker printf("%s: %s\n", filename, strerror(errno));
1151*5e7646d2SAndroid Build Coastguard Worker return (1);
1152*5e7646d2SAndroid Build Coastguard Worker }
1153*5e7646d2SAndroid Build Coastguard Worker
1154*5e7646d2SAndroid Build Coastguard Worker if (S_ISLNK(fileinfo.st_mode))
1155*5e7646d2SAndroid Build Coastguard Worker {
1156*5e7646d2SAndroid Build Coastguard Worker char realfile[1024]; /* Real file path */
1157*5e7646d2SAndroid Build Coastguard Worker ssize_t realsize; /* Size of real file path */
1158*5e7646d2SAndroid Build Coastguard Worker
1159*5e7646d2SAndroid Build Coastguard Worker
1160*5e7646d2SAndroid Build Coastguard Worker if ((realsize = readlink(filename, realfile, sizeof(realfile) - 1)) < 0)
1161*5e7646d2SAndroid Build Coastguard Worker strlcpy(realfile, "Unknown", sizeof(realfile));
1162*5e7646d2SAndroid Build Coastguard Worker else
1163*5e7646d2SAndroid Build Coastguard Worker realfile[realsize] = '\0';
1164*5e7646d2SAndroid Build Coastguard Worker
1165*5e7646d2SAndroid Build Coastguard Worker if (stat(realfile, &fileinfo))
1166*5e7646d2SAndroid Build Coastguard Worker printf("%s: symlink to \"%s\", %s\n", filename, realfile,
1167*5e7646d2SAndroid Build Coastguard Worker strerror(errno));
1168*5e7646d2SAndroid Build Coastguard Worker else
1169*5e7646d2SAndroid Build Coastguard Worker printf("%s: symlink to \"%s\", %ld bytes\n", filename, realfile,
1170*5e7646d2SAndroid Build Coastguard Worker (long)fileinfo.st_size);
1171*5e7646d2SAndroid Build Coastguard Worker }
1172*5e7646d2SAndroid Build Coastguard Worker else
1173*5e7646d2SAndroid Build Coastguard Worker printf("%s: regular file, %ld bytes\n", filename, (long)fileinfo.st_size);
1174*5e7646d2SAndroid Build Coastguard Worker
1175*5e7646d2SAndroid Build Coastguard Worker if ((ppd = ppdOpenFile(filename)) == NULL)
1176*5e7646d2SAndroid Build Coastguard Worker {
1177*5e7646d2SAndroid Build Coastguard Worker ppd_status_t err; /* Last error in file */
1178*5e7646d2SAndroid Build Coastguard Worker int line; /* Line number in file */
1179*5e7646d2SAndroid Build Coastguard Worker
1180*5e7646d2SAndroid Build Coastguard Worker
1181*5e7646d2SAndroid Build Coastguard Worker status ++;
1182*5e7646d2SAndroid Build Coastguard Worker err = ppdLastError(&line);
1183*5e7646d2SAndroid Build Coastguard Worker
1184*5e7646d2SAndroid Build Coastguard Worker printf("%s: %s on line %d\n", argv[1], ppdErrorString(err), line);
1185*5e7646d2SAndroid Build Coastguard Worker }
1186*5e7646d2SAndroid Build Coastguard Worker else
1187*5e7646d2SAndroid Build Coastguard Worker {
1188*5e7646d2SAndroid Build Coastguard Worker int j, k; /* Looping vars */
1189*5e7646d2SAndroid Build Coastguard Worker ppd_group_t *group; /* Option group */
1190*5e7646d2SAndroid Build Coastguard Worker ppd_option_t *option; /* Option */
1191*5e7646d2SAndroid Build Coastguard Worker ppd_coption_t *coption; /* Custom option */
1192*5e7646d2SAndroid Build Coastguard Worker ppd_cparam_t *cparam; /* Custom parameter */
1193*5e7646d2SAndroid Build Coastguard Worker ppd_const_t *c; /* UIConstraints */
1194*5e7646d2SAndroid Build Coastguard Worker char lang[255], /* LANG environment variable */
1195*5e7646d2SAndroid Build Coastguard Worker lc_all[255], /* LC_ALL environment variable */
1196*5e7646d2SAndroid Build Coastguard Worker lc_ctype[255], /* LC_CTYPE environment variable */
1197*5e7646d2SAndroid Build Coastguard Worker lc_messages[255];/* LC_MESSAGES environment variable */
1198*5e7646d2SAndroid Build Coastguard Worker
1199*5e7646d2SAndroid Build Coastguard Worker
1200*5e7646d2SAndroid Build Coastguard Worker if (argc > 2)
1201*5e7646d2SAndroid Build Coastguard Worker {
1202*5e7646d2SAndroid Build Coastguard Worker snprintf(lang, sizeof(lang), "LANG=%s", argv[2]);
1203*5e7646d2SAndroid Build Coastguard Worker putenv(lang);
1204*5e7646d2SAndroid Build Coastguard Worker snprintf(lc_all, sizeof(lc_all), "LC_ALL=%s", argv[2]);
1205*5e7646d2SAndroid Build Coastguard Worker putenv(lc_all);
1206*5e7646d2SAndroid Build Coastguard Worker snprintf(lc_ctype, sizeof(lc_ctype), "LC_CTYPE=%s", argv[2]);
1207*5e7646d2SAndroid Build Coastguard Worker putenv(lc_ctype);
1208*5e7646d2SAndroid Build Coastguard Worker snprintf(lc_messages, sizeof(lc_messages), "LC_MESSAGES=%s", argv[2]);
1209*5e7646d2SAndroid Build Coastguard Worker putenv(lc_messages);
1210*5e7646d2SAndroid Build Coastguard Worker }
1211*5e7646d2SAndroid Build Coastguard Worker
1212*5e7646d2SAndroid Build Coastguard Worker ppdLocalize(ppd);
1213*5e7646d2SAndroid Build Coastguard Worker ppdMarkDefaults(ppd);
1214*5e7646d2SAndroid Build Coastguard Worker
1215*5e7646d2SAndroid Build Coastguard Worker if (argc > 3)
1216*5e7646d2SAndroid Build Coastguard Worker {
1217*5e7646d2SAndroid Build Coastguard Worker text = ppdLocalizeIPPReason(ppd, argv[3], NULL, buffer, sizeof(buffer));
1218*5e7646d2SAndroid Build Coastguard Worker printf("ppdLocalizeIPPReason(%s)=%s\n", argv[3],
1219*5e7646d2SAndroid Build Coastguard Worker text ? text : "(null)");
1220*5e7646d2SAndroid Build Coastguard Worker return (text == NULL);
1221*5e7646d2SAndroid Build Coastguard Worker }
1222*5e7646d2SAndroid Build Coastguard Worker
1223*5e7646d2SAndroid Build Coastguard Worker for (i = ppd->num_groups, group = ppd->groups;
1224*5e7646d2SAndroid Build Coastguard Worker i > 0;
1225*5e7646d2SAndroid Build Coastguard Worker i --, group ++)
1226*5e7646d2SAndroid Build Coastguard Worker {
1227*5e7646d2SAndroid Build Coastguard Worker printf("%s (%s):\n", group->name, group->text);
1228*5e7646d2SAndroid Build Coastguard Worker
1229*5e7646d2SAndroid Build Coastguard Worker for (j = group->num_options, option = group->options;
1230*5e7646d2SAndroid Build Coastguard Worker j > 0;
1231*5e7646d2SAndroid Build Coastguard Worker j --, option ++)
1232*5e7646d2SAndroid Build Coastguard Worker {
1233*5e7646d2SAndroid Build Coastguard Worker printf(" %s (%s):\n", option->keyword, option->text);
1234*5e7646d2SAndroid Build Coastguard Worker
1235*5e7646d2SAndroid Build Coastguard Worker for (k = 0; k < option->num_choices; k ++)
1236*5e7646d2SAndroid Build Coastguard Worker printf(" - %s%s (%s)\n",
1237*5e7646d2SAndroid Build Coastguard Worker option->choices[k].marked ? "*" : "",
1238*5e7646d2SAndroid Build Coastguard Worker option->choices[k].choice, option->choices[k].text);
1239*5e7646d2SAndroid Build Coastguard Worker
1240*5e7646d2SAndroid Build Coastguard Worker if ((coption = ppdFindCustomOption(ppd, option->keyword)) != NULL)
1241*5e7646d2SAndroid Build Coastguard Worker {
1242*5e7646d2SAndroid Build Coastguard Worker for (cparam = (ppd_cparam_t *)cupsArrayFirst(coption->params);
1243*5e7646d2SAndroid Build Coastguard Worker cparam;
1244*5e7646d2SAndroid Build Coastguard Worker cparam = (ppd_cparam_t *)cupsArrayNext(coption->params))
1245*5e7646d2SAndroid Build Coastguard Worker {
1246*5e7646d2SAndroid Build Coastguard Worker switch (cparam->type)
1247*5e7646d2SAndroid Build Coastguard Worker {
1248*5e7646d2SAndroid Build Coastguard Worker case PPD_CUSTOM_UNKNOWN :
1249*5e7646d2SAndroid Build Coastguard Worker printf(" %s(%s): PPD_CUSTOM_UNKNOWN (error)\n", cparam->name, cparam->text);
1250*5e7646d2SAndroid Build Coastguard Worker break;
1251*5e7646d2SAndroid Build Coastguard Worker
1252*5e7646d2SAndroid Build Coastguard Worker case PPD_CUSTOM_CURVE :
1253*5e7646d2SAndroid Build Coastguard Worker printf(" %s(%s): PPD_CUSTOM_CURVE (%g to %g)\n",
1254*5e7646d2SAndroid Build Coastguard Worker cparam->name, cparam->text,
1255*5e7646d2SAndroid Build Coastguard Worker cparam->minimum.custom_curve,
1256*5e7646d2SAndroid Build Coastguard Worker cparam->maximum.custom_curve);
1257*5e7646d2SAndroid Build Coastguard Worker break;
1258*5e7646d2SAndroid Build Coastguard Worker
1259*5e7646d2SAndroid Build Coastguard Worker case PPD_CUSTOM_INT :
1260*5e7646d2SAndroid Build Coastguard Worker printf(" %s(%s): PPD_CUSTOM_INT (%d to %d)\n",
1261*5e7646d2SAndroid Build Coastguard Worker cparam->name, cparam->text,
1262*5e7646d2SAndroid Build Coastguard Worker cparam->minimum.custom_int,
1263*5e7646d2SAndroid Build Coastguard Worker cparam->maximum.custom_int);
1264*5e7646d2SAndroid Build Coastguard Worker break;
1265*5e7646d2SAndroid Build Coastguard Worker
1266*5e7646d2SAndroid Build Coastguard Worker case PPD_CUSTOM_INVCURVE :
1267*5e7646d2SAndroid Build Coastguard Worker printf(" %s(%s): PPD_CUSTOM_INVCURVE (%g to %g)\n",
1268*5e7646d2SAndroid Build Coastguard Worker cparam->name, cparam->text,
1269*5e7646d2SAndroid Build Coastguard Worker cparam->minimum.custom_invcurve,
1270*5e7646d2SAndroid Build Coastguard Worker cparam->maximum.custom_invcurve);
1271*5e7646d2SAndroid Build Coastguard Worker break;
1272*5e7646d2SAndroid Build Coastguard Worker
1273*5e7646d2SAndroid Build Coastguard Worker case PPD_CUSTOM_PASSCODE :
1274*5e7646d2SAndroid Build Coastguard Worker printf(" %s(%s): PPD_CUSTOM_PASSCODE (%d to %d)\n",
1275*5e7646d2SAndroid Build Coastguard Worker cparam->name, cparam->text,
1276*5e7646d2SAndroid Build Coastguard Worker cparam->minimum.custom_passcode,
1277*5e7646d2SAndroid Build Coastguard Worker cparam->maximum.custom_passcode);
1278*5e7646d2SAndroid Build Coastguard Worker break;
1279*5e7646d2SAndroid Build Coastguard Worker
1280*5e7646d2SAndroid Build Coastguard Worker case PPD_CUSTOM_PASSWORD :
1281*5e7646d2SAndroid Build Coastguard Worker printf(" %s(%s): PPD_CUSTOM_PASSWORD (%d to %d)\n",
1282*5e7646d2SAndroid Build Coastguard Worker cparam->name, cparam->text,
1283*5e7646d2SAndroid Build Coastguard Worker cparam->minimum.custom_password,
1284*5e7646d2SAndroid Build Coastguard Worker cparam->maximum.custom_password);
1285*5e7646d2SAndroid Build Coastguard Worker break;
1286*5e7646d2SAndroid Build Coastguard Worker
1287*5e7646d2SAndroid Build Coastguard Worker case PPD_CUSTOM_POINTS :
1288*5e7646d2SAndroid Build Coastguard Worker printf(" %s(%s): PPD_CUSTOM_POINTS (%g to %g)\n",
1289*5e7646d2SAndroid Build Coastguard Worker cparam->name, cparam->text,
1290*5e7646d2SAndroid Build Coastguard Worker cparam->minimum.custom_points,
1291*5e7646d2SAndroid Build Coastguard Worker cparam->maximum.custom_points);
1292*5e7646d2SAndroid Build Coastguard Worker break;
1293*5e7646d2SAndroid Build Coastguard Worker
1294*5e7646d2SAndroid Build Coastguard Worker case PPD_CUSTOM_REAL :
1295*5e7646d2SAndroid Build Coastguard Worker printf(" %s(%s): PPD_CUSTOM_REAL (%g to %g)\n",
1296*5e7646d2SAndroid Build Coastguard Worker cparam->name, cparam->text,
1297*5e7646d2SAndroid Build Coastguard Worker cparam->minimum.custom_real,
1298*5e7646d2SAndroid Build Coastguard Worker cparam->maximum.custom_real);
1299*5e7646d2SAndroid Build Coastguard Worker break;
1300*5e7646d2SAndroid Build Coastguard Worker
1301*5e7646d2SAndroid Build Coastguard Worker case PPD_CUSTOM_STRING :
1302*5e7646d2SAndroid Build Coastguard Worker printf(" %s(%s): PPD_CUSTOM_STRING (%d to %d)\n",
1303*5e7646d2SAndroid Build Coastguard Worker cparam->name, cparam->text,
1304*5e7646d2SAndroid Build Coastguard Worker cparam->minimum.custom_string,
1305*5e7646d2SAndroid Build Coastguard Worker cparam->maximum.custom_string);
1306*5e7646d2SAndroid Build Coastguard Worker break;
1307*5e7646d2SAndroid Build Coastguard Worker }
1308*5e7646d2SAndroid Build Coastguard Worker }
1309*5e7646d2SAndroid Build Coastguard Worker }
1310*5e7646d2SAndroid Build Coastguard Worker }
1311*5e7646d2SAndroid Build Coastguard Worker }
1312*5e7646d2SAndroid Build Coastguard Worker
1313*5e7646d2SAndroid Build Coastguard Worker puts("\nSizes:");
1314*5e7646d2SAndroid Build Coastguard Worker for (i = ppd->num_sizes, size = ppd->sizes; i > 0; i --, size ++)
1315*5e7646d2SAndroid Build Coastguard Worker printf(" %s = %gx%g, [%g %g %g %g]\n", size->name, size->width,
1316*5e7646d2SAndroid Build Coastguard Worker size->length, size->left, size->bottom, size->right, size->top);
1317*5e7646d2SAndroid Build Coastguard Worker
1318*5e7646d2SAndroid Build Coastguard Worker puts("\nConstraints:");
1319*5e7646d2SAndroid Build Coastguard Worker
1320*5e7646d2SAndroid Build Coastguard Worker for (i = ppd->num_consts, c = ppd->consts; i > 0; i --, c ++)
1321*5e7646d2SAndroid Build Coastguard Worker printf(" *UIConstraints: *%s %s *%s %s\n", c->option1, c->choice1,
1322*5e7646d2SAndroid Build Coastguard Worker c->option2, c->choice2);
1323*5e7646d2SAndroid Build Coastguard Worker if (ppd->num_consts == 0)
1324*5e7646d2SAndroid Build Coastguard Worker puts(" NO CONSTRAINTS");
1325*5e7646d2SAndroid Build Coastguard Worker
1326*5e7646d2SAndroid Build Coastguard Worker puts("\nFilters:");
1327*5e7646d2SAndroid Build Coastguard Worker
1328*5e7646d2SAndroid Build Coastguard Worker for (i = 0; i < ppd->num_filters; i ++)
1329*5e7646d2SAndroid Build Coastguard Worker printf(" %s\n", ppd->filters[i]);
1330*5e7646d2SAndroid Build Coastguard Worker
1331*5e7646d2SAndroid Build Coastguard Worker if (ppd->num_filters == 0)
1332*5e7646d2SAndroid Build Coastguard Worker puts(" NO FILTERS");
1333*5e7646d2SAndroid Build Coastguard Worker
1334*5e7646d2SAndroid Build Coastguard Worker puts("\nAttributes:");
1335*5e7646d2SAndroid Build Coastguard Worker
1336*5e7646d2SAndroid Build Coastguard Worker for (attr = (ppd_attr_t *)cupsArrayFirst(ppd->sorted_attrs);
1337*5e7646d2SAndroid Build Coastguard Worker attr;
1338*5e7646d2SAndroid Build Coastguard Worker attr = (ppd_attr_t *)cupsArrayNext(ppd->sorted_attrs))
1339*5e7646d2SAndroid Build Coastguard Worker printf(" *%s %s/%s: \"%s\"\n", attr->name, attr->spec,
1340*5e7646d2SAndroid Build Coastguard Worker attr->text, attr->value ? attr->value : "");
1341*5e7646d2SAndroid Build Coastguard Worker
1342*5e7646d2SAndroid Build Coastguard Worker puts("\nPPD Cache:");
1343*5e7646d2SAndroid Build Coastguard Worker if ((pc = _ppdCacheCreateWithPPD(ppd)) == NULL)
1344*5e7646d2SAndroid Build Coastguard Worker printf(" Unable to create: %s\n", cupsLastErrorString());
1345*5e7646d2SAndroid Build Coastguard Worker else
1346*5e7646d2SAndroid Build Coastguard Worker {
1347*5e7646d2SAndroid Build Coastguard Worker _ppdCacheWriteFile(pc, "t.cache", NULL);
1348*5e7646d2SAndroid Build Coastguard Worker puts(" Wrote t.cache.");
1349*5e7646d2SAndroid Build Coastguard Worker }
1350*5e7646d2SAndroid Build Coastguard Worker }
1351*5e7646d2SAndroid Build Coastguard Worker
1352*5e7646d2SAndroid Build Coastguard Worker if (!strncmp(argv[1], "-d", 2))
1353*5e7646d2SAndroid Build Coastguard Worker unlink(filename);
1354*5e7646d2SAndroid Build Coastguard Worker }
1355*5e7646d2SAndroid Build Coastguard Worker
1356*5e7646d2SAndroid Build Coastguard Worker #ifdef __APPLE__
1357*5e7646d2SAndroid Build Coastguard Worker if (getenv("MallocStackLogging") && getenv("MallocStackLoggingNoCompact"))
1358*5e7646d2SAndroid Build Coastguard Worker {
1359*5e7646d2SAndroid Build Coastguard Worker char command[1024]; /* malloc_history command */
1360*5e7646d2SAndroid Build Coastguard Worker
1361*5e7646d2SAndroid Build Coastguard Worker snprintf(command, sizeof(command), "malloc_history %d -all_by_size",
1362*5e7646d2SAndroid Build Coastguard Worker getpid());
1363*5e7646d2SAndroid Build Coastguard Worker fflush(stdout);
1364*5e7646d2SAndroid Build Coastguard Worker system(command);
1365*5e7646d2SAndroid Build Coastguard Worker }
1366*5e7646d2SAndroid Build Coastguard Worker #endif /* __APPLE__ */
1367*5e7646d2SAndroid Build Coastguard Worker
1368*5e7646d2SAndroid Build Coastguard Worker ppdClose(ppd);
1369*5e7646d2SAndroid Build Coastguard Worker
1370*5e7646d2SAndroid Build Coastguard Worker return (status);
1371*5e7646d2SAndroid Build Coastguard Worker }
1372*5e7646d2SAndroid Build Coastguard Worker
1373*5e7646d2SAndroid Build Coastguard Worker
1374*5e7646d2SAndroid Build Coastguard Worker /*
1375*5e7646d2SAndroid Build Coastguard Worker * 'do_ppd_tests()' - Test the default option commands in a PPD file.
1376*5e7646d2SAndroid Build Coastguard Worker */
1377*5e7646d2SAndroid Build Coastguard Worker
1378*5e7646d2SAndroid Build Coastguard Worker static int /* O - Number of errors */
do_ppd_tests(const char * filename,int num_options,cups_option_t * options)1379*5e7646d2SAndroid Build Coastguard Worker do_ppd_tests(const char *filename, /* I - PPD file */
1380*5e7646d2SAndroid Build Coastguard Worker int num_options, /* I - Number of options */
1381*5e7646d2SAndroid Build Coastguard Worker cups_option_t *options) /* I - Options */
1382*5e7646d2SAndroid Build Coastguard Worker {
1383*5e7646d2SAndroid Build Coastguard Worker ppd_file_t *ppd; /* PPD file data */
1384*5e7646d2SAndroid Build Coastguard Worker cups_page_header2_t header; /* Page header */
1385*5e7646d2SAndroid Build Coastguard Worker
1386*5e7646d2SAndroid Build Coastguard Worker
1387*5e7646d2SAndroid Build Coastguard Worker printf("\"%s\": ", filename);
1388*5e7646d2SAndroid Build Coastguard Worker fflush(stdout);
1389*5e7646d2SAndroid Build Coastguard Worker
1390*5e7646d2SAndroid Build Coastguard Worker if ((ppd = ppdOpenFile(filename)) == NULL)
1391*5e7646d2SAndroid Build Coastguard Worker {
1392*5e7646d2SAndroid Build Coastguard Worker ppd_status_t status; /* Status from PPD loader */
1393*5e7646d2SAndroid Build Coastguard Worker int line; /* Line number containing error */
1394*5e7646d2SAndroid Build Coastguard Worker
1395*5e7646d2SAndroid Build Coastguard Worker
1396*5e7646d2SAndroid Build Coastguard Worker status = ppdLastError(&line);
1397*5e7646d2SAndroid Build Coastguard Worker
1398*5e7646d2SAndroid Build Coastguard Worker puts("FAIL (bad PPD file)");
1399*5e7646d2SAndroid Build Coastguard Worker printf(" %s on line %d\n", ppdErrorString(status), line);
1400*5e7646d2SAndroid Build Coastguard Worker
1401*5e7646d2SAndroid Build Coastguard Worker return (1);
1402*5e7646d2SAndroid Build Coastguard Worker }
1403*5e7646d2SAndroid Build Coastguard Worker
1404*5e7646d2SAndroid Build Coastguard Worker ppdMarkDefaults(ppd);
1405*5e7646d2SAndroid Build Coastguard Worker cupsMarkOptions(ppd, num_options, options);
1406*5e7646d2SAndroid Build Coastguard Worker
1407*5e7646d2SAndroid Build Coastguard Worker if (cupsRasterInterpretPPD(&header, ppd, 0, NULL, NULL))
1408*5e7646d2SAndroid Build Coastguard Worker {
1409*5e7646d2SAndroid Build Coastguard Worker puts("FAIL (error from function)");
1410*5e7646d2SAndroid Build Coastguard Worker puts(cupsRasterErrorString());
1411*5e7646d2SAndroid Build Coastguard Worker
1412*5e7646d2SAndroid Build Coastguard Worker return (1);
1413*5e7646d2SAndroid Build Coastguard Worker }
1414*5e7646d2SAndroid Build Coastguard Worker else
1415*5e7646d2SAndroid Build Coastguard Worker {
1416*5e7646d2SAndroid Build Coastguard Worker puts("PASS");
1417*5e7646d2SAndroid Build Coastguard Worker
1418*5e7646d2SAndroid Build Coastguard Worker return (0);
1419*5e7646d2SAndroid Build Coastguard Worker }
1420*5e7646d2SAndroid Build Coastguard Worker }
1421*5e7646d2SAndroid Build Coastguard Worker
1422*5e7646d2SAndroid Build Coastguard Worker
1423*5e7646d2SAndroid Build Coastguard Worker /*
1424*5e7646d2SAndroid Build Coastguard Worker * 'do_ps_tests()' - Test standard PostScript commands.
1425*5e7646d2SAndroid Build Coastguard Worker */
1426*5e7646d2SAndroid Build Coastguard Worker
1427*5e7646d2SAndroid Build Coastguard Worker static int
do_ps_tests(void)1428*5e7646d2SAndroid Build Coastguard Worker do_ps_tests(void)
1429*5e7646d2SAndroid Build Coastguard Worker {
1430*5e7646d2SAndroid Build Coastguard Worker cups_page_header2_t header; /* Page header */
1431*5e7646d2SAndroid Build Coastguard Worker int preferred_bits; /* Preferred bits */
1432*5e7646d2SAndroid Build Coastguard Worker int errors = 0; /* Number of errors */
1433*5e7646d2SAndroid Build Coastguard Worker
1434*5e7646d2SAndroid Build Coastguard Worker
1435*5e7646d2SAndroid Build Coastguard Worker /*
1436*5e7646d2SAndroid Build Coastguard Worker * Test PS exec code...
1437*5e7646d2SAndroid Build Coastguard Worker */
1438*5e7646d2SAndroid Build Coastguard Worker
1439*5e7646d2SAndroid Build Coastguard Worker fputs("_cupsRasterExecPS(\"setpagedevice\"): ", stdout);
1440*5e7646d2SAndroid Build Coastguard Worker fflush(stdout);
1441*5e7646d2SAndroid Build Coastguard Worker
1442*5e7646d2SAndroid Build Coastguard Worker memset(&header, 0, sizeof(header));
1443*5e7646d2SAndroid Build Coastguard Worker header.Collate = CUPS_TRUE;
1444*5e7646d2SAndroid Build Coastguard Worker preferred_bits = 0;
1445*5e7646d2SAndroid Build Coastguard Worker
1446*5e7646d2SAndroid Build Coastguard Worker if (_cupsRasterExecPS(&header, &preferred_bits, setpagedevice_code))
1447*5e7646d2SAndroid Build Coastguard Worker {
1448*5e7646d2SAndroid Build Coastguard Worker puts("FAIL (error from function)");
1449*5e7646d2SAndroid Build Coastguard Worker puts(cupsRasterErrorString());
1450*5e7646d2SAndroid Build Coastguard Worker errors ++;
1451*5e7646d2SAndroid Build Coastguard Worker }
1452*5e7646d2SAndroid Build Coastguard Worker else if (preferred_bits != 17 ||
1453*5e7646d2SAndroid Build Coastguard Worker memcmp(&header, &setpagedevice_header, sizeof(header)))
1454*5e7646d2SAndroid Build Coastguard Worker {
1455*5e7646d2SAndroid Build Coastguard Worker puts("FAIL (bad header)");
1456*5e7646d2SAndroid Build Coastguard Worker
1457*5e7646d2SAndroid Build Coastguard Worker if (preferred_bits != 17)
1458*5e7646d2SAndroid Build Coastguard Worker printf(" cupsPreferredBitsPerColor %d, expected 17\n",
1459*5e7646d2SAndroid Build Coastguard Worker preferred_bits);
1460*5e7646d2SAndroid Build Coastguard Worker
1461*5e7646d2SAndroid Build Coastguard Worker print_changes(&setpagedevice_header, &header);
1462*5e7646d2SAndroid Build Coastguard Worker errors ++;
1463*5e7646d2SAndroid Build Coastguard Worker }
1464*5e7646d2SAndroid Build Coastguard Worker else
1465*5e7646d2SAndroid Build Coastguard Worker puts("PASS");
1466*5e7646d2SAndroid Build Coastguard Worker
1467*5e7646d2SAndroid Build Coastguard Worker fputs("_cupsRasterExecPS(\"roll\"): ", stdout);
1468*5e7646d2SAndroid Build Coastguard Worker fflush(stdout);
1469*5e7646d2SAndroid Build Coastguard Worker
1470*5e7646d2SAndroid Build Coastguard Worker if (_cupsRasterExecPS(&header, &preferred_bits,
1471*5e7646d2SAndroid Build Coastguard Worker "792 612 0 0 0\n"
1472*5e7646d2SAndroid Build Coastguard Worker "pop pop pop\n"
1473*5e7646d2SAndroid Build Coastguard Worker "<</PageSize[5 -2 roll]/ImagingBBox null>>"
1474*5e7646d2SAndroid Build Coastguard Worker "setpagedevice\n"))
1475*5e7646d2SAndroid Build Coastguard Worker {
1476*5e7646d2SAndroid Build Coastguard Worker puts("FAIL (error from function)");
1477*5e7646d2SAndroid Build Coastguard Worker puts(cupsRasterErrorString());
1478*5e7646d2SAndroid Build Coastguard Worker errors ++;
1479*5e7646d2SAndroid Build Coastguard Worker }
1480*5e7646d2SAndroid Build Coastguard Worker else if (header.PageSize[0] != 792 || header.PageSize[1] != 612)
1481*5e7646d2SAndroid Build Coastguard Worker {
1482*5e7646d2SAndroid Build Coastguard Worker printf("FAIL (PageSize [%d %d], expected [792 612])\n", header.PageSize[0],
1483*5e7646d2SAndroid Build Coastguard Worker header.PageSize[1]);
1484*5e7646d2SAndroid Build Coastguard Worker errors ++;
1485*5e7646d2SAndroid Build Coastguard Worker }
1486*5e7646d2SAndroid Build Coastguard Worker else
1487*5e7646d2SAndroid Build Coastguard Worker puts("PASS");
1488*5e7646d2SAndroid Build Coastguard Worker
1489*5e7646d2SAndroid Build Coastguard Worker fputs("_cupsRasterExecPS(\"dup index\"): ", stdout);
1490*5e7646d2SAndroid Build Coastguard Worker fflush(stdout);
1491*5e7646d2SAndroid Build Coastguard Worker
1492*5e7646d2SAndroid Build Coastguard Worker if (_cupsRasterExecPS(&header, &preferred_bits,
1493*5e7646d2SAndroid Build Coastguard Worker "true false dup\n"
1494*5e7646d2SAndroid Build Coastguard Worker "<</Collate 4 index"
1495*5e7646d2SAndroid Build Coastguard Worker "/Duplex 5 index"
1496*5e7646d2SAndroid Build Coastguard Worker "/Tumble 6 index>>setpagedevice\n"
1497*5e7646d2SAndroid Build Coastguard Worker "pop pop pop"))
1498*5e7646d2SAndroid Build Coastguard Worker {
1499*5e7646d2SAndroid Build Coastguard Worker puts("FAIL (error from function)");
1500*5e7646d2SAndroid Build Coastguard Worker puts(cupsRasterErrorString());
1501*5e7646d2SAndroid Build Coastguard Worker errors ++;
1502*5e7646d2SAndroid Build Coastguard Worker }
1503*5e7646d2SAndroid Build Coastguard Worker else
1504*5e7646d2SAndroid Build Coastguard Worker {
1505*5e7646d2SAndroid Build Coastguard Worker if (!header.Collate)
1506*5e7646d2SAndroid Build Coastguard Worker {
1507*5e7646d2SAndroid Build Coastguard Worker printf("FAIL (Collate false, expected true)\n");
1508*5e7646d2SAndroid Build Coastguard Worker errors ++;
1509*5e7646d2SAndroid Build Coastguard Worker }
1510*5e7646d2SAndroid Build Coastguard Worker
1511*5e7646d2SAndroid Build Coastguard Worker if (header.Duplex)
1512*5e7646d2SAndroid Build Coastguard Worker {
1513*5e7646d2SAndroid Build Coastguard Worker printf("FAIL (Duplex true, expected false)\n");
1514*5e7646d2SAndroid Build Coastguard Worker errors ++;
1515*5e7646d2SAndroid Build Coastguard Worker }
1516*5e7646d2SAndroid Build Coastguard Worker
1517*5e7646d2SAndroid Build Coastguard Worker if (header.Tumble)
1518*5e7646d2SAndroid Build Coastguard Worker {
1519*5e7646d2SAndroid Build Coastguard Worker printf("FAIL (Tumble true, expected false)\n");
1520*5e7646d2SAndroid Build Coastguard Worker errors ++;
1521*5e7646d2SAndroid Build Coastguard Worker }
1522*5e7646d2SAndroid Build Coastguard Worker
1523*5e7646d2SAndroid Build Coastguard Worker if(header.Collate && !header.Duplex && !header.Tumble)
1524*5e7646d2SAndroid Build Coastguard Worker puts("PASS");
1525*5e7646d2SAndroid Build Coastguard Worker }
1526*5e7646d2SAndroid Build Coastguard Worker
1527*5e7646d2SAndroid Build Coastguard Worker fputs("_cupsRasterExecPS(\"%%Begin/EndFeature code\"): ", stdout);
1528*5e7646d2SAndroid Build Coastguard Worker fflush(stdout);
1529*5e7646d2SAndroid Build Coastguard Worker
1530*5e7646d2SAndroid Build Coastguard Worker if (_cupsRasterExecPS(&header, &preferred_bits, dsc_code))
1531*5e7646d2SAndroid Build Coastguard Worker {
1532*5e7646d2SAndroid Build Coastguard Worker puts("FAIL (error from function)");
1533*5e7646d2SAndroid Build Coastguard Worker puts(cupsRasterErrorString());
1534*5e7646d2SAndroid Build Coastguard Worker errors ++;
1535*5e7646d2SAndroid Build Coastguard Worker }
1536*5e7646d2SAndroid Build Coastguard Worker else if (header.PageSize[0] != 792 || header.PageSize[1] != 1224)
1537*5e7646d2SAndroid Build Coastguard Worker {
1538*5e7646d2SAndroid Build Coastguard Worker printf("FAIL (bad PageSize [%d %d], expected [792 1224])\n",
1539*5e7646d2SAndroid Build Coastguard Worker header.PageSize[0], header.PageSize[1]);
1540*5e7646d2SAndroid Build Coastguard Worker errors ++;
1541*5e7646d2SAndroid Build Coastguard Worker }
1542*5e7646d2SAndroid Build Coastguard Worker else
1543*5e7646d2SAndroid Build Coastguard Worker puts("PASS");
1544*5e7646d2SAndroid Build Coastguard Worker
1545*5e7646d2SAndroid Build Coastguard Worker return (errors);
1546*5e7646d2SAndroid Build Coastguard Worker }
1547*5e7646d2SAndroid Build Coastguard Worker
1548*5e7646d2SAndroid Build Coastguard Worker
1549*5e7646d2SAndroid Build Coastguard Worker
1550*5e7646d2SAndroid Build Coastguard Worker
1551*5e7646d2SAndroid Build Coastguard Worker /*
1552*5e7646d2SAndroid Build Coastguard Worker * 'print_changes()' - Print differences in the page header.
1553*5e7646d2SAndroid Build Coastguard Worker */
1554*5e7646d2SAndroid Build Coastguard Worker
1555*5e7646d2SAndroid Build Coastguard Worker static void
print_changes(cups_page_header2_t * header,cups_page_header2_t * expected)1556*5e7646d2SAndroid Build Coastguard Worker print_changes(
1557*5e7646d2SAndroid Build Coastguard Worker cups_page_header2_t *header, /* I - Actual page header */
1558*5e7646d2SAndroid Build Coastguard Worker cups_page_header2_t *expected) /* I - Expected page header */
1559*5e7646d2SAndroid Build Coastguard Worker {
1560*5e7646d2SAndroid Build Coastguard Worker int i; /* Looping var */
1561*5e7646d2SAndroid Build Coastguard Worker
1562*5e7646d2SAndroid Build Coastguard Worker
1563*5e7646d2SAndroid Build Coastguard Worker if (strcmp(header->MediaClass, expected->MediaClass))
1564*5e7646d2SAndroid Build Coastguard Worker printf(" MediaClass (%s), expected (%s)\n", header->MediaClass,
1565*5e7646d2SAndroid Build Coastguard Worker expected->MediaClass);
1566*5e7646d2SAndroid Build Coastguard Worker
1567*5e7646d2SAndroid Build Coastguard Worker if (strcmp(header->MediaColor, expected->MediaColor))
1568*5e7646d2SAndroid Build Coastguard Worker printf(" MediaColor (%s), expected (%s)\n", header->MediaColor,
1569*5e7646d2SAndroid Build Coastguard Worker expected->MediaColor);
1570*5e7646d2SAndroid Build Coastguard Worker
1571*5e7646d2SAndroid Build Coastguard Worker if (strcmp(header->MediaType, expected->MediaType))
1572*5e7646d2SAndroid Build Coastguard Worker printf(" MediaType (%s), expected (%s)\n", header->MediaType,
1573*5e7646d2SAndroid Build Coastguard Worker expected->MediaType);
1574*5e7646d2SAndroid Build Coastguard Worker
1575*5e7646d2SAndroid Build Coastguard Worker if (strcmp(header->OutputType, expected->OutputType))
1576*5e7646d2SAndroid Build Coastguard Worker printf(" OutputType (%s), expected (%s)\n", header->OutputType,
1577*5e7646d2SAndroid Build Coastguard Worker expected->OutputType);
1578*5e7646d2SAndroid Build Coastguard Worker
1579*5e7646d2SAndroid Build Coastguard Worker if (header->AdvanceDistance != expected->AdvanceDistance)
1580*5e7646d2SAndroid Build Coastguard Worker printf(" AdvanceDistance %d, expected %d\n", header->AdvanceDistance,
1581*5e7646d2SAndroid Build Coastguard Worker expected->AdvanceDistance);
1582*5e7646d2SAndroid Build Coastguard Worker
1583*5e7646d2SAndroid Build Coastguard Worker if (header->AdvanceMedia != expected->AdvanceMedia)
1584*5e7646d2SAndroid Build Coastguard Worker printf(" AdvanceMedia %d, expected %d\n", header->AdvanceMedia,
1585*5e7646d2SAndroid Build Coastguard Worker expected->AdvanceMedia);
1586*5e7646d2SAndroid Build Coastguard Worker
1587*5e7646d2SAndroid Build Coastguard Worker if (header->Collate != expected->Collate)
1588*5e7646d2SAndroid Build Coastguard Worker printf(" Collate %d, expected %d\n", header->Collate,
1589*5e7646d2SAndroid Build Coastguard Worker expected->Collate);
1590*5e7646d2SAndroid Build Coastguard Worker
1591*5e7646d2SAndroid Build Coastguard Worker if (header->CutMedia != expected->CutMedia)
1592*5e7646d2SAndroid Build Coastguard Worker printf(" CutMedia %d, expected %d\n", header->CutMedia,
1593*5e7646d2SAndroid Build Coastguard Worker expected->CutMedia);
1594*5e7646d2SAndroid Build Coastguard Worker
1595*5e7646d2SAndroid Build Coastguard Worker if (header->Duplex != expected->Duplex)
1596*5e7646d2SAndroid Build Coastguard Worker printf(" Duplex %d, expected %d\n", header->Duplex,
1597*5e7646d2SAndroid Build Coastguard Worker expected->Duplex);
1598*5e7646d2SAndroid Build Coastguard Worker
1599*5e7646d2SAndroid Build Coastguard Worker if (header->HWResolution[0] != expected->HWResolution[0] ||
1600*5e7646d2SAndroid Build Coastguard Worker header->HWResolution[1] != expected->HWResolution[1])
1601*5e7646d2SAndroid Build Coastguard Worker printf(" HWResolution [%d %d], expected [%d %d]\n",
1602*5e7646d2SAndroid Build Coastguard Worker header->HWResolution[0], header->HWResolution[1],
1603*5e7646d2SAndroid Build Coastguard Worker expected->HWResolution[0], expected->HWResolution[1]);
1604*5e7646d2SAndroid Build Coastguard Worker
1605*5e7646d2SAndroid Build Coastguard Worker if (memcmp(header->ImagingBoundingBox, expected->ImagingBoundingBox,
1606*5e7646d2SAndroid Build Coastguard Worker sizeof(header->ImagingBoundingBox)))
1607*5e7646d2SAndroid Build Coastguard Worker printf(" ImagingBoundingBox [%d %d %d %d], expected [%d %d %d %d]\n",
1608*5e7646d2SAndroid Build Coastguard Worker header->ImagingBoundingBox[0],
1609*5e7646d2SAndroid Build Coastguard Worker header->ImagingBoundingBox[1],
1610*5e7646d2SAndroid Build Coastguard Worker header->ImagingBoundingBox[2],
1611*5e7646d2SAndroid Build Coastguard Worker header->ImagingBoundingBox[3],
1612*5e7646d2SAndroid Build Coastguard Worker expected->ImagingBoundingBox[0],
1613*5e7646d2SAndroid Build Coastguard Worker expected->ImagingBoundingBox[1],
1614*5e7646d2SAndroid Build Coastguard Worker expected->ImagingBoundingBox[2],
1615*5e7646d2SAndroid Build Coastguard Worker expected->ImagingBoundingBox[3]);
1616*5e7646d2SAndroid Build Coastguard Worker
1617*5e7646d2SAndroid Build Coastguard Worker if (header->InsertSheet != expected->InsertSheet)
1618*5e7646d2SAndroid Build Coastguard Worker printf(" InsertSheet %d, expected %d\n", header->InsertSheet,
1619*5e7646d2SAndroid Build Coastguard Worker expected->InsertSheet);
1620*5e7646d2SAndroid Build Coastguard Worker
1621*5e7646d2SAndroid Build Coastguard Worker if (header->Jog != expected->Jog)
1622*5e7646d2SAndroid Build Coastguard Worker printf(" Jog %d, expected %d\n", header->Jog,
1623*5e7646d2SAndroid Build Coastguard Worker expected->Jog);
1624*5e7646d2SAndroid Build Coastguard Worker
1625*5e7646d2SAndroid Build Coastguard Worker if (header->LeadingEdge != expected->LeadingEdge)
1626*5e7646d2SAndroid Build Coastguard Worker printf(" LeadingEdge %d, expected %d\n", header->LeadingEdge,
1627*5e7646d2SAndroid Build Coastguard Worker expected->LeadingEdge);
1628*5e7646d2SAndroid Build Coastguard Worker
1629*5e7646d2SAndroid Build Coastguard Worker if (header->Margins[0] != expected->Margins[0] ||
1630*5e7646d2SAndroid Build Coastguard Worker header->Margins[1] != expected->Margins[1])
1631*5e7646d2SAndroid Build Coastguard Worker printf(" Margins [%d %d], expected [%d %d]\n",
1632*5e7646d2SAndroid Build Coastguard Worker header->Margins[0], header->Margins[1],
1633*5e7646d2SAndroid Build Coastguard Worker expected->Margins[0], expected->Margins[1]);
1634*5e7646d2SAndroid Build Coastguard Worker
1635*5e7646d2SAndroid Build Coastguard Worker if (header->ManualFeed != expected->ManualFeed)
1636*5e7646d2SAndroid Build Coastguard Worker printf(" ManualFeed %d, expected %d\n", header->ManualFeed,
1637*5e7646d2SAndroid Build Coastguard Worker expected->ManualFeed);
1638*5e7646d2SAndroid Build Coastguard Worker
1639*5e7646d2SAndroid Build Coastguard Worker if (header->MediaPosition != expected->MediaPosition)
1640*5e7646d2SAndroid Build Coastguard Worker printf(" MediaPosition %d, expected %d\n", header->MediaPosition,
1641*5e7646d2SAndroid Build Coastguard Worker expected->MediaPosition);
1642*5e7646d2SAndroid Build Coastguard Worker
1643*5e7646d2SAndroid Build Coastguard Worker if (header->MediaWeight != expected->MediaWeight)
1644*5e7646d2SAndroid Build Coastguard Worker printf(" MediaWeight %d, expected %d\n", header->MediaWeight,
1645*5e7646d2SAndroid Build Coastguard Worker expected->MediaWeight);
1646*5e7646d2SAndroid Build Coastguard Worker
1647*5e7646d2SAndroid Build Coastguard Worker if (header->MirrorPrint != expected->MirrorPrint)
1648*5e7646d2SAndroid Build Coastguard Worker printf(" MirrorPrint %d, expected %d\n", header->MirrorPrint,
1649*5e7646d2SAndroid Build Coastguard Worker expected->MirrorPrint);
1650*5e7646d2SAndroid Build Coastguard Worker
1651*5e7646d2SAndroid Build Coastguard Worker if (header->NegativePrint != expected->NegativePrint)
1652*5e7646d2SAndroid Build Coastguard Worker printf(" NegativePrint %d, expected %d\n", header->NegativePrint,
1653*5e7646d2SAndroid Build Coastguard Worker expected->NegativePrint);
1654*5e7646d2SAndroid Build Coastguard Worker
1655*5e7646d2SAndroid Build Coastguard Worker if (header->NumCopies != expected->NumCopies)
1656*5e7646d2SAndroid Build Coastguard Worker printf(" NumCopies %d, expected %d\n", header->NumCopies,
1657*5e7646d2SAndroid Build Coastguard Worker expected->NumCopies);
1658*5e7646d2SAndroid Build Coastguard Worker
1659*5e7646d2SAndroid Build Coastguard Worker if (header->Orientation != expected->Orientation)
1660*5e7646d2SAndroid Build Coastguard Worker printf(" Orientation %d, expected %d\n", header->Orientation,
1661*5e7646d2SAndroid Build Coastguard Worker expected->Orientation);
1662*5e7646d2SAndroid Build Coastguard Worker
1663*5e7646d2SAndroid Build Coastguard Worker if (header->OutputFaceUp != expected->OutputFaceUp)
1664*5e7646d2SAndroid Build Coastguard Worker printf(" OutputFaceUp %d, expected %d\n", header->OutputFaceUp,
1665*5e7646d2SAndroid Build Coastguard Worker expected->OutputFaceUp);
1666*5e7646d2SAndroid Build Coastguard Worker
1667*5e7646d2SAndroid Build Coastguard Worker if (header->PageSize[0] != expected->PageSize[0] ||
1668*5e7646d2SAndroid Build Coastguard Worker header->PageSize[1] != expected->PageSize[1])
1669*5e7646d2SAndroid Build Coastguard Worker printf(" PageSize [%d %d], expected [%d %d]\n",
1670*5e7646d2SAndroid Build Coastguard Worker header->PageSize[0], header->PageSize[1],
1671*5e7646d2SAndroid Build Coastguard Worker expected->PageSize[0], expected->PageSize[1]);
1672*5e7646d2SAndroid Build Coastguard Worker
1673*5e7646d2SAndroid Build Coastguard Worker if (header->Separations != expected->Separations)
1674*5e7646d2SAndroid Build Coastguard Worker printf(" Separations %d, expected %d\n", header->Separations,
1675*5e7646d2SAndroid Build Coastguard Worker expected->Separations);
1676*5e7646d2SAndroid Build Coastguard Worker
1677*5e7646d2SAndroid Build Coastguard Worker if (header->TraySwitch != expected->TraySwitch)
1678*5e7646d2SAndroid Build Coastguard Worker printf(" TraySwitch %d, expected %d\n", header->TraySwitch,
1679*5e7646d2SAndroid Build Coastguard Worker expected->TraySwitch);
1680*5e7646d2SAndroid Build Coastguard Worker
1681*5e7646d2SAndroid Build Coastguard Worker if (header->Tumble != expected->Tumble)
1682*5e7646d2SAndroid Build Coastguard Worker printf(" Tumble %d, expected %d\n", header->Tumble,
1683*5e7646d2SAndroid Build Coastguard Worker expected->Tumble);
1684*5e7646d2SAndroid Build Coastguard Worker
1685*5e7646d2SAndroid Build Coastguard Worker if (header->cupsWidth != expected->cupsWidth)
1686*5e7646d2SAndroid Build Coastguard Worker printf(" cupsWidth %d, expected %d\n", header->cupsWidth,
1687*5e7646d2SAndroid Build Coastguard Worker expected->cupsWidth);
1688*5e7646d2SAndroid Build Coastguard Worker
1689*5e7646d2SAndroid Build Coastguard Worker if (header->cupsHeight != expected->cupsHeight)
1690*5e7646d2SAndroid Build Coastguard Worker printf(" cupsHeight %d, expected %d\n", header->cupsHeight,
1691*5e7646d2SAndroid Build Coastguard Worker expected->cupsHeight);
1692*5e7646d2SAndroid Build Coastguard Worker
1693*5e7646d2SAndroid Build Coastguard Worker if (header->cupsMediaType != expected->cupsMediaType)
1694*5e7646d2SAndroid Build Coastguard Worker printf(" cupsMediaType %d, expected %d\n", header->cupsMediaType,
1695*5e7646d2SAndroid Build Coastguard Worker expected->cupsMediaType);
1696*5e7646d2SAndroid Build Coastguard Worker
1697*5e7646d2SAndroid Build Coastguard Worker if (header->cupsBitsPerColor != expected->cupsBitsPerColor)
1698*5e7646d2SAndroid Build Coastguard Worker printf(" cupsBitsPerColor %d, expected %d\n", header->cupsBitsPerColor,
1699*5e7646d2SAndroid Build Coastguard Worker expected->cupsBitsPerColor);
1700*5e7646d2SAndroid Build Coastguard Worker
1701*5e7646d2SAndroid Build Coastguard Worker if (header->cupsBitsPerPixel != expected->cupsBitsPerPixel)
1702*5e7646d2SAndroid Build Coastguard Worker printf(" cupsBitsPerPixel %d, expected %d\n", header->cupsBitsPerPixel,
1703*5e7646d2SAndroid Build Coastguard Worker expected->cupsBitsPerPixel);
1704*5e7646d2SAndroid Build Coastguard Worker
1705*5e7646d2SAndroid Build Coastguard Worker if (header->cupsBytesPerLine != expected->cupsBytesPerLine)
1706*5e7646d2SAndroid Build Coastguard Worker printf(" cupsBytesPerLine %d, expected %d\n", header->cupsBytesPerLine,
1707*5e7646d2SAndroid Build Coastguard Worker expected->cupsBytesPerLine);
1708*5e7646d2SAndroid Build Coastguard Worker
1709*5e7646d2SAndroid Build Coastguard Worker if (header->cupsColorOrder != expected->cupsColorOrder)
1710*5e7646d2SAndroid Build Coastguard Worker printf(" cupsColorOrder %d, expected %d\n", header->cupsColorOrder,
1711*5e7646d2SAndroid Build Coastguard Worker expected->cupsColorOrder);
1712*5e7646d2SAndroid Build Coastguard Worker
1713*5e7646d2SAndroid Build Coastguard Worker if (header->cupsColorSpace != expected->cupsColorSpace)
1714*5e7646d2SAndroid Build Coastguard Worker printf(" cupsColorSpace %s, expected %s\n", _cupsRasterColorSpaceString(header->cupsColorSpace),
1715*5e7646d2SAndroid Build Coastguard Worker _cupsRasterColorSpaceString(expected->cupsColorSpace));
1716*5e7646d2SAndroid Build Coastguard Worker
1717*5e7646d2SAndroid Build Coastguard Worker if (header->cupsCompression != expected->cupsCompression)
1718*5e7646d2SAndroid Build Coastguard Worker printf(" cupsCompression %d, expected %d\n", header->cupsCompression,
1719*5e7646d2SAndroid Build Coastguard Worker expected->cupsCompression);
1720*5e7646d2SAndroid Build Coastguard Worker
1721*5e7646d2SAndroid Build Coastguard Worker if (header->cupsRowCount != expected->cupsRowCount)
1722*5e7646d2SAndroid Build Coastguard Worker printf(" cupsRowCount %d, expected %d\n", header->cupsRowCount,
1723*5e7646d2SAndroid Build Coastguard Worker expected->cupsRowCount);
1724*5e7646d2SAndroid Build Coastguard Worker
1725*5e7646d2SAndroid Build Coastguard Worker if (header->cupsRowFeed != expected->cupsRowFeed)
1726*5e7646d2SAndroid Build Coastguard Worker printf(" cupsRowFeed %d, expected %d\n", header->cupsRowFeed,
1727*5e7646d2SAndroid Build Coastguard Worker expected->cupsRowFeed);
1728*5e7646d2SAndroid Build Coastguard Worker
1729*5e7646d2SAndroid Build Coastguard Worker if (header->cupsRowStep != expected->cupsRowStep)
1730*5e7646d2SAndroid Build Coastguard Worker printf(" cupsRowStep %d, expected %d\n", header->cupsRowStep,
1731*5e7646d2SAndroid Build Coastguard Worker expected->cupsRowStep);
1732*5e7646d2SAndroid Build Coastguard Worker
1733*5e7646d2SAndroid Build Coastguard Worker if (header->cupsNumColors != expected->cupsNumColors)
1734*5e7646d2SAndroid Build Coastguard Worker printf(" cupsNumColors %d, expected %d\n", header->cupsNumColors,
1735*5e7646d2SAndroid Build Coastguard Worker expected->cupsNumColors);
1736*5e7646d2SAndroid Build Coastguard Worker
1737*5e7646d2SAndroid Build Coastguard Worker if (fabs(header->cupsBorderlessScalingFactor - expected->cupsBorderlessScalingFactor) > 0.001)
1738*5e7646d2SAndroid Build Coastguard Worker printf(" cupsBorderlessScalingFactor %g, expected %g\n",
1739*5e7646d2SAndroid Build Coastguard Worker header->cupsBorderlessScalingFactor,
1740*5e7646d2SAndroid Build Coastguard Worker expected->cupsBorderlessScalingFactor);
1741*5e7646d2SAndroid Build Coastguard Worker
1742*5e7646d2SAndroid Build Coastguard Worker if (fabs(header->cupsPageSize[0] - expected->cupsPageSize[0]) > 0.001 ||
1743*5e7646d2SAndroid Build Coastguard Worker fabs(header->cupsPageSize[1] - expected->cupsPageSize[1]) > 0.001)
1744*5e7646d2SAndroid Build Coastguard Worker printf(" cupsPageSize [%g %g], expected [%g %g]\n",
1745*5e7646d2SAndroid Build Coastguard Worker header->cupsPageSize[0], header->cupsPageSize[1],
1746*5e7646d2SAndroid Build Coastguard Worker expected->cupsPageSize[0], expected->cupsPageSize[1]);
1747*5e7646d2SAndroid Build Coastguard Worker
1748*5e7646d2SAndroid Build Coastguard Worker if (fabs(header->cupsImagingBBox[0] - expected->cupsImagingBBox[0]) > 0.001 ||
1749*5e7646d2SAndroid Build Coastguard Worker fabs(header->cupsImagingBBox[1] - expected->cupsImagingBBox[1]) > 0.001 ||
1750*5e7646d2SAndroid Build Coastguard Worker fabs(header->cupsImagingBBox[2] - expected->cupsImagingBBox[2]) > 0.001 ||
1751*5e7646d2SAndroid Build Coastguard Worker fabs(header->cupsImagingBBox[3] - expected->cupsImagingBBox[3]) > 0.001)
1752*5e7646d2SAndroid Build Coastguard Worker printf(" cupsImagingBBox [%g %g %g %g], expected [%g %g %g %g]\n",
1753*5e7646d2SAndroid Build Coastguard Worker header->cupsImagingBBox[0], header->cupsImagingBBox[1],
1754*5e7646d2SAndroid Build Coastguard Worker header->cupsImagingBBox[2], header->cupsImagingBBox[3],
1755*5e7646d2SAndroid Build Coastguard Worker expected->cupsImagingBBox[0], expected->cupsImagingBBox[1],
1756*5e7646d2SAndroid Build Coastguard Worker expected->cupsImagingBBox[2], expected->cupsImagingBBox[3]);
1757*5e7646d2SAndroid Build Coastguard Worker
1758*5e7646d2SAndroid Build Coastguard Worker for (i = 0; i < 16; i ++)
1759*5e7646d2SAndroid Build Coastguard Worker if (header->cupsInteger[i] != expected->cupsInteger[i])
1760*5e7646d2SAndroid Build Coastguard Worker printf(" cupsInteger%d %d, expected %d\n", i, header->cupsInteger[i],
1761*5e7646d2SAndroid Build Coastguard Worker expected->cupsInteger[i]);
1762*5e7646d2SAndroid Build Coastguard Worker
1763*5e7646d2SAndroid Build Coastguard Worker for (i = 0; i < 16; i ++)
1764*5e7646d2SAndroid Build Coastguard Worker if (fabs(header->cupsReal[i] - expected->cupsReal[i]) > 0.001)
1765*5e7646d2SAndroid Build Coastguard Worker printf(" cupsReal%d %g, expected %g\n", i, header->cupsReal[i],
1766*5e7646d2SAndroid Build Coastguard Worker expected->cupsReal[i]);
1767*5e7646d2SAndroid Build Coastguard Worker
1768*5e7646d2SAndroid Build Coastguard Worker for (i = 0; i < 16; i ++)
1769*5e7646d2SAndroid Build Coastguard Worker if (strcmp(header->cupsString[i], expected->cupsString[i]))
1770*5e7646d2SAndroid Build Coastguard Worker printf(" cupsString%d (%s), expected (%s)\n", i,
1771*5e7646d2SAndroid Build Coastguard Worker header->cupsString[i], expected->cupsString[i]);
1772*5e7646d2SAndroid Build Coastguard Worker
1773*5e7646d2SAndroid Build Coastguard Worker if (strcmp(header->cupsMarkerType, expected->cupsMarkerType))
1774*5e7646d2SAndroid Build Coastguard Worker printf(" cupsMarkerType (%s), expected (%s)\n", header->cupsMarkerType,
1775*5e7646d2SAndroid Build Coastguard Worker expected->cupsMarkerType);
1776*5e7646d2SAndroid Build Coastguard Worker
1777*5e7646d2SAndroid Build Coastguard Worker if (strcmp(header->cupsRenderingIntent, expected->cupsRenderingIntent))
1778*5e7646d2SAndroid Build Coastguard Worker printf(" cupsRenderingIntent (%s), expected (%s)\n",
1779*5e7646d2SAndroid Build Coastguard Worker header->cupsRenderingIntent,
1780*5e7646d2SAndroid Build Coastguard Worker expected->cupsRenderingIntent);
1781*5e7646d2SAndroid Build Coastguard Worker
1782*5e7646d2SAndroid Build Coastguard Worker if (strcmp(header->cupsPageSizeName, expected->cupsPageSizeName))
1783*5e7646d2SAndroid Build Coastguard Worker printf(" cupsPageSizeName (%s), expected (%s)\n",
1784*5e7646d2SAndroid Build Coastguard Worker header->cupsPageSizeName,
1785*5e7646d2SAndroid Build Coastguard Worker expected->cupsPageSizeName);
1786*5e7646d2SAndroid Build Coastguard Worker }
1787