From 1af0511da6da7f4efd21a88a53f31eff547b445f Mon Sep 17 00:00:00 2001 From: Mark Bumiller Date: Thu, 5 Feb 2026 22:10:24 -0500 Subject: [PATCH 1/2] backing up work --- lib/DecoderPluginInterface.ts | 2 +- lib/plugins/Label_10_LDR.test.ts | 15 ++-- lib/plugins/Label_10_POS.test.ts | 11 +-- lib/plugins/Label_10_Slash.test.ts | 15 ++-- lib/plugins/Label_12_N_Space.test.ts | 19 ++--- lib/plugins/Label_12_POS.test.ts | 9 ++- lib/plugins/Label_13Through18_Slash.test.ts | 59 +++++++------- lib/plugins/Label_15.test.ts | 31 ++++---- lib/plugins/Label_15_FST.test.ts | 11 +-- lib/plugins/Label_16_Honeywell.test.ts | 19 ++--- lib/plugins/Label_16_N_Space.test.ts | 25 +++--- lib/plugins/Label_16_POSA1.test.ts | 19 ++--- lib/plugins/Label_16_TOD.test.ts | 25 +++--- lib/plugins/Label_1J_2J_FTX.test.ts | 15 ++-- lib/plugins/Label_1L_070.test.ts | 10 +-- lib/plugins/Label_1L_3-line.test.ts | 14 ++-- lib/plugins/Label_1L_660.test.ts | 11 +-- lib/plugins/Label_1L_Slash.test.ts | 12 +-- lib/plugins/Label_1M_Slash.test.ts | 29 ++++--- lib/plugins/Label_20_POS.test.ts | 27 +++---- lib/plugins/Label_21_POS.test.ts | 11 +-- lib/plugins/Label_22_OFF.test.ts | 19 ++--- lib/plugins/Label_22_POS.test.ts | 11 +-- lib/plugins/Label_24_Slash.test.ts | 11 +-- lib/plugins/Label_2P_FM3.test.ts | 23 +++--- lib/plugins/Label_2P_FM4.test.ts | 17 +++-- lib/plugins/Label_2P_FM5.test.ts | 11 +-- lib/plugins/Label_2P_POS.test.ts | 11 +-- lib/plugins/Label_30_Slash_EA.test.ts | 30 +++++--- lib/plugins/Label_44_ETA.test.ts | 11 +-- lib/plugins/Label_44_IN.test.ts | 15 ++-- lib/plugins/Label_44_OFF.test.ts | 11 +-- lib/plugins/Label_44_ON.test.ts | 15 ++-- lib/plugins/Label_44_POS.test.ts | 36 ++++----- lib/plugins/Label_44_Slash.test.ts | 13 ++-- lib/plugins/Label_4A.test.ts | 85 +++++++++------------ lib/plugins/Label_4A_01.test.ts | 36 +++++---- lib/plugins/Label_4A_DIS.test.ts | 36 ++++----- lib/plugins/Label_4A_DOOR.test.ts | 40 +++++----- lib/plugins/Label_4A_Slash_01.test.ts | 34 +++++---- lib/plugins/Label_4J_POS.test.ts | 9 ++- lib/plugins/Label_4N.test.ts | 56 ++++++-------- lib/plugins/Label_4T_AGFSR.test.ts | 13 ++-- lib/plugins/Label_4T_ETA.test.ts | 9 ++- lib/plugins/Label_58.test.ts | 11 +-- lib/plugins/Label_5Z_Slash.test.ts | 35 ++++----- lib/plugins/Label_80.test.ts | 29 +++---- lib/plugins/Label_83.test.ts | 63 +++++++-------- lib/plugins/Label_8E.test.ts | 20 ++++- lib/plugins/Label_H1_FLR.test.ts | 80 +++++++++---------- lib/plugins/Label_H1_FPN.test.ts | 53 ++++++------- lib/plugins/Label_H1_FTX.test.ts | 19 ++--- lib/plugins/Label_H1_INI.test.ts | 15 ++-- lib/plugins/Label_H1_OHMA.test.ts | 62 +++++++-------- lib/plugins/Label_H1_PER.test.ts | 15 ++-- lib/plugins/Label_H1_POS.test.ts | 83 ++++++++++---------- lib/plugins/Label_H1_PRG.test.ts | 25 +++--- lib/plugins/Label_H1_PWI.test.ts | 11 +-- lib/plugins/Label_H1_Slash.test.ts | 19 ++--- lib/plugins/Label_H1_StarPOS.test.ts | 11 +-- lib/plugins/Label_H1_WRN.test.ts | 80 +++++++++---------- lib/plugins/Label_H2_02E.test.ts | 19 ++--- lib/plugins/Label_HX.test.ts | 43 +++++------ lib/plugins/Label_MA.test.ts | 13 ++-- lib/plugins/Label_QQ.test.ts | 54 ++++++------- lib/plugins/Label_SQ.test.ts | 33 +++++--- 66 files changed, 884 insertions(+), 850 deletions(-) diff --git a/lib/DecoderPluginInterface.ts b/lib/DecoderPluginInterface.ts index 4302778..382cb0a 100644 --- a/lib/DecoderPluginInterface.ts +++ b/lib/DecoderPluginInterface.ts @@ -2,7 +2,7 @@ * Representation of a Message */ export interface Message { - label?: string, + label: string, sublabel?: string, text: string, } diff --git a/lib/plugins/Label_10_LDR.test.ts b/lib/plugins/Label_10_LDR.test.ts index 8ecf168..55abbcd 100644 --- a/lib/plugins/Label_10_LDR.test.ts +++ b/lib/plugins/Label_10_LDR.test.ts @@ -3,6 +3,7 @@ import { Label_10_LDR } from './Label_10_LDR'; describe('Label_10_LDR', () => { let plugin: Label_10_LDR; + const message = {label: '10', text: ''}; beforeEach(() => { const decoder = new MessageDecoder(); @@ -20,8 +21,8 @@ describe('Label_10_LDR', () => { }); test('decodes Label 10 Preamble LDR variant 1', () => { - const text = 'LDR01,189,C,SWA-2600-016,0,N 38.151,W 76.623,37003, 10.2,KATL,KLGA,KLGA,22/,/,/,0,0,,,,,,,0,0,0,00,,135.1,08.6,143.7,,,' - const decodeResult = plugin.decode({ text: text }); + message.text = 'LDR01,189,C,SWA-2600-016,0,N 38.151,W 76.623,37003, 10.2,KATL,KLGA,KLGA,22/,/,/,0,0,,,,,,,0,0,0,00,,135.1,08.6,143.7,,,' + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe('partial'); @@ -42,8 +43,8 @@ describe('Label_10_LDR', () => { }); test('decodes Label 10 Preamble LDR variant 2', () => { - const text = 'LDR01,189,C,SWA-2600-016,0,N 37.873,W 79.541,30998, 16.6,KBNA,KBOS,KBOS,27/,33L/,22L/,0,1,,,,,,,0,0,0,00,,131.2,11.4,142.6,,,' - const decodeResult = plugin.decode({ text: text }); + message.text = 'LDR01,189,C,SWA-2600-016,0,N 37.873,W 79.541,30998, 16.6,KBNA,KBOS,KBOS,27/,33L/,22L/,0,1,,,,,,,0,0,0,00,,131.2,11.4,142.6,,,' + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe('partial'); @@ -68,13 +69,13 @@ describe('Label_10_LDR', () => { test('decodes Label 10 Preamble LDR ', () => { - const text = 'LDR Bogus Message'; - const decodeResult = plugin.decode({ text: text }); + message.text = 'LDR Bogus Message'; + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(false); expect(decodeResult.decoder.decodeLevel).toBe('none'); expect(decodeResult.decoder.name).toBe('label-10-ldr'); expect(decodeResult.formatted.description).toBe('Position Report'); - expect(decodeResult.message.text).toBe(text); + expect(decodeResult.message).toBe(message); }); }); diff --git a/lib/plugins/Label_10_POS.test.ts b/lib/plugins/Label_10_POS.test.ts index 80f45fc..3e7c185 100644 --- a/lib/plugins/Label_10_POS.test.ts +++ b/lib/plugins/Label_10_POS.test.ts @@ -3,6 +3,7 @@ import { Label_10_POS } from './Label_10_POS'; describe('Label_10_POS', () => { let plugin: Label_10_POS; + const message = {label: '10', text: ''}; beforeEach(() => { const decoder = new MessageDecoder(); @@ -20,8 +21,8 @@ describe('Label_10_POS', () => { }); test('decodes Label 10 Preamble POS variant 1', () => { - const text = 'POS082150, N 3885,W 7841,---,308,26922, 51,22290, 529, 19,-225,6' - const decodeResult = plugin.decode({ text: text }); + message.text = 'POS082150, N 3885,W 7841,---,308,26922, 51,22290, 529, 19,-225,6' + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe('partial'); @@ -35,13 +36,13 @@ describe('Label_10_POS', () => { test('decodes Label 10 Preamble POS ', () => { - const text = 'POS Bogus Message'; - const decodeResult = plugin.decode({ text: text }); + message.text = 'POS Bogus Message'; + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(false); expect(decodeResult.decoder.decodeLevel).toBe('none'); expect(decodeResult.decoder.name).toBe('label-10-pos'); expect(decodeResult.formatted.description).toBe('Position Report'); - expect(decodeResult.message.text).toBe(text); + expect(decodeResult.message).toBe(message); }); }); \ No newline at end of file diff --git a/lib/plugins/Label_10_Slash.test.ts b/lib/plugins/Label_10_Slash.test.ts index 83dc1a6..13cb55b 100644 --- a/lib/plugins/Label_10_Slash.test.ts +++ b/lib/plugins/Label_10_Slash.test.ts @@ -3,6 +3,7 @@ import { Label_10_Slash } from './Label_10_Slash'; describe('Label_10_Slash', () => { let plugin: Label_10_Slash; + const message = {label: '10', text: ''}; beforeEach(() => { const decoder = new MessageDecoder(); @@ -20,8 +21,8 @@ describe('Label_10_Slash', () => { }); test('decodes Label 10 Preamble / variant 1', () => { - const text = '/N39.182/W077.217/10/0.42/180/055/KIAD/0004/0028/00015/MOWAT/HUSEL/2349/YACKK/2352/' - const decodeResult = plugin.decode({ text: text }); + message.text = '/N39.182/W077.217/10/0.42/180/055/KIAD/0004/0028/00015/MOWAT/HUSEL/2349/YACKK/2352/' + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe('partial'); @@ -42,8 +43,8 @@ describe('Label_10_Slash', () => { }); test('decodes Label 10 Preamble / variant 2', () => { - const text = '/N39.019/W078.468/10/0.83/246/400/KCVG/0155/0073/00018/COLNS/STEVY/0120/FAIIR/0126/KTEB/' - const decodeResult = plugin.decode({ text: text }); + message.text = '/N39.019/W078.468/10/0.83/246/400/KCVG/0155/0073/00018/COLNS/STEVY/0120/FAIIR/0126/KTEB/' + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe('partial'); @@ -68,13 +69,13 @@ describe('Label_10_Slash', () => { test('decodes Label 10 Preamble / ', () => { - const text = '/Bogus Message/'; - const decodeResult = plugin.decode({ text: text }); + message.text = '/Bogus Message/'; + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(false); expect(decodeResult.decoder.decodeLevel).toBe('none'); expect(decodeResult.decoder.name).toBe('label-10-slash'); expect(decodeResult.formatted.description).toBe('Position Report'); - expect(decodeResult.message.text).toBe(text); + expect(decodeResult.message).toBe(message); }); }); \ No newline at end of file diff --git a/lib/plugins/Label_12_N_Space.test.ts b/lib/plugins/Label_12_N_Space.test.ts index 9197f56..50f6c43 100644 --- a/lib/plugins/Label_12_N_Space.test.ts +++ b/lib/plugins/Label_12_N_Space.test.ts @@ -3,6 +3,7 @@ import { Label_12_N_Space } from './Label_12_N_Space'; describe('Label_12_N_Space', () => { let plugin: Label_12_N_Space; + const message = {label: '12', text: ''}; beforeEach(() => { const decoder = new MessageDecoder(); @@ -20,14 +21,14 @@ describe('Label_12_N_Space', () => { }); test('decodes variant 1', () => { - const text = 'N 42.150,W121.187,39000,161859, 109,.C-GWSO,1742'; - const decodeResult = plugin.decode({ text: text }); + message.text = 'N 42.150,W121.187,39000,161859, 109,.C-GWSO,1742'; + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe('partial'); expect(decodeResult.decoder.name).toBe('label-12-n-space'); expect(decodeResult.formatted.description).toBe('Position Report'); - expect(decodeResult.message.text).toBe(text); + expect(decodeResult.message).toBe(message); expect(decodeResult.raw.position.latitude).toBe(42.150); expect(decodeResult.raw.position.longitude).toBe(-121.187); expect(decodeResult.raw.altitude).toBe(39000); @@ -43,14 +44,14 @@ describe('Label_12_N_Space', () => { }); test('decodes variant 2', () => { - const text = 'N 28.371,W 80.458,38000,170546, 100,.C-GVWJ,1736'; - const decodeResult = plugin.decode({ text: text }); + message.text = 'N 28.371,W 80.458,38000,170546, 100,.C-GVWJ,1736'; + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe('partial'); expect(decodeResult.decoder.name).toBe('label-12-n-space'); expect(decodeResult.formatted.description).toBe('Position Report'); - expect(decodeResult.message.text).toBe(text); + expect(decodeResult.message).toBe(message); expect(decodeResult.raw.position.latitude).toBe(28.371); expect(decodeResult.raw.position.longitude).toBe(-80.458); expect(decodeResult.raw.altitude).toBe(38000); @@ -66,13 +67,13 @@ describe('Label_12_N_Space', () => { }); test('does not decode ', () => { - const text = 'N Bogus message'; - const decodeResult = plugin.decode({ text: text }); + message.text = 'N Bogus message'; + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(false); expect(decodeResult.decoder.decodeLevel).toBe('none'); expect(decodeResult.decoder.name).toBe('label-12-n-space'); expect(decodeResult.formatted.description).toBe('Position Report'); - expect(decodeResult.message.text).toBe(text); + expect(decodeResult.message).toBe(message); }); }); \ No newline at end of file diff --git a/lib/plugins/Label_12_POS.test.ts b/lib/plugins/Label_12_POS.test.ts index 0843234..5d75a87 100644 --- a/lib/plugins/Label_12_POS.test.ts +++ b/lib/plugins/Label_12_POS.test.ts @@ -4,6 +4,7 @@ import { Label_12_POS } from './Label_12_POS'; describe('Label 12 POS', () => { let plugin: Label_12_POS; + const message = {label: '12', text: ''}; beforeEach(() => { const decoder = new MessageDecoder(); @@ -23,9 +24,9 @@ describe('Label 12 POS', () => { test('decodes msg 1', () => { - const text = 'POSN 390104W 754601,-------,1244,1446,,- 4,23249 12,FOB 73,ETA 1303,KATL,KPHL,'; + message.text = 'POSN 390104W 754601,-------,1244,1446,,- 4,23249 12,FOB 73,ETA 1303,KATL,KPHL,'; - const decodeResult = plugin.decode({ text: text }); + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe('partial'); @@ -50,8 +51,8 @@ describe('Label 12 POS', () => { test('decodes ', () => { - const text = 'POS Bogus message'; - const decodeResult = plugin.decode({ text: text }); + message.text = 'POS Bogus message'; + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(false); expect(decodeResult.decoder.decodeLevel).toBe('none'); diff --git a/lib/plugins/Label_13Through18_Slash.test.ts b/lib/plugins/Label_13Through18_Slash.test.ts index 59a7821..be05d34 100644 --- a/lib/plugins/Label_13Through18_Slash.test.ts +++ b/lib/plugins/Label_13Through18_Slash.test.ts @@ -3,6 +3,7 @@ import { Label_13Through18_Slash } from './Label_13Through18_Slash'; describe('Label_13Through18_Slash', () => { let plugin: Label_13Through18_Slash; + const message = {label: '13', text: ''}; beforeEach(() => { const decoder = new MessageDecoder(); @@ -22,8 +23,8 @@ describe('Label_13Through18_Slash', () => { describe('Label 13', () => { test('decodes 1-line', () => { // https://app.airframes.io/messages/3423349335 - const text = '/13 OUT EVENT / KSFO KEWR 12 231445/TIME 2314' - const decodeResult = plugin.decode({ text: text }); + message.text = '/13 OUT EVENT / KSFO KEWR 12 231445/TIME 2314' + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); @@ -40,9 +41,9 @@ describe('Label_13Through18_Slash', () => { }); test('decodes 2-line', () => { // https://app.airframes.io/messages/3424584522 - const text = '/13 OUT EVENT / KSFO KMSP 12 024518/TIME 0245' + '\r\n' + + message.text = '/13 OUT EVENT / KSFO KMSP 12 024518/TIME 0245' + '\r\n' + '/LOC N373703,W1222251' - const decodeResult = plugin.decode({ text: text }); + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe('full'); @@ -62,8 +63,8 @@ describe('Label_13Through18_Slash', () => { describe('Label 14', () => { test('decodes 1-line', () => { - const text = '/14 OFF EVENT / KIAD KDEN 08 124438/TIME 1244' - const decodeResult = plugin.decode({ text: text }); + message.text = '/14 OFF EVENT / KIAD KDEN 08 124438/TIME 1244' + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe('full'); @@ -79,9 +80,9 @@ describe('Label_13Through18_Slash', () => { }); test('decodes 2-line', () => { - const text = '/14 OFF EVENT / KIAD EDDF 09 025055/TIME 0250' + '\r\n' + + message.text = '/14 OFF EVENT / KIAD EDDF 09 025055/TIME 0250' + '\r\n' + '/LOC +38.9603,-077.4595' - const decodeResult = plugin.decode({ text: text }); + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe('full'); @@ -98,10 +99,10 @@ describe('Label_13Through18_Slash', () => { }); test('decodes 3-line', () => { - const text = '/14 OFF EVENT / KIAD KATL 09 123630/TIME 1236' + '\r\n' + + message.text = '/14 OFF EVENT / KIAD KATL 09 123630/TIME 1236' + '\r\n' + '/AU 08752167/AON 08716165/AIN 08717165/AOT 08744166' + '\r\n' + '/LOC N385618,W0772823' - const decodeResult = plugin.decode({ text: text }); + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe('partial'); @@ -124,10 +125,10 @@ describe('Label_13Through18_Slash', () => { // Despite all this, it shows that positions may be in decimal minutes instead of DMS when using NSEW instead of +/- // so i'm putting it here for reference test.skip('decodes position invalid', () => { - const text = '/14 OFF EVENT / KIAD KSAT 10 122555/TIME 1225' + '\r\n' + + message.text = '/14 OFF EVENT / KIAD KSAT 10 122555/TIME 1225' + '\r\n' + '/AU 55808910/AON 55729908/AIN 55731908/AOT 55804909' + '\r\n' + '/LOC N169380,E1334348' - const decodeResult = plugin.decode({ text: text }); + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe('partial'); @@ -148,8 +149,8 @@ describe('Label_13Through18_Slash', () => { describe('Label 15', () => { test('decodes 1-line', () => { // https://app.airframes.io/messages/3424704396 - const text = '/15 ON EVENT / PHOG KSFO 12 064852/TIME 0648' - const decodeResult = plugin.decode({ text: text }); + message.text = '/15 ON EVENT / PHOG KSFO 12 064852/TIME 0648' + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); @@ -166,9 +167,9 @@ describe('Label_13Through18_Slash', () => { }); test('decodes 2-line', () => { // https://app.airframes.io/messages/3425113893 - const text = '/15 ON EVENT / KCMH KSFO 12 044401/TIME 0444' + '\r\n' + + message.text = '/15 ON EVENT / KCMH KSFO 12 044401/TIME 0444' + '\r\n' + '/LOC N373705,W1222208' - const decodeResult = plugin.decode({ text: text }); + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe('full'); @@ -190,10 +191,10 @@ describe('Label_13Through18_Slash', () => { describe('Label 16', () => { test('decodes 3-line', () => { // https://app.airframes.io/messages/3424584522 - const text = '/16 1ST PDOOR OPEN / KLAX KSEA 12 053340/TIME 0533' + '\r\n' + + message.text = '/16 1ST PDOOR OPEN / KLAX KSEA 12 053340/TIME 0533' + '\r\n' + '/BR SET 0529' + '\r\n' + '/LOC S101043,W1530624' - const decodeResult = plugin.decode({ text: text }); + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe('partial'); @@ -216,10 +217,10 @@ describe('Label_13Through18_Slash', () => { describe('Label 17', () => { test('decodes 3-line', () => { // https://app.airframes.io/messages/3423349335 - const text = '/17 POST RPT / KIAD KSFO 12 034537/TIME 0343' + '\r\n' + + message.text = '/17 POST RPT / KIAD KSFO 12 034537/TIME 0343' + '\r\n' + '/FOB 0215/LP U246680/OP /CAT NR' + '\r\n' + '/AL NN/SUC /SAV /BR ACT NO REPORT/RWY 28R /PDOOR 0343 -----/CDOOR 0343/BR SET 0341' - const decodeResult = plugin.decode({ text: text }); + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); @@ -235,12 +236,12 @@ describe('Label_13Through18_Slash', () => { }); test('decodes 5-line', () => { // https://app.airframes.io/messages/3424453568 - const text = '/17 POST RPT / KLAX KSEA 12 053340/TIME 0530' + '\r\n' + + message.text = '/17 POST RPT / KLAX KSEA 12 053340/TIME 0530' + '\r\n' + '/FOB 0074/LP U423108/MP U332185/CAT NR' + '\r\n' + '/AL N-/SUC -/SAV -/BR ACT NO REPORT/RWY ---' + '\r\n' + '/PDOOR 0533 MCD1 /CDOOR 0530/BR SET 0529' + '\r\n' + '/LOC S101043,W1530624' - const decodeResult = plugin.decode({ text: text }); + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe('partial'); @@ -263,9 +264,9 @@ describe('Label_13Through18_Slash', () => { describe('Label 18', () => { test('decodes location', () => { // https://app.airframes.io/messages/3424453669 - const text = '/18 POST TIMES SECS/ KLAX KSEA 12 053340/IN TIME 0530/PDOOR 053340/CDOOR 053024/BR SET 052942' + '\r\n' + + message.text = '/18 POST TIMES SECS/ KLAX KSEA 12 053340/IN TIME 0530/PDOOR 053340/CDOOR 053024/BR SET 052942' + '\r\n' + '/LOC S101043,W1530624' - const decodeResult = plugin.decode({ text: text }); + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe('partial'); @@ -282,9 +283,9 @@ describe('Label_13Through18_Slash', () => { }); test('decodes no location', () => { // https://app.airframes.io/messages/3424453669 - const text = '/18 POST TIMES SECS/ KSFO CYVR 12 040416/IN TIME0353/PDOOR 035414/CDOOR 035315/BR SET 035223' + '\r\n' + + message.text = '/18 POST TIMES SECS/ KSFO CYVR 12 040416/IN TIME0353/PDOOR 035414/CDOOR 035315/BR SET 035223' + '\r\n' + '/LOC , ' - const decodeResult = plugin.decode({ text: text }); + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe('partial'); @@ -301,12 +302,12 @@ describe('Label_13Through18_Slash', () => { test('does not decode ', () => { - const text = '/14 Bogus Message'; - const decodeResult = plugin.decode({ text: text }); + message.text = '/14 Bogus Message'; + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(false); expect(decodeResult.decoder.decodeLevel).toBe('none'); expect(decodeResult.decoder.name).toBe('label-13-18-slash'); - expect(decodeResult.message.text).toBe(text); + expect(decodeResult.message).toBe(message); }); }); diff --git a/lib/plugins/Label_15.test.ts b/lib/plugins/Label_15.test.ts index d99c6c0..b7abfce 100644 --- a/lib/plugins/Label_15.test.ts +++ b/lib/plugins/Label_15.test.ts @@ -3,6 +3,7 @@ import { Label_15 } from './Label_15'; describe('Label_15', () => { let plugin: Label_15; + const message = {label: '15', text: ''}; beforeEach(() => { const decoder = new MessageDecoder(); @@ -20,8 +21,8 @@ describe('Label_15', () => { }); test('decodes short variant missing unkown', () => { - const text = '(2N38448W 77216--- 28 20 7(Z' - const decodeResult = plugin.decode({ text: text }); + message.text = '(2N38448W 77216--- 28 20 7(Z' + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe('partial'); @@ -36,8 +37,8 @@ describe('Label_15', () => { }); test('decodes short variant all fields', () => { - const text = '(2N40492W 77179248 99380-53(Z' - const decodeResult = plugin.decode({ text: text }); + message.text = '(2N40492W 77179248 99380-53(Z' + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe('partial'); @@ -52,8 +53,8 @@ describe('Label_15', () => { }); test('decodes short variant missing alt', () => { - const text = '(2N39269W 77374--- 42---- 5(Z' - const decodeResult = plugin.decode({ text: text }); + message.text = '(2N39269W 77374--- 42---- 5(Z' + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe('partial'); @@ -66,8 +67,8 @@ describe('Label_15', () => { }); test('decodes off variant no unkown', () => { - const text = '(2N39018W 77284OFF11112418101313--------(Z' - const decodeResult = plugin.decode({ text: text }); + message.text = '(2N39018W 77284OFF11112418101313--------(Z' + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe('partial'); @@ -81,8 +82,8 @@ describe('Label_15', () => { test('decodes off variant no date and unknown', () => { // https://app.airframes.io/messages/3593342701 - const text = '(2N42589W 83520OFF------13280606--------(Z' - const decodeResult = plugin.decode({ text: text }); + message.text = '(2N42589W 83520OFF------13280606--------(Z' + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe('partial'); @@ -96,8 +97,8 @@ describe('Label_15', () => { test('decodes off variant all fields', () => { // https://app.airframes.io/messages/3603048708 - const text = '(2N39042W 77308OFF1311240327B1818 015(Z' - const decodeResult = plugin.decode({ text: text }); + message.text = '(2N39042W 77308OFF1311240327B1818 015(Z' + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe('partial'); @@ -111,13 +112,13 @@ describe('Label_15', () => { test('does not decode Label 15 ', () => { - const text = '(2 Bogus message'; - const decodeResult = plugin.decode({ text: text }); + message.text = '(2 Bogus message'; + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(false); expect(decodeResult.decoder.decodeLevel).toBe('none'); expect(decodeResult.decoder.name).toBe('label-15'); expect(decodeResult.formatted.description).toBe('Position Report'); - expect(decodeResult.message.text).toBe(text); + expect(decodeResult.message).toBe(message); }); }); \ No newline at end of file diff --git a/lib/plugins/Label_15_FST.test.ts b/lib/plugins/Label_15_FST.test.ts index df74b99..cb4a22e 100644 --- a/lib/plugins/Label_15_FST.test.ts +++ b/lib/plugins/Label_15_FST.test.ts @@ -3,6 +3,7 @@ import { Label_15_FST } from './Label_15_FST'; describe('Label_15_FST', () => { let plugin: Label_15_FST; + const message = {label: '15', text: ''}; beforeEach(() => { const decoder = new MessageDecoder(); @@ -21,8 +22,8 @@ describe('Label_15_FST', () => { test('decodes Label 15 Preamble FST variant 1', () => { - const text = 'FST01EGKKKMCON373488W0756927380 156 495 M53C 4427422721045313002518521710' - const decodeResult = plugin.decode({ text: text }); + message.text = 'FST01EGKKKMCON373488W0756927380 156 495 M53C 4427422721045313002518521710' + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe('partial'); @@ -40,13 +41,13 @@ describe('Label_15_FST', () => { test('decodes Label 15 Preamble FST ', () => { - const text = 'INI Bogus message'; - const decodeResult = plugin.decode({ text: text }); + message.text = 'INI Bogus message'; + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(false); expect(decodeResult.decoder.decodeLevel).toBe('none'); expect(decodeResult.decoder.name).toBe('label-15-fst'); expect(decodeResult.formatted.description).toBe('Position Report'); - expect(decodeResult.message.text).toBe(text); + expect(decodeResult.message).toBe(message); }); }); \ No newline at end of file diff --git a/lib/plugins/Label_16_Honeywell.test.ts b/lib/plugins/Label_16_Honeywell.test.ts index 8248950..736c70d 100644 --- a/lib/plugins/Label_16_Honeywell.test.ts +++ b/lib/plugins/Label_16_Honeywell.test.ts @@ -3,6 +3,7 @@ import { Label_16_Honeywell } from "./Label_16_Honeywell"; describe("Label_16_Honeywell", () => { let plugin: Label_16_Honeywell; + const message = { label: "16", text: "" }; beforeEach(() => { const decoder = new MessageDecoder(); @@ -20,8 +21,8 @@ describe("Label_16_Honeywell", () => { }); test("decodes variant 1", () => { - const text = "(2AAABN39211W 77144KTEBMMTO-/A(Z"; - const decodeResult = plugin.decode({ text: text }); + message.text = "(2AAABN39211W 77144KTEBMMTO-/A(Z"; + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe("partial"); @@ -34,8 +35,8 @@ describe("Label_16_Honeywell", () => { }); test("decodes variant 2", () => { - const text = "(2AAAAN37265W 78334-SSI /O(Z"; - const decodeResult = plugin.decode({ text: text }); + message.text = "(2AAAAN37265W 78334-SSI /O(Z"; + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe("partial"); @@ -47,8 +48,8 @@ describe("Label_16_Honeywell", () => { }); test("decodes variant 3", () => { - const text = "(2AAABN37197W 78404-SLOJOGRONK/O(Z"; - const decodeResult = plugin.decode({ text: text }); + message.text = "(2AAABN37197W 78404-SLOJOGRONK/O(Z"; + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe("partial"); @@ -61,11 +62,11 @@ describe("Label_16_Honeywell", () => { }); test("does not decode ", () => { - const text = "(2 Bogus message"; - const decodeResult = plugin.decode({ text: text }); + message.text = "(2 Bogus message"; + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(false); expect(decodeResult.decoder.decodeLevel).toBe("none"); - expect(decodeResult.message.text).toBe(text); + expect(decodeResult.message).toBe(message); }); }); diff --git a/lib/plugins/Label_16_N_Space.test.ts b/lib/plugins/Label_16_N_Space.test.ts index 8a5a6f3..171169b 100644 --- a/lib/plugins/Label_16_N_Space.test.ts +++ b/lib/plugins/Label_16_N_Space.test.ts @@ -4,6 +4,7 @@ import { Label_16_N_Space } from './Label_16_N_Space'; describe('Label_16_N_Space', () => { let plugin: Label_16_N_Space; + const message = {label: '16', text: ''}; beforeEach(() => { const decoder = new MessageDecoder(); @@ -20,14 +21,14 @@ describe('Label_16_N_Space', () => { }); }); test('decodes variant 1', () => { - const text = 'N 44.203,W 86.546,31965,6, 290'; - const decodeResult = plugin.decode({ text: text }); + message.text = 'N 44.203,W 86.546,31965,6, 290'; + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe('partial'); expect(decodeResult.decoder.name).toBe('label-16-n-space'); expect(decodeResult.formatted.description).toBe('Position Report'); - expect(decodeResult.message.text).toBe(text); + expect(decodeResult.message).toBe(message); expect(decodeResult.raw.position.latitude).toBe(44.203); expect(decodeResult.raw.position.longitude).toBe(-86.546); expect(decodeResult.raw.altitude).toBe(31965); @@ -43,14 +44,14 @@ describe('Label_16_N_Space', () => { }); test('decodes variant 2', () => { - const text = 'N 28.177/W 96.055'; - const decodeResult = plugin.decode({ text: text }); + message.text = 'N 28.177/W 96.055'; + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe('full'); expect(decodeResult.decoder.name).toBe('label-16-n-space'); expect(decodeResult.formatted.description).toBe('Position Report'); - expect(decodeResult.message.text).toBe(text); + expect(decodeResult.message).toBe(message); expect(decodeResult.raw.position.latitude).toBe(28.177); expect(decodeResult.raw.position.longitude).toBe(-96.055); expect(decodeResult.formatted.items.length).toBe(1); @@ -61,14 +62,14 @@ describe('Label_16_N_Space', () => { }); test('decodes Label 16 variant 3', () => { - const text = 'N 44.988,W121.644,35940,6, 170'; - const decodeResult = plugin.decode({ text: text }); + message.text = 'N 44.988,W121.644,35940,6, 170'; + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe('partial'); expect(decodeResult.decoder.name).toBe('label-16-n-space'); expect(decodeResult.formatted.description).toBe('Position Report'); - expect(decodeResult.message.text).toBe(text); + expect(decodeResult.message).toBe(message); expect(decodeResult.raw.position.latitude).toBe(44.988); expect(decodeResult.raw.position.longitude).toBe(-121.644); expect(decodeResult.raw.altitude).toBe(35940); @@ -84,13 +85,13 @@ describe('Label_16_N_Space', () => { }); test('decodes Label 16 variant ', () => { - const text = 'N Bogus message'; - const decodeResult = plugin.decode({ text: text }); + message.text = 'N Bogus message'; + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(false); expect(decodeResult.decoder.decodeLevel).toBe('none'); expect(decodeResult.decoder.name).toBe('label-16-n-space'); expect(decodeResult.formatted.description).toBe('Position Report'); - expect(decodeResult.message.text).toBe(text); + expect(decodeResult.message).toBe(message); }); }); \ No newline at end of file diff --git a/lib/plugins/Label_16_POSA1.test.ts b/lib/plugins/Label_16_POSA1.test.ts index ead3255..8ad2fef 100644 --- a/lib/plugins/Label_16_POSA1.test.ts +++ b/lib/plugins/Label_16_POSA1.test.ts @@ -4,6 +4,7 @@ import { Label_16_POSA1 } from './Label_16_POSA1'; describe('Label 16 POSA1', () => { let plugin: Label_16_POSA1; + const message = {label: '16', text: ''}; beforeEach(() => { const decoder = new MessageDecoder(); @@ -20,14 +21,14 @@ describe('Label 16 POSA1', () => { }); }); test('decodes variant 1', () => { - const text = 'POSA1N37358W 77279,GEARS ,221626,370,BBOBO ,222053,,-61,139,1174,829'; - const decodeResult = plugin.decode({ text: text }); + message.text = 'POSA1N37358W 77279,GEARS ,221626,370,BBOBO ,222053,,-61,139,1174,829'; + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe('partial'); expect(decodeResult.decoder.name).toBe('label-16-posa1'); expect(decodeResult.formatted.description).toBe('Position Report'); - expect(decodeResult.message.text).toBe(text); + expect(decodeResult.message).toBe(message); expect(decodeResult.formatted.items.length).toBe(3); expect(decodeResult.formatted.items[0].label).toBe('Aircraft Position'); expect(decodeResult.formatted.items[0].value).toBe('37.358 N, 77.279 W'); @@ -39,14 +40,14 @@ describe('Label 16 POSA1', () => { }); test('decodes redacted', () => { - const text = 'POSA1N38843W 78790,RONZZ ,005159,390,RAMAY ,010055,,*****,*****, 744, 0'; - const decodeResult = plugin.decode({ text: text }); + message.text = 'POSA1N38843W 78790,RONZZ ,005159,390,RAMAY ,010055,,*****,*****, 744, 0'; + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe('partial'); expect(decodeResult.decoder.name).toBe('label-16-posa1'); expect(decodeResult.formatted.description).toBe('Position Report'); - expect(decodeResult.message.text).toBe(text); + expect(decodeResult.message).toBe(message); expect(decodeResult.formatted.items.length).toBe(3); expect(decodeResult.formatted.items[0].label).toBe('Aircraft Position'); expect(decodeResult.formatted.items[0].value).toBe('38.843 N, 78.790 W'); @@ -58,13 +59,13 @@ describe('Label 16 POSA1', () => { }); test('decodes Label 16 variant ', () => { - const text = 'N Bogus message'; - const decodeResult = plugin.decode({ text: text }); + message.text = 'N Bogus message'; + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(false); expect(decodeResult.decoder.decodeLevel).toBe('none'); expect(decodeResult.decoder.name).toBe('label-16-posa1'); expect(decodeResult.formatted.description).toBe('Position Report'); - expect(decodeResult.message.text).toBe(text); + expect(decodeResult.message).toBe(message); }); }); \ No newline at end of file diff --git a/lib/plugins/Label_16_TOD.test.ts b/lib/plugins/Label_16_TOD.test.ts index 3b7c539..3886243 100644 --- a/lib/plugins/Label_16_TOD.test.ts +++ b/lib/plugins/Label_16_TOD.test.ts @@ -4,6 +4,7 @@ import { Label_16_TOD } from './Label_16_TOD'; describe('Label 16 Time of Day', () => { let plugin: Label_16_TOD; + const message = {label: '16', text: ''}; beforeEach(() => { const decoder = new MessageDecoder(); @@ -20,14 +21,14 @@ describe('Label 16 Time of Day', () => { }); test('decodes variant 1', () => { - const text = '005236,36787,0135, 97,N 38.364 W 75.226'; - const decodeResult = plugin.decode({ text: text }); + message.text = '005236,36787,0135, 97,N 38.364 W 75.226'; + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe('partial'); expect(decodeResult.decoder.name).toBe('label-16-tod'); expect(decodeResult.formatted.description).toBe('Position Report'); - expect(decodeResult.message.text).toBe(text); + expect(decodeResult.message).toBe(message); expect(decodeResult.formatted.items.length).toBe(4); expect(decodeResult.formatted.items[0].label).toBe('Message Timestamp'); expect(decodeResult.formatted.items[0].value).toBe('00:52:36'); @@ -42,14 +43,14 @@ describe('Label 16 Time of Day', () => { test('decodes variant 2', () => { // https://app.airframes.io/messages/4260590297 - const text = '110112,36000,1206, 51,N 45.140 E 16.341/SXS7SL'; - const decodeResult = plugin.decode({ text: text }); + message.text = '110112,36000,1206, 51,N 45.140 E 16.341/SXS7SL'; + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe('partial'); expect(decodeResult.decoder.name).toBe('label-16-tod'); expect(decodeResult.formatted.description).toBe('Position Report'); - expect(decodeResult.message.text).toBe(text); + expect(decodeResult.message).toBe(message); expect(decodeResult.formatted.items.length).toBe(5); expect(decodeResult.formatted.items[0].label).toBe('Message Timestamp'); expect(decodeResult.formatted.items[0].value).toBe('11:01:12'); @@ -67,14 +68,14 @@ describe('Label 16 Time of Day', () => { test('decodes no position', () => { // https://app.airframes.io/messages/4260590899 - const text = '110122,,1206, 92,N . MMMM.MMM'; - const decodeResult = plugin.decode({ text: text }); + message.text = '110122,,1206, 92,N . MMMM.MMM'; + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe('partial'); expect(decodeResult.decoder.name).toBe('label-16-tod'); expect(decodeResult.formatted.description).toBe('Position Report'); - expect(decodeResult.message.text).toBe(text); + expect(decodeResult.message).toBe(message); expect(decodeResult.formatted.items.length).toBe(2); expect(decodeResult.formatted.items[0].label).toBe('Message Timestamp'); expect(decodeResult.formatted.items[0].value).toBe('11:01:22'); @@ -84,13 +85,13 @@ describe('Label 16 Time of Day', () => { }); test('decodes Label 16 variant ', () => { - const text = 'N Bogus message'; - const decodeResult = plugin.decode({ text: text }); + message.text = 'N Bogus message'; + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(false); expect(decodeResult.decoder.decodeLevel).toBe('none'); expect(decodeResult.decoder.name).toBe('label-16-tod'); expect(decodeResult.formatted.description).toBe('Position Report'); - expect(decodeResult.message.text).toBe(text); + expect(decodeResult.message).toBe(message); }); }); \ No newline at end of file diff --git a/lib/plugins/Label_1J_2J_FTX.test.ts b/lib/plugins/Label_1J_2J_FTX.test.ts index 8b3183b..d2dafec 100644 --- a/lib/plugins/Label_1J_2J_FTX.test.ts +++ b/lib/plugins/Label_1J_2J_FTX.test.ts @@ -4,6 +4,7 @@ import { Label_1J_2J_FTX } from './Label_1J_2J_FTX'; describe('Label 1J/2J FTX', () => { let plugin: Label_1J_2J_FTX; + let message = { label: '1J', text: '' }; beforeEach(() => { const decoder = new MessageDecoder(); @@ -13,8 +14,8 @@ describe('Label 1J/2J FTX', () => { test('decodes Label 1J', () => { // https://app.airframes.io/messages/4178692503 - const text = 'FTX/ID50007B,RCH4086,ABB02R70E037/MR6,/FX4 QTR PHILLY UP 37-6307A' - const decodeResult = plugin.decode({ text: text }); + message.text = 'FTX/ID50007B,RCH4086,ABB02R70E037/MR6,/FX4 QTR PHILLY UP 37-6307A' + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe('partial'); @@ -34,8 +35,8 @@ describe('Label 1J/2J FTX', () => { // Disabled due to checksum mismatch. Possibly copy-paste issue due to non-ascii characters in message? test('decodes Label 2J', () => { // https://app.airframes.io/messages/4178362466 - const text = 'M74AMC4086FTX/ID50007B,RCH4086,ABB02R70E037/DC10022025,011728/MR049,/FXGOOD EVENING PLEASE PASS US THE SUPER BOWL SCORE WHEN ABLE. THANK YOU/FB1791/VR0328D70' - const decodeResult = plugin.decode({ text: text }); + message.text = 'M74AMC4086FTX/ID50007B,RCH4086,ABB02R70E037/DC10022025,011728/MR049,/FXGOOD EVENING PLEASE PASS US THE SUPER BOWL SCORE WHEN ABLE. THANK YOU/FB1791/VR0328D70' + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe('partial'); @@ -53,12 +54,12 @@ describe('Label 1J/2J FTX', () => { test('decodes ', () => { - const text = 'FTX Bogus message'; - const decodeResult = plugin.decode({ text: text }); + message.text = 'FTX Bogus message'; + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(false); expect(decodeResult.decoder.decodeLevel).toBe('none'); expect(decodeResult.formatted.description).toBe('Unknown'); - expect(decodeResult.message.text).toBe(text); + expect(decodeResult.message).toBe(message); }); }); diff --git a/lib/plugins/Label_1L_070.test.ts b/lib/plugins/Label_1L_070.test.ts index 8d04db8..a4d1f46 100644 --- a/lib/plugins/Label_1L_070.test.ts +++ b/lib/plugins/Label_1L_070.test.ts @@ -3,6 +3,7 @@ import { Label_1L_070 } from './Label_1L_070'; describe('Label_1L 070', () => { let plugin: Label_1L_070; + const message = { label: '1L', text: '' }; beforeEach(() => { const decoder = new MessageDecoder(); @@ -21,8 +22,8 @@ describe('Label_1L 070', () => { test('decodes variant 1', () => { // https://app.airframes.io/messages/3492019143 - const text = '000000070LOWW,KEWR,0932,1744,N 49.223,E 12.038,0659' - const decodeResult = plugin.decode({ text: text }); + message.text = '000000070LOWW,KEWR,0932,1744,N 49.223,E 12.038,0659' + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe('partial'); @@ -48,13 +49,12 @@ describe('Label_1L 070', () => { test('does not decode ', () => { - const text = 'POS Bogus Message'; - const decodeResult = plugin.decode({ text: text }); + message.text = 'POS Bogus Message'; + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(false); expect(decodeResult.decoder.decodeLevel).toBe('none'); expect(decodeResult.decoder.name).toBe('label-1l-070'); expect(decodeResult.formatted.description).toBe('Position Report'); - expect(decodeResult.message.text).toBe(text); }); }); \ No newline at end of file diff --git a/lib/plugins/Label_1L_3-line.test.ts b/lib/plugins/Label_1L_3-line.test.ts index b1d0a2f..84ae0d7 100644 --- a/lib/plugins/Label_1L_3-line.test.ts +++ b/lib/plugins/Label_1L_3-line.test.ts @@ -3,6 +3,7 @@ import { Label_1L_3Line } from './Label_1L_3-line'; describe('Label_1L 3-line', () => { let plugin: Label_1L_3Line; + const message = { label: '1L', text: '' }; beforeEach(() => { const decoder = new MessageDecoder(); @@ -19,10 +20,10 @@ describe('Label_1L 3-line', () => { }); test('decodes variant 1', () => { - const text = '00018213200/GS 411500/DEP MDPC/DES CYYZ/ETA 0120/GW 479/ALT 39002' + '\r\n' + + message.text = '00018213200/GS 411500/DEP MDPC/DES CYYZ/ETA 0120/GW 479/ALT 39002' + '\r\n' + 'CAS 229/SAT - 59.0/FN SWG9040/TFQ 48/DAY 22OCT24/UTC 002714' + '\r\n' + 'LON W 78.289/LAT N 39.556/WD 20/WS 13' - const decodeResult = plugin.decode({ text: text }); + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe('partial'); @@ -51,10 +52,10 @@ describe('Label_1L 3-line', () => { }); test('decodes no position', () => { - const text = '00086213200/GS 497000/DEP CYUL/DES MDPC/ETA 1705/GW 700/ALT 37002' + '\r\n' + + message.text = '00086213200/GS 497000/DEP CYUL/DES MDPC/ETA 1705/GW 700/ALT 37002' + '\r\n' + 'CAS/SAT 15.0/FN SWG4426/TFQ 111/DAY 26SEP24/UTC 135139' + '\r\n' + 'LON MMMM.MMM/LAT MMMM.MMM/WD ---/WS ---' - const decodeResult = plugin.decode({ text: text }); + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe('partial'); @@ -81,13 +82,12 @@ describe('Label_1L 3-line', () => { test('does not decode ', () => { - const text = 'POS Bogus Message'; - const decodeResult = plugin.decode({ text: text }); + message.text = 'POS Bogus Message'; + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(false); expect(decodeResult.decoder.decodeLevel).toBe('none'); expect(decodeResult.decoder.name).toBe('label-1l-3-line'); expect(decodeResult.formatted.description).toBe('Position Report'); - expect(decodeResult.message.text).toBe(text); }); }); \ No newline at end of file diff --git a/lib/plugins/Label_1L_660.test.ts b/lib/plugins/Label_1L_660.test.ts index 3f3031b..86d9fa4 100644 --- a/lib/plugins/Label_1L_660.test.ts +++ b/lib/plugins/Label_1L_660.test.ts @@ -3,6 +3,7 @@ import { Label_1L_660 } from './Label_1L_660'; describe('Label_1L 660', () => { let plugin: Label_1L_660; + const message = { label: '1L', text: '' }; beforeEach(() => { const decoder = new MessageDecoder(); @@ -21,8 +22,8 @@ describe('Label_1L 660', () => { test('decodes variant 1', () => { // https://app.airframes.io/messages/3492135103 - const text = '000000660N50442E005566,100444359SOG-06 ,,--- 21-,83617441' - const decodeResult = plugin.decode({ text: text }); + message.text = '000000660N50442E005566,100444359SOG-06 ,,--- 21-,83617441' + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe('partial'); @@ -44,13 +45,13 @@ describe('Label_1L 660', () => { test('does not decode ', () => { - const text = 'POS Bogus Message'; - const decodeResult = plugin.decode({ text: text }); + message.text = 'POS Bogus Message'; + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(false); expect(decodeResult.decoder.decodeLevel).toBe('none'); expect(decodeResult.decoder.name).toBe('label-1l-660'); expect(decodeResult.formatted.description).toBe('Position Report'); - expect(decodeResult.message.text).toBe(text); + expect(decodeResult.message).toBe(message); }); }); \ No newline at end of file diff --git a/lib/plugins/Label_1L_Slash.test.ts b/lib/plugins/Label_1L_Slash.test.ts index 0dea85b..56d39fa 100644 --- a/lib/plugins/Label_1L_Slash.test.ts +++ b/lib/plugins/Label_1L_Slash.test.ts @@ -3,6 +3,7 @@ import { Label_1L_Slash } from './Label_1L_Slash'; describe('Label_1L Slash', () => { let plugin: Label_1L_Slash; + const message = { label: '1L', text: '' }; beforeEach(() => { const decoder = new MessageDecoder(); @@ -20,11 +21,12 @@ describe('Label_1L Slash', () => { }); test('decodes variant 1', () => { - const text = '+ 39.126/- 77.358/UTC 085208/FOB 8.2/ALT 3997/CAS 239/ETA 0903' - const decodeResult = plugin.decode({ text: text }); + message.text = '+ 39.126/- 77.358/UTC 085208/FOB 8.2/ALT 3997/CAS 239/ETA 0903' + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe('partial'); + expect(decodeResult.message).toBe(message); expect(decodeResult.raw.position.latitude).toBe(39.126); expect(decodeResult.raw.position.longitude).toBe(-77.358); expect(decodeResult.raw.time_of_day).toBe(31928); @@ -47,13 +49,13 @@ describe('Label_1L Slash', () => { test('does not decode ', () => { - const text = 'POS Bogus Message'; - const decodeResult = plugin.decode({ text: text }); + message.text = 'POS Bogus Message'; + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(false); expect(decodeResult.decoder.decodeLevel).toBe('none'); expect(decodeResult.decoder.name).toBe('label-1l-1-line'); expect(decodeResult.formatted.description).toBe('Position Report'); - expect(decodeResult.message.text).toBe(text); + expect(decodeResult.message).toBe(message); }); }); \ No newline at end of file diff --git a/lib/plugins/Label_1M_Slash.test.ts b/lib/plugins/Label_1M_Slash.test.ts index 67b830d..17fe779 100644 --- a/lib/plugins/Label_1M_Slash.test.ts +++ b/lib/plugins/Label_1M_Slash.test.ts @@ -1,26 +1,34 @@ import { MessageDecoder } from '../MessageDecoder'; import { Label_1M_Slash } from './Label_1M_Slash'; -test('decodes Label 8E sample 1', () => { - const decoder = new MessageDecoder(); - const decoderPlugin = new Label_1M_Slash(decoder); +describe('Label 1M Slash', () => { + let plugin: Label_1M_Slash; + const message = { label: '1M', text: '' }; - expect(decoderPlugin.decode).toBeDefined(); - expect(decoderPlugin.name).toBe('label-1m-slash'); - expect(decoderPlugin.qualifiers).toBeDefined(); - expect(decoderPlugin.qualifiers()).toEqual({ + beforeEach(() => { + const decoder = new MessageDecoder(); + plugin = new Label_1M_Slash(decoder); + }); + +test('matches qualifiers', () => { + expect(plugin.decode).toBeDefined(); + expect(plugin.name).toBe('label-1m-slash'); + expect(plugin.qualifiers).toBeDefined(); + expect(plugin.qualifiers()).toEqual({ labels: ['1M'], preambles: ['/'], }); +}); - const text = '/BA0843/ETA01/230822/LDSP/EGLL/EGSS/2JK0\n1940/EGLL27L/10'; - const decodeResult = decoderPlugin.decode({ text: text }); +test('decodes variant 1', () => { + message.text = '/BA0843/ETA01/230822/LDSP/EGLL/EGSS/2JK0\n1940/EGLL27L/10'; + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe('partial'); expect(decodeResult.decoder.name).toBe('label-1m-slash'); expect(decodeResult.formatted.description).toBe('ETA Report'); - expect(decodeResult.message.text).toBe(text); + expect(decodeResult.message).toBe(message); expect(decodeResult.raw.alternate_icao).toBe('EGSS'); expect(decodeResult.raw.arrival_icao).toBe('EGLL'); expect(decodeResult.raw.arrival_runway).toBe('27L'); @@ -48,3 +56,4 @@ test('decodes Label 8E sample 1', () => { expect(decodeResult.formatted.items[4].label).toBe('Estimated Time of Arrival'); expect(decodeResult.formatted.items[4].value).toBe('2023-08-22T19:40:00Z'); }); +}); \ No newline at end of file diff --git a/lib/plugins/Label_20_POS.test.ts b/lib/plugins/Label_20_POS.test.ts index fac4c79..d3a3faa 100644 --- a/lib/plugins/Label_20_POS.test.ts +++ b/lib/plugins/Label_20_POS.test.ts @@ -2,16 +2,17 @@ import { MessageDecoder } from '../MessageDecoder'; import { Label_20_POS } from './Label_20_POS'; describe('Label_20_POS', () => { - const decoder = new MessageDecoder(); - const plugin = new Label_20_POS(decoder); + let plugin: Label_20_POS; + const message = {label: '20', text: ''}; - const decode = (text: string) => { - return plugin.decode({ text }); - }; + beforeEach(() => { + const decoder = new MessageDecoder(); + plugin = new Label_20_POS(decoder); + }); it('decodes POS variation with 11 fields (coordinates only required)', () => { - const text = 'POSN38160W077075,,211733,360,OTT,212041,,N42,19689,40,544'; - const res = decode(text); + message.text = 'POSN38160W077075,,211733,360,OTT,212041,,N42,19689,40,544'; + const res = plugin.decode(message); expect(res.decoded).toBe(true); expect(res.decoder.name).toBe('label-20-pos'); @@ -24,14 +25,14 @@ describe('Label_20_POS', () => { expect(res.raw.position.longitude).toBeCloseTo(-77.075, 3); const posItem = res.formatted.items.find(i => i.code === 'POS'); - expect(posItem).toBeDefined(); + if(!posItem) {expect(posItem).toBeDefined(); return;} expect(posItem.value).toContain('38.160'); expect(posItem.value).toContain('77.075'); }); it('decodes POS variation with 5 fields (coordinates only)', () => { - const text = 'POSN38160W077075,,211733,360,OTT'; - const res = decode(text); + message.text = 'POSN38160W077075,,211733,360,OTT'; + const res = plugin.decode(message); expect(res.decoded).toBe(true); expect(res.decoder.name).toBe('label-20-pos'); @@ -44,14 +45,14 @@ describe('Label_20_POS', () => { expect(res.raw.position.longitude).toBeCloseTo(-77.075, 3); const posItem = res.formatted.items.find(i => i.code === 'POS'); - expect(posItem).toBeDefined(); + if(!posItem) {expect(posItem).toBeDefined(); return;} expect(posItem.value).toContain('38.160'); expect(posItem.value).toContain('77.075'); }); it('marks unknown variation as not decoded', () => { - const text = 'POSUNKNOWN'; - const res = decode(text); + message.text = 'POSUNKNOWN'; + const res = plugin.decode(message); expect(res.decoded).toBe(false); expect(res.decoder.decodeLevel).toBe('none'); diff --git a/lib/plugins/Label_21_POS.test.ts b/lib/plugins/Label_21_POS.test.ts index 12a000c..436bf39 100644 --- a/lib/plugins/Label_21_POS.test.ts +++ b/lib/plugins/Label_21_POS.test.ts @@ -3,6 +3,7 @@ import { Label_21_POS } from './Label_21_POS'; describe('Label_21_POS', () => { let plugin: Label_21_POS; + const message = {label: '21', text: ''}; beforeEach(() => { const decoder = new MessageDecoder(); @@ -21,8 +22,8 @@ describe('Label_21_POS', () => { test('decodes valid', () => { - const text = 'POSN 39.841W 75.790, 220,184218,17222,22051, 34,- 4,204748,KTPA' - const decodeResult = plugin.decode({ text: text }); + message.text = 'POSN 39.841W 75.790, 220,184218,17222,22051, 34,- 4,204748,KTPA' + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe('partial'); expect(decodeResult.formatted.items.length).toBe(6); @@ -55,13 +56,13 @@ describe('Label_21_POS', () => { test('does not decode invalid', () => { - const text = 'POS Bogus message'; - const decodeResult = plugin.decode({ text: text }); + message.text = 'POS Bogus message'; + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(false); expect(decodeResult.decoder.decodeLevel).toBe('none'); expect(decodeResult.decoder.name).toBe('label-21-pos'); expect(decodeResult.formatted.description).toBe('Position Report'); - expect(decodeResult.message.text).toBe(text); + expect(decodeResult.message).toBe(message); }); }); diff --git a/lib/plugins/Label_22_OFF.test.ts b/lib/plugins/Label_22_OFF.test.ts index 55f0c74..ca806bc 100644 --- a/lib/plugins/Label_22_OFF.test.ts +++ b/lib/plugins/Label_22_OFF.test.ts @@ -3,6 +3,7 @@ import { Label_22_OFF } from './Label_22_OFF'; describe('Label 22 OFF', () => { let plugin: Label_22_OFF; + const message = {label: '22', text: ''}; beforeEach(() => { const decoder = new MessageDecoder(); @@ -20,8 +21,8 @@ describe('Label 22 OFF', () => { }); test('decodes variant 1', () => { - const text = 'OFF01YX3661/25251712KIADKPWM171207 92' - const decodeResult = plugin.decode({ text: text }); + message.text = 'OFF01YX3661/25251712KIADKPWM171207 92' + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe('partial'); expect(decodeResult.raw.flight_number).toBe('YX3661'); @@ -50,8 +51,8 @@ describe('Label 22 OFF', () => { }); test('decodes variant 2', () => { - const text = 'OFF02XA0000/N38568 W077261251152KIADEPRZ1152****1958' - const decodeResult = plugin.decode({ text: text }); + message.text = 'OFF02XA0000/N38568 W077261251152KIADEPRZ1152****1958' + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe('partial'); expect(decodeResult.raw.position.latitude).toBe(38.946666666666665); @@ -82,8 +83,8 @@ describe('Label 22 OFF', () => { }); test('decodes variant 3', () => { - const text = 'OFF02\r\nKBWI,KIND,1237,18.4' - const decodeResult = plugin.decode({ text: text }); + message.text = 'OFF02\r\nKBWI,KIND,1237,18.4' + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe('partial'); expect(decodeResult.raw.departure_icao).toBe('KBWI'); @@ -101,12 +102,12 @@ describe('Label 22 OFF', () => { test('does not decode invalid', () => { - const text = 'POS Bogus message'; - const decodeResult = plugin.decode({ text: text }); + message.text = 'POS Bogus message'; + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(false); expect(decodeResult.decoder.decodeLevel).toBe('none'); expect(decodeResult.formatted.description).toBe('Takeoff Report'); - expect(decodeResult.message.text).toBe(text); + expect(decodeResult.message).toBe(message); }); }); diff --git a/lib/plugins/Label_22_POS.test.ts b/lib/plugins/Label_22_POS.test.ts index 5d977eb..893ecd2 100644 --- a/lib/plugins/Label_22_POS.test.ts +++ b/lib/plugins/Label_22_POS.test.ts @@ -3,6 +3,7 @@ import { Label_22_POS } from './Label_22_POS'; describe('Label 22', () => { let plugin: Label_22_POS; + const message = {label: '22', text: ''}; beforeEach(() => { const decoder = new MessageDecoder(); @@ -20,8 +21,8 @@ describe('Label 22', () => { }); test('decodes valid', () => { - const text = 'N 370824W 760010,-------,194936,30418, , , ,M 42,27335 42, 107,' - const decodeResult = plugin.decode({ text: text }); + message.text = 'N 370824W 760010,-------,194936,30418, , , ,M 42,27335 42, 107,' + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe('partial'); expect(decodeResult.raw.position.latitude).toBe(37.0824); @@ -40,11 +41,11 @@ describe('Label 22', () => { test('does not decode invalid', () => { - const text = 'POS Bogus message'; - const decodeResult = plugin.decode({ text: text }); + message.text = 'POS Bogus message'; + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(false); expect(decodeResult.decoder.decodeLevel).toBe('none'); - expect(decodeResult.message.text).toBe(text); + expect(decodeResult.message).toBe(message); }); }); diff --git a/lib/plugins/Label_24_Slash.test.ts b/lib/plugins/Label_24_Slash.test.ts index 11d2be2..60749d8 100644 --- a/lib/plugins/Label_24_Slash.test.ts +++ b/lib/plugins/Label_24_Slash.test.ts @@ -3,6 +3,7 @@ import { Label_24_Slash } from './Label_24_Slash'; describe('Label_24_Slash', () => { let plugin: Label_24_Slash; + const message = {label: '24', text: ''}; beforeEach(() => { const decoder = new MessageDecoder(); @@ -22,8 +23,8 @@ describe('Label_24_Slash', () => { test('valid', () => { // https://app.airframes.io/messages/3439806391 - const text = '/241710/1021/04WM/34962/N53.13/E001.33/3374/1056/'; - const decodeResult = plugin.decode({ text: text }); + message.text = '/241710/1021/04WM/34962/N53.13/E001.33/3374/1056/'; + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe('partial'); expect(decodeResult.raw.message_timestamp).toBe(1729160460); @@ -47,11 +48,11 @@ describe('Label_24_Slash', () => { test('does not decode invalid', () => { - const text = '/ Bogus message'; - const decodeResult = plugin.decode({ text: text }); + message.text = '/ Bogus message'; + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(false); expect(decodeResult.decoder.decodeLevel).toBe('none'); - expect(decodeResult.message.text).toBe(text); + expect(decodeResult.message).toBe(message); }); }); diff --git a/lib/plugins/Label_2P_FM3.test.ts b/lib/plugins/Label_2P_FM3.test.ts index 369d577..6d088d7 100644 --- a/lib/plugins/Label_2P_FM3.test.ts +++ b/lib/plugins/Label_2P_FM3.test.ts @@ -1,9 +1,10 @@ import { MessageDecoder } from '../MessageDecoder'; import { Label_2P_FM3 } from './Label_2P_FM3'; -describe('Label_2P Preamble FM3', () => { +describe('Label 2P Preamble FM3', () => { let plugin: Label_2P_FM3; + const message = { label: '2P', text: '' }; beforeEach(() => { const decoder = new MessageDecoder(); @@ -12,13 +13,12 @@ describe('Label_2P Preamble FM3', () => { test('variant 1', () => { // https://app.airframes.io/messages/4209002765 - const text = 'FM3 1217,1312,+ 43.77,- 70.18, 39981, 426, 25'; - const decodeResult = plugin.decode({ text: text }); + message.text = 'FM3 1217,1312,+ 43.77,- 70.18, 39981, 426, 25'; + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe('partial'); expect(decodeResult.formatted.description).toBe('Flight Report'); - expect(decodeResult.message.text).toBe(text); expect(decodeResult.formatted.items.length).toBe(4); expect(decodeResult.formatted.items[0].label).toBe('Message Timestamp'); expect(decodeResult.formatted.items[0].value).toBe('12:17:00'); @@ -33,13 +33,12 @@ describe('Label_2P Preamble FM3', () => { test('variant 2', () => { // https://app.airframes.io/messages/4209000440 - const text = 'M40AEY093CFM3 1216,1454,+057.31,-075.58, 38002, 469, 23'; - const decodeResult = plugin.decode({ text: text }); + message.text = 'M40AEY093CFM3 1216,1454,+057.31,-075.58, 38002, 469, 23'; + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe('partial'); expect(decodeResult.formatted.description).toBe('Flight Report'); - expect(decodeResult.message.text).toBe(text); expect(decodeResult.formatted.items.length).toBe(5); expect(decodeResult.formatted.items[0].label).toBe('Flight Number'); expect(decodeResult.formatted.items[0].value).toBe('EY093C'); @@ -56,14 +55,14 @@ describe('Label_2P Preamble FM3', () => { test('variant 3', () => { // https://app.airframes.io/messages/4217295798 - const text = 'FM3 133818,1607,N 45.206,E 17.726,34030, 440,98'; - const decodeResult = plugin.decode({ text: text }); + message.text = 'FM3 133818,1607,N 45.206,E 17.726,34030, 440,98'; + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe('partial'); expect(decodeResult.formatted.description).toBe('Flight Report'); - expect(decodeResult.message.text).toBe(text); + expect(decodeResult.message).toBe(message); expect(decodeResult.formatted.items.length).toBe(4); expect(decodeResult.formatted.items[0].label).toBe('Message Timestamp'); expect(decodeResult.formatted.items[0].value).toBe('13:38:18'); @@ -78,8 +77,8 @@ describe('Label_2P Preamble FM3', () => { test('', () => { - const text = 'FM4 Bogus message'; - const decodeResult = plugin.decode({ text: text }); + message.text = 'FM4 Bogus message'; + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(false); expect(decodeResult.decoder.decodeLevel).toBe('none'); diff --git a/lib/plugins/Label_2P_FM4.test.ts b/lib/plugins/Label_2P_FM4.test.ts index f1670cc..c3d0104 100644 --- a/lib/plugins/Label_2P_FM4.test.ts +++ b/lib/plugins/Label_2P_FM4.test.ts @@ -4,6 +4,7 @@ import { Label_2P_FM4 } from './Label_2P_FM4'; describe('Label_2P Preamble FM4', () => { let plugin: Label_2P_FM4; + const message = { label: '2P', text: '' }; beforeEach(() => { const decoder = new MessageDecoder(); @@ -12,13 +13,13 @@ describe('Label_2P Preamble FM4', () => { test('variant 1', () => { // https://app.airframes.io/messages/4206449201 - const text = 'FM4KIAD,OMAA,140256,1448, 39.43,- 75.62,23228,328, 43.5, 72500'; - const decodeResult = plugin.decode({ text: text }); + message.text = 'FM4KIAD,OMAA,140256,1448, 39.43,- 75.62,23228,328, 43.5, 72500'; + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe('partial'); expect(decodeResult.formatted.description).toBe('Flight Report'); - expect(decodeResult.message.text).toBe(text); + expect(decodeResult.message).toBe(message); expect(decodeResult.formatted.items.length).toBe(8); expect(decodeResult.formatted.items[0].label).toBe('Origin'); expect(decodeResult.formatted.items[0].value).toBe('KIAD'); @@ -41,13 +42,13 @@ describe('Label_2P Preamble FM4', () => { test('variant 2', () => { // https://app.airframes.io/messages/4209103135 - const text = 'M58AEY0801FM4RJAA,OMAA,141234,2105, 38.92, 115.44,34099,296,-105.5, 52800'; - const decodeResult = plugin.decode({ text: text }); + message.text = 'M58AEY0801FM4RJAA,OMAA,141234,2105, 38.92, 115.44,34099,296,-105.5, 52800'; + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe('partial'); expect(decodeResult.formatted.description).toBe('Flight Report'); - expect(decodeResult.message.text).toBe(text); + expect(decodeResult.message).toBe(message); expect(decodeResult.formatted.items.length).toBe(9); expect(decodeResult.formatted.items[0].label).toBe('Flight Number'); expect(decodeResult.formatted.items[0].value).toBe('EY0801'); @@ -72,8 +73,8 @@ describe('Label_2P Preamble FM4', () => { test('', () => { - const text = 'FM4 Bogus message'; - const decodeResult = plugin.decode({ text: text }); + message.text = 'FM4 Bogus message'; + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(false); expect(decodeResult.decoder.decodeLevel).toBe('none'); diff --git a/lib/plugins/Label_2P_FM5.test.ts b/lib/plugins/Label_2P_FM5.test.ts index 8981495..634b91f 100644 --- a/lib/plugins/Label_2P_FM5.test.ts +++ b/lib/plugins/Label_2P_FM5.test.ts @@ -4,6 +4,7 @@ import { Label_2P_FM5 } from './Label_2P_FM5'; describe('Label_2P Preamble FM5', () => { let plugin: Label_2P_FM5; + const message = { label: '2P', text: '' }; beforeEach(() => { const decoder = new MessageDecoder(); @@ -12,13 +13,13 @@ describe('Label_2P Preamble FM5', () => { test('variant 1', () => { // https://app.airframes.io/messages/4208768180 - const text = 'FM5 EIDW,OMAA,113522,1540,+45.147, +23.384,35002,116.24,502 ,36900,ETD23N ,'; - const decodeResult = plugin.decode({ text: text }); + message.text = 'FM5 EIDW,OMAA,113522,1540,+45.147, +23.384,35002,116.24,502 ,36900,ETD23N ,'; + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe('partial'); expect(decodeResult.formatted.description).toBe('Flight Report'); - expect(decodeResult.message.text).toBe(text); + expect(decodeResult.message).toBe(message); expect(decodeResult.formatted.items.length).toBe(7); expect(decodeResult.formatted.items[0].label).toBe('Origin'); expect(decodeResult.formatted.items[0].value).toBe('EIDW'); @@ -39,8 +40,8 @@ describe('Label_2P Preamble FM5', () => { test('', () => { - const text = 'FM4 Bogus message'; - const decodeResult = plugin.decode({ text: text }); + message.text = 'FM4 Bogus message'; + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(false); expect(decodeResult.decoder.decodeLevel).toBe('none'); diff --git a/lib/plugins/Label_2P_POS.test.ts b/lib/plugins/Label_2P_POS.test.ts index 3a1e3ed..6586e49 100644 --- a/lib/plugins/Label_2P_POS.test.ts +++ b/lib/plugins/Label_2P_POS.test.ts @@ -4,6 +4,7 @@ import { Label_2P_POS } from './Label_2P_POS'; describe('Label_2P Preamble POS', () => { let plugin: Label_2P_POS; + const message = { label: '2P', text: '' }; beforeEach(() => { const decoder = new MessageDecoder(); @@ -12,13 +13,13 @@ describe('Label_2P Preamble POS', () => { test('variant 1', () => { // https://app.airframes.io/messages/4179262958 - const text = 'M80AMC4086POS/ID50007B,RCH4086,ABB02R70E037/DC10022025,051804/MR103,/ET090738/PSN56012W013273,051804,350,,,,,084081,/CG,,/FB0857/VR0322B89'; - const decodeResult = plugin.decode({ text: text }); + message.text = 'M80AMC4086POS/ID50007B,RCH4086,ABB02R70E037/DC10022025,051804/MR103,/ET090738/PSN56012W013273,051804,350,,,,,084081,/CG,,/FB0857/VR0322B89'; + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe('partial'); + expect(decodeResult.message).toBe(message); expect(decodeResult.formatted.description).toBe('Position Report'); - expect(decodeResult.message.text).toBe(text); expect(decodeResult.raw.flight_number).toBe('RCH4086'); expect(decodeResult.raw.tail).toBe('50007B'); expect(decodeResult.raw.mission_number).toBe('ABB02R70E037'); @@ -39,8 +40,8 @@ describe('Label_2P Preamble POS', () => { test('', () => { - const text = 'M01AFN1234POS Bogus message'; - const decodeResult = plugin.decode({ text: text }); + message.text = 'M01AFN1234POS Bogus message'; + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(false); expect(decodeResult.decoder.decodeLevel).toBe('none'); diff --git a/lib/plugins/Label_30_Slash_EA.test.ts b/lib/plugins/Label_30_Slash_EA.test.ts index bd04040..e10f13e 100644 --- a/lib/plugins/Label_30_Slash_EA.test.ts +++ b/lib/plugins/Label_30_Slash_EA.test.ts @@ -1,26 +1,33 @@ import { MessageDecoder } from '../MessageDecoder'; import { Label_30_Slash_EA } from './Label_30_Slash_EA'; -test('decodes Label 30 sample 1', () => { - const decoder = new MessageDecoder(); - const decoderPlugin = new Label_30_Slash_EA(decoder); +describe('Label 30 preamble /EA', () => { + let plugin: Label_30_Slash_EA; + const message = {label: '30', text: ''}; - expect(decoderPlugin.decode).toBeDefined(); - expect(decoderPlugin.name).toBe('label-30-slash-ea'); - expect(decoderPlugin.qualifiers).toBeDefined(); - expect(decoderPlugin.qualifiers()).toEqual({ + beforeEach(() => { + const decoder = new MessageDecoder(); + plugin = new Label_30_Slash_EA(decoder); + }); + +test('matches qualfiers', () => { + expect(plugin.decode).toBeDefined(); + expect(plugin.name).toBe('label-30-slash-ea'); + expect(plugin.qualifiers).toBeDefined(); + expect(plugin.qualifiers()).toEqual({ labels: ['30'], preambles: ['/EA'], }); - - const text = '/EA1719/DSKSFO/SK23'; - const decodeResult = decoderPlugin.decode({ text: text }); +}); +test('decodes variant 1', () => { + message.text = '/EA1719/DSKSFO/SK23'; + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe('partial'); expect(decodeResult.decoder.name).toBe('label-30-slash-ea'); expect(decodeResult.formatted.description).toBe('ETA Report'); - expect(decodeResult.message.text).toBe(text); + expect(decodeResult.message).toBe(message); expect(decodeResult.raw.arrival_icao).toBe('KSFO'); expect(decodeResult.formatted.items.length).toBe(2); expect(decodeResult.formatted.items[0].type).toBe('time_of_day'); @@ -32,3 +39,4 @@ test('decodes Label 30 sample 1', () => { expect(decodeResult.formatted.items[1].label).toBe('Destination'); expect(decodeResult.formatted.items[1].value).toBe('KSFO'); }); +}); \ No newline at end of file diff --git a/lib/plugins/Label_44_ETA.test.ts b/lib/plugins/Label_44_ETA.test.ts index 6992062..ad93328 100644 --- a/lib/plugins/Label_44_ETA.test.ts +++ b/lib/plugins/Label_44_ETA.test.ts @@ -3,6 +3,7 @@ import { Label_44_ETA } from './Label_44_ETA'; describe('Label 44 IN', () => { let plugin: Label_44_ETA; + const message = {label: '44', text: ''}; beforeEach(() => { const decoder = new MessageDecoder(); @@ -21,8 +22,8 @@ describe('Label 44 IN', () => { test('decodes variant 1', () => { // https://app.airframes.io/messages/3569460297 - const text = '00ETA03,N38241W081357,330,KBNA,KBWI,1107,0123,0208,008.1'; - const decodeResult = plugin.decode({ text: text }); + message.text = '00ETA03,N38241W081357,330,KBNA,KBWI,1107,0123,0208,008.1'; + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe('full'); expect(decodeResult.raw.position.latitude).toBe(38.401666666666664); @@ -57,11 +58,11 @@ describe('Label 44 IN', () => { test('does not decode invalid', () => { - const text = '00OFF01 Bogus message'; - const decodeResult = plugin.decode({ text: text }); + message.text = '00OFF01 Bogus message'; + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(false); expect(decodeResult.decoder.decodeLevel).toBe('none'); - expect(decodeResult.message.text).toBe(text); + expect(decodeResult.message).toBe(message); }); }); diff --git a/lib/plugins/Label_44_IN.test.ts b/lib/plugins/Label_44_IN.test.ts index ca5fadd..85b7191 100644 --- a/lib/plugins/Label_44_IN.test.ts +++ b/lib/plugins/Label_44_IN.test.ts @@ -3,6 +3,7 @@ import { Label_44_IN } from './Label_44_IN'; describe('Label 44 IN', () => { let plugin: Label_44_IN; + const message = {label: '44', text: ''}; beforeEach(() => { const decoder = new MessageDecoder(); @@ -21,8 +22,8 @@ describe('Label 44 IN', () => { test('decodes variant 1', () => { // https://app.airframes.io/messages/3563679070 - const text = 'IN01,N33528W084181,KCLT,KPDK,1106,0045,---.-' - const decodeResult = plugin.decode({ text: text }); + message.text = 'IN01,N33528W084181,KCLT,KPDK,1106,0045,---.-' + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe('full'); expect(decodeResult.raw.position.latitude).toBe(33.88); @@ -48,8 +49,8 @@ describe('Label 44 IN', () => { }); test('decodes variant 2', () => { - const text = 'IN02,N38338W121179,KMHR,KPDX,0806,2355,005.1' - const decodeResult = plugin.decode({ text: text }); + message.text = 'IN02,N38338W121179,KMHR,KPDX,0806,2355,005.1' + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe('full'); expect(decodeResult.raw.position.latitude).toBe(38.56333333333333); @@ -78,11 +79,11 @@ describe('Label 44 IN', () => { test('does not decode invalid', () => { - const text = '00OFF01 Bogus message'; - const decodeResult = plugin.decode({ text: text }); + message.text = '00OFF01 Bogus message'; + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(false); expect(decodeResult.decoder.decodeLevel).toBe('none'); - expect(decodeResult.message.text).toBe(text); + expect(decodeResult.message).toBe(message); }); }); diff --git a/lib/plugins/Label_44_OFF.test.ts b/lib/plugins/Label_44_OFF.test.ts index 1e742bf..c01c30a 100644 --- a/lib/plugins/Label_44_OFF.test.ts +++ b/lib/plugins/Label_44_OFF.test.ts @@ -3,6 +3,7 @@ import { Label_44_OFF } from './Label_44_OFF'; describe('Label 44 OFF', () => { let plugin: Label_44_OFF; + const message = {label: '44', text: ''}; beforeEach(() => { const decoder = new MessageDecoder(); @@ -20,8 +21,8 @@ describe('Label 44 OFF', () => { }); test('decodes variant 1', () => { - const text = 'OFF02,N39247W077226,KFDK,KSNA,1106,2124,0248,011.1' - const decodeResult = plugin.decode({ text: text }); + message.text = 'OFF02,N39247W077226,KFDK,KSNA,1106,2124,0248,011.1' + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe('full'); expect(decodeResult.raw.position.latitude).toBe(39.41166666666667); @@ -54,11 +55,11 @@ describe('Label 44 OFF', () => { test('does not decode invalid', () => { - const text = '00OFF01 Bogus message'; - const decodeResult = plugin.decode({ text: text }); + message.text = '00OFF01 Bogus message'; + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(false); expect(decodeResult.decoder.decodeLevel).toBe('none'); - expect(decodeResult.message.text).toBe(text); + expect(decodeResult.message).toBe(message); }); }); diff --git a/lib/plugins/Label_44_ON.test.ts b/lib/plugins/Label_44_ON.test.ts index 0270c82..9d1a18f 100644 --- a/lib/plugins/Label_44_ON.test.ts +++ b/lib/plugins/Label_44_ON.test.ts @@ -3,6 +3,7 @@ import { Label_44_ON } from './Label_44_ON'; describe('Label 44 ON', () => { let plugin: Label_44_ON; + const message = {label: '44', text: ''}; beforeEach(() => { const decoder = new MessageDecoder(); @@ -21,8 +22,8 @@ describe('Label 44 ON', () => { test('decodes variant 1', () => { // https://app.airframes.io/messages/3563679058 - const text = 'ON01,N33522W084181,KCLT,KPDK,1106,004023,---.-,' - const decodeResult = plugin.decode({ text: text }); + message.text = 'ON01,N33522W084181,KCLT,KPDK,1106,004023,---.-,' + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe('full'); expect(decodeResult.raw.position.latitude).toBe(33.87); @@ -48,8 +49,8 @@ describe('Label 44 ON', () => { }); test('decodes variant 2', () => { - const text = 'ON02,N38333W121178,KRNO,KMHR,0806,2350,005.2' - const decodeResult = plugin.decode({ text: text }); + message.text = 'ON02,N38333W121178,KRNO,KMHR,0806,2350,005.2' + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe('full'); expect(decodeResult.raw.position.latitude).toBe(38.555); @@ -78,11 +79,11 @@ describe('Label 44 ON', () => { test('does not decode invalid', () => { - const text = '00OFF01 Bogus message'; - const decodeResult = plugin.decode({ text: text }); + message.text = '00OFF01 Bogus message'; + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(false); expect(decodeResult.decoder.decodeLevel).toBe('none'); - expect(decodeResult.message.text).toBe(text); + expect(decodeResult.message).toBe(message); }); }); diff --git a/lib/plugins/Label_44_POS.test.ts b/lib/plugins/Label_44_POS.test.ts index 025f63f..0bc9513 100644 --- a/lib/plugins/Label_44_POS.test.ts +++ b/lib/plugins/Label_44_POS.test.ts @@ -1,31 +1,33 @@ import { MessageDecoder } from '../MessageDecoder'; import { Label_44_POS } from './Label_44_POS'; -test('matches Label 44 Preamble POS qualifiers', () => { - const decoder = new MessageDecoder(); - const decoderPlugin = new Label_44_POS(decoder); +describe('Label 44 Preamble POS', () => { + let plugin: Label_44_POS; + const message = {label: '44', text: ''}; + beforeEach(() => { + const decoder = new MessageDecoder(); + plugin = new Label_44_POS(decoder); + }); - expect(decoderPlugin.decode).toBeDefined(); - expect(decoderPlugin.name).toBe('label-44-pos'); - expect(decoderPlugin.qualifiers).toBeDefined(); - expect(decoderPlugin.qualifiers()).toEqual({ +test('matches Label 44 Preamble POS qualifiers', () => { + expect(plugin.decode).toBeDefined(); + expect(plugin.name).toBe('label-44-pos'); + expect(plugin.qualifiers).toBeDefined(); + expect(plugin.qualifiers()).toEqual({ labels: ['44'], preambles: ['00POS01', '00POS02', '00POS03', 'POS01', 'POS02', 'POS03'], }); }); test('decodes Label 44 Preamble POS02 variant 1', () => { - const decoder = new MessageDecoder(); - const decoderPlugin = new Label_44_POS(decoder); - // https://app.airframes.io/messages/3389060301 - const text = 'POS02,N38171W077507,319,KJFK,KUZA,0926,0245,0327,004.6'; - const decodeResult = decoderPlugin.decode({ text: text }); + message.text = 'POS02,N38171W077507,319,KJFK,KUZA,0926,0245,0327,004.6'; + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe('full'); expect(decodeResult.decoder.name).toBe('label-44-pos'); expect(decodeResult.formatted.description).toBe('Position Report'); - expect(decodeResult.message.text).toBe(text); + expect(decodeResult.message).toBe(message); expect(decodeResult.raw.position.latitude).toBe(38.285); expect(decodeResult.raw.position.longitude).toBe(-77.845); expect(decodeResult.raw.altitude).toBe(31900); @@ -55,11 +57,8 @@ test('decodes Label 44 Preamble POS02 variant 1', () => { // disabled because current parser decodes 'full' test.skip('decodes Label 44 Preamble POS02 ', () => { - const decoder = new MessageDecoder(); - const decoderPlugin = new Label_44_POS(decoder); - - const text = 'POS02 Bogus message'; - const decodeResult = decoderPlugin.decode({ text: text }); + message.text = 'POS02 Bogus message'; + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(false); expect(decodeResult.decoder.decodeLevel).toBe('none'); @@ -67,3 +66,4 @@ test.skip('decodes Label 44 Preamble POS02 ', () => { expect(decodeResult.formatted.description).toBe('Position Report'); expect(decodeResult.formatted.items.length).toBe(0); }); +}); \ No newline at end of file diff --git a/lib/plugins/Label_44_Slash.test.ts b/lib/plugins/Label_44_Slash.test.ts index eadbf38..4ee7690 100644 --- a/lib/plugins/Label_44_Slash.test.ts +++ b/lib/plugins/Label_44_Slash.test.ts @@ -3,6 +3,7 @@ import { Label_44_Slash } from "./Label_44_Slash"; describe("Label 44 Slash", () => { let plugin: Label_44_Slash; + const message = { label: "44", text: "" }; beforeEach(() => { const decoder = new MessageDecoder(); @@ -21,8 +22,8 @@ describe("Label 44 Slash", () => { test("decodes variant 1", () => { // https://app.airframes.io/messages/3563679058 - const text = " /FB 0160/AD KORH/N 38.655,W 75.325,JBU2834,INA03,KORH,2043"; - const decodeResult = plugin.decode({ text: text }); + message.text = " /FB 0160/AD KORH/N 38.655,W 75.325,JBU2834,INA03,KORH,2043"; + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe("partial"); expect(decodeResult.raw.flight_number).toBe("JBU2834"); @@ -37,7 +38,7 @@ describe("Label 44 Slash", () => { test("decodes variant 2", () => { const text = " /FB ----/AD KTPA/N 27.971,W 82.558,JBU91,FLS03,KTPA,53988,53988,----,1943,1943,1,1L,VIS1L,0,2,0,,"; - const decodeResult = plugin.decode({ text: text }); + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe("partial"); expect(decodeResult.raw.flight_number).toBe("JBU91"); @@ -53,11 +54,11 @@ describe("Label 44 Slash", () => { }); test("does not decode invalid", () => { - const text = "00OFF01 Bogus message"; - const decodeResult = plugin.decode({ text: text }); + message.text = "00OFF01 Bogus message"; + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(false); expect(decodeResult.decoder.decodeLevel).toBe("none"); - expect(decodeResult.message.text).toBe(text); + expect(decodeResult.message).toBe(message); }); }); diff --git a/lib/plugins/Label_4A.test.ts b/lib/plugins/Label_4A.test.ts index 8c8d90f..7a81544 100644 --- a/lib/plugins/Label_4A.test.ts +++ b/lib/plugins/Label_4A.test.ts @@ -1,31 +1,34 @@ import { MessageDecoder } from '../MessageDecoder'; import { Label_4A } from './Label_4A'; -test('matches Label 4A qualifiers', () => { - const decoder = new MessageDecoder(); - const decoderPlugin = new Label_4A(decoder); +describe('Label 4A', () => { + let plugin: Label_4A; + const message = {label: '4A', text: ''}; - expect(decoderPlugin.decode).toBeDefined(); - expect(decoderPlugin.name).toBe('label-4a'); - expect(decoderPlugin.qualifiers).toBeDefined(); - expect(decoderPlugin.qualifiers()).toEqual({ + beforeEach(() => { + const decoder = new MessageDecoder(); + plugin = new Label_4A(decoder); + }); + +test('matches qualifiers', () => { + expect(plugin.decode).toBeDefined(); + expect(plugin.name).toBe('label-4a'); + expect(plugin.qualifiers).toBeDefined(); + expect(plugin.qualifiers()).toEqual({ labels: ['4A'], }); }); -test('decodes Label 4A, variant 1', () => { - const decoder = new MessageDecoder(); - const decoderPlugin = new Label_4A(decoder); - +test('decodes variant 1', () => { // https://app.airframes.io/messages/3451492279 - const text = '063200,1910,.N343FR,FFT2028,KSLC,KORD,1,0632,RT0,LT0,'; - const decodeResult = decoderPlugin.decode({ text: text }); + message.text = '063200,1910,.N343FR,FFT2028,KSLC,KORD,1,0632,RT0,LT0,'; + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe('partial'); expect(decodeResult.decoder.name).toBe('label-4a'); expect(decodeResult.formatted.description).toBe('Latest New Format'); - expect(decodeResult.message.text).toBe(text); + expect(decodeResult.message).toBe(message); expect(decodeResult.remaining.text).toBe('RT0,LT0,'); expect(decodeResult.formatted.items.length).toBe(5); expect(decodeResult.formatted.items[0].code).toBe('MSG_TOD'); @@ -40,19 +43,16 @@ test('decodes Label 4A, variant 1', () => { expect(decodeResult.formatted.items[4].value).toBe('KORD'); }); -test('decodes Label 4A, variant 1, no callsign', () => { - const decoder = new MessageDecoder(); - const decoderPlugin = new Label_4A(decoder); - +test('decodes variant 1, no callsign', () => { // https://app.airframes.io/messages/3452310240 - const text = '101606,1910,.N317FR,,KMDW,----,1,1016,RT0,LT1,'; - const decodeResult = decoderPlugin.decode({ text: text }); + message.text = '101606,1910,.N317FR,,KMDW,----,1,1016,RT0,LT1,'; + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe('partial'); expect(decodeResult.decoder.name).toBe('label-4a'); expect(decodeResult.formatted.description).toBe('Latest New Format'); - expect(decodeResult.message.text).toBe(text); + expect(decodeResult.message).toBe(message); expect(decodeResult.remaining.text).toBe('RT0,LT1,'); expect(decodeResult.formatted.items.length).toBe(4); expect(decodeResult.formatted.items[0].code).toBe('MSG_TOD'); @@ -65,19 +65,16 @@ test('decodes Label 4A, variant 1, no callsign', () => { expect(decodeResult.formatted.items[3].value).toBe('----'); }); -test('decodes Label 4A, variant 2', () => { - const decoder = new MessageDecoder(); - const decoderPlugin = new Label_4A(decoder); - +test('decodes variant 2', () => { // https://app.airframes.io/messages/3461807403 - const text = 'N45129W093113MSP/07 ,204436123VECTORS,,P04,268044858,46904221'; - const decodeResult = decoderPlugin.decode({ text: text }); + message.text = 'N45129W093113MSP/07 ,204436123VECTORS,,P04,268044858,46904221'; + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe('partial'); expect(decodeResult.decoder.name).toBe('label-4a'); expect(decodeResult.formatted.description).toBe('Latest New Format'); - expect(decodeResult.message.text).toBe(text); + expect(decodeResult.message).toBe(message); expect(decodeResult.remaining.text).toBe('268044858,46904221'); expect(decodeResult.formatted.items.length).toBe(4); expect(decodeResult.formatted.items[0].code).toBe('POS'); @@ -90,19 +87,16 @@ test('decodes Label 4A, variant 2', () => { expect(decodeResult.formatted.items[3].value).toBe('4 degrees'); }); -test('decodes Label 4A, variant 2, C-Band', () => { - const decoder = new MessageDecoder(); - const decoderPlugin = new Label_4A(decoder); - +test('decodes variant 2, C-Band', () => { // https://app.airframes.io/messages/3461407615 - const text = 'M60ALH0752N22456E077014OSE35 ,192027370VEX36 ,192316,M46,275043309,85220111'; - const decodeResult = decoderPlugin.decode({ text: text }); + message.text = 'M60ALH0752N22456E077014OSE35 ,192027370VEX36 ,192316,M46,275043309,85220111'; + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe('partial'); expect(decodeResult.decoder.name).toBe('label-4a'); expect(decodeResult.formatted.description).toBe('Latest New Format'); - expect(decodeResult.message.text).toBe(text); + expect(decodeResult.message).toBe(message); expect(decodeResult.remaining.text).toBe('275043309,85220111'); expect(decodeResult.formatted.items.length).toBe(5); expect(decodeResult.formatted.items[0].code).toBe('FLIGHT'); @@ -117,19 +111,16 @@ test('decodes Label 4A, variant 2, C-Band', () => { expect(decodeResult.formatted.items[4].value).toBe('-46 degrees'); }); -test('decodes Label 4A, variant 3', () => { - const decoder = new MessageDecoder(); - const decoderPlugin = new Label_4A(decoder); - +test('decodes variant 3', () => { // https://globe.adsbexchange.com/?icao=A39AC6&showTrace=2024-09-22×tamp=1727009085 - const text = '124442,1320, 138,33467,N 41.093,W 72.677'; - const decodeResult = decoderPlugin.decode({ text: text }); + message.text = '124442,1320, 138,33467,N 41.093,W 72.677'; + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe('partial'); expect(decodeResult.decoder.name).toBe('label-4a'); expect(decodeResult.formatted.description).toBe('Latest New Format'); - expect(decodeResult.message.text).toBe(text); + expect(decodeResult.message).toBe(message); expect(decodeResult.remaining.text).toBe(' 138'); expect(decodeResult.formatted.items.length).toBe(4); expect(decodeResult.formatted.items[0].code).toBe('MSG_TOD'); @@ -142,13 +133,10 @@ test('decodes Label 4A, variant 3', () => { expect(decodeResult.formatted.items[3].value).toBe('41.093 N, 72.677 W'); }); -test('decodes Label 4A_DIS ', () => { - const decoder = new MessageDecoder(); - const decoderPlugin = new Label_4A(decoder); - +test('decodes ', () => { // https://app.airframes.io/messages/3449413366 - const text = 'DIS01,182103,WEN3100,WRONG CREW HAHAHA'; - const decodeResult = decoderPlugin.decode({ text: text }); + message.text = 'DIS01,182103,WEN3100,WRONG CREW HAHAHA'; + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(false); expect(decodeResult.decoder.decodeLevel).toBe('none'); @@ -156,3 +144,4 @@ test('decodes Label 4A_DIS ', () => { expect(decodeResult.formatted.description).toBe('Latest New Format'); expect(decodeResult.formatted.items.length).toBe(0); }); +}); \ No newline at end of file diff --git a/lib/plugins/Label_4A_01.test.ts b/lib/plugins/Label_4A_01.test.ts index aa89bca..6a92263 100644 --- a/lib/plugins/Label_4A_01.test.ts +++ b/lib/plugins/Label_4A_01.test.ts @@ -1,32 +1,35 @@ import { MessageDecoder } from '../MessageDecoder'; import { Label_4A_01 } from './Label_4A_01'; -test('matches Label 4A_01 qualifiers', () => { - const decoder = new MessageDecoder(); - const decoderPlugin = new Label_4A_01(decoder); +describe('Label 4A preamble 01', () => { + let plugin : Label_4A_01; + const message = { label: '4A', text: '' }; + + beforeEach(() => { + const decoder = new MessageDecoder(); + plugin = new Label_4A_01(decoder); + }); - expect(decoderPlugin.decode).toBeDefined(); - expect(decoderPlugin.name).toBe('label-4a-01'); - expect(decoderPlugin.qualifiers).toBeDefined(); - expect(decoderPlugin.qualifiers()).toEqual({ +test('matches qualifiers', () => { + expect(plugin.decode).toBeDefined(); + expect(plugin.name).toBe('label-4a-01'); + expect(plugin.qualifiers).toBeDefined(); + expect(plugin.qualifiers()).toEqual({ labels: ['4A'], preambles: ['01'], }); }); -test('decodes Label 4A_01', () => { - const decoder = new MessageDecoder(); - const decoderPlugin = new Label_4A_01(decoder); - +test('decodes variant 1', () => { // https://app.airframes.io/messages/3450562911 - const text = '01DCAP VIR41R/190203EGLLKSFO\r\n+ 1418158.0+ 24.8'; - const decodeResult = decoderPlugin.decode({ text: text }); + message.text = '01DCAP VIR41R/190203EGLLKSFO\r\n+ 1418158.0+ 24.8'; + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe('partial'); expect(decodeResult.decoder.name).toBe('label-4a-01'); expect(decodeResult.formatted.description).toBe('Latest New Format'); - expect(decodeResult.message.text).toBe(text); + expect(decodeResult.message).toBe(message); expect(decodeResult.remaining.text).toBe('158.0'); expect(decodeResult.formatted.items.length).toBe(7); expect(decodeResult.formatted.items[0].code).toBe('STATE_CHANGE'); @@ -50,8 +53,8 @@ test.skip('decodes Label 4A_01 ', () => { const decoder = new MessageDecoder(); const decoderPlugin = new Label_4A_01(decoder); - const text = '4A_01 Bogus message'; - const decodeResult = decoderPlugin.decode({ text: text }); + message.text = '4A_01 Bogus message'; + const decodeResult = decoderPlugin.decode(message); expect(decodeResult.decoded).toBe(false); expect(decodeResult.decoder.decodeLevel).toBe('none'); @@ -59,3 +62,4 @@ test.skip('decodes Label 4A_01 ', () => { expect(decodeResult.formatted.description).toBe('Latest New Format'); expect(decodeResult.formatted.items.length).toBe(0); }); +}); \ No newline at end of file diff --git a/lib/plugins/Label_4A_DIS.test.ts b/lib/plugins/Label_4A_DIS.test.ts index 05fdc92..80051f0 100644 --- a/lib/plugins/Label_4A_DIS.test.ts +++ b/lib/plugins/Label_4A_DIS.test.ts @@ -1,32 +1,34 @@ import { MessageDecoder } from '../MessageDecoder'; import { Label_4A_DIS } from './Label_4A_DIS'; -test('matches Label 4A_DIS qualifiers', () => { - const decoder = new MessageDecoder(); - const decoderPlugin = new Label_4A_DIS(decoder); +describe('Label 4A preamble DIS', () => { + let plugin: Label_4A_DIS; + const message = {label: '4A', text: ''}; + beforeEach(() => { + const decoder = new MessageDecoder(); + plugin = new Label_4A_DIS(decoder); + }); - expect(decoderPlugin.decode).toBeDefined(); - expect(decoderPlugin.name).toBe('label-4a-dis'); - expect(decoderPlugin.qualifiers).toBeDefined(); - expect(decoderPlugin.qualifiers()).toEqual({ +test('matches Label 4A_DIS qualifiers', () => { + expect(plugin.decode).toBeDefined(); + expect(plugin.name).toBe('label-4a-dis'); + expect(plugin.qualifiers).toBeDefined(); + expect(plugin.qualifiers()).toEqual({ labels: ['4A'], preambles: ['DIS'], }); }); test('decodes Label 4A_DIS', () => { - const decoder = new MessageDecoder(); - const decoderPlugin = new Label_4A_DIS(decoder); - // https://app.airframes.io/messages/3450166197 - const text = 'DIS01,190009,WEN3140,@HOLD CNX'; - const decodeResult = decoderPlugin.decode({ text: text }); + message.text = 'DIS01,190009,WEN3140,@HOLD CNX'; + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe('full'); expect(decodeResult.decoder.name).toBe('label-4a-dis'); expect(decodeResult.formatted.description).toBe('Latest New Format'); - expect(decodeResult.message.text).toBe(text); + expect(decodeResult.message).toBe(message); expect(decodeResult.remaining.text).toBe(undefined); expect(decodeResult.formatted.items.length).toBe(3); expect(decodeResult.formatted.items[0].code).toBe('MSG_TOD'); @@ -39,11 +41,8 @@ test('decodes Label 4A_DIS', () => { // disabled because all messages should decode test.skip('decodes Label 4A_DIS ', () => { - const decoder = new MessageDecoder(); - const decoderPlugin = new Label_4A_DIS(decoder); - - const text = '4A_DIS Bogus message'; - const decodeResult = decoderPlugin.decode({ text: text }); + message.text = '4A_DIS Bogus message'; + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(false); expect(decodeResult.decoder.decodeLevel).toBe('none'); @@ -51,3 +50,4 @@ test.skip('decodes Label 4A_DIS ', () => { expect(decodeResult.formatted.description).toBe('Latest New Format'); expect(decodeResult.formatted.items.length).toBe(0); }); +}); \ No newline at end of file diff --git a/lib/plugins/Label_4A_DOOR.test.ts b/lib/plugins/Label_4A_DOOR.test.ts index b54af81..c0ad375 100644 --- a/lib/plugins/Label_4A_DOOR.test.ts +++ b/lib/plugins/Label_4A_DOOR.test.ts @@ -1,32 +1,34 @@ import { MessageDecoder } from '../MessageDecoder'; import { Label_4A_DOOR } from './Label_4A_DOOR'; -test('matches Label 4A_DOOR qualifiers', () => { - const decoder = new MessageDecoder(); - const decoderPlugin = new Label_4A_DOOR(decoder); +describe('Label 4A preamble DOOR', () => { + let plugin: Label_4A_DOOR; + const message = {label: '4A', text: ''}; + beforeEach(() => { + const decoder = new MessageDecoder(); + plugin = new Label_4A_DOOR(decoder); + }); - expect(decoderPlugin.decode).toBeDefined(); - expect(decoderPlugin.name).toBe('label-4a-door'); - expect(decoderPlugin.qualifiers).toBeDefined(); - expect(decoderPlugin.qualifiers()).toEqual({ +test('matches qualifiers', () => { + expect(plugin.decode).toBeDefined(); + expect(plugin.name).toBe('label-4a-door'); + expect(plugin.qualifiers).toBeDefined(); + expect(plugin.qualifiers()).toEqual({ labels: ['4A'], preambles: ['DOOR'], }); }); -test('decodes Label 4A_DOOR', () => { - const decoder = new MessageDecoder(); - const decoderPlugin = new Label_4A_DOOR(decoder); - +test('decodes variant 1', () => { // https://app.airframes.io/messages/3453841057 - const text = 'DOOR/FWDENTRY CLSD 1440'; - const decodeResult = decoderPlugin.decode({ text: text }); - + message.text = 'DOOR/FWDENTRY CLSD 1440'; + const decodeResult = plugin.decode(message); + expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe('full'); expect(decodeResult.decoder.name).toBe('label-4a-door'); expect(decodeResult.formatted.description).toBe('Latest New Format'); - expect(decodeResult.message.text).toBe(text); + expect(decodeResult.message).toBe(message); expect(decodeResult.remaining.text).toBe(undefined); expect(decodeResult.formatted.items.length).toBe(2); expect(decodeResult.formatted.items[0].code).toBe('DOOR'); @@ -37,11 +39,8 @@ test('decodes Label 4A_DOOR', () => { // disabled because all messages should decode test.skip('decodes Label 4A_DOOR ', () => { - const decoder = new MessageDecoder(); - const decoderPlugin = new Label_4A_DOOR(decoder); - - const text = '4A_DOOR Bogus message'; - const decodeResult = decoderPlugin.decode({ text: text }); + message.text = '4A_DOOR Bogus message'; + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(false); expect(decodeResult.decoder.decodeLevel).toBe('none'); @@ -49,3 +48,4 @@ test.skip('decodes Label 4A_DOOR ', () => { expect(decodeResult.formatted.description).toBe('Latest New Format'); expect(decodeResult.formatted.items.length).toBe(0); }); +}); \ No newline at end of file diff --git a/lib/plugins/Label_4A_Slash_01.test.ts b/lib/plugins/Label_4A_Slash_01.test.ts index 902e142..5d9ea1b 100644 --- a/lib/plugins/Label_4A_Slash_01.test.ts +++ b/lib/plugins/Label_4A_Slash_01.test.ts @@ -1,14 +1,20 @@ import { MessageDecoder } from '../MessageDecoder'; import { Label_4A_Slash_01 } from './Label_4A_Slash_01'; -test('matches Label 4A_Slash_01 qualifiers', () => { - const decoder = new MessageDecoder(); - const decoderPlugin = new Label_4A_Slash_01(decoder); +describe('Label 4A preamble /01', () => { + let plugin: Label_4A_Slash_01; + const message = {label: '4A', text: ''}; + + beforeEach(() => { + const decoder = new MessageDecoder(); + plugin = new Label_4A_Slash_01(decoder); + }); - expect(decoderPlugin.decode).toBeDefined(); - expect(decoderPlugin.name).toBe('label-4a-slash-01'); - expect(decoderPlugin.qualifiers).toBeDefined(); - expect(decoderPlugin.qualifiers()).toEqual({ +test('matches qualifiers', () => { + expect(plugin.decode).toBeDefined(); + expect(plugin.name).toBe('label-4a-slash-01'); + expect(plugin.qualifiers).toBeDefined(); + expect(plugin.qualifiers()).toEqual({ labels: ['4A'], preambles: ['/01'], }); @@ -19,25 +25,22 @@ test('decodes Label 4A_Slash_01', () => { const decoderPlugin = new Label_4A_Slash_01(decoder); // https://app.airframes.io/messages/3460403039 - const text = '/01-C'; - const decodeResult = decoderPlugin.decode({ text: text }); + message.text = '/01-C'; + const decodeResult = decoderPlugin.decode(message); expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe('partial'); expect(decodeResult.decoder.name).toBe('label-4a-slash-01'); expect(decodeResult.formatted.description).toBe('Latest New Format'); - expect(decodeResult.message.text).toBe(text); + expect(decodeResult.message).toBe(message); expect(decodeResult.remaining.text).toBe('C'); expect(decodeResult.formatted.items.length).toBe(0); }); // disabled because all messages should decode test.skip('decodes Label 4A_Slash_01 ', () => { - const decoder = new MessageDecoder(); - const decoderPlugin = new Label_4A_Slash_01(decoder); - - const text = '4A_Slash_01 Bogus message'; - const decodeResult = decoderPlugin.decode({ text: text }); + message.text = '4A_Slash_01 Bogus message'; + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(false); expect(decodeResult.decoder.decodeLevel).toBe('none'); @@ -45,3 +48,4 @@ test.skip('decodes Label 4A_Slash_01 ', () => { expect(decodeResult.formatted.description).toBe('Latest New Format'); expect(decodeResult.formatted.items.length).toBe(0); }); +}); \ No newline at end of file diff --git a/lib/plugins/Label_4J_POS.test.ts b/lib/plugins/Label_4J_POS.test.ts index 07521b3..68180fe 100644 --- a/lib/plugins/Label_4J_POS.test.ts +++ b/lib/plugins/Label_4J_POS.test.ts @@ -4,6 +4,7 @@ import { Label_4J_POS } from './Label_4J_POS'; describe('Label 4J POS', () => { let plugin: Label_4J_POS; + const message = {label: '4J', text: ''}; beforeEach(() => { const decoder = new MessageDecoder(); @@ -24,8 +25,8 @@ describe('Label 4J POS', () => { // Disabled due to checksum mismatch. Possibly non-ascii characters in message? test.skip('decodes msg 1', () => { // https://app.airframes.io/messages/2434848463 - const text = 'POS/ID91459S,BANKR31,/DC03032024,142813/MR64,0/ET31539/PSN39277W077359,142800,240,N39300W077110,031430,N38560W077150,M28,27619,MT370/CG311,160,350/FB732/VR329071'; - const decodeResult = plugin.decode({ text: text }); + message.text = 'POS/ID91459S,BANKR31,/DC03032024,142813/MR64,0/ET31539/PSN39277W077359,142800,240,N39300W077110,031430,N38560W077150,M28,27619,MT370/CG311,160,350/FB732/VR329071'; + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe('partial'); @@ -56,8 +57,8 @@ describe('Label 4J POS', () => { test('decodes ', () => { - const text = 'POS/ Bogus message'; - const decodeResult = plugin.decode({ text: text }); + message.text = 'POS/ Bogus message'; + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(false); expect(decodeResult.decoder.decodeLevel).toBe('none'); diff --git a/lib/plugins/Label_4N.test.ts b/lib/plugins/Label_4N.test.ts index 36b2b3d..286dcb7 100644 --- a/lib/plugins/Label_4N.test.ts +++ b/lib/plugins/Label_4N.test.ts @@ -1,6 +1,15 @@ import { MessageDecoder } from '../MessageDecoder'; import { Label_4N } from './Label_4N'; +describe('Label 4N', () => { + let plugin: Label_4N; + const message = {label: '4N', text: ''}; + + beforeEach(() => { + const decoder = new MessageDecoder(); + plugin = new Label_4N(decoder); + }); + test('matches Label 4N qualifiers', () => { const decoder = new MessageDecoder(); const decoderPlugin = new Label_4N(decoder); @@ -10,18 +19,15 @@ test('matches Label 4N qualifiers', () => { }); test('decodes Label 4N variant 1', () => { - const decoder = new MessageDecoder(); - const decoderPlugin = new Label_4N(decoder); - // https://globe.adsbexchange.com/?icao=A15027&showTrace=2024-09-23×tamp=1727057017 - const text = '22024N MCI JFK1\r\n0013 0072 N040586 W074421 230'; - const decodeResult = decoderPlugin.decode({ text: text }); + message.text = '22024N MCI JFK1\r\n0013 0072 N040586 W074421 230'; + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe('partial'); expect(decodeResult.decoder.name).toBe('label-4n'); expect(decodeResult.formatted.description).toBe('Airline Defined'); - expect(decodeResult.message.text).toBe(text); + expect(decodeResult.message).toBe(message); expect(decodeResult.raw.day).toBe('22'); expect(decodeResult.remaining.text).toBe('02 0013 0072'); expect(decodeResult.formatted.items.length).toBe(4); @@ -35,19 +41,15 @@ test('decodes Label 4N variant 1', () => { expect(decodeResult.formatted.items[3].value).toBe('23000 feet'); }); -test('decodes Label 4N variant 2B', () => { - const decoder = new MessageDecoder(); - const decoderPlugin = new Label_4N(decoder); - - // https://app.airframes.io/messages/3421601874 - const text = '285,B,69005074-507,10/12,+36.081,-094.810,35014,002.3,ELP,SDF,SDF,17R/,17L/,0,0,,,,,,0,0,0,0,1,,,,,247.0,014.2,261.2,421A'; - const decodeResult = decoderPlugin.decode({ text: text }); +test('decodes Label 4N variant 2B', () => {// https://app.airframes.io/messages/3421601874 + message.text = '285,B,69005074-507,10/12,+36.081,-094.810,35014,002.3,ELP,SDF,SDF,17R/,17L/,0,0,,,,,,0,0,0,0,1,,,,,247.0,014.2,261.2,421A'; + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe('partial'); expect(decodeResult.decoder.name).toBe('label-4n'); expect(decodeResult.formatted.description).toBe('Airline Defined'); - expect(decodeResult.message.text).toBe(text); + expect(decodeResult.message).toBe(message); expect(decodeResult.raw.date).toBe('10/12'); expect(decodeResult.remaining.text).toBe('B,69005074-507,002.3,0,0,0,0,0,0,1,247.0,014.2,261.2'); expect(decodeResult.formatted.items.length).toBe(8); @@ -70,18 +72,15 @@ test('decodes Label 4N variant 2B', () => { }); test('decodes Label 4N variant 2C', () => { - const decoder = new MessageDecoder(); - const decoderPlugin = new Label_4N(decoder); - // https://globe.adsbexchange.com/?icao=A3E08D&showTrace=2024-09-24×tamp=1727181643 - const text = '285,C,,09/24,,,,,EWR,PHL,PHL,09R/,/,0,0,,,,,,1,0,0,0,1,0,,0,0,198.5,014.5,213.0,9BCD'; - const decodeResult = decoderPlugin.decode({ text: text }); + message.text = '285,C,,09/24,,,,,EWR,PHL,PHL,09R/,/,0,0,,,,,,1,0,0,0,1,0,,0,0,198.5,014.5,213.0,9BCD'; + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe('partial'); expect(decodeResult.decoder.name).toBe('label-4n'); expect(decodeResult.formatted.description).toBe('Airline Defined'); - expect(decodeResult.message.text).toBe(text); + expect(decodeResult.message).toBe(message); expect(decodeResult.raw.date).toBe('09/24'); expect(decodeResult.remaining.text).toBe('C,0,0,1,0,0,0,1,0,0,0,198.5,014.5,213.0'); expect(decodeResult.formatted.items.length).toBe(5); @@ -98,18 +97,15 @@ test('decodes Label 4N variant 2C', () => { }); test('decodes Label 4N variant 2C (C-band)', () => { - const decoder = new MessageDecoder(); - const decoderPlugin = new Label_4N(decoder); - // https://app.airframes.io/messages/3422221702 - const text = 'M85AUP0109285,C,,10/12,,,,,NRT,ANC,ANC,07R/,33/,0,0,,,,,,0,0,0,0,1,0,,0,0,709.8,048.7,758.5,75F3'; - const decodeResult = decoderPlugin.decode({ text: text }); + message.text = 'M85AUP0109285,C,,10/12,,,,,NRT,ANC,ANC,07R/,33/,0,0,,,,,,0,0,0,0,1,0,,0,0,709.8,048.7,758.5,75F3'; + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe('partial'); expect(decodeResult.decoder.name).toBe('label-4n'); expect(decodeResult.formatted.description).toBe('Airline Defined'); - expect(decodeResult.message.text).toBe(text); + expect(decodeResult.message).toBe(message); expect(decodeResult.raw.flight_number).toBe('UP109'); expect(decodeResult.raw.date).toBe('10/12'); expect(decodeResult.remaining.text).toBe('C,0,0,0,0,0,0,1,0,0,0,709.8,048.7,758.5'); @@ -131,11 +127,8 @@ test('decodes Label 4N variant 2C (C-band)', () => { }); test('decodes Label 4N ', () => { - const decoder = new MessageDecoder(); - const decoderPlugin = new Label_4N(decoder); - - const text = '4N Bogus message'; - const decodeResult = decoderPlugin.decode({ text: text }); + message.text = '4N Bogus message'; + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(false); expect(decodeResult.decoder.decodeLevel).toBe('none'); @@ -143,3 +136,4 @@ test('decodes Label 4N ', () => { expect(decodeResult.formatted.description).toBe('Airline Defined'); expect(decodeResult.formatted.items.length).toBe(0); }); +}); \ No newline at end of file diff --git a/lib/plugins/Label_4T_AGFSR.test.ts b/lib/plugins/Label_4T_AGFSR.test.ts index d1ed655..4439b60 100644 --- a/lib/plugins/Label_4T_AGFSR.test.ts +++ b/lib/plugins/Label_4T_AGFSR.test.ts @@ -4,6 +4,7 @@ import { Label_4T_AGFSR } from './Label_4T_AGFSR'; describe('Label 4T ETA', () => { let plugin: Label_4T_AGFSR; + const message = {label: '4T', text: ''}; beforeEach(() => { const decoder = new MessageDecoder(); @@ -26,9 +27,9 @@ describe('Label 4T ETA', () => { // https://app.airframes.io/messages/3576265474 // https://www.flightaware.com/live/flight/ACA620/history/20241108/0245Z/CYYZ/CYHZ // https://globe.airplanes.live/?icao=c05bd2 - const text = 'AGFSR AC0620/07/08/YYZYHZ/0340Z/453/4435.1N07143.4W/350/ /0063/0035/ /281065/----/ /512/0240/0253/----/----'; + message.text = 'AGFSR AC0620/07/08/YYZYHZ/0340Z/453/4435.1N07143.4W/350/ /0063/0035/ /281065/----/ /512/0240/0253/----/----'; - const decodeResult = plugin.decode({ text: text }); + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe('partial'); @@ -57,8 +58,8 @@ describe('Label 4T ETA', () => { // https://app.airframes.io/messages/3576317322 // https://www.flightaware.com/live/flight/CFNOH/history/20241108/0335Z/CYUL/SBGR // https://globe.airplanes.live/?icao=c023c8 - const text = 'AGFSR AC0096/07/08/YULGRU/0354Z/833/4417.8N07232.6W/254/CLIMB /0565/0033/-33/275049/0289/144/453/0319/0339/****/****'; - const decodeResult = plugin.decode({ text: text }); + message.text = 'AGFSR AC0096/07/08/YULGRU/0354Z/833/4417.8N07232.6W/254/CLIMB /0565/0033/-33/275049/0289/144/453/0319/0339/****/****'; + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe('partial') @@ -85,8 +86,8 @@ describe('Label 4T ETA', () => { test('decodes ', () => { - const text = 'POS/ Bogus message'; - const decodeResult = plugin.decode({ text: text }); + message.text = 'POS/ Bogus message'; + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(false); expect(decodeResult.decoder.decodeLevel).toBe('none'); diff --git a/lib/plugins/Label_4T_ETA.test.ts b/lib/plugins/Label_4T_ETA.test.ts index f4d98dd..2dc493c 100644 --- a/lib/plugins/Label_4T_ETA.test.ts +++ b/lib/plugins/Label_4T_ETA.test.ts @@ -4,6 +4,7 @@ import { Label_4T_ETA } from './Label_4T_ETA'; describe('Label 4T ETA', () => { let plugin: Label_4T_ETA; + const message = {label: '4T', text: ''}; beforeEach(() => { const decoder = new MessageDecoder(); @@ -23,9 +24,9 @@ describe('Label 4T ETA', () => { test('decodes msg 1', () => { - const text = 'ETA AC7221/13/14 YYZ 0902Z'; + message.text = 'ETA AC7221/13/14 YYZ 0902Z'; - const decodeResult = plugin.decode({ text: text }); + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe('full'); @@ -46,8 +47,8 @@ describe('Label 4T ETA', () => { test('decodes ', () => { - const text = 'ETA Bogus message'; - const decodeResult = plugin.decode({ text: text }); + message.text = 'ETA Bogus message'; + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(false); expect(decodeResult.decoder.decodeLevel).toBe('none'); diff --git a/lib/plugins/Label_58.test.ts b/lib/plugins/Label_58.test.ts index 6b84b25..29e4004 100644 --- a/lib/plugins/Label_58.test.ts +++ b/lib/plugins/Label_58.test.ts @@ -3,6 +3,7 @@ import { Label_58 } from './Label_58'; describe('Label_58', () => { let plugin: Label_58; + const message = {label: '58', text: ''}; beforeEach(() => { const decoder = new MessageDecoder(); @@ -19,8 +20,8 @@ describe('Label_58', () => { }); test('decodes variant 1', () => { - const text = 'OG0704/06/230942/N39.214/W76.106/22683/N/' - const decodeResult = plugin.decode({ text: text }); + message.text = 'OG0704/06/230942/N39.214/W76.106/22683/N/' + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe('partial'); @@ -46,13 +47,13 @@ describe('Label_58', () => { test('does not decode ', () => { - const text = 'Bogus/message'; - const decodeResult = plugin.decode({ text: text }); + message.text = 'Bogus/message'; + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(false); expect(decodeResult.decoder.decodeLevel).toBe('none'); expect(decodeResult.decoder.name).toBe('label-58'); expect(decodeResult.formatted.description).toBe('Position Report'); - expect(decodeResult.message.text).toBe(text); + expect(decodeResult.message).toBe(message); }); }); \ No newline at end of file diff --git a/lib/plugins/Label_5Z_Slash.test.ts b/lib/plugins/Label_5Z_Slash.test.ts index 30e31fa..0fc4af2 100644 --- a/lib/plugins/Label_5Z_Slash.test.ts +++ b/lib/plugins/Label_5Z_Slash.test.ts @@ -3,6 +3,7 @@ import { Label_5Z_Slash } from './Label_5Z_Slash'; describe('Label 5Z', () => { let plugin: Label_5Z_Slash; + const message = {label: '5Z', text: ''}; beforeEach(() => { const decoder = new MessageDecoder(); @@ -21,8 +22,8 @@ describe('Label 5Z', () => { test('/TXT', () => { - const text = '/TXT\r\nDID U GET THE TIMES'; - const decodeResult = plugin.decode({ text: text }); + message.text = '/TXT\r\nDID U GET THE TIMES'; + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe('full'); expect(decodeResult.raw.airline).toBeUndefined() @@ -33,8 +34,8 @@ describe('Label 5Z', () => { }); test('/B3 variant 1', () => { - const text = '/B3 ATLIAD 14 R1C G1273'; - const decodeResult = plugin.decode({ text: text }); + message.text = '/B3 ATLIAD 14 R1C G1273'; + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe('partial'); expect(decodeResult.raw.airline).toBe('United Airlines'); @@ -58,8 +59,8 @@ describe('Label 5Z', () => { }); test('/B3 variant 2', () => { - const text = '/B3 DCAORD 14 R27C'; - const decodeResult = plugin.decode({ text: text }); + message.text = '/B3 DCAORD 14 R27C'; + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe('full'); @@ -83,8 +84,8 @@ describe('Label 5Z', () => { }); test('/B3 request', () => { - const text = '/B3 TO DATA REQ / KIAH KBOS 14 152532 R4R /---- BOPT/OFF C0.000/1 LNO G1600'; - const decodeResult = plugin.decode({ text: text }); + message.text = '/B3 TO DATA REQ / KIAH KBOS 14 152532 R4R /---- BOPT/OFF C0.000/1 LNO G1600'; + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe('partial'); @@ -113,8 +114,8 @@ describe('Label 5Z', () => { test('/ET variant 1', () => { // https://app.airframes.io/messages/3459203875 - const text = '/ET EXP TIME / KEWR KBNA 20 122559/EON 1336 AUTO'; - const decodeResult = plugin.decode({ text: text }); + message.text = '/ET EXP TIME / KEWR KBNA 20 122559/EON 1336 AUTO'; + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe('partial'); @@ -138,8 +139,8 @@ describe('Label 5Z', () => { }); test('/C3 variant1', () => { - const text = '/C3 IADDFW'; - const decodeResult = plugin.decode({ text: text }); + message.text = '/C3 IADDFW'; + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe('full'); @@ -158,8 +159,8 @@ describe('Label 5Z', () => { }); test('/C3 Request', () => { - const text = '/C3 GATE REQ / KBNA KEWR 22 115400 0554 ---- ---- ---- ----'; - const decodeResult = plugin.decode({ text: text }); + message.text = '/C3 GATE REQ / KBNA KEWR 22 115400 0554 ---- ---- ---- ----'; + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe('partial'); @@ -185,11 +186,11 @@ describe('Label 5Z', () => { test('/ does not decode invalid', () => { - const text = '/ Bogus message'; - const decodeResult = plugin.decode({ text: text }); + message.text = '/ Bogus message'; + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(false); expect(decodeResult.decoder.decodeLevel).toBe('none'); - expect(decodeResult.remaining.text).toBe(text); + expect(decodeResult.remaining.text).toBe(message.text); }); }); diff --git a/lib/plugins/Label_80.test.ts b/lib/plugins/Label_80.test.ts index 8202ab4..2177b02 100644 --- a/lib/plugins/Label_80.test.ts +++ b/lib/plugins/Label_80.test.ts @@ -4,6 +4,7 @@ import { Label_80 } from './Label_80'; describe('Label 80', () => { let plugin : Label_80; + const message = {label: '80', text: ''}; beforeEach(() => { const decoder = new MessageDecoder(); @@ -21,8 +22,8 @@ test('matches qualifiers', () => { test('decodes POSRPT variant 1', () => { // https://app.airframes.io/messages/377573108 - const text = '3N01 POSRPT 5891/04 KIAH/MMGL .XA-VOI\r\n/POS N29395W095133/ALT +15608/MCH 558/FOB 0100/ETA 0410'; - const decodeResult = plugin.decode({ text: text }); + message.text = '3N01 POSRPT 5891/04 KIAH/MMGL .XA-VOI\r\n/POS N29395W095133/ALT +15608/MCH 558/FOB 0100/ETA 0410'; + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe('partial'); @@ -42,8 +43,8 @@ test('decodes POSRPT variant 1', () => { }); test('decodes POSRPT variant 2', () => { // https://app.airframes.io/messages/2416917371 - const text = '3N01 POSRPT 0581/27 KIAD/MSLP .N962AV/04H 11:02\r\n/NWYP CIGAR /HDG 233/MCH 782\r\n/POS N3539.2W07937.2/FL 360/TAS 445/SAT -060\r\n/SWND 110/DWND 306/FOB N009414/ETA 14:26.0 '; - const decodeResult = plugin.decode({ text: text }); + message.text = '3N01 POSRPT 0581/27 KIAD/MSLP .N962AV/04H 11:02\r\n/NWYP CIGAR /HDG 233/MCH 782\r\n/POS N3539.2W07937.2/FL 360/TAS 445/SAT -060\r\n/SWND 110/DWND 306/FOB N009414/ETA 14:26.0 '; + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe('partial'); @@ -70,8 +71,8 @@ test('decodes POSRPT variant 2', () => { }); test('decodes POSRPT variant 3', () => { - const text = '/FB 0105/AD KCHS/N3950.1,W07548.3,3P01 POSRPT 0267/20 KBOS/KCHS .N3275J\n/UTC 143605/POS N3950.1 W07548.3/ALT 38007\n/SPD 334/FOB 0105/ETA 1622'; - const decodeResult = plugin.decode({ text: text }); + message.text = '/FB 0105/AD KCHS/N3950.1,W07548.3,3P01 POSRPT 0267/20 KBOS/KCHS .N3275J\n/UTC 143605/POS N3950.1 W07548.3/ALT 38007\n/SPD 334/FOB 0105/ETA 1622'; + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe('partial'); @@ -93,8 +94,8 @@ test('decodes POSRPT variant 3', () => { }); test('decodes POS variant 1', () => { - const text = '3C01 POS N39328W077307 ,,143700, , , ,P47,124,0069'; - const decodeResult = plugin.decode({ text: text }); + message.text = '3C01 POS N39328W077307 ,,143700, , , ,P47,124,0069'; + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe('partial'); @@ -109,8 +110,8 @@ test('decodes POS variant 1', () => { }); test('decodes OPNORM variant 1', () => { - const text = '3M01 OPNORM 0411/20 KEWR/MMMX .XA-MAT '; - const decodeResult = plugin.decode({ text: text }); + message.text = '3M01 OPNORM 0411/20 KEWR/MMMX .XA-MAT '; + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); expect(decodeResult.raw.flight_number).toBe('0411'); @@ -124,8 +125,8 @@ test('decodes OPNORM variant 1', () => { test('decodes INRANG variant 1', () => { - const text = '3701 INRANG 3451/20 KSBD/KBWI .N613AZ\n/ETA 1254/ERT '; - const decodeResult = plugin.decode({ text: text }); + message.text = '3701 INRANG 3451/20 KSBD/KBWI .N613AZ\n/ETA 1254/ERT '; + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe('partial'); @@ -141,8 +142,8 @@ test('decodes INRANG variant 1', () => { test('does not decode invalid messages', () => { - const text = '3N01 POSRPT Bogus message'; - const decodeResult = plugin.decode({ text: text }); + message.text = '3N01 POSRPT Bogus message'; + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(false); expect(decodeResult.decoder.decodeLevel).toBe('none'); diff --git a/lib/plugins/Label_83.test.ts b/lib/plugins/Label_83.test.ts index b6f916d..2b9625a 100644 --- a/lib/plugins/Label_83.test.ts +++ b/lib/plugins/Label_83.test.ts @@ -1,27 +1,30 @@ import { MessageDecoder } from '../MessageDecoder'; import { Label_83 } from './Label_83'; -test('matches Label 83 qualifiers', () => { - const decoder = new MessageDecoder(); - const decoderPlugin = new Label_83(decoder); +describe('Label 83', () => { + let plugin: Label_83; + const message = {label: '83', text: ''}; - expect(decoderPlugin.decode).toBeDefined(); - expect(decoderPlugin.name).toBe('label-83'); + beforeEach(() => { + const decoder = new MessageDecoder(); + plugin = new Label_83(decoder); + }); + +test('matches Label 83 qualifiers', () => { + expect(plugin.decode).toBeDefined(); + expect(plugin.name).toBe('label-83'); }); test('decodes Label 83 variant 1', () => { - const decoder = new MessageDecoder(); - const decoderPlugin = new Label_83(decoder); - // https://globe.adsbexchange.com/?icao=A2A3B5&showTrace=2024-09-22×tamp=1726967032 - const text = 'KLAX,KEWR,220103, 40.53,- 74.47, 3836,212, 140.0, 19700'; - const decodeResult = decoderPlugin.decode({ text: text }); + message.text = 'KLAX,KEWR,220103, 40.53,- 74.47, 3836,212, 140.0, 19700'; + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe('partial'); expect(decodeResult.decoder.name).toBe('label-83'); expect(decodeResult.formatted.description).toBe('Airline Defined'); - expect(decodeResult.message.text).toBe(text); + expect(decodeResult.message).toBe(message); expect(decodeResult.raw.departure_icao).toBe('KLAX'); expect(decodeResult.raw.arrival_icao).toBe('KEWR'); expect(decodeResult.raw.day).toBe('22'); @@ -47,18 +50,15 @@ test('decodes Label 83 variant 1', () => { }); test('decodes Label 83 variant 1 (C-band)', () => { - const decoder = new MessageDecoder(); - const decoderPlugin = new Label_83(decoder); - // https://app.airframes.io/messages/3413113024 - const text = 'M05AUA0007KIAH,RJAA,110012, 39.12,-175.10,39001,265,-107.6, 64900'; - const decodeResult = decoderPlugin.decode({ text: text }); + message.text = 'M05AUA0007KIAH,RJAA,110012, 39.12,-175.10,39001,265,-107.6, 64900'; + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe('partial'); expect(decodeResult.decoder.name).toBe('label-83'); expect(decodeResult.formatted.description).toBe('Airline Defined'); - expect(decodeResult.message.text).toBe(text); + expect(decodeResult.message).toBe(message); expect(decodeResult.raw.flight_number).toBe('UA7'); expect(decodeResult.raw.departure_icao).toBe('KIAH'); expect(decodeResult.raw.arrival_icao).toBe('RJAA'); @@ -87,18 +87,15 @@ test('decodes Label 83 variant 1 (C-band)', () => { }); test('decodes Label 83 variant 2', () => { - const decoder = new MessageDecoder(); - const decoderPlugin = new Label_83(decoder); - // https://globe.adsbexchange.com/?icao=478F43&showTrace=2024-09-22×tamp=1727022863 - const text = '4DH3 ETAT2 0907/22 ENGM/KEWR .LN-RKO\r\n/ETA 1641'; - const decodeResult = decoderPlugin.decode({ text: text }); + message.text = '4DH3 ETAT2 0907/22 ENGM/KEWR .LN-RKO\r\n/ETA 1641'; + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe('partial'); expect(decodeResult.decoder.name).toBe('label-83'); expect(decodeResult.formatted.description).toBe('Airline Defined'); - expect(decodeResult.message.text).toBe(text); + expect(decodeResult.message).toBe(message); expect(decodeResult.raw.departure_icao).toBe('ENGM'); expect(decodeResult.raw.arrival_icao).toBe('KEWR'); expect(decodeResult.raw.day).toBe('22'); @@ -121,14 +118,14 @@ test('decodes Label 83 variant 3', () => { const decoderPlugin = new Label_83(decoder); // https://globe.adsbexchange.com/?icao=AC15A1&showTrace=2024-09-22×tamp=1726977342 - const text = '001PR22035539N4038.6W07427.80292500008'; - const decodeResult = decoderPlugin.decode({ text: text }); + message.text = '001PR22035539N4038.6W07427.80292500008'; + const decodeResult = decoderPlugin.decode(message); expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe('partial'); expect(decodeResult.decoder.name).toBe('label-83'); expect(decodeResult.formatted.description).toBe('Airline Defined'); - expect(decodeResult.message.text).toBe(text); + expect(decodeResult.message).toBe(message); expect(decodeResult.raw.day).toBe('22'); expect(decodeResult.raw.position.latitude).toBe(40.64333333333333); expect(decodeResult.raw.position.longitude).toBe(-74.46333333333334); @@ -146,14 +143,14 @@ test('decodes Label 83 variant 3 (C-band)', () => { const decoderPlugin = new Label_83(decoder); // https://app.airframes.io/messages/3413346742 - const text = 'M09AXA0001001PR11013423N0556.6E11603.0000000----'; - const decodeResult = decoderPlugin.decode({ text: text }); + message.text = 'M09AXA0001001PR11013423N0556.6E11603.0000000----'; + const decodeResult = decoderPlugin.decode(message); expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe('partial'); expect(decodeResult.decoder.name).toBe('label-83'); expect(decodeResult.formatted.description).toBe('Airline Defined'); - expect(decodeResult.message.text).toBe(text); + expect(decodeResult.message).toBe(message); expect(decodeResult.raw.flight_number).toBe('XA1'); expect(decodeResult.raw.day).toBe('11'); expect(decodeResult.raw.position.latitude).toBe(5.943333333333333); @@ -170,11 +167,8 @@ test('decodes Label 83 variant 3 (C-band)', () => { }); test('decodes Label 83 ', () => { - const decoder = new MessageDecoder(); - const decoderPlugin = new Label_83(decoder); - - const text = '83 Bogus message'; - const decodeResult = decoderPlugin.decode({ text: text }); + message.text = '83 Bogus message'; + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(false); expect(decodeResult.decoder.decodeLevel).toBe('none'); @@ -182,3 +176,4 @@ test('decodes Label 83 ', () => { expect(decodeResult.formatted.description).toBe('Airline Defined'); expect(decodeResult.formatted.items.length).toBe(0); }); +}); \ No newline at end of file diff --git a/lib/plugins/Label_8E.test.ts b/lib/plugins/Label_8E.test.ts index 0272085..daf51c4 100644 --- a/lib/plugins/Label_8E.test.ts +++ b/lib/plugins/Label_8E.test.ts @@ -1,7 +1,16 @@ import { MessageDecoder } from '../MessageDecoder'; import { Label_8E } from './Label_8E'; -test('decodes Label 8E sample 1', () => { +describe('Label 8E', () => { + let plugin: Label_8E; + const message = {label: '8E', text: ''}; + + beforeEach(() => { + const decoder = new MessageDecoder(); + plugin = new Label_8E(decoder); + }); + +test('matches qualifiers', () => { const decoder = new MessageDecoder(); const decoderPlugin = new Label_8E(decoder); @@ -11,13 +20,15 @@ test('decodes Label 8E sample 1', () => { expect(decoderPlugin.qualifiers()).toEqual({ labels: ['8E'], }); - - const decodeResult = decoderPlugin.decode({ text: 'EGSS,1618' }); +}); +test('decodes variant 1', () => { + message.text = 'EGSS,1618'; + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.name).toBe('label-8e'); expect(decodeResult.formatted.description).toBe('ETA Report'); - expect(decodeResult.message.text).toBe('EGSS,1618'); + expect(decodeResult.message).toBe(message); expect(decodeResult.raw.arrival_icao).toBe('EGSS'); expect(decodeResult.formatted.items.length).toBe(2); expect(decodeResult.formatted.items[0].type).toBe('time_of_day'); @@ -29,3 +40,4 @@ test('decodes Label 8E sample 1', () => { expect(decodeResult.formatted.items[1].label).toBe('Destination'); expect(decodeResult.formatted.items[1].value).toBe('EGSS'); }); +}); \ No newline at end of file diff --git a/lib/plugins/Label_H1_FLR.test.ts b/lib/plugins/Label_H1_FLR.test.ts index 9b0a0b0..3857d89 100644 --- a/lib/plugins/Label_H1_FLR.test.ts +++ b/lib/plugins/Label_H1_FLR.test.ts @@ -1,32 +1,34 @@ import { MessageDecoder } from '../MessageDecoder'; import { Label_H1_FLR } from './Label_H1_FLR'; -test('matches Label H1 Preamble FLR qualifiers', () => { - const decoder = new MessageDecoder(); - const decoderPlugin = new Label_H1_FLR(decoder); +describe('Label H1 Preamble FLR', () => { + let plugin: Label_H1_FLR; + const message = {label: 'H1', text: ''}; - expect(decoderPlugin.decode).toBeDefined(); - expect(decoderPlugin.name).toBe('label-h1-flr'); - expect(decoderPlugin.qualifiers).toBeDefined(); - expect(decoderPlugin.qualifiers()).toEqual({ + beforeEach(() => { + const decoder = new MessageDecoder(); + plugin = new Label_H1_FLR(decoder); + }); +test('matches qualifiers', () => { + expect(plugin.decode).toBeDefined(); + expect(plugin.name).toBe('label-h1-flr'); + expect(plugin.qualifiers).toBeDefined(); + expect(plugin.qualifiers()).toEqual({ labels: ['H1'], preambles: ['FLR', '#CFBFLR'], }); }); -test('decodes Label H1 Preamble FLR FWC2', () => { - const decoder = new MessageDecoder(); - const decoderPlugin = new Label_H1_FLR(decoder); - +test('decodes FWC2', () => { // https://app.airframes.io/messages/2436863787 - const text = 'FLR/FR24030411230034583106FWC2 :NO DATA FROM GPS1 /IDECAM 2 ,ECAM 1 '; - const decodeResult = decoderPlugin.decode({ text: text }); - + message.text = 'FLR/FR24030411230034583106FWC2 :NO DATA FROM GPS1 /IDECAM 2 ,ECAM 1 '; + const decodeResult = plugin.decode(message); + expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe('partial'); expect(decodeResult.decoder.name).toBe('label-h1-flr'); expect(decodeResult.formatted.description).toBe('Fault Log Report'); - expect(decodeResult.message.text).toBe(text); + expect(decodeResult.message).toBe(message); expect(decodeResult.raw.message_timestamp).toBe(1712143380); expect(decodeResult.formatted.items.length).toBe(1); expect(decodeResult.formatted.items[0].type).toBe('fault'); @@ -37,18 +39,15 @@ test('decodes Label H1 Preamble FLR FWC2', () => { }); test('decodes Label H1 Preamble FLR CDSU', () => { - const decoder = new MessageDecoder(); - const decoderPlugin = new Label_H1_FLR(decoder); - // https://app.airframes.io/messages/2436949441 - const text = 'FLR/PNRC12860AA07/FR24030411040023723406CDSU(9RA)/DU SD(4WT2) /IDEIS 1 '; - const decodeResult = decoderPlugin.decode({ text: text }); + message.text = 'FLR/PNRC12860AA07/FR24030411040023723406CDSU(9RA)/DU SD(4WT2) /IDEIS 1 '; + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe('partial'); expect(decodeResult.decoder.name).toBe('label-h1-flr'); expect(decodeResult.formatted.description).toBe('Fault Log Report'); - expect(decodeResult.message.text).toBe(text); + expect(decodeResult.message).toBe(message); expect(decodeResult.raw.message_timestamp).toBe(1712142240); expect(decodeResult.formatted.items.length).toBe(1); expect(decodeResult.formatted.items[0].type).toBe('fault'); @@ -59,18 +58,15 @@ test('decodes Label H1 Preamble FLR CDSU', () => { }); test('decodes Label H1 Preamble FLR RA1', () => { - const decoder = new MessageDecoder(); - const decoderPlugin = new Label_H1_FLR(decoder); - // https://app.airframes.io/messages/2436701901 - const text = 'FLR/FR24030409560034423306RA1/IDEFCS 1 ,EFCS 2 '; - const decodeResult = decoderPlugin.decode({ text: text }); + message.text = 'FLR/FR24030409560034423306RA1/IDEFCS 1 ,EFCS 2 '; + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe('partial'); expect(decodeResult.decoder.name).toBe('label-h1-flr'); expect(decodeResult.formatted.description).toBe('Fault Log Report'); - expect(decodeResult.message.text).toBe(text); + expect(decodeResult.message).toBe(message); expect(decodeResult.raw.message_timestamp).toBe(1712138160); expect(decodeResult.formatted.items.length).toBe(1); expect(decodeResult.formatted.items[0].type).toBe('fault'); @@ -81,18 +77,15 @@ test('decodes Label H1 Preamble FLR RA1', () => { }); test('decodes Label H1 Preamble FLR LQD', () => { - const decoder = new MessageDecoder(); - const decoderPlugin = new Label_H1_FLR(decoder); - // https://app.airframes.io/messages/2436740709 - const text = 'FLR/FR24030410030038316206LIQD LVL XMTR (40MG)/IDTOILET '; - const decodeResult = decoderPlugin.decode({ text: text }); + message.text = 'FLR/FR24030410030038316206LIQD LVL XMTR (40MG)/IDTOILET '; + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe('partial'); expect(decodeResult.decoder.name).toBe('label-h1-flr'); expect(decodeResult.formatted.description).toBe('Fault Log Report'); - expect(decodeResult.message.text).toBe(text); + expect(decodeResult.message).toBe(message); expect(decodeResult.raw.message_timestamp).toBe(1712138580); expect(decodeResult.formatted.items.length).toBe(1); expect(decodeResult.formatted.items[0].type).toBe('fault'); @@ -103,18 +96,15 @@ test('decodes Label H1 Preamble FLR LQD', () => { }); test('decodes Label H1 Preamble FLR LQD', () => { - const decoder = new MessageDecoder(); - const decoderPlugin = new Label_H1_FLR(decoder); - // https://app.airframes.io/messages/2437260976 - const text = '#CFBFLR/FR24030412400034723406ATC1(1SH1)/TCAS(1000SG) /IDTCAS '; - const decodeResult = decoderPlugin.decode({ text: text }); + message.text = '#CFBFLR/FR24030412400034723406ATC1(1SH1)/TCAS(1000SG) /IDTCAS '; + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe('partial'); expect(decodeResult.decoder.name).toBe('label-h1-flr'); expect(decodeResult.formatted.description).toBe('Fault Log Report'); - expect(decodeResult.message.text).toBe(text); + expect(decodeResult.message).toBe(message); expect(decodeResult.raw.message_timestamp).toBe(1712148000); expect(decodeResult.formatted.items.length).toBe(1); expect(decodeResult.formatted.items[0].type).toBe('fault'); @@ -125,16 +115,14 @@ test('decodes Label H1 Preamble FLR LQD', () => { }); test('decodes Label H1 Preamble FLR invalid', () => { - const decoder = new MessageDecoder(); - const decoderPlugin = new Label_H1_FLR(decoder); - - const text = 'FLR '; - const decodeResult = decoderPlugin.decode({ text: text }); + message.text = 'FLR '; + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(false); expect(decodeResult.decoder.decodeLevel).toBe('none'); expect(decodeResult.decoder.name).toBe('label-h1-flr'); expect(decodeResult.formatted.description).toBe('Fault Log Report'); - expect(decodeResult.message.text).toBe(text); - expect(decodeResult.remaining.text).toBe(text); + expect(decodeResult.message).toBe(message); + expect(decodeResult.remaining.text).toBe(message.text); }); +}); \ No newline at end of file diff --git a/lib/plugins/Label_H1_FPN.test.ts b/lib/plugins/Label_H1_FPN.test.ts index dfe62c2..222180f 100644 --- a/lib/plugins/Label_H1_FPN.test.ts +++ b/lib/plugins/Label_H1_FPN.test.ts @@ -4,6 +4,7 @@ import { Label_H1 } from './Label_H1'; describe('Label_H1 FPN', () => { let plugin: Label_H1; + const message = {label: 'H1', text: ''}; beforeEach(() => { const decoder = new MessageDecoder(); @@ -11,8 +12,8 @@ describe('Label_H1 FPN', () => { }); test('decodes Label H1 Preamble FPN landing', () => { - const text = 'FPN/RI:DA:KEWR:AA:KDFW:CR:EWRDFW01(17L)..SAAME.J6.HVQ.Q68.LITTR..MEEOW..FEWWW:A:SEEVR4.FEWWW:F:VECTOR..DISCO..RIVET:AP:ILS 17L.RIVET:F:TACKEC8B5'; - const decodeResult = plugin.decode({ text: text }); + message.text = 'FPN/RI:DA:KEWR:AA:KDFW:CR:EWRDFW01(17L)..SAAME.J6.HVQ.Q68.LITTR..MEEOW..FEWWW:A:SEEVR4.FEWWW:F:VECTOR..DISCO..RIVET:AP:ILS 17L.RIVET:F:TACKEC8B5'; + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe('full'); @@ -40,8 +41,8 @@ describe('Label_H1 FPN', () => { test('decodes Label H1 Preamble FPN full flight', () => { // https://app.airframes.io/messages/2161768398 - const text = 'FPN/FNAAL1956/RP:DA:KPHL:AA:KPHX:CR:PHLPHX61:R:27L(26O):D:PHL3:A:EAGUL6.ZUN:AP:ILS26..AIR,N40010W080490.J110.BOWRR..VLA,N39056W089097..STL,N38516W090289..GIBSN,N38430W092244..TYGER,N38410W094050..GCK,N37551W100435..DIXAN,N36169W105573..ZUN,N34579W109093293B'; - const decodeResult = plugin.decode({ text: text }); + message.text = 'FPN/FNAAL1956/RP:DA:KPHL:AA:KPHX:CR:PHLPHX61:R:27L(26O):D:PHL3:A:EAGUL6.ZUN:AP:ILS26..AIR,N40010W080490.J110.BOWRR..VLA,N39056W089097..STL,N38516W090289..GIBSN,N38430W092244..TYGER,N38410W094050..GCK,N37551W100435..DIXAN,N36169W105573..ZUN,N34579W109093293B'; + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe('full'); @@ -73,8 +74,8 @@ describe('Label_H1 FPN', () => { test('decodes Label H1 Preamble FPN in-flight', () => { // https://app.airframes.io/messages/2161761202 - const text = 'FPN/FNUAL1187/RP:DA:KSFO:AA:KPHX:F:KAYEX,N36292W120569..LOSHN,N35509W120000..BOILE,N34253W118016..BLH,N33358W114457DDFB'; - const decodeResult = plugin.decode({ text: text }); + message.text = 'FPN/FNUAL1187/RP:DA:KSFO:AA:KPHX:F:KAYEX,N36292W120569..LOSHN,N35509W120000..BOILE,N34253W118016..BLH,N33358W114457DDFB'; + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe('full'); @@ -95,8 +96,8 @@ describe('Label_H1 FPN', () => { test('decodes Label H1 Preamble FPN with WS', () => { // https://app.airframes.io/messages/2372685289 - const text = 'FPN/TS140017,021724/RP:DA:EHAM:AA:KMSP..N55064W000477..N55163W001141..ERAKA..N60000W020000..N61000W030000:WS:N61000W030000,370..N61000W040000..N60000W050000..URTAK:WS:URTAK,380..LAKES:WS:LAKES,400..N57000W070000..N54300W080000..N49000W090000..DLH..COLDD:A:BAINY3:AP:ILS30L(30L)/PR4356,344,360,1060,,,13,,,30,,,P50,M40,36090,,3296,292/DTKMSP,30L,172,215117156D'; - const decodeResult = plugin.decode({ text: text }); + message.text = 'FPN/TS140017,021724/RP:DA:EHAM:AA:KMSP..N55064W000477..N55163W001141..ERAKA..N60000W020000..N61000W030000:WS:N61000W030000,370..N61000W040000..N60000W050000..URTAK:WS:URTAK,380..LAKES:WS:LAKES,400..N57000W070000..N54300W080000..N49000W090000..DLH..COLDD:A:BAINY3:AP:ILS30L(30L)/PR4356,344,360,1060,,,13,,,30,,,P50,M40,36090,,3296,292/DTKMSP,30L,172,215117156D'; + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe('partial'); @@ -126,8 +127,8 @@ describe('Label_H1 FPN', () => { test('decodes Label H1 Preamble FPN with newlines', () => { // https://app.airframes.io/messages/2381936957 - const text = 'FPN/SN2125/FNQFA780/RI:DA:YPPH:CR:PERMEL001:AA:YMML..MEMUP,S33451E\r\n120525.Y53.WENDY0560' - const decodeResult = plugin.decode({ text: text }); + message.text = 'FPN/SN2125/FNQFA780/RI:DA:YPPH:CR:PERMEL001:AA:YMML..MEMUP,S33451E\r\n120525.Y53.WENDY0560' + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe('full'); @@ -149,8 +150,8 @@ describe('Label_H1 FPN', () => { test('decodes Label H1 Preamble FPN with SN and TS', () => { // https://app.airframes.io/messages/2372685289 - const text = 'FPN/TS155631,170224/SN155631/RP:DA:PHNL:AA:KASE:D:MKK5.KOLEA:F:KOLEA,N22354W155133..CLUTS,N23002W154393.R465.CINNY,N36109W124456..OAL,N38002W117462.J58.ILC,N38150W114237..EYELO,N38455W110469..SAKES,N38500W110163.J80.DBL,N39264W106537F5E1' - const decodeResult = plugin.decode({ text: text }); + message.text = 'FPN/TS155631,170224/SN155631/RP:DA:PHNL:AA:KASE:D:MKK5.KOLEA:F:KOLEA,N22354W155133..CLUTS,N23002W154393.R465.CINNY,N36109W124456..OAL,N38002W117462.J58.ILC,N38150W114237..EYELO,N38455W110469..SAKES,N38500W110163.J80.DBL,N39264W106537F5E1' + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe('full'); @@ -174,8 +175,8 @@ describe('Label_H1 FPN', () => { test('decodes Label H1 Preamble FPN with FN', () => { // https://app.airframes.io/messages/3281723743 - const text = 'FPN/RP:DA:KSEA:AA:KPHX:D:SUMMA2.SUMMA:F:SUMMA,N46371W121593..LTJ,N45428W121061..IMB,N44389W119427.Q35..CORKR,N36050W112240..TENTS,N35295W112271:A:BRUSR1.TENTS/FNFFT17245D16'; - const decodeResult = plugin.decode({ text: text }); + message.text = 'FPN/RP:DA:KSEA:AA:KPHX:D:SUMMA2.SUMMA:F:SUMMA,N46371W121593..LTJ,N45428W121061..IMB,N44389W119427.Q35..CORKR,N36050W112240..TENTS,N35295W112271:A:BRUSR1.TENTS/FNFFT17245D16'; + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe('full'); @@ -200,8 +201,8 @@ describe('Label_H1 FPN', () => { test('decodes Label H1 Preamble #M1BFPN', () => { // https://app.airframes.io/messages/2400593101 - const text = '#M1BFPN/RI:DA:KJFK:AA:KPHX:CR:JFKPHX20..KG701..KG702..KP702..KP703..KD601..KD602..PUB..ALS.J102.GUP:A:EAGUL6.GUP:F:HOMRR90E1'; - const decodeResult = plugin.decode({ text: text }); + message.text = '#M1BFPN/RI:DA:KJFK:AA:KPHX:CR:JFKPHX20..KG701..KG702..KP702..KP703..KD601..KD602..PUB..ALS.J102.GUP:A:EAGUL6.GUP:F:HOMRR90E1'; + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe('full'); @@ -227,8 +228,8 @@ describe('Label_H1 FPN', () => { // This might move to a different parser, but while we're here... test('decodes Label H1 #M1BFPN No Preamble', () => { // https://app.airframes.io/messages/2400409588 - const text = 'F37AKL0767#M1BFPN/TS232008,022324/RP:DA:TNCA:AA:TNCB:R:11O:D:ADRI1F..IRLEP.A574..PJG:AP:RNV10(10O)/PR,,110,,183,7,13,,M7,25,,,P30,M40,36090,13,3455,300/DTTNCB,10O,119,23440847C0'; - const decodeResult = plugin.decode({ text: text }); + message.text = 'F37AKL0767#M1BFPN/TS232008,022324/RP:DA:TNCA:AA:TNCB:R:11O:D:ADRI1F..IRLEP.A574..PJG:AP:RNV10(10O)/PR,,110,,183,7,13,,M7,25,,,P30,M40,36090,13,3455,300/DTTNCB,10O,119,23440847C0'; + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe('partial'); @@ -252,18 +253,18 @@ describe('Label_H1 FPN', () => { }); test('decodes Label H1 Preamble FPN ', () => { - const text = 'FPN Bogus message'; - const decodeResult = plugin.decode({ text: text }); + message.text = 'FPN Bogus message'; + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(false); expect(decodeResult.decoder.decodeLevel).toBe('none'); expect(decodeResult.formatted.description).toBe('Unknown'); - expect(decodeResult.message.text).toBe(text); + expect(decodeResult.message).toBe(message); }); test('decode RM', () => { // TODO: enable - const text = 'FPN/ID88194A,RCH857,PMZM107QP021/MR2,/RM:AA:FJDG:F:DOH.N300..NOLSU.P307..SETSI.P307..PARAR..N20000E063000..RIGLO.L516..ELKEL.L516..BUMMR/WP,,,,E3E9'; - const decodeResult = plugin.decode({ text: text }); + message.text = 'FPN/ID88194A,RCH857,PMZM107QP021/MR2,/RM:AA:FJDG:F:DOH.N300..NOLSU.P307..SETSI.P307..PARAR..N20000E063000..RIGLO.L516..ELKEL.L516..BUMMR/WP,,,,E3E9'; + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe('partial'); @@ -278,12 +279,12 @@ describe('Label_H1 FPN', () => { expect(decodeResult.raw.checksum).toBe(0xe3e9); expect(decodeResult.formatted.description).toBe('Flight Plan'); expect(decodeResult.formatted.items.length).toBe(6); - expect(decodeResult.message.text).toBe(text); + expect(decodeResult.message).toBe(message); }); test('Decodes Empty Message', () => { - const text = 'FPNEEE6'; - const decodeResult = plugin.decode({ text: text }); + message.text = 'FPNEEE6'; + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe('full'); diff --git a/lib/plugins/Label_H1_FTX.test.ts b/lib/plugins/Label_H1_FTX.test.ts index fc7aa05..fd4201f 100644 --- a/lib/plugins/Label_H1_FTX.test.ts +++ b/lib/plugins/Label_H1_FTX.test.ts @@ -4,6 +4,7 @@ import { Label_H1 } from './Label_H1'; describe('Label_H1 FTX', () => { let plugin: Label_H1; + const message = {label: 'H1', text: ''}; beforeEach(() => { const decoder = new MessageDecoder(); @@ -13,8 +14,8 @@ describe('Label_H1 FTX', () => { // disabled due to checksum failure. could be hidden characters in the source message test.skip('decodes Label H1 Preamble FTX valid', () => { // https://app.airframes.io/messages/3402014738 - const text = 'FTX/ID23544S,HIFI21,7VZ007B1S276/MR2,/FXFYI .. TAF KSUX 021720Z 0218 0318 20017G28KT P6SM SKC FM022200 22012G18KT P6SM SKC .. PUTS YOUR CXWIND AT 26KT ON RWY 13 .. REDUCES TO 18KT AT 22Z4FEF' - const decodeResult = plugin.decode({ text: text }); + message.text = 'FTX/ID23544S,HIFI21,7VZ007B1S276/MR2,/FXFYI .. TAF KSUX 021720Z 0218 0318 20017G28KT P6SM SKC FM022200 22012G18KT P6SM SKC .. PUTS YOUR CXWIND AT 26KT ON RWY 13 .. REDUCES TO 18KT AT 22Z4FEF' + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe('partial'); @@ -34,8 +35,8 @@ describe('Label_H1 FTX', () => { // disabled due to checksum failure. could be hidden characters in the source message test.skip('decodes Label H1 Preamble - #MDFTX valid', () => { // https://app.airframes.io/messages/3400555283 - const text = '- #MDFTX/ID77170A,RCH836,ABZ01G6XH273/MR2,/FXIRAN IS LAUNCHING MISSILES TOWARDS ISRAEL. YOUR FLIGHT PATH IS CURRENTLY NORTH OF PROJECTED MISSILE TRACKS. EXERCIZE EXTREME CAUTION.4A99' - const decodeResult = plugin.decode({ text: text }); + message.text = '- #MDFTX/ID77170A,RCH836,ABZ01G6XH273/MR2,/FXIRAN IS LAUNCHING MISSILES TOWARDS ISRAEL. YOUR FLIGHT PATH IS CURRENTLY NORTH OF PROJECTED MISSILE TRACKS. EXERCIZE EXTREME CAUTION.4A99' + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe('partial'); @@ -53,20 +54,20 @@ describe('Label_H1 FTX', () => { }); test('decodes example 3', () => { - const text = '- #MDFTX/ID80052A,RCH648,PAM362201029/MR1,/FXHID0B1' - const decodeResult = plugin.decode({ text: text }); + message.text = '- #MDFTX/ID80052A,RCH648,PAM362201029/MR1,/FXHID0B1' + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); }); test('does not decode invalid message', () => { - const text = 'FTX Bogus message'; - const decodeResult = plugin.decode({ text: text }); + message.text = 'FTX Bogus message'; + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(false); expect(decodeResult.decoder.decodeLevel).toBe('none'); expect(decodeResult.formatted.description).toBe('Unknown'); - expect(decodeResult.message.text).toBe(text); + expect(decodeResult.message).toBe(message); }); }); diff --git a/lib/plugins/Label_H1_INI.test.ts b/lib/plugins/Label_H1_INI.test.ts index ca835ed..de9f2ce 100644 --- a/lib/plugins/Label_H1_INI.test.ts +++ b/lib/plugins/Label_H1_INI.test.ts @@ -4,6 +4,7 @@ import { Label_H1 } from './Label_H1'; describe('Label_H1 INI', () => { let plugin: Label_H1; + const message = {label: 'H1', text: ''}; beforeEach(() => { const decoder = new MessageDecoder(); @@ -12,8 +13,8 @@ describe('Label_H1 INI', () => { test('decodes valid', () => { // https://app.airframes.io/messages/3401344857 - const text = 'INI/ID70045B,RCH2050,AJM363201271/MR2,000/AFKDOV,KBHM/TD271115,131545EE' - const decodeResult = plugin.decode({ text: text }); + message.text = 'INI/ID70045B,RCH2050,AJM363201271/MR2,000/AFKDOV,KBHM/TD271115,131545EE' + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe('partial'); @@ -38,8 +39,8 @@ describe('Label_H1 INI', () => { test('#MD valid', () => { // https://app.airframes.io/messages/3400583424 - const text = '- #MDINI/ID99206A,RCH206,AAM7029H1275/MR0,0/AFKSUU,KBUR/TD011535,1535EE66' - const decodeResult = plugin.decode({ text: text }); + message.text = '- #MDINI/ID99206A,RCH206,AAM7029H1275/MR0,0/AFKSUU,KBUR/TD011535,1535EE66' + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe('partial'); @@ -64,12 +65,12 @@ describe('Label_H1 INI', () => { test('INI ', () => { - const text = 'INI Bogus message'; - const decodeResult = plugin.decode({ text: text }); + message.text = 'INI Bogus message'; + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(false); expect(decodeResult.decoder.decodeLevel).toBe('none'); expect(decodeResult.formatted.description).toBe('Unknown'); - expect(decodeResult.message.text).toBe(text); + expect(decodeResult.message).toBe(message); }); }); diff --git a/lib/plugins/Label_H1_OHMA.test.ts b/lib/plugins/Label_H1_OHMA.test.ts index 01eda3b..26d161a 100644 --- a/lib/plugins/Label_H1_OHMA.test.ts +++ b/lib/plugins/Label_H1_OHMA.test.ts @@ -1,6 +1,14 @@ import { MessageDecoder } from '../MessageDecoder'; import { Label_H1_OHMA } from './Label_H1_OHMA'; +describe('Label H1 Preamble OHMA', () => { + let plugin: Label_H1_OHMA; + const message = {label: 'H1', text: ''}; + beforeEach(() => { + const decoder = new MessageDecoder(); + plugin = new Label_H1_OHMA(decoder); + }); + test('matches Label H1 Preamble OHMA qualifiers', () => { const decoder = new MessageDecoder(); const decoderPlugin = new Label_H1_OHMA(decoder); @@ -15,18 +23,15 @@ test('matches Label H1 Preamble OHMA qualifiers', () => { }); test('decodes Label H1 Preamble OHMA valid', () => { - const decoder = new MessageDecoder(); - const decoderPlugin = new Label_H1_OHMA(decoder); - // https://app.airframes.io/messages/3126721669 - const text = 'OHMAeJy1Ul2PojAU/SubPiuhlA/ljQHMkAElgDuTXTakqx2nCaAp1WQz8b/vFXTGEcw+LX26veece88p7+jARMO3NbKRpqhohCrWNHTDoH7P0arkrJbBOkd2jhaPkZOjUX6BeFSytqGpmj5WJ2NVyzC2ydTWiWJN9B8teE0lBRSIUS52Ja1ZA+VPqCXl5Xxf/WaiVZkTyzD0bsB2zcr2si1fS755kxfamu2okHvBHNDbCukCuMU+PSzSFk+F4Ada9vqLxLvSuxq9dELDtK56IdukEqZkvOpbVG0VXIJFYnYW2QFCuqzXFm5Jm+YcG2xLKyYFX32CB3V70XXQPzv2EX8R+Vn3BrxuJK1XH2HW9KxYyRgWv5gDJCSx72CnOH8dR1/RLhXl9+4f6MF1xRhgJPuSNUzeI1nE+hY5L7ZtO4/RmFjRQwj+4MNqCJf4pNhp/reosggXbhjEke8Fzrxwk2WQ+kUSZ8U/wgNi5kcxhpy9G2PENBVtqt+kcSZoQ4QJViyTDBO8YDYb4GBDwQTfUOIIx4mfpsvEH1xMhzHmfc7gbkTR1R7HcZ9m4eL53m5YmeAhTjA/jbrDMhULT08P3p0jOv4FG0dfvQ=='; - const decodeResult = decoderPlugin.decode({ text: text }); - + message.text = 'OHMAeJy1Ul2PojAU/SubPiuhlA/ljQHMkAElgDuTXTakqx2nCaAp1WQz8b/vFXTGEcw+LX26veece88p7+jARMO3NbKRpqhohCrWNHTDoH7P0arkrJbBOkd2jhaPkZOjUX6BeFSytqGpmj5WJ2NVyzC2ydTWiWJN9B8teE0lBRSIUS52Ja1ZA+VPqCXl5Xxf/WaiVZkTyzD0bsB2zcr2si1fS755kxfamu2okHvBHNDbCukCuMU+PSzSFk+F4Ada9vqLxLvSuxq9dELDtK56IdukEqZkvOpbVG0VXIJFYnYW2QFCuqzXFm5Jm+YcG2xLKyYFX32CB3V70XXQPzv2EX8R+Vn3BrxuJK1XH2HW9KxYyRgWv5gDJCSx72CnOH8dR1/RLhXl9+4f6MF1xRhgJPuSNUzeI1nE+hY5L7ZtO4/RmFjRQwj+4MNqCJf4pNhp/reosggXbhjEke8Fzrxwk2WQ+kUSZ8U/wgNi5kcxhpy9G2PENBVtqt+kcSZoQ4QJViyTDBO8YDYb4GBDwQTfUOIIx4mfpsvEH1xMhzHmfc7gbkTR1R7HcZ9m4eL53m5YmeAhTjA/jbrDMhULT08P3p0jOv4FG0dfvQ=='; + const decodeResult = plugin.decode(message); + expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe('full'); expect(decodeResult.decoder.name).toBe('label-h1-ohma'); expect(decodeResult.formatted.description).toBe('OHMA Message'); - expect(decodeResult.message.text).toBe(text); + expect(decodeResult.message).toBe(message); expect(decodeResult.raw.ohma).toBe('{\"version\":\"2.0\",\"message\":\"{\\\"clientId\\\":\\\"OHMA\\\",\\\"messageDate\\\":\\\"2024-08-02T11:39:43.784Z\\\",\\\"data\\\":{\\\"airplanes\\\":[{\\\"tailNumber\\\":\\\"N37554\\\",\\\"model\\\":\\\"\\\",\\\"flights\\\":[{\\\"departureAirportCode\\\":\\\"KBOS\\\",\\\"arrivalAirportCode\\\":\\\"KORD\\\",\\\"flightNumber\\\":\\\"UAL567\\\",\\\"flightLegStartTime\\\":\\\"2024-08-02T10:01:33.736Z\\\",\\\"events\\\":[{\\\"eventClassId\\\":\\\"parametric\\\",\\\"eventTime\\\":\\\"2024-08-02T11:39:43.784Z\\\",\\\"eventType\\\":\\\"OHMA_META\\\",\\\"instances\\\":[{\\\"name\\\":\\\"mtPartNumber\\\",\\\"values\\\":[\\\"\\\"]},{\\\"name\\\":\\\"mtCarlVersion\\\",\\\"values\\\":[\\\"4.5\\\"]},{\\\"name\\\":\\\"mtRulesetVersion\\\",\\\"values\\\":[\\\"737 MAX:::AHM-37MBL8-000010L:::1\\\"]}]},{\\\"eventClassId\\\":\\\"parametric\\\",\\\"eventTime\\\":\\\"2024-08-02T11:39:43.784Z\\\",\\\"eventType\\\":\\\"TM1_CLIPMEDIAN_CRUISE_RPT_A\\\",\\\"instances\\\":[{\\\"name\\\":\\\"TM1TEMP1_MED\\\",\\\"values\\\":[366.294]},{\\\"name\\\":\\\"TM1TEMP2_MED\\\",\\\"values\\\":[381.763]},{\\\"name\\\":\\\"TM1TEMPDIFF_MED\\\",\\\"values\\\":[15.131]},{\\\"name\\\":\\\"PM1PRESSURE1_MED\\\",\\\"values\\\":[34.766]},{\\\"name\\\":\\\"PM1PRESSURE2_MED\\\",\\\"values\\\":[33.406]},{\\\"name\\\":\\\"PACKFLOWDIFF_MED\\\",\\\"values\\\":[11.816]},{\\\"name\\\":\\\"PACKINPRESDIFF_MED\\\",\\\"values\\\":[6.719]}]}]}]}]}}\"}'); expect(decodeResult.formatted.items.length).toBe(1); expect(decodeResult.formatted.items[0].type).toBe('ohma'); @@ -36,18 +41,15 @@ test('decodes Label H1 Preamble OHMA valid', () => { }); test('decodes Label H1 Preamble OHMA RTN', () => { - const decoder = new MessageDecoder(); - const decoderPlugin = new Label_H1_OHMA(decoder); - // https://app.airframes.io/messages/3125950763 - const text = '/RTNBOCR.OHMAeJyrVipLLSrOzM9TslIy0jNQ0lHKTS0uTkxPBfJL81JS0zLzUlOUagH7TQzW' - const decodeResult = decoderPlugin.decode({ text: text }, { debug: true }); - + message.text = '/RTNBOCR.OHMAeJyrVipLLSrOzM9TslIy0jNQ0lHKTS0uTkxPBfJL81JS0zLzUlOUagH7TQzW' + const decodeResult = plugin.decode(message, { debug: true }); + expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe('full'); expect(decodeResult.decoder.name).toBe('label-h1-ohma'); expect(decodeResult.formatted.description).toBe('OHMA Message'); - expect(decodeResult.message.text).toBe(text); + expect(decodeResult.message).toBe(message); expect(decodeResult.raw.ohma).toBe('{\"version\":\"2.0\",\"message\":\"undefined\"}'); expect(decodeResult.formatted.items.length).toBe(1); expect(decodeResult.formatted.items[0].type).toBe('ohma'); @@ -57,18 +59,15 @@ test('decodes Label H1 Preamble OHMA RTN', () => { }); test.skip('decodes Label H1 Preamble OHMA partial', () => { - const decoder = new MessageDecoder(); - const decoderPlugin = new Label_H1_OHMA(decoder); - // https://app.airframes.io/messages/3126673935 - const text = '#T1B/RTNBOCR.OHMAeJy1km+vmjAUxr/K0tfSlPLXvuMi5pJRL0Hc3MZCOu0cSUFTqsly43dfBb3zKmavBq9O+3uec84Dr+DAZVttG0AAhgiMQM3blm24rl8LsBIVb1S8LgApwMszDQowKi7IhCneXWCEbQP5BsI58gmyiWVD3/S+dvCaKaYpbcYquROs4a0uv+lasUrM9vUPLjuXZ' - const decodeResult = decoderPlugin.decode({ text: text }, { debug: true }); + message.text = '#T1B/RTNBOCR.OHMAeJy1km+vmjAUxr/K0tfSlPLXvuMi5pJRL0Hc3MZCOu0cSUFTqsly43dfBb3zKmavBq9O+3uec84Dr+DAZVttG0AAhgiMQM3blm24rl8LsBIVb1S8LgApwMszDQowKi7IhCneXWCEbQP5BsI58gmyiWVD3/S+dvCaKaYpbcYquROs4a0uv+lasUrM9vUPLjuXZ' + const decodeResult = plugin.decode(message, { debug: true }); expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe('full'); expect(decodeResult.decoder.name).toBe('label-h1-ohma'); expect(decodeResult.formatted.description).toBe('OHMA Message'); - expect(decodeResult.message.text).toBe(text); + expect(decodeResult.message).toBe(message); expect(decodeResult.raw.ohma).toBe('{"version":"2.0","message":"{\"clientId\":\"OHMA\",\"messageDate\":\"2024-08-02T08:04:34.817Z\",\"data\":{\"airplanes\":[{\"tailNumber\":\"'); expect(decodeResult.formatted.items.length).toBe(1); expect(decodeResult.formatted.items[0].type).toBe('ohma'); @@ -78,18 +77,15 @@ test.skip('decodes Label H1 Preamble OHMA partial', () => { }); test('decodes Label H1 Preamble OHMA partial', () => { - const decoder = new MessageDecoder(); - const decoderPlugin = new Label_H1_OHMA(decoder); - // https://app.airframes.io/messages/3284234176 - const text = 'OHMAeJy1lF+PmkAUxb9Kw/MyGRj+v1HEYhaQ4OxqrI2Z6tSSIBpAk2bjd+8Aau3szCZ9qD4NnN899x7v+Kacad0Uh0rxFB1A5UnZ06YhO8rObytlUxa0aifbleKtlGmU+CvlaXWTjEhL+xc61A0Vuiq0MHQ90/UMBJBjL3vxlrSEqVgxUtTHklS0Ycev7NySokxP+++07qvMMj' - const decodeResult = decoderPlugin.decode({ text: text }, { debug: true }); - + message.text = 'OHMAeJy1lF+PmkAUxb9Kw/MyGRj+v1HEYhaQ4OxqrI2Z6tSSIBpAk2bjd+8Aau3szCZ9qD4NnN899x7v+Kacad0Uh0rxFB1A5UnZ06YhO8rObytlUxa0aifbleKtlGmU+CvlaXWTjEhL+xc61A0Vuiq0MHQ90/UMBJBjL3vxlrSEqVgxUtTHklS0Ycev7NySokxP+++07qvMMj' + const decodeResult = plugin.decode(message, { debug: true }); + expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe('full'); expect(decodeResult.decoder.name).toBe('label-h1-ohma'); expect(decodeResult.formatted.description).toBe('OHMA Message'); - expect(decodeResult.message.text).toBe(text); + expect(decodeResult.message).toBe(message); expect(decodeResult.raw.ohma).toBe('{\"version\":\"2.0\",\"message\":\"{\\\"clientId\\\":\\\"OHMA\\\",\\\"messageDate\\\":\\\"2024-09-06T09:59:43.387Z\\\",\\\"data\\\":{\\\"airplanes\\\":[{\\\"tailNumber\\\":\\\"SP'); expect(decodeResult.formatted.items.length).toBe(1); expect(decodeResult.formatted.items[0].type).toBe('ohma'); @@ -99,16 +95,14 @@ test('decodes Label H1 Preamble OHMA partial', () => { }); test('decodes Label H1 Preamble OHMA invalid', () => { - const decoder = new MessageDecoder(); - const decoderPlugin = new Label_H1_OHMA(decoder); - - const text = 'OHMA '; - const decodeResult = decoderPlugin.decode({ text: text }); + message.text = 'OHMA '; + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(false); expect(decodeResult.decoder.decodeLevel).toBe('none'); expect(decodeResult.decoder.name).toBe('label-h1-ohma'); expect(decodeResult.formatted.description).toBe('OHMA Message'); - expect(decodeResult.message.text).toBe(text); - expect(decodeResult.remaining.text).toBe(text); + expect(decodeResult.message).toBe(message); + expect(decodeResult.remaining.text).toBe(message.text); +}); }); \ No newline at end of file diff --git a/lib/plugins/Label_H1_PER.test.ts b/lib/plugins/Label_H1_PER.test.ts index 099187e..f1c062e 100644 --- a/lib/plugins/Label_H1_PER.test.ts +++ b/lib/plugins/Label_H1_PER.test.ts @@ -4,6 +4,7 @@ import { Label_H1 } from './Label_H1'; describe('Label_H1 PER', () => { let plugin: Label_H1; + const message = {label: 'H1', text: ''}; beforeEach(() => { const decoder = new MessageDecoder(); @@ -12,8 +13,8 @@ describe('Label_H1 PER', () => { test('decodes short variant', () => { - const text = 'PER/PR1337,262,320,222,,60,24,275103,M53,180,P52,P02917' - const decodeResult = plugin.decode({ text: text }); + message.text = 'PER/PR1337,262,320,222,,60,24,275103,M53,180,P52,P02917' + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe('partial'); @@ -23,8 +24,8 @@ describe('Label_H1 PER', () => { }); test('long variant', () => { - const text = 'PER/PR1218,276,340,134,,0,68,,M56,180,,,P30,P0,33936,,1084,284388D' - const decodeResult = plugin.decode({ text: text }); + message.text = 'PER/PR1218,276,340,134,,0,68,,M56,180,,,P30,P0,33936,,1084,284388D' + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe('partial'); @@ -35,12 +36,12 @@ describe('Label_H1 PER', () => { test('does not decode invalid message', () => { - const text = 'PER Bogus message'; - const decodeResult = plugin.decode({ text: text }); + message.text = 'PER Bogus message'; + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(false); expect(decodeResult.decoder.decodeLevel).toBe('none'); expect(decodeResult.formatted.description).toBe('Unknown'); - expect(decodeResult.message.text).toBe(text); + expect(decodeResult.message).toBe(message); }); }); diff --git a/lib/plugins/Label_H1_POS.test.ts b/lib/plugins/Label_H1_POS.test.ts index b3bf7b0..0f1a291 100644 --- a/lib/plugins/Label_H1_POS.test.ts +++ b/lib/plugins/Label_H1_POS.test.ts @@ -4,6 +4,7 @@ import { Label_H1 } from './Label_H1'; describe('Label_H1 POS', () => { let plugin: Label_H1; + const message = {label: 'H1', text: ''}; beforeEach(() => { const decoder = new MessageDecoder(); @@ -12,13 +13,13 @@ describe('Label_H1 POS', () => { test('variant 1', () => { - const text = 'POSN43312W123174,EASON,215754,370,EBINY,220601,ELENN,M48,02216,185/TS215754,0921227A40'; - const decodeResult = plugin.decode({ text: text }); + message.text = 'POSN43312W123174,EASON,215754,370,EBINY,220601,ELENN,M48,02216,185/TS215754,0921227A40'; + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe('partial'); expect(decodeResult.formatted.description).toBe('Position Report'); - expect(decodeResult.message.text).toBe(text); + expect(decodeResult.message).toBe(message); expect(decodeResult.raw.position.latitude).toBe(43.52); expect(decodeResult.raw.position.longitude).toBe(-123.29); expect(decodeResult.raw.altitude).toBe(37000); @@ -46,13 +47,13 @@ describe('Label_H1 POS', () => { test('variant 2', () => { - const text = 'POSN45209W122550,PEGTY,220309,134,MINNE,220424,HISKU,M6,060013,269,366,355K,292K,730A5B'; - const decodeResult = plugin.decode({ text: text }); + message.text = 'POSN45209W122550,PEGTY,220309,134,MINNE,220424,HISKU,M6,060013,269,366,355K,292K,730A5B'; + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe('partial'); expect(decodeResult.formatted.description).toBe('Position Report'); - expect(decodeResult.message.text).toBe(text); + expect(decodeResult.message).toBe(message); expect(decodeResult.raw.position.latitude).toBe(45.348333333333336); expect(decodeResult.raw.position.longitude).toBe(-122.91666666666667); expect(decodeResult.raw.altitude).toBe(13400); @@ -80,13 +81,13 @@ describe('Label_H1 POS', () => { test('variant 3', () => { - const text = 'POSN43030W122406,IBALL,220516,380,AARON,220816,MOXEE,M47,0047,86/TS220516,092122BF64'; - const decodeResult = plugin.decode({ text: text }); + message.text = 'POSN43030W122406,IBALL,220516,380,AARON,220816,MOXEE,M47,0047,86/TS220516,092122BF64'; + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe('partial'); expect(decodeResult.formatted.description).toBe('Position Report'); - expect(decodeResult.message.text).toBe(text); + expect(decodeResult.message).toBe(message); expect(decodeResult.raw.position.latitude).toBe(43.05); expect(decodeResult.raw.position.longitude).toBe(-122.67666666666666); expect(decodeResult.raw.altitude).toBe(38000); @@ -114,13 +115,13 @@ describe('Label_H1 POS', () => { test('variant 4', () => { - const text = 'POSN33225W079428,SCOOB,232933,340,ENEME,235712,FETAL,M42,003051,15857F6'; - const decodeResult = plugin.decode({ text: text }); + message.text = 'POSN33225W079428,SCOOB,232933,340,ENEME,235712,FETAL,M42,003051,15857F6'; + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe('partial'); expect(decodeResult.formatted.description).toBe('Position Report'); - expect(decodeResult.message.text).toBe(text); + expect(decodeResult.message).toBe(message); expect(decodeResult.raw.position.latitude).toBe(33.375); expect(decodeResult.raw.position.longitude).toBe(-79.71333333333334); expect(decodeResult.raw.altitude).toBe(34000); @@ -150,13 +151,13 @@ describe('Label_H1 POS', () => { test('variant 5', () => { // https://app.airframes.io/messages/2184441420 - const text = 'POSN38531W078000,CSN-01,112309,310,CYN-02,114151,ACK,M40,26067,22479226'; - const decodeResult = plugin.decode({ text: text }); + message.text = 'POSN38531W078000,CSN-01,112309,310,CYN-02,114151,ACK,M40,26067,22479226'; + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe('partial'); expect(decodeResult.formatted.description).toBe('Position Report'); - expect(decodeResult.message.text).toBe(text); + expect(decodeResult.message).toBe(message); expect(decodeResult.raw.position.latitude).toBe(38.885); expect(decodeResult.raw.position.longitude).toBe(-78.000); expect(decodeResult.raw.altitude).toBe(31000); @@ -185,13 +186,13 @@ describe('Label_H1 POS', () => { test('variant 6', () => { // https://app.airframes.io/messages/2295027018 - const text = 'POS/RFSCOOB.KEMPR.ECG.OHPEA.TOMMZ.OXANA.ZZTOP.OMALA.WILYY.KANUX.GALVN.KASAR.LNHOM.SLUKA.FIPEK.PUYYA.PLING.KOLAO.JETSSF2FC'; - const decodeResult = plugin.decode({ text: text }); + message.text = 'POS/RFSCOOB.KEMPR.ECG.OHPEA.TOMMZ.OXANA.ZZTOP.OMALA.WILYY.KANUX.GALVN.KASAR.LNHOM.SLUKA.FIPEK.PUYYA.PLING.KOLAO.JETSSF2FC'; + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe('full'); expect(decodeResult.formatted.description).toBe('Position Report'); - expect(decodeResult.message.text).toBe(text); + expect(decodeResult.message).toBe(message); expect(decodeResult.formatted.items.length).toBe(3); expect(decodeResult.formatted.items[0].label).toBe('Route Status'); expect(decodeResult.formatted.items[0].value).toBe('Route Filed'); @@ -204,20 +205,20 @@ describe('Label_H1 POS', () => { test('', () => { - const text = 'POS Bogus message'; - const decodeResult = plugin.decode({ text: text }); + message.text = 'POS Bogus message'; + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(false); expect(decodeResult.decoder.decodeLevel).toBe('none'); expect(decodeResult.formatted.description).toBe('Unknown'); - expect(decodeResult.message.text).toBe(text); + expect(decodeResult.message).toBe(message); }); test('#short variant', () => { // https://app.airframes.io/messages/2368445399 - const text = '#M1BPOSN37533W096476,ROKNE,185212,330,DOSOA,190059,BUM,M50,272100,1571541' - const decodeResult = plugin.decode({ text: text }); + message.text = '#M1BPOSN37533W096476,ROKNE,185212,330,DOSOA,190059,BUM,M50,272100,1571541' + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe('partial'); @@ -241,8 +242,8 @@ describe('Label_H1 POS', () => { test.skip('# long variant', () => { // https://app.airframes.io/messages/2366921571 - const text = '#M1BPOSN29510W098448,RW04,140407,188,TATAR,4,140445,ALISS,M12,246048,374K,282K,1223,133,KSAT,KELP,,70,151437,415,73/PR1223,222,240,133,,44,40,252074,M22,180,P0,P0/RI:DA:KSAT:AA:KELP..TATAR:D:ALISS6:F:ALISS..FST'; - const decodeResult = plugin.decode({ text: text }); + message.text = '#M1BPOSN29510W098448,RW04,140407,188,TATAR,4,140445,ALISS,M12,246048,374K,282K,1223,133,KSAT,KELP,,70,151437,415,73/PR1223,222,240,133,,44,40,252074,M22,180,P0,P0/RI:DA:KSAT:AA:KELP..TATAR:D:ALISS6:F:ALISS..FST'; + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe('partial'); @@ -274,8 +275,8 @@ describe('Label_H1 POS', () => { test('# variant 7', () => { // https://app.airframes.io/messages/2434835903 - const text = 'F37AMCLL93#M1BPOS/ID746026,,/DC03032024,173207/MR1,/ET031846/PSN42579W108090,173207,320,WAIDE,031759,WEDAK,M49,267070,T468/CG264,110,360/FB742/VR324E17'; - const decodeResult = plugin.decode({ text: text }); + message.text = 'F37AMCLL93#M1BPOS/ID746026,,/DC03032024,173207/MR1,/ET031846/PSN42579W108090,173207,320,WAIDE,031759,WEDAK,M49,267070,T468/CG264,110,360/FB742/VR324E17'; + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe('partial'); @@ -308,8 +309,8 @@ describe('Label_H1 POS', () => { test('variant 8', () => { // https://app.airframes.io/messages/2500335076 - const text = 'POS/TS080616,210324/DTMMGL,29O,64,103316/PR1754,231,350,189,,0,0,,M45,185,,,P16,P0,36000,,1565,250/RP:DA:MMTJ:AA:MMGL:R:27O:D:TUMA2B..SANFE.UT4..LMM:A:LONV1D:AP:ILSZ29.PLADE(29O)9D1C'; - const decodeResult = plugin.decode({ text: text }); + message.text = 'POS/TS080616,210324/DTMMGL,29O,64,103316/PR1754,231,350,189,,0,0,,M45,185,,,P16,P0,36000,,1565,250/RP:DA:MMTJ:AA:MMGL:R:27O:D:TUMA2B..SANFE.UT4..LMM:A:LONV1D:AP:ILSZ29.PLADE(29O)9D1C'; + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe('partial'); @@ -345,8 +346,8 @@ describe('Label_H1 POS', () => { test('variant 1 with offset', () => { // https://app.airframes.io/messages/2500335076 - const text = 'POSN33204W114082,BLH176-0093,062056,330,SALOM180-0127,062211,KOFFA180-0148,M49,30628,3201251'; - const decodeResult = plugin.decode({ text: text }); + message.text = 'POSN33204W114082,BLH176-0093,062056,330,SALOM180-0127,062211,KOFFA180-0148,M49,30628,3201251'; + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe('partial'); @@ -368,8 +369,8 @@ describe('Label_H1 POS', () => { test('variant 9', () => { // https://app.airframes.io/messages/3110992692 - const text = 'POSN39164W077259,FORKL,231828,51,THRET,231917,TOOPR,P16,1726,167,/TS231828,2807244841'; - const decodeResult = plugin.decode({ text: text }); + message.text = 'POSN39164W077259,FORKL,231828,51,THRET,231917,TOOPR,P16,1726,167,/TS231828,2807244841'; + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe('partial'); @@ -391,8 +392,8 @@ describe('Label_H1 POS', () => { test('variant 10', () => { // https://app.airframes.io/messages/3393214562 - const text = 'POSN51194E004527,EH556,104241,174,CIV,105208,MEDIL,M20,290016,191/RP:DA:EHEH:AA:LEIB..CIV.N872.MEDIL.UN872.KOVIN.UM728.RESMI.UN857.DISAK..DIRMO..ETAMO..ADEKA..MOKDI..MEN..BADAM..KANIG..KENAS.N855.POS/PR1496,150,370,191,,55,10,248028,M47,30,P19,P0/FHCIV,105208,273K,3226,175,M41,252027,450,N,221,62.MEDIL,105411,267K,3439,172,M44,250028,459,N,203,15.PITHI,105533,259K,3584,170,M47,249028,456,N,203,10.LESDO,105859,252K,3700,167,M47,248028,456,N,203,25.KOVIN,110153,252K,3700,164,M47,248028,456,N,203,21.DUCRA,110705,252K,3700,160,M47,248028,456,N,213,37.RESMI,111101,251K,3700,156,M47,248028,455,N,213,28.DEKOD,111325,251K,3700,154,M47,248028,455,N,192,17.DISAK,111438,251K,3700,153,M47,248028,454,N,172,9.DIRMO,112306,251K,3700,145,M47,248028,454,N,178,63.ETAMO,112514,250K,3700,143,M47,248028,453,N,158,16.ADEKA,113339,250K,3700,136,M47,248028,454,N,147,64.MOKDI,114139,251K,3700,129,M47,248028,454,N,181,59.MEN,114429,251K,3700,127,M47,248028,454,N,181,21.BADAM,114843,251K,3700,123,M47,248028,454,N,179,31.KANIG,120154,250K,3700,111,M47,248028,453,N,185,97.KENAS,121800,250K,3700,98,M47,248028,453,N,177,119.POS,122257,250K,3018,96,M45,248023,395,N,182,34.LEIB,124503,150K,2,89,P15,000000,161,N,231,103/DTLEIB,,89,124503,7353B2'; - const decodeResult = plugin.decode({ text: text }); + message.text = 'POSN51194E004527,EH556,104241,174,CIV,105208,MEDIL,M20,290016,191/RP:DA:EHEH:AA:LEIB..CIV.N872.MEDIL.UN872.KOVIN.UM728.RESMI.UN857.DISAK..DIRMO..ETAMO..ADEKA..MOKDI..MEN..BADAM..KANIG..KENAS.N855.POS/PR1496,150,370,191,,55,10,248028,M47,30,P19,P0/FHCIV,105208,273K,3226,175,M41,252027,450,N,221,62.MEDIL,105411,267K,3439,172,M44,250028,459,N,203,15.PITHI,105533,259K,3584,170,M47,249028,456,N,203,10.LESDO,105859,252K,3700,167,M47,248028,456,N,203,25.KOVIN,110153,252K,3700,164,M47,248028,456,N,203,21.DUCRA,110705,252K,3700,160,M47,248028,456,N,213,37.RESMI,111101,251K,3700,156,M47,248028,455,N,213,28.DEKOD,111325,251K,3700,154,M47,248028,455,N,192,17.DISAK,111438,251K,3700,153,M47,248028,454,N,172,9.DIRMO,112306,251K,3700,145,M47,248028,454,N,178,63.ETAMO,112514,250K,3700,143,M47,248028,453,N,158,16.ADEKA,113339,250K,3700,136,M47,248028,454,N,147,64.MOKDI,114139,251K,3700,129,M47,248028,454,N,181,59.MEN,114429,251K,3700,127,M47,248028,454,N,181,21.BADAM,114843,251K,3700,123,M47,248028,454,N,179,31.KANIG,120154,250K,3700,111,M47,248028,453,N,185,97.KENAS,121800,250K,3700,98,M47,248028,453,N,177,119.POS,122257,250K,3018,96,M45,248023,395,N,182,34.LEIB,124503,150K,2,89,P15,000000,161,N,231,103/DTLEIB,,89,124503,7353B2'; + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe('partial'); @@ -427,8 +428,8 @@ describe('Label_H1 POS', () => { test('does not decode /.POS', () => { // https://app.airframes.io/messages/2500488708 - const text = '/.POS/TS100316,210324/PSS35333W058220,,100316,250,S37131W059150,101916,S39387W060377,M23,27282,241,780,MANUAL,0,813E711'; - const decodeResult = plugin.decode({ text: text }); + message.text = '/.POS/TS100316,210324/PSS35333W058220,,100316,250,S37131W059150,101916,S39387W060377,M23,27282,241,780,MANUAL,0,813E711'; + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(false); expect(decodeResult.decoder.decodeLevel).toBe('none'); @@ -436,8 +437,8 @@ describe('Label_H1 POS', () => { }); test('decodes duplicate data', () => { - const text = 'POSN39220W078258,MRB18,044034,340,EYT19,044427,COL20,M49,27369,436,813/PSN39220W078258,MRB18,044034,340,EYT19,044427,COL20,M49,27369,436,813,ECON CRZ,0,25140035' - const decodeResult = plugin.decode({ text: text }); + message.text = 'POSN39220W078258,MRB18,044034,340,EYT19,044427,COL20,M49,27369,436,813/PSN39220W078258,MRB18,044034,340,EYT19,044427,COL20,M49,27369,436,813,ECON CRZ,0,25140035' + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe('partial'); @@ -487,8 +488,8 @@ describe('Label_H1 POS', () => { test('decodes Label H1 Preamble #M1BPOS ', () => { - const text = '#M1BPOS Bogus message'; - const decodeResult = plugin.decode({ text: text }); + message.text = '#M1BPOS Bogus message'; + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(false); expect(decodeResult.decoder.decodeLevel).toBe('none'); diff --git a/lib/plugins/Label_H1_PRG.test.ts b/lib/plugins/Label_H1_PRG.test.ts index 4e0d43e..851a612 100644 --- a/lib/plugins/Label_H1_PRG.test.ts +++ b/lib/plugins/Label_H1_PRG.test.ts @@ -4,6 +4,7 @@ import { Label_H1 } from './Label_H1'; describe('Label_H1 POS', () => { let plugin: Label_H1; + const message = {label: 'H1', text: ''}; beforeEach(() => { const decoder = new MessageDecoder(); @@ -13,8 +14,8 @@ describe('Label_H1 POS', () => { test('decodes Label H1 Preamble PRG message', () => { // https://app.airframes.io/messages/2400672008 - const text = 'PRG/FNEXS67TP/DTEGPF,23O,67,214405,298262'; - const decodeResult = plugin.decode({ text: text }); + message.text = 'PRG/FNEXS67TP/DTEGPF,23O,67,214405,298262'; + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe('full'); @@ -37,8 +38,8 @@ describe('Label_H1 POS', () => { test('decodes Label H1 Preamble PRG/LR', () => { // https://app.airframes.io/messages/2400672684 - const text = 'PRG/LR,000855,SWA786,KBWI,KBOS,04R,25,1285,1192,93,1284,P4,001004,8,141K,D713,000950,2,291483'; - const decodeResult = plugin.decode({ text: text }); + message.text = 'PRG/LR,000855,SWA786,KBWI,KBOS,04R,25,1285,1192,93,1284,P4,001004,8,141K,D713,000950,2,291483'; + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe('partial'); @@ -60,8 +61,8 @@ describe('Label_H1 POS', () => { test('decodes Label H1 Preamble #M1BPRG', () => { // https://app.airframes.io/messages/2403492320 - const text = '#M1BPRG/DTEKCH,22L,69,141204,042/FNSAS87W/TS132645,2402246784'; - const decodeResult = plugin.decode({ text: text }); + message.text = '#M1BPRG/DTEKCH,22L,69,141204,042/FNSAS87W/TS132645,2402246784'; + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe('full'); @@ -85,8 +86,8 @@ describe('Label_H1 POS', () => { test('decodes Label H1 PRG with flightplan', () => { // https://app.airframes.io/messages/2403398879 - const text = 'PRG/DTGCRR,03O,62,163055/PR1544,286,350,239,,0,66,,,50,,,P19,P0,27440,,1305,303/RP:DA:EDDB:AA:GCRR..N50059E004552..N49588E004338..N49241E002528..N49122E002199..PON.UN872..ERIGA..FUJTI:WS:FUJTI,360..BAKUP..BATAX..TAKAV..VEDOD:A:TERT1P:AP:ILSZ03.BAPAL(03O)226D'; - const decodeResult = plugin.decode({ text: text }); + message.text = 'PRG/DTGCRR,03O,62,163055/PR1544,286,350,239,,0,66,,,50,,,P19,P0,27440,,1305,303/RP:DA:EDDB:AA:GCRR..N50059E004552..N49588E004338..N49241E002528..N49122E002199..PON.UN872..ERIGA..FUJTI:WS:FUJTI,360..BAKUP..BATAX..TAKAV..VEDOD:A:TERT1P:AP:ILSZ03.BAPAL(03O)226D'; + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe('partial'); @@ -118,8 +119,8 @@ describe('Label_H1 POS', () => { // TODO Fix this test test.skip('decodes named runway', () => { - const text = 'PRG/DT,KMDW,31R,62,031854,524,N38584W077333,171,732B3C'; - const decodeResult = plugin.decode({ text: text }); + message.text = 'PRG/DT,KMDW,31R,62,031854,524,N38584W077333,171,732B3C'; + const decodeResult = plugin.decode(message); console.log(JSON) expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe('partial'); @@ -133,8 +134,8 @@ describe('Label_H1 POS', () => { }); test('decodes Label H1 Preamble PRG ', () => { - const text = 'PRG Bogus message'; - const decodeResult = plugin.decode({ text: text }); + message.text = 'PRG Bogus message'; + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(false); expect(decodeResult.decoder.decodeLevel).toBe('none'); diff --git a/lib/plugins/Label_H1_PWI.test.ts b/lib/plugins/Label_H1_PWI.test.ts index 0ed54fd..b8ac4d1 100644 --- a/lib/plugins/Label_H1_PWI.test.ts +++ b/lib/plugins/Label_H1_PWI.test.ts @@ -3,6 +3,7 @@ import { Label_H1 } from './Label_H1'; describe('Label H1 PWI', () => { let plugin: Label_H1; + const message = {label: 'H1', text: ''}; beforeEach(() => { const decoder = new MessageDecoder(); @@ -20,8 +21,8 @@ describe('Label H1 PWI', () => { test('decodes Label H1 Preamble PWI valid', () => { - const text = 'PWI/WD390,COLZI,258070.AWYAT,252071.IPTAY,250065.CHOPZ,244069.MGMRY,234065.CATLN,230060/WD340,COLZI,256073,340M41.AWYAT,252070,340M41.IPTAY,244059,340M41.CHOPZ,240059,340M41.MGMRY,232056,340M41.CATLN,218053,340M40/WD300,COLZI,256065.AWYAT,254062.IPTAY,250051.CHOPZ,248050.MGMRY,232044.CATLN,222047/WD240,COLZI,260045.AWYAT,258048.IPTAY,254043.CHOPZ,256041.MGMRY,238035.CATLN,226034/DD300214059.240214040.180236024.100250018:,,,,/CB300246040.240246017.180226015.1002100080338' - const decodeResult = plugin.decode({ text: text }); + message.text = 'PWI/WD390,COLZI,258070.AWYAT,252071.IPTAY,250065.CHOPZ,244069.MGMRY,234065.CATLN,230060/WD340,COLZI,256073,340M41.AWYAT,252070,340M41.IPTAY,244059,340M41.CHOPZ,240059,340M41.MGMRY,232056,340M41.CATLN,218053,340M40/WD300,COLZI,256065.AWYAT,254062.IPTAY,250051.CHOPZ,248050.MGMRY,232044.CATLN,222047/WD240,COLZI,260045.AWYAT,258048.IPTAY,254043.CHOPZ,256041.MGMRY,238035.CATLN,226034/DD300214059.240214040.180236024.100250018:,,,,/CB300246040.240246017.180226015.1002100080338' + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe('partial'); @@ -41,13 +42,13 @@ describe('Label H1 PWI', () => { test('decodes Label H1 Preamble POS ', () => { - const text = 'PWI Bogus message'; - const decodeResult = plugin.decode({ text: text }); + message.text = 'PWI Bogus message'; + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(false); expect(decodeResult.decoder.decodeLevel).toBe('none'); expect(decodeResult.decoder.name).toBe('label-h1'); expect(decodeResult.formatted.description).toBe('Unknown'); - expect(decodeResult.message.text).toBe(text); + expect(decodeResult.message).toBe(message); }); }); \ No newline at end of file diff --git a/lib/plugins/Label_H1_Slash.test.ts b/lib/plugins/Label_H1_Slash.test.ts index a17db02..ee70a04 100644 --- a/lib/plugins/Label_H1_Slash.test.ts +++ b/lib/plugins/Label_H1_Slash.test.ts @@ -3,6 +3,7 @@ import { Label_H1_Slash } from './Label_H1_Slash'; describe('Label H1 /', () => { let plugin: Label_H1_Slash; + const message = {label: 'H1', text: ''}; beforeEach(() => { const decoder = new MessageDecoder(); @@ -21,8 +22,8 @@ describe('Label H1 /', () => { test('decodes variant 1', () => { // https://app.airframes.io/messages/2500488708 - const text = '/.POS/TS100316,210324/PSS35333W058220,,100316,250,S37131W059150,101916,S39387W060377,M23,27282,241,780,MANUAL,0,813E711'; - const decodeResult = plugin.decode({ text: text }); + message.text = '/.POS/TS100316,210324/PSS35333W058220,,100316,250,S37131W059150,101916,S39387W060377,M23,27282,241,780,MANUAL,0,813E711'; + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe('partial'); @@ -43,8 +44,8 @@ describe('Label H1 /', () => { }); test('decodes variant 2', () => { - const text = '/HDQDLUA.POSN38332W080082,RONZZ,135753,320,LEVII,140454,WISTA,M45,20967,194/GAHDQDLUA/CA/TS135753,1411240721'; - const decodeResult = plugin.decode({ text: text }); + message.text = '/HDQDLUA.POSN38332W080082,RONZZ,135753,320,LEVII,140454,WISTA,M45,20967,194/GAHDQDLUA/CA/TS135753,1411240721'; + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe('partial'); @@ -65,8 +66,8 @@ describe('Label H1 /', () => { }); test('decodes variant 3', () => { - const text = '/.POS/TS140122,141124N38321W078003,,140122,450,,140122,,M56,24739,127,8306763'; - const decodeResult = plugin.decode({ text: text }); + message.text = '/.POS/TS140122,141124N38321W078003,,140122,450,,140122,,M56,24739,127,8306763'; + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe('partial'); @@ -88,11 +89,11 @@ describe('Label H1 /', () => { test('does not decode invalid', () => { - const text = '/.POS Bogus message'; - const decodeResult = plugin.decode({ text: text }); + message.text = '/.POS Bogus message'; + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(false); expect(decodeResult.decoder.decodeLevel).toBe('none'); - expect(decodeResult.message.text).toBe(text); + expect(decodeResult.message).toBe(message); }); }); diff --git a/lib/plugins/Label_H1_StarPOS.test.ts b/lib/plugins/Label_H1_StarPOS.test.ts index 63303db..88d1be9 100644 --- a/lib/plugins/Label_H1_StarPOS.test.ts +++ b/lib/plugins/Label_H1_StarPOS.test.ts @@ -4,6 +4,7 @@ import { Label_H1_StarPOS } from './Label_H1_StarPOS'; describe('Label H1 *POS', () => { let plugin: Label_H1_StarPOS; + const message = {label: 'H1', text: ''}; beforeEach(() => { const decoder = new MessageDecoder(); @@ -12,12 +13,12 @@ describe('Label H1 *POS', () => { test('decodes variant 1', () => { - const text = '*POS10300950N3954W07759363312045802M5230175'; - const decodeResult = plugin.decode({ text: text }); + message.text = '*POS10300950N3954W07759363312045802M5230175'; + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe('partial'); - expect(decodeResult.message.text).toBe(text); + expect(decodeResult.message).toBe(message); expect(decodeResult.raw.day).toBe(30); expect(decodeResult.raw.month).toBe(10); expect(decodeResult.raw.time_of_day).toBe(35400); @@ -42,8 +43,8 @@ describe('Label H1 *POS', () => { test('does not decode ', () => { - const text = '*POS Bogus message'; - const decodeResult = plugin.decode({ text: text }); + message.text = '*POS Bogus message'; + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(false); expect(decodeResult.decoder.decodeLevel).toBe('none'); diff --git a/lib/plugins/Label_H1_WRN.test.ts b/lib/plugins/Label_H1_WRN.test.ts index 4d35a68..3bdb058 100644 --- a/lib/plugins/Label_H1_WRN.test.ts +++ b/lib/plugins/Label_H1_WRN.test.ts @@ -1,32 +1,36 @@ import { MessageDecoder } from '../MessageDecoder'; import { Label_H1_WRN } from './Label_H1_WRN'; -test('matches Label H1 Preamble WRN qualifiers', () => { - const decoder = new MessageDecoder(); - const decoderPlugin = new Label_H1_WRN(decoder); +describe('Label H1 WRN', () => { + + let plugin: Label_H1_WRN; + const message = {label: 'H1', text: ''}; + + beforeEach(() => { + const decoder = new MessageDecoder(); + plugin = new Label_H1_WRN(decoder); + }); - expect(decoderPlugin.decode).toBeDefined(); - expect(decoderPlugin.name).toBe('label-h1-wrn'); - expect(decoderPlugin.qualifiers).toBeDefined(); - expect(decoderPlugin.qualifiers()).toEqual({ +test('matches Label H1 Preamble WRN qualifiers', () => { + expect(plugin.decode).toBeDefined(); + expect(plugin.name).toBe('label-h1-wrn'); + expect(plugin.qualifiers).toBeDefined(); + expect(plugin.qualifiers()).toEqual({ labels: ['H1'], preambles: ['WRN', '#CFBWRN'], }); }); test('decodes Label H1 Preamble WRN FUEL', () => { - const decoder = new MessageDecoder(); - const decoderPlugin = new Label_H1_WRN(decoder); - // https://app.airframes.io/messages/2435520576 - const text = 'WRN/WN24030400580028000006FUEL L TK PUMP 1 2 LO PR '; - const decodeResult = decoderPlugin.decode({ text: text }); + message.text = 'WRN/WN24030400580028000006FUEL L TK PUMP 1 2 LO PR '; + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe('partial'); expect(decodeResult.decoder.name).toBe('label-h1-wrn'); expect(decodeResult.formatted.description).toBe('Warning Message'); - expect(decodeResult.message.text).toBe(text); + expect(decodeResult.message).toBe(message); expect(decodeResult.raw.message_timestamp).toBe(1712105880); expect(decodeResult.formatted.items.length).toBe(1); expect(decodeResult.formatted.items[0].type).toBe('warning'); @@ -37,18 +41,15 @@ test('decodes Label H1 Preamble WRN FUEL', () => { }); test('decodes Label H1 Preamble WRN NAV', () => { - const decoder = new MessageDecoder(); - const decoderPlugin = new Label_H1_WRN(decoder); - // https://app.airframes.io/messages/2435409810 - const text = 'WRN/PNRC12860AA07/WN24030316250034000006NAV ADS-B RPTG 1 FAULT '; - const decodeResult = decoderPlugin.decode({ text: text }); + message.text = 'WRN/PNRC12860AA07/WN24030316250034000006NAV ADS-B RPTG 1 FAULT '; + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe('partial'); expect(decodeResult.decoder.name).toBe('label-h1-wrn'); expect(decodeResult.formatted.description).toBe('Warning Message'); - expect(decodeResult.message.text).toBe(text); + expect(decodeResult.message).toBe(message); expect(decodeResult.raw.message_timestamp).toBe(1709483100); expect(decodeResult.formatted.items.length).toBe(1); expect(decodeResult.formatted.items[0].type).toBe('warning'); @@ -59,18 +60,15 @@ test('decodes Label H1 Preamble WRN NAV', () => { }); test('decodes Label H1 Preamble WRN F/CTL', () => { - const decoder = new MessageDecoder(); - const decoderPlugin = new Label_H1_WRN(decoder); - // https://app.airframes.io/messages/2435339713 - const text = 'WRN/PNRC12860AA07/WN24030322050027000002F/CTL ELAC 1 FAULT '; - const decodeResult = decoderPlugin.decode({ text: text }); + message.text = 'WRN/PNRC12860AA07/WN24030322050027000002F/CTL ELAC 1 FAULT '; + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe('partial'); expect(decodeResult.decoder.name).toBe('label-h1-wrn'); expect(decodeResult.formatted.description).toBe('Warning Message'); - expect(decodeResult.message.text).toBe(text); + expect(decodeResult.message).toBe(message); expect(decodeResult.raw.message_timestamp).toBe(1709503500); expect(decodeResult.formatted.items.length).toBe(1); expect(decodeResult.formatted.items[0].type).toBe('warning'); @@ -81,18 +79,15 @@ test('decodes Label H1 Preamble WRN F/CTL', () => { }); test('decodes Label H1 Preamble WRN ENG', () => { - const decoder = new MessageDecoder(); - const decoderPlugin = new Label_H1_WRN(decoder); - // https://app.airframes.io/messages/2434945276 - const text = 'WRN/PNRC12860AA07/WN24030316580030210006ENG 1 A.ICE '; - const decodeResult = decoderPlugin.decode({ text: text }); - + message.text = 'WRN/PNRC12860AA07/WN24030316580030210006ENG 1 A.ICE '; + const decodeResult = plugin.decode(message); + expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe('partial'); expect(decodeResult.decoder.name).toBe('label-h1-wrn'); expect(decodeResult.formatted.description).toBe('Warning Message'); - expect(decodeResult.message.text).toBe(text); + expect(decodeResult.message).toBe(message); expect(decodeResult.raw.message_timestamp).toBe(1709485080); expect(decodeResult.formatted.items.length).toBe(1); expect(decodeResult.formatted.items[0].type).toBe('warning'); @@ -103,18 +98,15 @@ test('decodes Label H1 Preamble WRN ENG', () => { }); test('decodes Label H1 Preamble #CFBWRN', () => { - const decoder = new MessageDecoder(); - const decoderPlugin = new Label_H1_WRN(decoder); - // https://app.airframes.io/messages/2434735527 - const text = '#CFBWRN/WN24030312040034580006NAV GPS1 FAULT '; - const decodeResult = decoderPlugin.decode({ text: text }); + message.text = '#CFBWRN/WN24030312040034580006NAV GPS1 FAULT '; + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe('partial'); expect(decodeResult.decoder.name).toBe('label-h1-wrn'); expect(decodeResult.formatted.description).toBe('Warning Message'); - expect(decodeResult.message.text).toBe(text); + expect(decodeResult.message).toBe(message); expect(decodeResult.raw.message_timestamp).toBe(1709467440); expect(decodeResult.formatted.items.length).toBe(1); expect(decodeResult.formatted.items[0].type).toBe('warning'); @@ -125,16 +117,14 @@ test('decodes Label H1 Preamble #CFBWRN', () => { }); test('decodes Label H1 Preamble WRN invalid', () => { - const decoder = new MessageDecoder(); - const decoderPlugin = new Label_H1_WRN(decoder); - - const text = 'WRN '; - const decodeResult = decoderPlugin.decode({ text: text }); + message.text = 'WRN '; + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(false); expect(decodeResult.decoder.decodeLevel).toBe('none'); expect(decodeResult.decoder.name).toBe('label-h1-wrn'); expect(decodeResult.formatted.description).toBe('Warning Message'); - expect(decodeResult.message.text).toBe(text); - expect(decodeResult.remaining.text).toBe(text); + expect(decodeResult.message).toBe(message); + expect(decodeResult.remaining.text).toBe(message.text); }); +}); \ No newline at end of file diff --git a/lib/plugins/Label_H2_02E.test.ts b/lib/plugins/Label_H2_02E.test.ts index 7ede384..4ef4647 100644 --- a/lib/plugins/Label_H2_02E.test.ts +++ b/lib/plugins/Label_H2_02E.test.ts @@ -3,6 +3,7 @@ import { Label_H2_02E } from "./Label_H2_02E"; describe("Label_H2 02E", () => { let plugin: Label_H2_02E; + const message = { label: "H2", text: "" }; beforeEach(() => { const decoder = new MessageDecoder(); @@ -21,7 +22,7 @@ describe("Label_H2 02E", () => { test("decodes discord example 1", () => { const text = "02E20HEGNLKPRN40359E02208116253601M627259020G QN41179E02134316323599M617247037G QN41591E02100516393603M610266040G QN42393E02026716463602M600276033G QN43197E01954316533598M592299037G QN44023E01929517003596M587313033G Q"; - const decodeResult = plugin.decode({ text: text }); + const decodeResult = plugin.decode(message); /* Route: HEGN-LKPR 1 40°35.9'N, 022°08.1'E 16:25 FL360 36,000 ft -62.7°C 259°/20kts @@ -34,7 +35,7 @@ describe("Label_H2 02E", () => { expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe("full"); expect(decodeResult.formatted.description).toBe("Weather Report"); - expect(decodeResult.message.text).toBe(text); + expect(decodeResult.message).toBe(message); const weather = decodeResult.raw.wind_data; expect(weather.length).toBe(6); expect(decodeResult.formatted.items[0].label).toBe("Day of Month"); @@ -72,7 +73,7 @@ describe("Label_H2 02E", () => { test("decodes discord example 2", () => { const text = "02E20EGKKLBSFN45081E01757116493501M577327021G QN44401E01903016563499M575352028G QN44115E02008017033468M550319029G QN43420E02112317103296M525299036G QN43125E02214517172023M277271022G Q"; - const decodeResult = plugin.decode({ text: text }); + const decodeResult = plugin.decode(message); /* Route: EGKK-LBSF @@ -85,7 +86,7 @@ describe("Label_H2 02E", () => { expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe("full"); expect(decodeResult.formatted.description).toBe("Weather Report"); - expect(decodeResult.message.text).toBe(text); + expect(decodeResult.message).toBe(message); const weather = decodeResult.raw.wind_data; expect(weather.length).toBe(5); expect(decodeResult.formatted.items[0].label).toBe("Day of Month"); @@ -120,12 +121,12 @@ describe("Label_H2 02E", () => { // https://app.airframes.io/messages/6025352132 const text = "02E20EIDWKORDN44087W08505523383800M470251091G QN43210W08520623452813M442251113G QN42461W08539523522189M295256121G QN42380W08623723591780M227266100G Q"; - const decodeResult = plugin.decode({ text: text }); + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe("full"); expect(decodeResult.formatted.description).toBe("Weather Report"); - expect(decodeResult.message.text).toBe(text); + expect(decodeResult.message).toBe(message); const weather = decodeResult.raw.wind_data; expect(weather.length).toBe(4); expect(decodeResult.formatted.items[0].label).toBe("Day of Month"); @@ -153,13 +154,13 @@ describe("Label_H2 02E", () => { }); test("decodes invalid message", () => { - const text = "02E20INVALID MESSAGE TEXT"; - const decodeResult = plugin.decode({ text: text }); + message.text = "02E20INVALID MESSAGE TEXT"; + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(false); expect(decodeResult.decoder.decodeLevel).toBe("none"); expect(decodeResult.formatted.description).toBe("Weather Report"); - expect(decodeResult.message.text).toBe(text); + expect(decodeResult.message).toBe(message); expect(decodeResult.remaining.text).toBe("02E20INVALID MESSAGE TEXT"); }); }); diff --git a/lib/plugins/Label_HX.test.ts b/lib/plugins/Label_HX.test.ts index 6ff2f31..0c625e4 100644 --- a/lib/plugins/Label_HX.test.ts +++ b/lib/plugins/Label_HX.test.ts @@ -1,27 +1,31 @@ import { MessageDecoder } from '../MessageDecoder'; import { Label_HX } from './Label_HX'; -test('matches Label HX qualifiers', () => { - const decoder = new MessageDecoder(); - const decoderPlugin = new Label_HX(decoder); +describe('Label_HX', () => { + + let plugin: Label_HX; + const message = {label: 'HX', text: ''}; - expect(decoderPlugin.decode).toBeDefined(); - expect(decoderPlugin.name).toBe('label-hx'); + beforeEach(() => { + const decoder = new MessageDecoder(); + plugin = new Label_HX(decoder); + }); + +test('matches Label HX qualifiers', () => { + expect(plugin.decode).toBeDefined(); + expect(plugin.name).toBe('label-hx'); }); test('decodes Label HX variant 1', () => { - const decoder = new MessageDecoder(); - const decoderPlugin = new Label_HX(decoder); - // https://globe.adsbexchange.com/?icao=A41722&showTrace=2024-09-24×tamp=1727202494 - const text = 'RA FMT LOCATION N4009.6 W07540.8'; - const decodeResult = decoderPlugin.decode({ text: text }); + message.text = 'RA FMT LOCATION N4009.6 W07540.8'; + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe('full'); expect(decodeResult.decoder.name).toBe('label-hx'); expect(decodeResult.formatted.description).toBe('Undelivered Uplink Report'); - expect(decodeResult.message.text).toBe(text); + expect(decodeResult.message).toBe(message); expect(decodeResult.raw.position.latitude).toBe(40.16); expect(decodeResult.raw.position.longitude).toBe(-75.68); expect(decodeResult.formatted.items.length).toBe(1); @@ -32,18 +36,15 @@ test('decodes Label HX variant 1', () => { }); test('decodes Label HX variant 2', () => { - const decoder = new MessageDecoder(); - const decoderPlugin = new Label_HX(decoder); - // https://globe.adsbexchange.com/?icao=A92EA0&showTrace=2024-09-22×tamp=1727038330 - const text = 'RA FMT 43 GSP B02'; - const decodeResult = decoderPlugin.decode({ text: text }); + message.text = 'RA FMT 43 GSP B02'; + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe('partial'); expect(decodeResult.decoder.name).toBe('label-hx'); expect(decodeResult.formatted.description).toBe('Undelivered Uplink Report'); - expect(decodeResult.message.text).toBe(text); + expect(decodeResult.message).toBe(message); expect(decodeResult.raw.departure_icao).toBe('GSP'); expect(decodeResult.remaining.text).toBe('B02'); expect(decodeResult.formatted.items.length).toBe(1); @@ -54,11 +55,8 @@ test('decodes Label HX variant 2', () => { }); test('decodes Label HX ', () => { - const decoder = new MessageDecoder(); - const decoderPlugin = new Label_HX(decoder); - - const text = 'HX Bogus message'; - const decodeResult = decoderPlugin.decode({ text: text }); + message.text = 'HX Bogus message'; + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(false); expect(decodeResult.decoder.decodeLevel).toBe('none'); @@ -66,3 +64,4 @@ test('decodes Label HX ', () => { expect(decodeResult.formatted.description).toBe('Undelivered Uplink Report'); expect(decodeResult.formatted.items.length).toBe(0); }); +}); \ No newline at end of file diff --git a/lib/plugins/Label_MA.test.ts b/lib/plugins/Label_MA.test.ts index 8c8f70a..6fd9d8e 100644 --- a/lib/plugins/Label_MA.test.ts +++ b/lib/plugins/Label_MA.test.ts @@ -4,6 +4,7 @@ import { Label_MA } from './Label_MA'; describe('Label_MA', () => { let plugin: Label_MA; + const message = { label: 'MA', text: '' }; beforeEach(() => { const decoder = new MessageDecoder(); @@ -20,8 +21,8 @@ describe('Label_MA', () => { }); test('decodes MIAM message', () => { - const text = 'T02!<<,:/k.E`;FOV@!\'s.16q6R+p(RK,|D2ujNJhRah?_qrNftWiI-V,@*RQs,tn,FYN$/V1!gNIc6CO;$D,1:.4?dF952;>XP$"B"Ok-Fr\'0^k?rP]3&UGoPX;\\XP$"B"Ok-Fr\'0^k?rP]3&UGoPX;\\ { }); test('decodes partial message', () => { - const text = 'T22!<<2>\/k&_k6:\"c1!\'s.16q0U2odKk@|D,eVtdm+WF(#Ll8Dja==EY8V4KISInKk%((%5&@p?Z\\NSZ9tj[Xr0rXqe`+A(J,f[fotFmHmS'; - const decodeResult = plugin.decode({ text: text }); + message.text = 'T22!<<2>\/k&_k6:\"c1!\'s.16q0U2odKk@|D,eVtdm+WF(#Ll8Dja==EY8V4KISInKk%((%5&@p?Z\\NSZ9tj[Xr0rXqe`+A(J,f[fotFmHmS'; + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe('partial'); @@ -48,10 +49,10 @@ describe('Label_MA', () => { }); test('decodes twice', () => { - const text = "T20!<<,B/k&,Z:/=Hs!'iLt0/1h8|*KJNa__;Kes\"hV'&4]J&&&;\"X/O6%0d7TMg5=d7'gcZ:j\"2EiA7k`-`$]f/r>q-b^jGP>WX4Dk3IrQ:U4%?]H$4HCd0Z(^Yq+lXXR!=niT!#;:5UAQ`JU@Bfn/*)TSu?G=LuOlLaFSmkGi]eE[!o&j@iX^g0r)T9!Ye)k6aOmSf`8G)8,hS5Fq_trW*!!"; + message.text = "T20!<<,B/k&,Z:/=Hs!'iLt0/1h8|*KJNa__;Kes\"hV'&4]J&&&;\"X/O6%0d7TMg5=d7'gcZ:j\"2EiA7k`-`$]f/r>q-b^jGP>WX4Dk3IrQ:U4%?]H$4HCd0Z(^Yq+lXXR!=niT!#;:5UAQ`JU@Bfn/*)TSu?G=LuOlLaFSmkGi]eE[!o&j@iX^g0r)T9!Ye)k6aOmSf`8G)8,hS5Fq_trW*!!"; // decodes to label 80 // 3D01 RMPSRV 2501/02 LEMD/MMUN .EC-NOI\n/LAV Y/CAB Y/MEDA N/SEC N/WAS N/WAT N/FUEL N/WCHRR 01/WCHRS --/WCHRC --/UMNR --/MAAS N\nBUENAS NOCHES, ETA 0055Z Y NOS HAN PEDIDO UNA WCHR QUE AL PARECER NO TENIAMOS CONSTANCIA DE ELLA, POR SI PODEIS PEDIRLO A OPS CUN. MUCHAS GRACIAS - const decodeResult = plugin.decode({ text: text }); + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe('full'); diff --git a/lib/plugins/Label_QQ.test.ts b/lib/plugins/Label_QQ.test.ts index ff597b0..8c3b4e0 100644 --- a/lib/plugins/Label_QQ.test.ts +++ b/lib/plugins/Label_QQ.test.ts @@ -1,27 +1,29 @@ import { MessageDecoder } from '../MessageDecoder'; import { Label_QQ } from './Label_QQ'; -test('matches Label QQ qualifiers', () => { - const decoder = new MessageDecoder(); - const decoderPlugin = new Label_QQ(decoder); +describe('Label QQ', () => { + let plugin: Label_QQ; + const message = {label: 'QQ', text: ''}; + beforeEach(() => { + const decoder = new MessageDecoder(); + plugin = new Label_QQ(decoder); + }); - expect(decoderPlugin.decode).toBeDefined(); - expect(decoderPlugin.name).toBe('label-qq'); +test('matches Label QQ qualifiers', () => { + expect(plugin.decode).toBeDefined(); + expect(plugin.name).toBe('label-qq'); }); test('decodes Label QQ variant 1', () => { - const decoder = new MessageDecoder(); - const decoderPlugin = new Label_QQ(decoder); - // https://app.airframes.io/messages/3409269161 - const text = 'KSDLKLAS0025\r\n001FE09002543N3336.6W11155.90281750042'; - const decodeResult = decoderPlugin.decode({ text: text }); - + message.text = 'KSDLKLAS0025\r\n001FE09002543N3336.6W11155.90281750042'; + const decodeResult = plugin.decode(message); + expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe('partial'); expect(decodeResult.decoder.name).toBe('label-qq'); expect(decodeResult.formatted.description).toBe('OFF Report'); - expect(decodeResult.message.text).toBe(text); + expect(decodeResult.message).toBe(message); expect(decodeResult.raw.departure_icao).toBe('KSDL'); expect(decodeResult.raw.arrival_icao).toBe('KLAS'); expect(decodeResult.raw.day).toBe('09'); @@ -53,18 +55,15 @@ test('decodes Label QQ variant 1', () => { }); test('decodes Label QQ variant 2', () => { - const decoder = new MessageDecoder(); - const decoderPlugin = new Label_QQ(decoder); - // https://app.airframes.io/messages/3406443370 - const text = 'KLGBKLAX0004\r\n001FE07000444N3349.8W11810.1---0200009'; - const decodeResult = decoderPlugin.decode({ text: text }); - + message.text = 'KLGBKLAX0004\r\n001FE07000444N3349.8W11810.1---0200009'; + const decodeResult = plugin.decode(message); + expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe('partial'); expect(decodeResult.decoder.name).toBe('label-qq'); expect(decodeResult.formatted.description).toBe('OFF Report'); - expect(decodeResult.message.text).toBe(text); + expect(decodeResult.message).toBe(message); expect(decodeResult.raw.departure_icao).toBe('KLGB'); expect(decodeResult.raw.arrival_icao).toBe('KLAX'); expect(decodeResult.raw.day).toBe('07'); @@ -91,18 +90,15 @@ test('decodes Label QQ variant 2', () => { }); test('decodes Label QQ variant 3', () => { - const decoder = new MessageDecoder(); - const decoderPlugin = new Label_QQ(decoder); - // https://app.airframes.io/messages/3409293914 - const text = 'CYOWKMEM0058/OFFRPT/090155'; - const decodeResult = decoderPlugin.decode({ text: text }); + message.text = 'CYOWKMEM0058/OFFRPT/090155'; + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe('partial'); expect(decodeResult.decoder.name).toBe('label-qq'); expect(decodeResult.formatted.description).toBe('OFF Report'); - expect(decodeResult.message.text).toBe(text); + expect(decodeResult.message).toBe(message); expect(decodeResult.raw.departure_icao).toBe('CYOW'); expect(decodeResult.raw.arrival_icao).toBe('KMEM'); expect(decodeResult.remaining.text).toBe('/OFFRPT/090155'); @@ -123,11 +119,8 @@ test('decodes Label QQ variant 3', () => { // disabled because all messages should decode test.skip('decodes Label QQ ', () => { - const decoder = new MessageDecoder(); - const decoderPlugin = new Label_QQ(decoder); - - const text = 'QQ Bogus message'; - const decodeResult = decoderPlugin.decode({ text: text }); + message.text = 'QQ Bogus message'; + const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(false); expect(decodeResult.decoder.decodeLevel).toBe('none'); @@ -135,3 +128,4 @@ test.skip('decodes Label QQ ', () => { expect(decodeResult.formatted.description).toBe('OFF Report'); expect(decodeResult.formatted.items.length).toBe(0); }); +}); \ No newline at end of file diff --git a/lib/plugins/Label_SQ.test.ts b/lib/plugins/Label_SQ.test.ts index 75380a3..93e9a9c 100644 --- a/lib/plugins/Label_SQ.test.ts +++ b/lib/plugins/Label_SQ.test.ts @@ -2,22 +2,30 @@ import { MessageDecoder } from '../MessageDecoder'; import { Label_SQ } from './Label_SQ'; describe('Label_SQ', () => { - const decoder = new MessageDecoder(); - const plugin = new Label_SQ(decoder); + let plugin: Label_SQ; + const message = { label: 'SQ', text: '' }; - const decode = (text: string) => { - return plugin.decode({ text }); - }; + beforeEach(() => { + const decoder = new MessageDecoder(); + plugin = new Label_SQ(decoder); + }); + test('matches Label SQ qualifiers', () => { + expect(plugin.decode).toBeDefined(); + expect(plugin.name).toBe('label-sq'); + expect(plugin.qualifiers).toBeDefined(); + expect(plugin.qualifiers()).toEqual({ + labels: ['SQ'], + }); it('decodes version 2 ARINC ground station squitter with coordinates and frequency', () => { - const text = 'V2AA' + '0' + '1X' + 'A' + 'JFK' + 'KJFK' + '3' + '4075' + 'N' + '7398' + 'W' + 'V136975' + '/extra'; - const res = decode(text); + message.text = 'V2AA' + '0' + '1X' + 'A' + 'JFK' + 'KJFK' + '3' + '4075' + 'N' + '7398' + 'W' + 'V136975' + '/extra'; + const res = plugin.decode(message); expect(res.decoded).toBe(true); expect(res.decoder.name).toBe('label-sq'); expect(res.decoder.decodeLevel).toBe('full'); - expect(res.raw.preamble).toBe(text.substring(0, 4)); + expect(res.raw.preamble).toBe(message.text.substring(0, 4)); expect(res.raw.version).toBe('2'); expect(res.raw.network).toBe('A'); @@ -41,8 +49,8 @@ describe('Label_SQ', () => { }); it('maps SITA network and handles absence of regex match gracefully', () => { - const text = 'V2AS' + '0' + 'XXXXNOTMATCHING'; - const res = decode(text); + message.text = 'V2AS' + '0' + 'XXXXNOTMATCHING'; + const res = plugin.decode(message); expect(res.decoded).toBe(true); expect(res.raw.version).toBe('2'); @@ -57,8 +65,8 @@ describe('Label_SQ', () => { }); it('handles non-version-2 payloads (no regex path)', () => { - const text = 'V1AA' + 'WHATEVER'; - const res = decode(text); + message.text = 'V1AA' + 'WHATEVER'; + const res = plugin.decode(message); expect(res.decoded).toBe(true); expect(res.raw.version).toBe('1'); @@ -69,3 +77,4 @@ describe('Label_SQ', () => { expect(items.find(i => i.code === 'VER')?.value).toBe('1'); }); }); + }); \ No newline at end of file From 1e1b246d87c407e52af71a21496423c674b24ffa Mon Sep 17 00:00:00 2001 From: Mark Bumiller Date: Fri, 6 Feb 2026 08:04:56 -0500 Subject: [PATCH 2/2] PR feedback --- lib/plugins/Label_10_LDR.test.ts | 4 ++-- lib/plugins/Label_13Through18_Slash.test.ts | 10 +++++++--- lib/plugins/Label_1L_070.test.ts | 2 +- lib/plugins/Label_30_Slash_EA.test.ts | 2 +- lib/plugins/Label_44_ETA.test.ts | 2 +- lib/plugins/Label_4A_Slash_01.test.ts | 2 +- lib/plugins/Label_H1_FLR.test.ts | 2 +- lib/plugins/Label_H1_FTX.test.ts | 4 ++-- lib/plugins/Label_H1_PRG.test.ts | 4 ++-- 9 files changed, 18 insertions(+), 14 deletions(-) diff --git a/lib/plugins/Label_10_LDR.test.ts b/lib/plugins/Label_10_LDR.test.ts index 55abbcd..4772810 100644 --- a/lib/plugins/Label_10_LDR.test.ts +++ b/lib/plugins/Label_10_LDR.test.ts @@ -21,7 +21,7 @@ describe('Label_10_LDR', () => { }); test('decodes Label 10 Preamble LDR variant 1', () => { - message.text = 'LDR01,189,C,SWA-2600-016,0,N 38.151,W 76.623,37003, 10.2,KATL,KLGA,KLGA,22/,/,/,0,0,,,,,,,0,0,0,00,,135.1,08.6,143.7,,,' + message.text = 'LDR01,189,C,SWA-2600-016,0,N 38.151,W 76.623,37003, 10.2,KATL,KLGA,KLGA,22/,/,/,0,0,,,,,,,0,0,0,00,,135.1,08.6,143.7,,,'; const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); @@ -43,7 +43,7 @@ describe('Label_10_LDR', () => { }); test('decodes Label 10 Preamble LDR variant 2', () => { - message.text = 'LDR01,189,C,SWA-2600-016,0,N 37.873,W 79.541,30998, 16.6,KBNA,KBOS,KBOS,27/,33L/,22L/,0,1,,,,,,,0,0,0,00,,131.2,11.4,142.6,,,' + message.text = 'LDR01,189,C,SWA-2600-016,0,N 37.873,W 79.541,30998, 16.6,KBNA,KBOS,KBOS,27/,33L/,22L/,0,1,,,,,,,0,0,0,00,,131.2,11.4,142.6,,,'; const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); diff --git a/lib/plugins/Label_13Through18_Slash.test.ts b/lib/plugins/Label_13Through18_Slash.test.ts index be05d34..6660d57 100644 --- a/lib/plugins/Label_13Through18_Slash.test.ts +++ b/lib/plugins/Label_13Through18_Slash.test.ts @@ -3,7 +3,6 @@ import { Label_13Through18_Slash } from './Label_13Through18_Slash'; describe('Label_13Through18_Slash', () => { let plugin: Label_13Through18_Slash; - const message = {label: '13', text: ''}; beforeEach(() => { const decoder = new MessageDecoder(); @@ -21,6 +20,7 @@ describe('Label_13Through18_Slash', () => { }); describe('Label 13', () => { + const message = {label: '13', text: ''}; test('decodes 1-line', () => { // https://app.airframes.io/messages/3423349335 message.text = '/13 OUT EVENT / KSFO KEWR 12 231445/TIME 2314' @@ -62,6 +62,7 @@ describe('Label_13Through18_Slash', () => { }); describe('Label 14', () => { + const message = {label: '14', text: ''}; test('decodes 1-line', () => { message.text = '/14 OFF EVENT / KIAD KDEN 08 124438/TIME 1244' const decodeResult = plugin.decode(message); @@ -147,6 +148,7 @@ describe('Label_13Through18_Slash', () => { }); describe('Label 15', () => { + const message = {label: '15', text: ''}; test('decodes 1-line', () => { // https://app.airframes.io/messages/3424704396 message.text = '/15 ON EVENT / PHOG KSFO 12 064852/TIME 0648' @@ -189,6 +191,7 @@ describe('Label_13Through18_Slash', () => { describe('Label 16', () => { + const message = {label: '16', text: ''}; test('decodes 3-line', () => { // https://app.airframes.io/messages/3424584522 message.text = '/16 1ST PDOOR OPEN / KLAX KSEA 12 053340/TIME 0533' + '\r\n' + @@ -215,6 +218,7 @@ describe('Label_13Through18_Slash', () => { describe('Label 17', () => { + const message = {label: '17', text: ''}; test('decodes 3-line', () => { // https://app.airframes.io/messages/3423349335 message.text = '/17 POST RPT / KIAD KSFO 12 034537/TIME 0343' + '\r\n' + @@ -262,6 +266,7 @@ describe('Label_13Through18_Slash', () => { describe('Label 18', () => { + const message = {label: '18', text: ''}; test('decodes location', () => { // https://app.airframes.io/messages/3424453669 message.text = '/18 POST TIMES SECS/ KLAX KSEA 12 053340/IN TIME 0530/PDOOR 053340/CDOOR 053024/BR SET 052942' + '\r\n' + @@ -301,8 +306,7 @@ describe('Label_13Through18_Slash', () => { }); test('does not decode ', () => { - - message.text = '/14 Bogus Message'; + const message = {label: '14', text: '/14 Bogus Message'}; const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(false); diff --git a/lib/plugins/Label_1L_070.test.ts b/lib/plugins/Label_1L_070.test.ts index a4d1f46..0bb4dca 100644 --- a/lib/plugins/Label_1L_070.test.ts +++ b/lib/plugins/Label_1L_070.test.ts @@ -22,7 +22,7 @@ describe('Label_1L 070', () => { test('decodes variant 1', () => { // https://app.airframes.io/messages/3492019143 - message.text = '000000070LOWW,KEWR,0932,1744,N 49.223,E 12.038,0659' + message.text = '000000070LOWW,KEWR,0932,1744,N 49.223,E 12.038,0659'; const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); diff --git a/lib/plugins/Label_30_Slash_EA.test.ts b/lib/plugins/Label_30_Slash_EA.test.ts index e10f13e..dce50b7 100644 --- a/lib/plugins/Label_30_Slash_EA.test.ts +++ b/lib/plugins/Label_30_Slash_EA.test.ts @@ -10,7 +10,7 @@ describe('Label 30 preamble /EA', () => { plugin = new Label_30_Slash_EA(decoder); }); -test('matches qualfiers', () => { +test('matches qualifiers', () => { expect(plugin.decode).toBeDefined(); expect(plugin.name).toBe('label-30-slash-ea'); expect(plugin.qualifiers).toBeDefined(); diff --git a/lib/plugins/Label_44_ETA.test.ts b/lib/plugins/Label_44_ETA.test.ts index ad93328..d6d711d 100644 --- a/lib/plugins/Label_44_ETA.test.ts +++ b/lib/plugins/Label_44_ETA.test.ts @@ -1,7 +1,7 @@ import { MessageDecoder } from '../MessageDecoder'; import { Label_44_ETA } from './Label_44_ETA'; -describe('Label 44 IN', () => { +describe('Label 44 Preamble ETA', () => { let plugin: Label_44_ETA; const message = {label: '44', text: ''}; diff --git a/lib/plugins/Label_4A_Slash_01.test.ts b/lib/plugins/Label_4A_Slash_01.test.ts index 5d9ea1b..ecc75f4 100644 --- a/lib/plugins/Label_4A_Slash_01.test.ts +++ b/lib/plugins/Label_4A_Slash_01.test.ts @@ -10,7 +10,7 @@ describe('Label 4A preamble /01', () => { plugin = new Label_4A_Slash_01(decoder); }); -test('matches qualifiers', () => { +test('matches qualifiers', () => { expect(plugin.decode).toBeDefined(); expect(plugin.name).toBe('label-4a-slash-01'); expect(plugin.qualifiers).toBeDefined(); diff --git a/lib/plugins/Label_H1_FLR.test.ts b/lib/plugins/Label_H1_FLR.test.ts index 3857d89..2e2b563 100644 --- a/lib/plugins/Label_H1_FLR.test.ts +++ b/lib/plugins/Label_H1_FLR.test.ts @@ -9,7 +9,7 @@ describe('Label H1 Preamble FLR', () => { const decoder = new MessageDecoder(); plugin = new Label_H1_FLR(decoder); }); -test('matches qualifiers', () => { +test('matches qualifiers', () => { expect(plugin.decode).toBeDefined(); expect(plugin.name).toBe('label-h1-flr'); expect(plugin.qualifiers).toBeDefined(); diff --git a/lib/plugins/Label_H1_FTX.test.ts b/lib/plugins/Label_H1_FTX.test.ts index fd4201f..e24953e 100644 --- a/lib/plugins/Label_H1_FTX.test.ts +++ b/lib/plugins/Label_H1_FTX.test.ts @@ -14,7 +14,7 @@ describe('Label_H1 FTX', () => { // disabled due to checksum failure. could be hidden characters in the source message test.skip('decodes Label H1 Preamble FTX valid', () => { // https://app.airframes.io/messages/3402014738 - message.text = 'FTX/ID23544S,HIFI21,7VZ007B1S276/MR2,/FXFYI .. TAF KSUX 021720Z 0218 0318 20017G28KT P6SM SKC FM022200 22012G18KT P6SM SKC .. PUTS YOUR CXWIND AT 26KT ON RWY 13 .. REDUCES TO 18KT AT 22Z4FEF' + message.text = 'FTX/ID23544S,HIFI21,7VZ007B1S276/MR2,/FXFYI .. TAF KSUX 021720Z 0218 0318 20017G28KT P6SM SKC FM022200 22012G18KT P6SM SKC .. PUTS YOUR CXWIND AT 26KT ON RWY 13 .. REDUCES TO 18KT AT 22Z4FEF'; const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); @@ -54,7 +54,7 @@ describe('Label_H1 FTX', () => { }); test('decodes example 3', () => { - message.text = '- #MDFTX/ID80052A,RCH648,PAM362201029/MR1,/FXHID0B1' + message.text = '- #MDFTX/ID80052A,RCH648,PAM362201029/MR1,/FXHID0B1'; const decodeResult = plugin.decode(message); expect(decodeResult.decoded).toBe(true); diff --git a/lib/plugins/Label_H1_PRG.test.ts b/lib/plugins/Label_H1_PRG.test.ts index 851a612..97f46d2 100644 --- a/lib/plugins/Label_H1_PRG.test.ts +++ b/lib/plugins/Label_H1_PRG.test.ts @@ -1,7 +1,7 @@ import { MessageDecoder } from '../MessageDecoder'; import { Label_H1 } from './Label_H1'; -describe('Label_H1 POS', () => { +describe('Label H1 Preamble PRG', () => { let plugin: Label_H1; const message = {label: 'H1', text: ''}; @@ -121,7 +121,7 @@ describe('Label_H1 POS', () => { test.skip('decodes named runway', () => { message.text = 'PRG/DT,KMDW,31R,62,031854,524,N38584W077333,171,732B3C'; const decodeResult = plugin.decode(message); - console.log(JSON) + expect(decodeResult.decoded).toBe(true); expect(decodeResult.decoder.decodeLevel).toBe('partial'); expect(decodeResult.raw.arrival_icao).toBe('KMDW');