1 /**
2  *
3  * $Header: /cvsroot/lesstif/lesstif/test/Xm/bulletinboard/test12.c,v 1.6 2001/04/24 12:07:59 amai Exp $
4  *
5  **/
6 
7 #include <stdlib.h>
8 #include <stdio.h>
9 #include <Xm/Xm.h>
10 #include <Xm/Label.h>
11 #include <Xm/BulletinBP.h>
12 
13 #include "../../common/Test.h"
14 
15 
16 Boolean GlobalResult = True;
17 
18 static String FallBack[] = {
19 	"*geometry: +500+500",
20 	"*borderWidth: 1",
21 NULL};
22 
23 typedef struct {
24 		XtGeometryResult result;
25 		XtWidgetGeometry geo;
26 } QueryResult;
27 
28 
29 
QueryGeometry(Widget W,XtWidgetGeometry * request,QueryResult * Expected,XtWidgetGeometry * desired)30 static Boolean QueryGeometry(Widget W, XtWidgetGeometry *request, QueryResult *Expected, XtWidgetGeometry *desired)
31 {
32 Boolean status = True;
33 XtWidgetGeometry OriginalRequest;
34 XtGeometryResult result;
35 
36 	if (request)
37 		OriginalRequest = *request;
38 
39 	printf("QueryGeometry asked for (%s) ",
40 		XdbWidgetGeometry2String(request));
41 
42 	result = XtQueryGeometry(W, request, desired);
43 
44 	printf("got (%s %s) ",
45 		XdbWidgetGeometry2String(desired),
46 		XdbGeometryResult2String(result));
47 	printf("expected (%s %s %s) ",
48 		XdbWidgetGeometry2String(&Expected->geo),
49 		XdbGeometryResult2String(Expected->result),
50 		XdbWidgetGeometry2String(request));
51 	/*
52 	printf("original return (%s) ",
53 		XdbWidgetGeometry2String(request));
54 		*/
55 
56 	if ((desired->request_mode & Expected->geo.request_mode) == Expected->geo.request_mode &&
57 	    desired->width  == Expected->geo.width  &&
58 	    desired->height == Expected->geo.height &&
59 	    result == Expected->result &&
60 	    (!request ? True : (OriginalRequest.request_mode == request->request_mode &&
61 	    			OriginalRequest.width == request->width &&
62 	    			OriginalRequest.height == request->height))
63 	   )
64 	{
65 		printf("Passed\n");
66 	}
67 	else
68 	{
69 		printf("Failed\n");
70 		status = False;
71 	}
72 	return(status);
73 }
74 
DoTests(Widget Form)75 static void DoTests(Widget Form)
76 {
77 XtWidgetGeometry Preferred;
78 
79 	{ /* Ask what it wants */
80 	QueryResult Expect;
81 	XtWidgetGeometry desired;
82 	Dimension mh, mw;
83 	WidgetList children;
84 	Cardinal numKids;
85 
86 		Expect.geo.request_mode = CWWidth | CWHeight;
87 		XtVaGetValues(Form,
88 			XmNchildren, &children,
89 			XmNnumChildren, &numKids,
90 			NULL);
91 		if (numKids == 0 || !XtIsManaged(children[0]))
92 		{
93 			Expect.geo.width = 11;
94 			Expect.geo.height = 11;
95 			Expect.result = XtGeometryAlmost;
96 		}
97 		else
98 		{
99 		Dimension bw;
100 
101 			XtVaGetValues(children[0],
102 				XmNborderWidth, &bw,
103 				XmNwidth, &Expect.geo.width,
104 				XmNheight, &Expect.geo.height,
105 				NULL);
106 			Expect.geo.width += 2 * bw + 11;
107 			Expect.geo.height += 2 * bw + 11;
108 
109 			if (XtIsRealized(Form))
110 			{
111 			    Expect.result = XtGeometryNo;
112 			    Expect.geo.width += 2 * bw + 11 - 3;
113 			    Expect.geo.height += 2 * bw + 11 - 3;
114 			}
115 			else
116 			{
117 				Expect.result = XtGeometryAlmost;
118 			}
119 		}
120 
121 		GlobalResult &= QueryGeometry(Form, NULL, &Expect, &desired);
122 		Preferred = desired;
123 	}
124 	{ /* Propose what it wants */
125 	QueryResult Expect;
126 	XtWidgetGeometry Proposed;
127 	XtWidgetGeometry desired;
128 
129 		Expect.geo.request_mode = CWWidth | CWHeight;
130 		Expect.geo.width = Preferred.width;
131 		Expect.geo.height = Preferred.height;
132 		Expect.result = XtGeometryYes;
133 
134 		Proposed.request_mode = CWWidth | CWHeight;
135 		Proposed.width = Preferred.width;
136 		Proposed.height = Preferred.height;
137 		GlobalResult &= QueryGeometry(Form, &Proposed, &Expect, &desired);
138 	}
139 	{ /* propose something bigger in width */
140 	QueryResult Expect;
141 	XtWidgetGeometry Proposed;
142 	XtWidgetGeometry desired;
143 
144 		Expect.geo.request_mode = CWWidth | CWHeight;
145 		Expect.geo.width = Preferred.width;
146 		Expect.geo.height = Preferred.height;
147 		if (XtIsRealized(Form))
148 		{
149 		    Expect.result = XtGeometryNo;
150 		}
151 		else
152 		{
153 		    Expect.result = XtGeometryAlmost;
154 		}
155 
156 		Proposed.request_mode = CWWidth;
157 		Proposed.width = Preferred.width + 1;
158 		Proposed.height = Preferred.height;
159 		GlobalResult &= QueryGeometry(Form, &Proposed, &Expect, &desired);
160 	}
161 	{ /* propose something bigger */
162 	QueryResult Expect;
163 	XtWidgetGeometry Proposed;
164 	XtWidgetGeometry desired;
165 
166 		Expect.geo.request_mode = CWWidth | CWHeight;
167 		Expect.geo.width = Preferred.width;
168 		Expect.geo.height = Preferred.height;
169 		if (XtIsRealized(Form))
170 		{
171 		    Expect.result = XtGeometryNo;
172 		}
173 		else
174 		{
175 		    Expect.result = XtGeometryAlmost;
176 		}
177 
178 		Proposed.request_mode = CWWidth | CWHeight;
179 		Proposed.width = Preferred.width + 1;
180 		Proposed.height = Preferred.height + 1;
181 		GlobalResult &= QueryGeometry(Form, &Proposed, &Expect, &desired);
182 	}
183 	{ /* propose something smaller */
184 	QueryResult Expect;
185 	XtWidgetGeometry Proposed;
186 	XtWidgetGeometry desired;
187 
188 		Expect.geo.request_mode = CWWidth | CWHeight;
189 		Expect.geo.width = Preferred.width;
190 		Expect.geo.height = Preferred.height;
191 		if (XtIsRealized(Form))
192 		{
193 			Expect.result = XtGeometryNo;
194 		}
195 		else
196 		{
197 			Expect.result = XtGeometryAlmost;
198 		}
199 
200 		Proposed.request_mode = CWWidth | CWHeight;
201 		Proposed.width = Preferred.width - 1;
202 		Proposed.height = Preferred.height - 1;
203 		GlobalResult &= QueryGeometry(Form, &Proposed, &Expect, &desired);
204 	}
205 }
206 
207 int
main(int argc,char ** argv)208 main(int argc, char **argv)
209 {
210   Widget toplevel;
211   Widget Form;
212   Widget label;
213   XtAppContext app;
214 
215   XtSetLanguageProc(NULL, NULL, NULL);
216 
217   toplevel = XtVaAppInitialize(&app, "test23", NULL, 0, &argc, argv, FallBack, NULL);
218 
219   printf("Create a BulletinBoard\n");
220   Form = XmCreateBulletinBoard(toplevel, "TestWidget", NULL, 0);
221 
222   DoTests(Form);
223 
224   printf("\nCreate a label in the BulletinBoard\n");
225   label = XmCreateLabel(Form, "TestWidget", NULL, 0);
226 
227   DoTests(Form);
228 
229   printf("\nManage the label\n");
230   XtManageChild(label);
231 
232   DoTests(Form);
233 
234   printf("\nManage the BulletinBoard\n");
235   XtManageChild(Form);
236 
237   DoTests(Form);
238 
239   printf("\nRealize the Shell\n");
240   XtRealizeWidget(toplevel);
241 
242   DoTests(Form);
243 
244   /*
245   printf("%s\n",GlobalResult ? "All Passed" : "One or more Failed");
246   */
247 
248 
249 /*
250 Create a BulletinBoard
251 QueryGeometry asked for (NULL_GEOMETRY) got (w 11 h 11 Almost) expected (w 11 h 11 Almost) Passed
252 QueryGeometry asked for (w 11 h 11) got (w 11 h 11 Yes) expected (w 11 h 11 Yes) Passed
253 QueryGeometry asked for (w 12) got (w 11 h 11 Almost) expected (w 11 h 11 Almost) Passed
254 QueryGeometry asked for (w 12 h 12) got (w 11 h 11 Almost) expected (w 11 h 11 Almost) Passed
255 QueryGeometry asked for (w 10 h 10) got (w 11 h 11 Almost) expected (w 11 h 11 Almost) Passed
256 
257 Create a label in the BulletinBoard
258 QueryGeometry asked for (NULL_GEOMETRY) got (w 11 h 11 Almost) expected (w 11 h 11 Almost) Passed
259 QueryGeometry asked for (w 11 h 11) got (w 11 h 11 Yes) expected (w 11 h 11 Yes) Passed
260 QueryGeometry asked for (w 12) got (w 11 h 11 Almost) expected (w 11 h 11 Almost) Passed
261 QueryGeometry asked for (w 12 h 12) got (w 11 h 11 Almost) expected (w 11 h 11 Almost) Passed
262 QueryGeometry asked for (w 10 h 10) got (w 11 h 11 Almost) expected (w 11 h 11 Almost) Passed
263 
264 Manage the label
265 QueryGeometry asked for (NULL_GEOMETRY) got (w 77 h 30 Almost) expected (w 77 h 30 Almost) Passed
266 QueryGeometry asked for (w 77 h 30) got (w 77 h 30 Yes) expected (w 77 h 30 Yes) Passed
267 QueryGeometry asked for (w 78) got (w 77 h 30 Almost) expected (w 77 h 30 Almost) Passed
268 QueryGeometry asked for (w 78 h 31) got (w 77 h 30 Almost) expected (w 77 h 30 Almost) Passed
269 QueryGeometry asked for (w 76 h 29) got (w 77 h 30 Almost) expected (w 77 h 30 Almost) Passed
270 
271 Manage the BulletinBoard
272 QueryGeometry asked for (NULL_GEOMETRY) got (w 77 h 30 Almost) expected (w 77 h 30 Almost) Passed
273 QueryGeometry asked for (w 77 h 30) got (w 77 h 30 Yes) expected (w 77 h 30 Yes) Passed
274 QueryGeometry asked for (w 78) got (w 77 h 30 Almost) expected (w 77 h 30 Almost) Passed
275 QueryGeometry asked for (w 78 h 31) got (w 77 h 30 Almost) expected (w 77 h 30 Almost) Passed
276 QueryGeometry asked for (w 76 h 29) got (w 77 h 30 Almost) expected (w 77 h 30 Almost) Passed
277 
278 Realize the Shell
279 QueryGeometry asked for (NULL_GEOMETRY) got (w 87 h 40 No) expected (w 87 h 40 No) Passed
280 QueryGeometry asked for (w 87 h 40) got (w 87 h 40 Yes) expected (w 87 h 40 Yes) Passed
281 QueryGeometry asked for (w 88) got (w 87 h 40 No) expected (w 87 h 40 No) Passed
282 QueryGeometry asked for (w 88 h 41) got (w 87 h 40 No) expected (w 87 h 40 No) Passed
283 QueryGeometry asked for (w 86 h 39) got (w 87 h 40 No) expected (w 87 h 40 No) Passed
284 */
285 /* Note: the following values are the result of
286  * querying the current geometry.
287  */
288 {
289 static XtWidgetGeometry Expected[] = {
290    CWWidth | CWHeight            ,  508,  524,   87,   40, 0,0,0, /* TestWidget */
291    CWWidth | CWHeight | CWX | CWY,   10,   10,   64,   17, 0,0,0, /* TestWidget */
292 };
293 /* toplevel should be replaced with to correct applicationShell */
294 PrintDetails(toplevel, Expected);
295 }
296 LessTifTestMainLoop(toplevel);
297   exit(GlobalResult ? 0 : 1);
298 }
299