|
1
|
/*------------------------------------------------------------------------------------------------------
|
|
2
|
This program tests the hypothesis that format adjustments applied during date formatting are identical
|
|
3
|
to those applied in date format declarations and date format assignments in OpenEdge ABL for each
|
|
4
|
possible SESSION:DATE-FORMAT setting.
|
|
5
|
|
|
6
|
To achieve this, it formats a fixed date value using each of the 576 possible date format permutations
|
|
7
|
(covering all combinations of "9", "99", "999", and "9999" with separators ".", "-", and "/") in two
|
|
8
|
ways under the same SESSION:DATE-FORMAT setting:
|
|
9
|
|
|
10
|
1. first, with the format as assigned to a variable, and
|
|
11
|
2. second, with the format as adjusted for assignment.
|
|
12
|
|
|
13
|
The resulting strings are written to a file to be compared for equality by extra tools.
|
|
14
|
If all comparisons match, the format adjustment processes are likely equivalent. If any comparison
|
|
15
|
fails, the proposition is disproven.
|
|
16
|
------------------------------------------------------------------------------------------------------*/
|
|
17
|
|
|
18
|
/* Constants for components and separators */
|
|
19
|
DEFINE VARIABLE vNines AS CHARACTER EXTENT 4 INITIAL ["9", "99", "999", "9999"] NO-UNDO.
|
|
20
|
DEFINE VARIABLE vSeparators AS CHARACTER EXTENT 3 INITIAL [".", "-", "/"] NO-UNDO.
|
|
21
|
DEFINE VARIABLE vSessionFormats AS CHARACTER EXTENT 6 INITIAL ["mdy", "dmy", "ymd", "myd", "dym", "ydm"] NO-UNDO.
|
|
22
|
DEFINE VARIABLE vFixedDate AS DATE INITIAL 1/2/3 NO-UNDO. /* Fixed test date */
|
|
23
|
|
|
24
|
/* Variables for iteration */
|
|
25
|
DEFINE VARIABLE vFirst AS INTEGER NO-UNDO.
|
|
26
|
DEFINE VARIABLE vSecond AS INTEGER NO-UNDO.
|
|
27
|
DEFINE VARIABLE vThird AS INTEGER NO-UNDO.
|
|
28
|
DEFINE VARIABLE vSep1 AS INTEGER NO-UNDO.
|
|
29
|
DEFINE VARIABLE vSep2 AS INTEGER NO-UNDO.
|
|
30
|
DEFINE VARIABLE vSession AS INTEGER NO-UNDO.
|
|
31
|
DEFINE VARIABLE vFormat AS CHARACTER NO-UNDO.
|
|
32
|
DEFINE VARIABLE vAssignedString AS CHARACTER NO-UNDO.
|
|
33
|
DEFINE VARIABLE vAdjustedString AS CHARACTER NO-UNDO.
|
|
34
|
DEFINE VARIABLE vMismatches AS INTEGER NO-UNDO.
|
|
35
|
|
|
36
|
DEFINE FRAME myFrame
|
|
37
|
vFixedDate
|
|
38
|
WITH NO-LABELS NO-BOX DOWN SIZE 62 BY 10.
|
|
39
|
|
|
40
|
DO vSession = 1 TO 6:
|
|
41
|
DEFINE VARIABLE order AS CHARACTER NO-UNDO.
|
|
42
|
order = vSessionFormats[vSession].
|
|
43
|
|
|
44
|
OUTPUT TO VALUE( "date_format_formatting_adjusted_" + order + ".i" ).
|
|
45
|
|
|
46
|
SESSION:DATE-FORMAT = order.
|
|
47
|
|
|
48
|
DO vFirst = 1 TO 4:
|
|
49
|
DO vSecond = 1 TO 4:
|
|
50
|
DO vThird = 1 TO 4:
|
|
51
|
DO vSep1 = 1 TO 3:
|
|
52
|
DO vSep2 = 1 TO 3:
|
|
53
|
DO WITH FRAME myFrame:
|
|
54
|
/* Generate format permutation */
|
|
55
|
vFormat = vNines[vFirst] + vSeparators[vSep1] +
|
|
56
|
vNines[vSecond] + vSeparators[vSep2] +
|
|
57
|
vNines[vThird].
|
|
58
|
vFixedDate:FORMAT = vFormat.
|
|
59
|
DEFINE VARIABLE asString AS CHARACTER NO-UNDO.
|
|
60
|
asString = STRING(1/2/3, vFormat) NO-ERROR.
|
|
61
|
IF NOT ERROR-STATUS:ERROR THEN
|
|
62
|
DISPLAY /*vFormat NO-LABELS*/ vFixedDate NO-LABELS "" asString NO-LABELS FORMAT "X(30)" NO-ERROR.
|
|
63
|
END.
|
|
64
|
END.
|
|
65
|
END.
|
|
66
|
END.
|
|
67
|
END.
|
|
68
|
END.
|
|
69
|
OUTPUT CLOSE.
|
|
70
|
END.
|