|
1
|
/**
|
|
2
|
* Tests for #7019: FILL-IN issues.
|
|
3
|
*
|
|
4
|
* Extended version: the logical fill-in and an editor added.
|
|
5
|
*
|
|
6
|
* This test will eventually contain all kinds of editors to test them for other issues and
|
|
7
|
* regressions.
|
|
8
|
*/
|
|
9
|
{FWDREVISION.i}
|
|
10
|
|
|
11
|
// MESSAGE SESSION:DATE-FORMAT.
|
|
12
|
// MESSAGE SESSION:NUMERIC-FORMAT.
|
|
13
|
|
|
14
|
/**
|
|
15
|
* Now test suite support setting SESSION:DATE-FORMAT dinamically, so we need not to fix it.
|
|
16
|
*/
|
|
17
|
IF SESSION:DISPLAY-TYPE = 'GUI' THEN DO:
|
|
18
|
CURRENT-WINDOW:TITLE="{&FWDREVISION}" + SESSION:DATE-FORMAT + " " + SESSION:NUMERIC-FORMAT.
|
|
19
|
CURRENT-WINDOW:HEIGHT-CHARS = 33.
|
|
20
|
CURRENT-WINDOW:WIDTH-CHARS = 80.
|
|
21
|
END.
|
|
22
|
|
|
23
|
|
|
24
|
/**
|
|
25
|
* The DECIMAL FILL-IN and its format text
|
|
26
|
*/
|
|
27
|
DEFINE VARIABLE v AS DECIMAL /* NO-UNDO */ VIEW-AS FILL-IN SIZE 30 BY 1 FONT 1.
|
|
28
|
DEFINE VARIABLE vFormat AS CHARACTER /* NO-UNDO */ FORMAT "x(256)" VIEW-AS FILL-IN SIZE 30 BY 1 FONT 1.
|
|
29
|
|
|
30
|
/**
|
|
31
|
* The DATE FILL-IN and its format text
|
|
32
|
*/
|
|
33
|
DEFINE VARIABLE d AS DATE /* NO-UNDO */ VIEW-AS FILL-IN SIZE 30 BY 1 FONT 1.
|
|
34
|
DEFINE VARIABLE dFormat AS CHARACTER /* NO-UNDO */ FORMAT "x(256)" VIEW-AS FILL-IN SIZE 30 BY 1 FONT 1.
|
|
35
|
|
|
36
|
/**
|
|
37
|
* The INTEGER FILL-IN and its format text
|
|
38
|
*/
|
|
39
|
DEFINE VARIABLE i AS INTEGER /* NO-UNDO */ VIEW-AS FILL-IN SIZE 30 BY 1 FONT 1.
|
|
40
|
DEFINE VARIABLE iFormat AS CHARACTER /* NO-UNDO */ FORMAT "x(256)" VIEW-AS FILL-IN SIZE 30 BY 1 FONT 1.
|
|
41
|
|
|
42
|
/**
|
|
43
|
* The CHARACTER FILL-IN and its format text
|
|
44
|
*/
|
|
45
|
DEFINE VARIABLE s AS CHARACTER /* NO-UNDO */ VIEW-AS FILL-IN SIZE 30 BY 1 FONT 1.
|
|
46
|
DEFINE VARIABLE sFormat AS CHARACTER /* NO-UNDO */ FORMAT "x(256)" VIEW-AS FILL-IN SIZE 30 BY 1 FONT 1.
|
|
47
|
|
|
48
|
/**
|
|
49
|
* The LOGICAL FILL-IN and its format text
|
|
50
|
*/
|
|
51
|
DEFINE VARIABLE l AS LOGICAL /* NO-UNDO */ VIEW-AS FILL-IN SIZE 30 BY 1 FONT 1.
|
|
52
|
DEFINE VARIABLE lFormat AS CHARACTER /* NO-UNDO */ FORMAT "x(256)" VIEW-AS FILL-IN SIZE 30 BY 1 FONT 1.
|
|
53
|
|
|
54
|
DEFINE VARIABLE e AS CHARACTER /* NO-UNDO */ VIEW-AS EDITOR SIZE 30 BY 5 FONT 1.
|
|
55
|
|
|
56
|
/**
|
|
57
|
* If useEditor is FALSE, this field is used as source/target to receive/provide SCREEN-VALUE and FORMAT for FILL-INs under testing
|
|
58
|
*/
|
|
59
|
DEFINE VARIABLE valueEditor AS CHARACTER /* NO-UNDO */ FORMAT "x(256)" VIEW-AS FILL-IN SIZE 30 BY 1 FONT 1.
|
|
60
|
|
|
61
|
/**
|
|
62
|
* When this box is checked, the editor widget is used instead of value FILL-IN
|
|
63
|
*/
|
|
64
|
DEFINE VARIABLE useEditor AS LOGICAL NO-UNDO VIEW-AS TOGGLE-BOX SIZE 30 BY 1 FONT 1.
|
|
65
|
|
|
66
|
/**
|
|
67
|
* Pressing one of these buttons set the SCREEN-VALUE of the
|
|
68
|
* corresponding FILL-IN from the valueEditor FILL-IN
|
|
69
|
*/
|
|
70
|
DEFINE BUTTON bSetDecimal LABEL "Set decimal" SIZE 30 BY 1 FONT 1.
|
|
71
|
DEFINE BUTTON bSetInteger LABEL "Set integer" SIZE 30 BY 1 FONT 1.
|
|
72
|
DEFINE BUTTON bSetCharacter LABEL "Set character" SIZE 30 BY 1 FONT 1.
|
|
73
|
DEFINE BUTTON bSetDate LABEL "Set date" SIZE 30 BY 1 FONT 1.
|
|
74
|
DEFINE BUTTON bSetLogical LABEL "Set logical" SIZE 30 BY 1 FONT 1.
|
|
75
|
|
|
76
|
/**
|
|
77
|
* Pressing one of these buttons set the valueEditor SCREEN-VALUE from the
|
|
78
|
* corresponding FILL-IN
|
|
79
|
*/
|
|
80
|
DEFINE BUTTON bGetDecimal LABEL "Get decimal" SIZE 30 BY 1 FONT 1.
|
|
81
|
DEFINE BUTTON bGetInteger LABEL "Get integer" SIZE 30 BY 1 FONT 1.
|
|
82
|
DEFINE BUTTON bGetCharacter LABEL "Get character" SIZE 30 BY 1 FONT 1.
|
|
83
|
DEFINE BUTTON bGetDate LABEL "Get date" SIZE 30 BY 1 FONT 1.
|
|
84
|
DEFINE BUTTON bGetLogical LABEL "Get logical" SIZE 30 BY 1 FONT 1.
|
|
85
|
|
|
86
|
/**
|
|
87
|
* Pressing one of these buttons set the format spec of the
|
|
88
|
* corresponding FILL-IN from the valueEditor FILL-IN
|
|
89
|
*/
|
|
90
|
DEFINE BUTTON bSetDecimalFormat LABEL "Set decimal format" SIZE 30 BY 1 FONT 1.
|
|
91
|
DEFINE BUTTON bSetIntegerFormat LABEL "Set integer format" SIZE 30 BY 1 FONT 1.
|
|
92
|
DEFINE BUTTON bSetCharacterFormat LABEL "Set character format" SIZE 30 BY 1 FONT 1.
|
|
93
|
DEFINE BUTTON bSetDateFormat LABEL "Set date format" SIZE 30 BY 1 FONT 1.
|
|
94
|
DEFINE BUTTON bSetLogicalFormat LABEL "Set log. format" SIZE 30 BY 1 FONT 1.
|
|
95
|
|
|
96
|
|
|
97
|
/**
|
|
98
|
* Set session date format like SESSION:DATE-FORMAT = 'mdy'.
|
|
99
|
*/
|
|
100
|
DEFINE BUTTON bSessionDateFormat LABEL "Set DATE-FORMAT" SIZE 30 BY 1 FONT 1.
|
|
101
|
|
|
102
|
/**
|
|
103
|
* Set session SESSION:YEAR-OFFSET, e.g. 1950, 1920 or 2000, 2050
|
|
104
|
*/
|
|
105
|
DEFINE BUTTON bSessionYearOffset LABEL "Set YEAR-OFFSET" SIZE 30 BY 1 FONT 1.
|
|
106
|
|
|
107
|
/**
|
|
108
|
* Set session SESSION:NUMERIC-FORMAT, e.g. ".," or ".,"
|
|
109
|
*/
|
|
110
|
DEFINE BUTTON bSessionNumericFormat LABEL "Set NUMERIC-FORMAT" SIZE 30 BY 1 FONT 1.
|
|
111
|
|
|
112
|
DEFINE FRAME f
|
|
113
|
"Decimal: " v AT ROW 1 COLUMN 10 NO-LABEL vFormat AT ROW 1 COLUMN 42 NO-LABEL SKIP
|
|
114
|
"Integer: " i AT ROW 2 COLUMN 10 NO-LABEL iFormat AT ROW 2 COLUMN 42 NO-LABEL SKIP
|
|
115
|
"Char: " s AT ROW 3 COLUMN 10 NO-LABEL sFormat AT ROW 3 COLUMN 42 NO-LABEL SKIP
|
|
116
|
"Date: " d AT ROW 4 COLUMN 10 NO-LABEL dFormat AT ROW 4 COLUMN 42 NO-LABEL SKIP
|
|
117
|
"Logical: " l AT ROW 5 COLUMN 10 NO-LABEL lFormat AT ROW 5 COLUMN 42 NO-LABEL SKIP
|
|
118
|
"Value: " valueEditor AT ROW 6 COLUMN 10 NO-LABEL SKIP
|
|
119
|
bSetDecimal AT ROW 7 COLUMN 10 NO-LABEL SKIP
|
|
120
|
bSetInteger AT ROW 8 COLUMN 10 NO-LABEL SKIP
|
|
121
|
bSetCharacter AT ROW 9 COLUMN 10 NO-LABEL SKIP
|
|
122
|
bSetDate AT ROW 10 COLUMN 10 NO-LABEL SKIP
|
|
123
|
bSetLogical AT ROW 11 COLUMN 10 NO-LABEL SKIP
|
|
124
|
|
|
125
|
bGetDecimal AT ROW 12 COLUMN 10 NO-LABEL SKIP
|
|
126
|
bGetInteger AT ROW 13 COLUMN 10 NO-LABEL SKIP
|
|
127
|
bGetCharacter AT ROW 14 COLUMN 10 NO-LABEL SKIP
|
|
128
|
bGetDate AT ROW 15 COLUMN 10 NO-LABEL SKIP
|
|
129
|
bGetLogical AT ROW 16 COLUMN 10 NO-LABEL SKIP
|
|
130
|
|
|
131
|
bSetDecimalFormat AT ROW 17 COLUMN 10 NO-LABEL SKIP
|
|
132
|
bSetIntegerFormat AT ROW 18 COLUMN 10 NO-LABEL SKIP
|
|
133
|
bSetCharacterFormat AT ROW 19 COLUMN 10 NO-LABEL SKIP
|
|
134
|
bSetDateFormat AT ROW 20 COLUMN 10 NO-LABEL SKIP
|
|
135
|
bSetLogicalFormat AT ROW 21 COLUMN 10 NO-LABEL SKIP
|
|
136
|
|
|
137
|
bSessionDateFormat AT ROW 22 COLUMN 10 NO-LABEL SKIP
|
|
138
|
bSessionYearOffset AT ROW 23 COLUMN 10 NO-LABEL SKIP
|
|
139
|
bSessionNumericFormat AT ROW 24 COLUMN 10 NO-LABEL SKIP
|
|
140
|
e AT ROW 25 COLUMN 10 NO-LABEL SKIP
|
|
141
|
useEditor AT ROW 30 COLUMN 10 NO-LABEL SKIP
|
|
142
|
|
|
143
|
WITH SIZE 75 BY 31 TITLE "Test 7019 ext."
|
|
144
|
.
|
|
145
|
|
|
146
|
vFormat:READ-ONLY = TRUE.
|
|
147
|
dFormat:READ-ONLY = TRUE.
|
|
148
|
iFormat:READ-ONLY = TRUE.
|
|
149
|
sFormat:READ-ONLY = TRUE.
|
|
150
|
lFormat:READ-ONLY = TRUE.
|
|
151
|
|
|
152
|
vFormat:TAB-STOP = FALSE.
|
|
153
|
dFormat:TAB-STOP = FALSE.
|
|
154
|
iFormat:TAB-STOP = FALSE.
|
|
155
|
sFormat:TAB-STOP = FALSE.
|
|
156
|
lFormat:TAB-STOP = FALSE.
|
|
157
|
|
|
158
|
vFormat:SCREEN-VALUE = v:FORMAT.
|
|
159
|
dFormat:SCREEN-VALUE = d:FORMAT + " " + SESSION:DATE-FORMAT + " " + STRING(SESSION:YEAR-OFFSET).
|
|
160
|
iFormat:SCREEN-VALUE = i:FORMAT.
|
|
161
|
sFormat:SCREEN-VALUE = s:FORMAT.
|
|
162
|
lFormat:SCREEN-VALUE = l:FORMAT.
|
|
163
|
|
|
164
|
/* Set new value handlers */
|
|
165
|
ON CHOOSE OF bSetDecimal DO:
|
|
166
|
v:SCREEN-VALUE = IF useEditor THEN e:SCREEN-VALUE ELSE valueEditor:SCREEN-VALUE.
|
|
167
|
END.
|
|
168
|
|
|
169
|
ON CHOOSE OF bSetInteger DO:
|
|
170
|
i:SCREEN-VALUE = IF useEditor THEN e:SCREEN-VALUE ELSE valueEditor:SCREEN-VALUE.
|
|
171
|
END.
|
|
172
|
|
|
173
|
ON CHOOSE OF bSetCharacter DO:
|
|
174
|
s:SCREEN-VALUE = IF useEditor THEN e:SCREEN-VALUE ELSE valueEditor:SCREEN-VALUE.
|
|
175
|
END.
|
|
176
|
|
|
177
|
ON CHOOSE OF bSetDate DO:
|
|
178
|
d:SCREEN-VALUE = IF useEditor THEN e:SCREEN-VALUE ELSE valueEditor:SCREEN-VALUE.
|
|
179
|
END.
|
|
180
|
|
|
181
|
ON CHOOSE OF bSetLogical DO:
|
|
182
|
l:SCREEN-VALUE = IF useEditor THEN e:SCREEN-VALUE ELSE valueEditor:SCREEN-VALUE.
|
|
183
|
END.
|
|
184
|
|
|
185
|
/* Get new value handlers */
|
|
186
|
ON CHOOSE OF bGetDecimal DO:
|
|
187
|
IF useEditor THEN
|
|
188
|
e:SCREEN-VALUE = v:SCREEN-VALUE.
|
|
189
|
ELSE
|
|
190
|
valueEditor:SCREEN-VALUE = v:SCREEN-VALUE.
|
|
191
|
END.
|
|
192
|
|
|
193
|
ON CHOOSE OF bGetInteger DO:
|
|
194
|
IF useEditor THEN e:SCREEN-VALUE = i:SCREEN-VALUE. ELSE valueEditor:SCREEN-VALUE = i:SCREEN-VALUE.
|
|
195
|
END.
|
|
196
|
|
|
197
|
ON CHOOSE OF bGetCharacter DO:
|
|
198
|
IF useEditor THEN e:SCREEN-VALUE = s:SCREEN-VALUE. ELSE valueEditor:SCREEN-VALUE = s:SCREEN-VALUE.
|
|
199
|
END.
|
|
200
|
|
|
201
|
ON CHOOSE OF bGetDate DO:
|
|
202
|
ASSIGN d.
|
|
203
|
IF useEditor THEN e:SCREEN-VALUE = STRING(d). ELSE valueEditor:SCREEN-VALUE = STRING(d).
|
|
204
|
END.
|
|
205
|
|
|
206
|
ON CHOOSE OF bGetLogical DO:
|
|
207
|
ASSIGN l.
|
|
208
|
IF useEditor THEN e:SCREEN-VALUE = l:SCREEN-VALUE. ELSE valueEditor:SCREEN-VALUE = l:SCREEN-VALUE.
|
|
209
|
END.
|
|
210
|
|
|
211
|
ON CHOOSE OF bSetDecimalFormat DO:
|
|
212
|
v:FORMAT = IF useEditor THEN e:SCREEN-VALUE ELSE valueEditor:SCREEN-VALUE.
|
|
213
|
MESSAGE "Decimal format is now" v:FORMAT.
|
|
214
|
vFormat:SCREEN-VALUE = v:FORMAT.
|
|
215
|
END.
|
|
216
|
|
|
217
|
ON CHOOSE OF bSetIntegerFormat DO:
|
|
218
|
i:FORMAT = IF useEditor THEN e:SCREEN-VALUE ELSE valueEditor:SCREEN-VALUE.
|
|
219
|
MESSAGE "Integer format is now" i:FORMAT.
|
|
220
|
iFormat:SCREEN-VALUE = i:FORMAT.
|
|
221
|
END.
|
|
222
|
|
|
223
|
ON CHOOSE OF bSetCharacterFormat DO:
|
|
224
|
s:FORMAT = IF useEditor THEN e:SCREEN-VALUE ELSE valueEditor:SCREEN-VALUE.
|
|
225
|
MESSAGE "Character format is now" s:FORMAT.
|
|
226
|
sFormat:SCREEN-VALUE = s:FORMAT.
|
|
227
|
END.
|
|
228
|
|
|
229
|
ON CHOOSE OF bSetDateFormat DO:
|
|
230
|
d:FORMAT = IF useEditor THEN e:SCREEN-VALUE ELSE valueEditor:SCREEN-VALUE NO-ERROR.
|
|
231
|
MESSAGE ERROR-STATUS:ERROR.
|
|
232
|
MESSAGE ERROR-STATUS:NUM-MESSAGES.
|
|
233
|
MESSAGE ERROR-STATUS:GET-MESSAGE(1).
|
|
234
|
|
|
235
|
MESSAGE "Date format is now" d:FORMAT.
|
|
236
|
dFormat:SCREEN-VALUE = d:FORMAT + " " + SESSION:DATE-FORMAT + " " + STRING(SESSION:YEAR-OFFSET).
|
|
237
|
END.
|
|
238
|
|
|
239
|
ON CHOOSE OF bSetLogicalFormat DO:
|
|
240
|
l:FORMAT = IF useEditor THEN e:SCREEN-VALUE ELSE valueEditor:SCREEN-VALUE.
|
|
241
|
MESSAGE "Logical format is now" l:FORMAT.
|
|
242
|
lFormat:SCREEN-VALUE = l:FORMAT.
|
|
243
|
END.
|
|
244
|
|
|
245
|
ON CHOOSE OF bSessionDateFormat DO:
|
|
246
|
SESSION:DATE-FORMAT = IF useEditor THEN e:SCREEN-VALUE ELSE valueEditor:SCREEN-VALUE.
|
|
247
|
dFormat:SCREEN-VALUE = d:FORMAT + " " + SESSION:DATE-FORMAT + " " + STRING(SESSION:YEAR-OFFSET).
|
|
248
|
|
|
249
|
&IF DEFINED(FWD-VERSION) &THEN // FWD
|
|
250
|
// FIXME: this works around the #7642 bug. Remove this when #7642 is fixed!
|
|
251
|
// For the default format, apply the change twice: first to any alternative format, then revert to the original 99/99/99.
|
|
252
|
DEFINE VARIABLE dFormat AS CHARACTER NO-UNDO.
|
|
253
|
dFormat = d:FORMAT.
|
|
254
|
d:FORMAT = "99/99/9999". // Any format value other than default will DO
|
|
255
|
d:FORMAT = dFormat.
|
|
256
|
&ENDIF
|
|
257
|
END.
|
|
258
|
|
|
259
|
ON CHOOSE OF bSessionYearOffset DO:
|
|
260
|
SESSION:YEAR-OFFSET = IF useEditor THEN INTEGER(e:SCREEN-VALUE) ELSE INTEGER(valueEditor:SCREEN-VALUE).
|
|
261
|
dFormat:SCREEN-VALUE = d:FORMAT + " " + SESSION:DATE-FORMAT + " " + STRING(SESSION:YEAR-OFFSET).
|
|
262
|
END.
|
|
263
|
|
|
264
|
ON CHOOSE OF bSessionNumericFormat DO:
|
|
265
|
SESSION:NUMERIC-FORMAT = IF useEditor THEN e:SCREEN-VALUE ELSE valueEditor:SCREEN-VALUE.
|
|
266
|
IF SESSION:DISPLAY-TYPE = 'GUI' THEN
|
|
267
|
CURRENT-WINDOW:TITLE="{&FWDREVISION}" + SESSION:DATE-FORMAT + " " + SESSION:NUMERIC-FORMAT.
|
|
268
|
END.
|
|
269
|
|
|
270
|
ON LEAVE OF d DO:
|
|
271
|
MESSAGE "'" d:SCREEN-VALUE "'".
|
|
272
|
// Note: the value is *not* normalized here yet!
|
|
273
|
ASSIGN d NO-ERROR.
|
|
274
|
IF NOT ERROR-STATUS:ERROR THEN
|
|
275
|
DO:
|
|
276
|
valueEditor:SCREEN-VALUE = STRING(d).
|
|
277
|
MESSAGE YEAR(d) MONTH(d) DAY(d).
|
|
278
|
END.
|
|
279
|
END.
|
|
280
|
|
|
281
|
ON ENTRY OF valueEditor DO:
|
|
282
|
MESSAGE "valueEditor entered".
|
|
283
|
END.
|
|
284
|
|
|
285
|
// ON A OF v,d,i,s,l,e DO:
|
|
286
|
// MESSAGE
|
|
287
|
// SELF:CURSOR-OFFSET
|
|
288
|
// SELF:SELECTION-START SELF:SELECTION-END
|
|
289
|
// SELF:TEXT-SELECTED
|
|
290
|
// SELF:SCREEN-VALUE LENGTH(SELF:SCREEN-VALUE).
|
|
291
|
// RETURN NO-APPLY.
|
|
292
|
// END.
|
|
293
|
|
|
294
|
ON VALUE-CHANGED OF useEditor DO:
|
|
295
|
ASSIGN useEditor.
|
|
296
|
MESSAGE "useEditor" useEditor.
|
|
297
|
END.
|
|
298
|
|
|
299
|
/**
|
|
300
|
* Test when VALUE-CHANGED is being sent
|
|
301
|
*/
|
|
302
|
ON VALUE-CHANGED OF v MESSAGE "VALUE-CHANGED: v" SELF:SCREEN-VALUE NOW.
|
|
303
|
ON VALUE-CHANGED OF d MESSAGE "VALUE-CHANGED: d" SELF:SCREEN-VALUE NOW.
|
|
304
|
ON VALUE-CHANGED OF i MESSAGE "VALUE-CHANGED: i" SELF:SCREEN-VALUE NOW.
|
|
305
|
ON VALUE-CHANGED OF s MESSAGE "VALUE-CHANGED: s" SELF:SCREEN-VALUE NOW.
|
|
306
|
ON VALUE-CHANGED OF l MESSAGE "VALUE-CHANGED: l" SELF:SCREEN-VALUE NOW.
|
|
307
|
|
|
308
|
ON Ctrl-D OF v,d,i,s,l,e DO:
|
|
309
|
valueEditor:SCREEN-VALUE = SELF:INPUT-VALUE.
|
|
310
|
RETURN NO-APPLY.
|
|
311
|
END.
|
|
312
|
|
|
313
|
ENABLE ALL WITH FRAME f.
|
|
314
|
|
|
315
|
VIEW FRAME f.
|
|
316
|
|
|
317
|
WAIT-FOR GO OF FRAME f.
|