Skip to content

Commit

Permalink
#744 Add a unit test for the fixed record length extractor with recor…
Browse files Browse the repository at this point in the history
…d length mapping with default record length.
  • Loading branch information
yruslan committed Feb 24, 2025
1 parent c0fc92a commit 085d26d
Showing 1 changed file with 52 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -225,6 +225,58 @@ class VRLRecordReaderSpec extends AnyWordSpec {

assert(ex.getMessage == "The record length field LEN must be an integral type or a value mapping must be specified.")
}

"the length mapping with default record length" in {
val copybookWithLenbgthMap =
""" 01 RECORD.
05 LEN_SPEC PIC X(1).
05 N PIC 9(2).
05 A PIC X(3).
"""

val records = Array(
0xC1, 0xF1, 0xF2, 0xC1,
0xC2, 0xF3, 0xF4, 0xC2, 0xC3,
0xC3, 0xF5, 0xF6, 0xC4, 0xC5, 0xC6
).map(_.toByte)

val streamH = new ByteStreamMock(records)
val streamD = new ByteStreamMock(records)
val context = RawRecordContext(0, streamH, streamD, CopybookParser.parseSimple(copybookWithLenbgthMap), null, null, "")

val readerParameters = ReaderParameters(
lengthFieldExpression = Some("LEN_SPEC"),
lengthFieldMap = Map("A" -> 4, "B" -> 5, "_" -> 6))

val reader = getUseCase(
copybook = copybookWithLenbgthMap,
records = records,
lengthFieldExpression = Some("LEN_SPEC"),
recordExtractor = Some(new FixedWithRecordLengthExprRawRecordExtractor(context, readerParameters)))

assert(reader.hasNext)
val (segment1, record1) = reader.next()
assert(reader.hasNext)
val (segment2, record2) = reader.next()
assert(reader.hasNext)
val (segment3, record3) = reader.next()
assert(!reader.hasNext)

assert(segment1.isEmpty)
assert(segment2.isEmpty)
assert(segment3.isEmpty)
assert(record1.length == 4)
assert(record2.length == 5)
assert(record3.length == 6)
assert(record1(0) == 0xC1.toByte)
assert(record1(1) == 0xF1.toByte)
assert(record1(2) == 0xF2.toByte)
assert(record1(3) == 0xC1.toByte)
assert(record2(0) == 0xC2.toByte)
assert(record2(1) == 0xF3.toByte)
assert(record3(0) == 0xC3.toByte)
assert(record3(1) == 0xF5.toByte)
}
}

"work with record length expressions" in {
Expand Down

0 comments on commit 085d26d

Please sign in to comment.