1+ import { MessageDecoder } from '../MessageDecoder' ;
2+ import { Label_16_TOD } from './Label_16_TOD' ;
3+
4+ describe ( 'Label 16 Time of Day' , ( ) => {
5+
6+ let plugin : Label_16_TOD ;
7+
8+ beforeEach ( ( ) => {
9+ const decoder = new MessageDecoder ( ) ;
10+ plugin = new Label_16_TOD ( decoder ) ;
11+ } ) ;
12+
13+ test ( 'matches qualifiers' , ( ) => {
14+ expect ( plugin . decode ) . toBeDefined ( ) ;
15+ expect ( plugin . name ) . toBe ( 'label-16-tod' ) ;
16+ expect ( plugin . qualifiers ) . toBeDefined ( ) ;
17+ expect ( plugin . qualifiers ( ) ) . toEqual ( {
18+ labels : [ '16' ] ,
19+ } ) ;
20+ } ) ;
21+
22+ test ( 'decodes variant 1' , ( ) => {
23+ const text = '005236,36787,0135, 97,N 38.364 W 75.226' ;
24+ const decodeResult = plugin . decode ( { text : text } ) ;
25+
26+ expect ( decodeResult . decoded ) . toBe ( true ) ;
27+ expect ( decodeResult . decoder . decodeLevel ) . toBe ( 'partial' ) ;
28+ expect ( decodeResult . decoder . name ) . toBe ( 'label-16-tod' ) ;
29+ expect ( decodeResult . formatted . description ) . toBe ( 'Position Report' ) ;
30+ expect ( decodeResult . message . text ) . toBe ( text ) ;
31+ expect ( decodeResult . formatted . items . length ) . toBe ( 4 ) ;
32+ expect ( decodeResult . formatted . items [ 0 ] . label ) . toBe ( 'Message Timestamp' ) ;
33+ expect ( decodeResult . formatted . items [ 0 ] . value ) . toBe ( '00:52:36' ) ;
34+ expect ( decodeResult . formatted . items [ 1 ] . label ) . toBe ( 'Altitude' ) ;
35+ expect ( decodeResult . formatted . items [ 1 ] . value ) . toBe ( '36787 feet' ) ;
36+ expect ( decodeResult . formatted . items [ 2 ] . label ) . toBe ( 'Estimated Time of Arrival' ) ;
37+ expect ( decodeResult . formatted . items [ 2 ] . value ) . toBe ( '01:35:00' ) ;
38+ expect ( decodeResult . formatted . items [ 3 ] . label ) . toBe ( 'Aircraft Position' ) ;
39+ expect ( decodeResult . formatted . items [ 3 ] . value ) . toBe ( '38.364 N, 75.226 W' ) ;
40+ expect ( decodeResult . remaining . text ) . toBe ( ' 97' ) ;
41+ } ) ;
42+
43+ test ( 'decodes variant 2' , ( ) => {
44+ // https://app.airframes.io/messages/4260590297
45+ const text = '110112,36000,1206, 51,N 45.140 E 16.341/SXS7SL' ;
46+ const decodeResult = plugin . decode ( { text : text } ) ;
47+
48+ expect ( decodeResult . decoded ) . toBe ( true ) ;
49+ expect ( decodeResult . decoder . decodeLevel ) . toBe ( 'partial' ) ;
50+ expect ( decodeResult . decoder . name ) . toBe ( 'label-16-tod' ) ;
51+ expect ( decodeResult . formatted . description ) . toBe ( 'Position Report' ) ;
52+ expect ( decodeResult . message . text ) . toBe ( text ) ;
53+ expect ( decodeResult . formatted . items . length ) . toBe ( 5 ) ;
54+ expect ( decodeResult . formatted . items [ 0 ] . label ) . toBe ( 'Message Timestamp' ) ;
55+ expect ( decodeResult . formatted . items [ 0 ] . value ) . toBe ( '11:01:12' ) ;
56+ expect ( decodeResult . formatted . items [ 1 ] . label ) . toBe ( 'Altitude' ) ;
57+ expect ( decodeResult . formatted . items [ 1 ] . value ) . toBe ( '36000 feet' ) ;
58+ expect ( decodeResult . formatted . items [ 2 ] . label ) . toBe ( 'Estimated Time of Arrival' ) ;
59+ expect ( decodeResult . formatted . items [ 2 ] . value ) . toBe ( '12:06:00' ) ;
60+ expect ( decodeResult . formatted . items [ 3 ] . label ) . toBe ( 'Aircraft Position' ) ;
61+ expect ( decodeResult . formatted . items [ 3 ] . value ) . toBe ( '45.140 N, 16.341 E' ) ;
62+ expect ( decodeResult . formatted . items [ 4 ] . label ) . toBe ( 'Flight Number' ) ;
63+ expect ( decodeResult . formatted . items [ 4 ] . value ) . toBe ( 'SXS7SL' ) ;
64+ expect ( decodeResult . remaining . text ) . toBe ( ' 51' ) ;
65+ } ) ;
66+
67+
68+ test ( 'decodes no position' , ( ) => {
69+ // https://app.airframes.io/messages/4260590899
70+ const text = '110122,,1206, 92,N . MMMM.MMM' ;
71+ const decodeResult = plugin . decode ( { text : text } ) ;
72+
73+ expect ( decodeResult . decoded ) . toBe ( true ) ;
74+ expect ( decodeResult . decoder . decodeLevel ) . toBe ( 'partial' ) ;
75+ expect ( decodeResult . decoder . name ) . toBe ( 'label-16-tod' ) ;
76+ expect ( decodeResult . formatted . description ) . toBe ( 'Position Report' ) ;
77+ expect ( decodeResult . message . text ) . toBe ( text ) ;
78+ expect ( decodeResult . formatted . items . length ) . toBe ( 2 ) ;
79+ expect ( decodeResult . formatted . items [ 0 ] . label ) . toBe ( 'Message Timestamp' ) ;
80+ expect ( decodeResult . formatted . items [ 0 ] . value ) . toBe ( '11:01:22' ) ;
81+ expect ( decodeResult . formatted . items [ 1 ] . label ) . toBe ( 'Estimated Time of Arrival' ) ;
82+ expect ( decodeResult . formatted . items [ 1 ] . value ) . toBe ( '12:06:00' ) ;
83+ expect ( decodeResult . remaining . text ) . toBe ( ' 92' ) ;
84+ } ) ;
85+
86+ test ( 'decodes Label 16 variant <invalid>' , ( ) => {
87+ const text = 'N Bogus message' ;
88+ const decodeResult = plugin . decode ( { text : text } ) ;
89+
90+ expect ( decodeResult . decoded ) . toBe ( false ) ;
91+ expect ( decodeResult . decoder . decodeLevel ) . toBe ( 'none' ) ;
92+ expect ( decodeResult . decoder . name ) . toBe ( 'label-16-tod' ) ;
93+ expect ( decodeResult . formatted . description ) . toBe ( 'Position Report' ) ;
94+ expect ( decodeResult . message . text ) . toBe ( text ) ;
95+ } ) ;
96+ } ) ;
0 commit comments