Project

General

Profile

7019-e.p

Vladimir Tsichevski, 02/05/2026 03:09 PM

Download (11 KB)

 
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.