package sds import ( "testing" "github.com/stretchr/testify/assert" ) func TestBitsToTextBytes(t *testing.T) { tt := []struct { desc string encoding TextEncoding bits int expectedBytes int }{ { desc: "7bit, 0", encoding: Packed7Bit, bits: 0, expectedBytes: 0, }, { desc: "8bit, 0", encoding: ISO8859_1, bits: 0, expectedBytes: 0, }, { desc: "7bit, 1", encoding: Packed7Bit, bits: 1, expectedBytes: 0, }, { desc: "8bit, 1", encoding: ISO8859_1, bits: 1, expectedBytes: 0, }, { desc: "7bit, 8", encoding: Packed7Bit, bits: 8, expectedBytes: 1, }, { desc: "7bit, 14", encoding: Packed7Bit, bits: 14, expectedBytes: 2, }, { desc: "8bit, 14", encoding: ISO8859_1, bits: 14, expectedBytes: 1, }, { desc: "7bit, 56", encoding: Packed7Bit, bits: 56, expectedBytes: 8, }, { desc: "8bit, 56", encoding: ISO8859_1, bits: 56, expectedBytes: 7, }, } for _, tc := range tt { t.Run(tc.desc, func(t *testing.T) { actualBytes := BitsToTextBytes(tc.encoding, tc.bits) assert.Equal(t, tc.expectedBytes, actualBytes) }) } } func TestSplitToMaxBits(t *testing.T) { tt := []struct { encoding TextEncoding maxPDUBits int text string expectedParts []string }{ { encoding: Packed7Bit, maxPDUBits: 56, text: "7-bit, 056", expectedParts: []string{"7-bit, 0", "56"}, }, { encoding: ISO8859_1, maxPDUBits: 56, text: "8-bit, 056", expectedParts: []string{"8-bit, ", "056"}, }, { encoding: Packed7Bit, maxPDUBits: 128, text: "7-bit, 128", expectedParts: []string{"7-bit, 128"}, }, { encoding: ISO8859_1, maxPDUBits: 128, text: "8-bit, 128", expectedParts: []string{"8-bit, 128"}, }, } for _, tc := range tt { t.Run(tc.text, func(t *testing.T) { actualParts := SplitToMaxBits(tc.encoding, tc.maxPDUBits, tc.text) assert.Equal(t, tc.expectedParts, actualParts) }) } } func TestSplitLeadingOPTA(t *testing.T) { tt := []struct { desc string value string expectedOPTA string expectedTail string }{ { desc: "no OPTA", value: "testmessage", expectedOPTA: "", expectedTail: "testmessage", }, { desc: "only OPTA", value: "ABCD FG#1234567890123456", expectedOPTA: "ABCD FG#1234567890123456", expectedTail: "", }, { desc: "OPTA and tail", value: "ABCD FG#1234567890123456testmessage", expectedOPTA: "ABCD FG#1234567890123456", expectedTail: "testmessage", }, } for _, tc := range tt { t.Run(tc.desc, func(t *testing.T) { actualOPTA, actualTail := SplitLeadingOPTA(tc.value) assert.Equal(t, tc.expectedOPTA, actualOPTA) assert.Equal(t, tc.expectedTail, actualTail) }) } } func TestSplitTrailingITSI(t *testing.T) { tt := []struct { desc string value string expectedHead string expectedITSI string }{ { desc: "no ITSI", value: "testmessage", expectedHead: "testmessage", expectedITSI: "", }, { desc: "cr cr", value: "testmessage\r\r1234567890123456", expectedHead: "testmessage", expectedITSI: "1234567890123456", }, { desc: "ctrl-z nul", value: "testmessage\x1a\x001234567890123456", expectedHead: "testmessage", expectedITSI: "1234567890123456", }, } for _, tc := range tt { t.Run(tc.desc, func(t *testing.T) { actualHead, actualITSI := SplitTrailingITSI(tc.value) assert.Equal(t, tc.expectedHead, actualHead) assert.Equal(t, tc.expectedITSI, actualITSI) }) } }