@@ -24,6 +24,29 @@ import za.co.absa.cobrix.cobol.testutils.SimpleComparisonBase
24
24
class ParseCopybookFeaturesSpec extends FunSuite with SimpleComparisonBase {
25
25
private implicit val logger : Logger = LoggerFactory .getLogger(this .getClass)
26
26
27
+ private val copybookFillers =
28
+ """ 01 RECORD.
29
+ | 05 FILLER PIC X(1).
30
+ | 05 COMPANY_PREFIX PIC X(3).
31
+ | 05 FILLER PIC X(1).
32
+ | 05 FILLER PIC X(1).
33
+ | 05 COMPANY_NAME PIC X(9).
34
+ | 05 FILLER REDEFINES COMPANY_NAME.
35
+ | 10 STR1 PIC X(5).
36
+ | 10 STR2 PIC X(2).
37
+ | 10 FILLER PIC X(1).
38
+ | 05 ADDRESS PIC X(25).
39
+ | 05 FILLER REDEFINES ADDRESS.
40
+ | 10 STR4 PIC X(10).
41
+ | 10 FILLER PIC X(20).
42
+ | 05 FILL_FIELD.
43
+ | 10 FILLER PIC X(5).
44
+ | 10 FILLER PIC X(2).
45
+ | 05 CONTACT_PERSON REDEFINES FILL_FIELD.
46
+ | 10 FIRST_NAME PIC X(6).
47
+ | 05 AMOUNT PIC S9(09)V99 BINARY.
48
+ |""" .stripMargin
49
+
27
50
test(" Test copybooks with indexed by clauses with multiple indexes separated by comma" ) {
28
51
val copybookContents =
29
52
"""
@@ -91,4 +114,107 @@ class ParseCopybookFeaturesSpec extends FunSuite with SimpleComparisonBase {
91
114
92
115
assertEqualsMultiline(layout, expectedLayout)
93
116
}
117
+
118
+ test(" Test parseSimple() not dropping fillers" ) {
119
+ val copybook = CopybookParser .parseSimple(copybookFillers, giveUniqueNameToValueFillers = true , giveUniqueNameToGroupFillers = true )
120
+ val layout = copybook.generateRecordLayoutPositions()
121
+
122
+ val expectedLayout =
123
+ """ -------- FIELD LEVEL/NAME --------- --ATTRIBS-- FLD START END LENGTH
124
+ |
125
+ |1 RECORD 1 1 60 60
126
+ | 5 FILLER_P1 2 1 1 1
127
+ | 5 COMPANY_PREFIX 3 2 4 3
128
+ | 5 FILLER_P2 4 5 5 1
129
+ | 5 FILLER_P3 5 6 6 1
130
+ | 5 COMPANY_NAME r 6 7 15 9
131
+ | 5 FILLER_1 R 7 7 15 9
132
+ | 10 STR1 8 7 11 5
133
+ | 10 STR2 9 12 13 2
134
+ | 10 FILLER_P4 10 14 14 1
135
+ | 5 ADDRESS r 11 16 45 30
136
+ | 5 FILLER_2 R 12 16 45 30
137
+ | 10 STR4 13 16 25 10
138
+ | 10 FILLER_P5 14 26 45 20
139
+ | 5 FILL_FIELD r 15 46 52 7
140
+ | 10 FILLER_P6 16 46 50 5
141
+ | 10 FILLER_P7 17 51 52 2
142
+ | 5 CONTACT_PERSON R 18 46 52 7
143
+ | 10 FIRST_NAME 19 46 51 6
144
+ | 5 AMOUNT 20 53 60 8
145
+ |"""
146
+ .stripMargin.replace(" \r\n " , " \n " )
147
+
148
+ assertEqualsMultiline(layout, expectedLayout)
149
+ }
150
+ test(" Test parseSimple() drop value fillers" ) {
151
+ val copybook = CopybookParser .parseSimple(copybookFillers, giveUniqueNameToValueFillers = false , giveUniqueNameToGroupFillers = true , dropFillersFromAst = true )
152
+ val layout = copybook.generateRecordLayoutPositions()
153
+
154
+ val expectedLayout =
155
+ """ -------- FIELD LEVEL/NAME --------- --ATTRIBS-- FLD START END LENGTH
156
+ |
157
+ |1 RECORD 1 1 60 60
158
+ | 5 COMPANY_PREFIX 2 2 4 3
159
+ | 5 COMPANY_NAME r 3 7 15 9
160
+ | 5 FILLER_1 R 4 7 15 9
161
+ | 10 STR1 5 7 11 5
162
+ | 10 STR2 6 12 13 2
163
+ | 5 ADDRESS r 7 16 45 30
164
+ | 5 FILLER_2 R 8 16 45 30
165
+ | 10 STR4 9 16 25 10
166
+ | 5 CONTACT_PERSON R 10 46 52 7
167
+ | 10 FIRST_NAME 11 46 51 6
168
+ | 5 AMOUNT 12 53 60 8
169
+ |"""
170
+ .stripMargin.replace(" \r\n " , " \n " )
171
+
172
+ assertEqualsMultiline(layout, expectedLayout)
173
+ }
174
+
175
+ test(" Test parseSimple() drop group fillers" ) {
176
+ val copybook = CopybookParser .parseSimple(copybookFillers, giveUniqueNameToValueFillers = true , giveUniqueNameToGroupFillers = false , dropFillersFromAst = true )
177
+ val layout = copybook.generateRecordLayoutPositions()
178
+
179
+ val expectedLayout =
180
+ """ -------- FIELD LEVEL/NAME --------- --ATTRIBS-- FLD START END LENGTH
181
+ |
182
+ |1 RECORD 1 1 60 60
183
+ | 5 FILLER_P1 2 1 1 1
184
+ | 5 COMPANY_PREFIX 3 2 4 3
185
+ | 5 FILLER_P2 4 5 5 1
186
+ | 5 FILLER_P3 5 6 6 1
187
+ | 5 COMPANY_NAME r 6 7 15 9
188
+ | 5 ADDRESS r 7 16 45 30
189
+ | 5 FILL_FIELD r 8 46 52 7
190
+ | 10 FILLER_P6 9 46 50 5
191
+ | 10 FILLER_P7 10 51 52 2
192
+ | 5 CONTACT_PERSON R 11 46 52 7
193
+ | 10 FIRST_NAME 12 46 51 6
194
+ | 5 AMOUNT 13 53 60 8
195
+ |"""
196
+ .stripMargin.replace(" \r\n " , " \n " )
197
+
198
+ assertEqualsMultiline(layout, expectedLayout)
199
+ }
200
+
201
+ test(" Test parseSimple() drop all fillers" ) {
202
+ val copybook = CopybookParser .parseSimple(copybookFillers, giveUniqueNameToValueFillers = false , giveUniqueNameToGroupFillers = false , dropFillersFromAst = true )
203
+ val layout = copybook.generateRecordLayoutPositions()
204
+
205
+ val expectedLayout =
206
+ """ -------- FIELD LEVEL/NAME --------- --ATTRIBS-- FLD START END LENGTH
207
+ |
208
+ |1 RECORD 1 1 60 60
209
+ | 5 COMPANY_PREFIX 2 2 4 3
210
+ | 5 COMPANY_NAME r 3 7 15 9
211
+ | 5 ADDRESS r 4 16 45 30
212
+ | 5 CONTACT_PERSON R 5 46 52 7
213
+ | 10 FIRST_NAME 6 46 51 6
214
+ | 5 AMOUNT 7 53 60 8
215
+ |"""
216
+ .stripMargin.replace(" \r\n " , " \n " )
217
+
218
+ assertEqualsMultiline(layout, expectedLayout)
219
+ }
94
220
}
0 commit comments