@@ -2,6 +2,7 @@ package dev.atsushieno.ktmidi
22
33import kotlin.test.Test
44import kotlin.test.assertContentEquals
5+ import kotlin.test.assertEquals
56import kotlin.test.assertFalse
67
78class Midi1SysExChunkProcessorTest {
@@ -22,4 +23,78 @@ class Midi1SysExChunkProcessorTest {
2223 assertContentEquals(sysex, seq2.toList(), " round $it : #2" )
2324 }
2425 }
26+
27+ @Test
28+ fun sysexTerminatedByNonRealTimeStatusByte () {
29+ val processor = Midi1SysExChunkProcessor ()
30+ val input = listOf (
31+ 0xF0 , 0x7E , 0x7F , 0x0D ,
32+ 0x90 , 0x3C , 0x40
33+ ).map { it.toByte() }
34+
35+ val result = processor.process(input).toList()
36+ assertEquals(2 , result.size)
37+ assertContentEquals(listOf (0xF0 , 0x7E , 0x7F , 0x0D ).map { it.toByte() }, result[0 ])
38+ assertContentEquals(listOf (0x90 , 0x3C , 0x40 ).map { it.toByte() }, result[1 ])
39+ }
40+
41+ @Test
42+ fun sysexTerminatedByNonRealTimeStatusByteInRemainingBuffer () {
43+ val processor = Midi1SysExChunkProcessor ()
44+ val input1 = listOf (0xF0 , 0x7E , 0x7F ).map { it.toByte() }
45+ val input2 = listOf (0x0D , 0x90 , 0x3C , 0x40 ).map { it.toByte() }
46+
47+ val result1 = processor.process(input1).toList()
48+ assertEquals(0 , result1.size)
49+
50+ val result2 = processor.process(input2).toList()
51+ assertEquals(2 , result2.size)
52+ assertContentEquals(listOf (0xF0 , 0x7E , 0x7F , 0x0D ).map { it.toByte() }, result2[0 ])
53+ assertContentEquals(listOf (0x90 , 0x3C , 0x40 ).map { it.toByte() }, result2[1 ])
54+ }
55+
56+ @Test
57+ fun realTimeMessagesDuringIncompleteSysex () {
58+ val processor = Midi1SysExChunkProcessor ()
59+ val input1 = listOf (0xF0 , 0x7E , 0xF8 , 0x7F ).map { it.toByte() }
60+ val input2 = listOf (0x0D , 0xFE , 0x7E , 0xF7 ).map { it.toByte() }
61+
62+ val result1 = processor.process(input1).toList()
63+ assertEquals(0 , result1.size)
64+
65+ val result2 = processor.process(input2).toList()
66+ assertEquals(1 , result2.size)
67+ assertContentEquals(
68+ listOf (0xF0 , 0x7E , 0xF8 , 0x7F , 0x0D , 0xFE , 0x7E , 0xF7 ).map { it.toByte() },
69+ result2[0 ]
70+ )
71+ }
72+
73+ @Test
74+ fun realTimeMessagesInCompleteSysex () {
75+ val processor = Midi1SysExChunkProcessor ()
76+ val input = listOf (0xF0 , 0x7E , 0xF8 , 0x7F , 0x0D , 0xFE , 0x7E , 0xF7 ).map { it.toByte() }
77+
78+ val result = processor.process(input).toList()
79+ assertEquals(1 , result.size)
80+ assertContentEquals(input, result[0 ])
81+ }
82+
83+ @Test
84+ fun multipleSysexMessagesTerminatedByStatusBytes () {
85+ val processor = Midi1SysExChunkProcessor ()
86+ val input = listOf (
87+ 0xF0 , 0x01 , 0x02 ,
88+ 0x90 , 0x3C , 0x40 ,
89+ 0xF0 , 0x03 , 0x04 , 0xF7 ,
90+ 0x80 , 0x3C , 0x00
91+ ).map { it.toByte() }
92+
93+ val result = processor.process(input).toList()
94+ assertEquals(4 , result.size)
95+ assertContentEquals(listOf (0xF0 , 0x01 , 0x02 ).map { it.toByte() }, result[0 ])
96+ assertContentEquals(listOf (0x90 , 0x3C , 0x40 ).map { it.toByte() }, result[1 ])
97+ assertContentEquals(listOf (0xF0 , 0x03 , 0x04 , 0xF7 ).map { it.toByte() }, result[2 ])
98+ assertContentEquals(listOf (0x80 , 0x3C , 0x00 ).map { it.toByte() }, result[3 ])
99+ }
25100}
0 commit comments