@@ -17,3 +17,171 @@ AT_CHECK([${COBJ} -conf=hello.conf prog.cbl], [1], [],
1717])
1818
1919AT_CLEANUP
20+
21+
22+ AT_SETUP([allow search key in rhs])
23+
24+ AT_CHECK([cp ../../../config/allow-key-in-rhs.conf a.conf])
25+
26+ # without SEARCH ALL
27+ AT_DATA([prog.cbl], [
28+ IDENTIFICATION DIVISION.
29+ PROGRAM-ID. prog.
30+ DATA DIVISION.
31+ WORKING-STORAGE SECTION.
32+ PROCEDURE DIVISION.
33+ MAIN-RTN.
34+ DISPLAY "HELLO, WORLD!!".
35+ STOP RUN.
36+ ])
37+ AT_CHECK([${COBJ} prog.cbl], [0])
38+ AT_CHECK([${COBJ} -conf=a.conf prog.cbl], [0])
39+
40+
41+ # key item of OCCURS is LEFT hand side on WHEN condition
42+ AT_DATA([prog.cbl], [
43+ IDENTIFICATION DIVISION.
44+ PROGRAM-ID. prog.
45+ DATA DIVISION.
46+ WORKING-STORAGE SECTION.
47+ 01 ELEMENT_COUNT PIC 9(03) VALUE 3.
48+ 01 RECORD_ARRAY.
49+ 02 FILLER OCCURS 3.
50+ 03 METRIC_COUNT PIC 9(03).
51+ 01 RECORD_ID PIC X(02).
52+ 01 RECORD_KEY.
53+ 02 RECORD_STRUCT.
54+ 03 RECORD_CODE PIC X(04).
55+ 03 RECORD_TYPE PIC X(02).
56+ 02 SERIAL_NO PIC 9(02).
57+ 01 DATA_TABLE.
58+ 02 ELEMENT OCCURS 1 TO 150
59+ DEPENDING ON ELEMENT_COUNT
60+ ASCENDING KEY TABLE_KEY INDEXED BY INDEX_K.
61+ 03 TABLE_KEY.
62+ 04 KEY_CODE.
63+ 05 RECORD_CODE_KEY PIC X(04).
64+ 05 RECORD_TYPE_KEY PIC X(02).
65+ 04 SERIAL_NO_KEY PIC 9(02).
66+ 03 FILLER PIC X(02).
67+ 03 METRIC_DATA.
68+ 04 METRIC_ELEMENT OCCURS 10 INDEXED BY INDEX_J.
69+ 05 METER_NO PIC X(08).
70+ 05 ADDITION_FLAG PIC X(01).
71+ 03 FILLER PIC X(02).
72+ *
73+ PROCEDURE DIVISION.
74+ MAIN_ROUTINE.
75+ SEARCH ALL ELEMENT
76+ AT END
77+ MOVE ZERO TO METRIC_COUNT(1)
78+ GO TO EXIT_ROUTINE
79+ WHEN TABLE_KEY(INDEX_K) = RECORD_KEY
80+ MOVE KEY_CODE(INDEX_K) TO RECORD_ID
81+ SET METRIC_COUNT(1) TO INDEX_K.
82+ EXIT_ROUTINE.
83+ MAIN_EXIT.
84+ STOP RUN.
85+ ])
86+ AT_CHECK([${COBJ} prog.cbl], [0])
87+ AT_CHECK([${COBJ} -conf=a.conf prog.cbl], [0])
88+
89+
90+ # key item of OCCURS is RIGHT hand side on WHEN condition
91+ AT_DATA([prog.cbl], [
92+ IDENTIFICATION DIVISION.
93+ PROGRAM-ID. prog.
94+ DATA DIVISION.
95+ WORKING-STORAGE SECTION.
96+ 01 ELEMENT_COUNT PIC 9(03) VALUE 3.
97+ 01 RECORD_ARRAY.
98+ 02 FILLER OCCURS 3.
99+ 03 METRIC_COUNT PIC 9(03).
100+ 01 RECORD_ID PIC X(02).
101+ 01 RECORD_KEY.
102+ 02 RECORD_STRUCT.
103+ 03 RECORD_CODE PIC X(04).
104+ 03 RECORD_TYPE PIC X(02).
105+ 02 SERIAL_NO PIC 9(02).
106+ 01 DATA_TABLE.
107+ 02 ELEMENT OCCURS 1 TO 150
108+ DEPENDING ON ELEMENT_COUNT
109+ ASCENDING KEY TABLE_KEY INDEXED BY INDEX_K.
110+ 03 TABLE_KEY.
111+ 04 KEY_CODE.
112+ 05 RECORD_CODE_KEY PIC X(04).
113+ 05 RECORD_TYPE_KEY PIC X(02).
114+ 04 SERIAL_NO_KEY PIC 9(02).
115+ 03 FILLER PIC X(02).
116+ 03 METRIC_DATA.
117+ 04 METRIC_ELEMENT OCCURS 10 INDEXED BY INDEX_J.
118+ 05 METER_NO PIC X(08).
119+ 05 ADDITION_FLAG PIC X(01).
120+ 03 FILLER PIC X(02).
121+ *
122+ PROCEDURE DIVISION.
123+ MAIN_ROUTINE.
124+ SEARCH ALL ELEMENT
125+ AT END
126+ MOVE ZERO TO METRIC_COUNT(1)
127+ GO TO EXIT_ROUTINE
128+ WHEN RECORD_KEY = TABLE_KEY(INDEX_K)
129+ MOVE KEY_CODE(INDEX_K) TO RECORD_ID
130+ SET METRIC_COUNT(1) TO INDEX_K.
131+ EXIT_ROUTINE.
132+ MAIN_EXIT.
133+ STOP RUN.
134+ ])
135+ AT_CHECK([(${COBJ} prog.cbl | grep "Undeclared key") > a.txt 2>&1], [1])
136+ AT_CHECK([${COBJ} -conf=a.conf prog.cbl], [0])
137+
138+
139+ # only key item on WHEN condition
140+ AT_DATA([prog.cbl], [
141+ IDENTIFICATION DIVISION.
142+ PROGRAM-ID. prog.
143+ DATA DIVISION.
144+ WORKING-STORAGE SECTION.
145+ 01 ELEMENT_COUNT PIC 9(03) VALUE 3.
146+ 01 RECORD_ARRAY.
147+ 02 FILLER OCCURS 3.
148+ 03 METRIC_COUNT PIC 9(03).
149+ 01 RECORD_ID PIC X(02).
150+ 01 RECORD_KEY.
151+ 02 RECORD_STRUCT.
152+ 03 RECORD_CODE PIC X(04).
153+ 03 RECORD_TYPE PIC X(02).
154+ 02 SERIAL_NO PIC 9(02).
155+ 01 DATA_TABLE.
156+ 02 ELEMENT OCCURS 1 TO 150
157+ DEPENDING ON ELEMENT_COUNT
158+ ASCENDING KEY TABLE_KEY INDEXED BY INDEX_K.
159+ 03 TABLE_KEY.
160+ 04 KEY_CODE.
161+ 05 RECORD_CODE_KEY PIC X(04).
162+ 05 RECORD_TYPE_KEY PIC X(02).
163+ 04 SERIAL_NO_KEY PIC 9(02).
164+ 03 FILLER PIC X(02).
165+ 03 METRIC_DATA.
166+ 04 METRIC_ELEMENT OCCURS 10 INDEXED BY INDEX_J.
167+ 05 METER_NO PIC X(08).
168+ 05 ADDITION_FLAG PIC X(01).
169+ 03 FILLER PIC X(02).
170+ *
171+ PROCEDURE DIVISION.
172+ MAIN_ROUTINE.
173+ SEARCH ALL ELEMENT
174+ AT END
175+ MOVE ZERO TO METRIC_COUNT(1)
176+ GO TO EXIT_ROUTINE
177+ WHEN TABLE_KEY(INDEX_K)
178+ MOVE KEY_CODE(INDEX_K) TO RECORD_ID
179+ SET METRIC_COUNT(1) TO INDEX_K.
180+ EXIT_ROUTINE.
181+ MAIN_EXIT.
182+ STOP RUN.
183+ ])
184+ AT_CHECK([(${COBJ} prog.cbl | grep "Invalid type cast") > a.txt 2>&1], [1])
185+ AT_CHECK([(${COBJ} -conf=a.conf a.cbl | grep "Invalid type cast") > a.txt 2>&1], [1])
186+
187+ AT_CLEANUP
0 commit comments