diff --git a/lib/plugins/Label_4A_DIS.test.ts b/lib/plugins/Label_4A_DIS.test.ts index 6695efc..2c02070 100644 --- a/lib/plugins/Label_4A_DIS.test.ts +++ b/lib/plugins/Label_4A_DIS.test.ts @@ -39,9 +39,8 @@ describe('Label 4A preamble DIS', () => { expect(decodeResult.formatted.items[2].value).toBe('@HOLD CNX'); }); - // disabled because all messages should decode - test.skip('decodes Label 4A_DIS ', () => { - message.text = '4A_DIS Bogus message'; + test('does not throw on comma-less DIS payload', () => { + message.text = 'DIS'; const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(false); @@ -50,4 +49,31 @@ describe('Label 4A preamble DIS', () => { expect(decodeResult.formatted.description).toBe('Latest New Format'); expect(decodeResult.formatted.items.length).toBe(0); }); + + test('does not throw on DIS with empty field after comma', () => { + message.text = 'DIS,'; + const decodeResult = plugin.decode(message); + + expect(decodeResult.decoded).toBe(false); + expect(decodeResult.decoder.decodeLevel).toBe('none'); + expect(decodeResult.formatted.items.length).toBe(0); + }); + + test('does not decode DIS payload without comma', () => { + message.text = 'DIS01'; + const decodeResult = plugin.decode(message); + + expect(decodeResult.decoded).toBe(false); + expect(decodeResult.decoder.decodeLevel).toBe('none'); + expect(decodeResult.formatted.items.length).toBe(0); + }); + + test('does not decode DIS payload without callsign', () => { + message.text = 'DIS01,190009'; + const decodeResult = plugin.decode(message); + + expect(decodeResult.decoded).toBe(false); + expect(decodeResult.decoder.decodeLevel).toBe('none'); + expect(decodeResult.formatted.items.length).toBe(0); + }); }); diff --git a/lib/plugins/Label_4A_DIS.ts b/lib/plugins/Label_4A_DIS.ts index 048c202..d25f7a9 100644 --- a/lib/plugins/Label_4A_DIS.ts +++ b/lib/plugins/Label_4A_DIS.ts @@ -16,8 +16,14 @@ export class Label_4A_DIS extends DecoderPlugin { decode(message: Message, options: Options = {}): DecodeResult { const decodeResult = this.initResult(message, 'Latest New Format'); - decodeResult.decoded = true; const fields = message.text.split(','); + if (fields.length < 3 || !fields[1] || fields[1].length < 3 || !fields[2]) { + decodeResult.decoded = false; + this.setDecodeLevel(decodeResult, decodeResult.decoded); + return decodeResult; + } + + decodeResult.decoded = true; ResultFormatter.timestamp( decodeResult, DateTimeUtils.convertHHMMSSToTod(fields[1].substring(2) + '00'),