@@ -557,4 +557,38 @@ describe("decode", () => {
557557 assertEquals ( info . ranges [ 0 ] . start , { line : 0 , column : 0 } ) ;
558558 assertEquals ( info . ranges [ 0 ] . end , { line : 0 , column : 10 } ) ;
559559 } ) ;
560+
561+ it ( "ignores vendor extensions" , ( ) => {
562+ const encoder = new ItemEncoder ( ) ;
563+ encoder . addUnsignedVLQs ( Tag . VENDOR_EXTENSION , 0 ) ;
564+ encoder . finishItem ( ) ;
565+ const map = createMap ( encoder . encode ( ) , [ "x_ext_item" ] ) ;
566+
567+ assertEquals ( decode ( map , { mode : DecodeMode . STRICT } ) , {
568+ scopes : [ ] ,
569+ ranges : [ ] ,
570+ } ) ;
571+ } ) ;
572+
573+ it ( "throws for invalid item tags in strict mode" , ( ) => {
574+ const encoder = new ItemEncoder ( ) ;
575+ encoder . addUnsignedVLQs ( 42 , 1 , 2 , 3 ) ;
576+ encoder . finishItem ( ) ;
577+ const map = createMap ( encoder . encode ( ) , [ ] ) ;
578+
579+ assertThrows (
580+ ( ) => decode ( map , { mode : DecodeMode . STRICT } ) ,
581+ Error ,
582+ "Encountered illegal item tag 42" ,
583+ ) ;
584+ } ) ;
585+
586+ it ( "ignores invalid item tags in lax mode" , ( ) => {
587+ const encoder = new ItemEncoder ( ) ;
588+ encoder . addUnsignedVLQs ( 42 , 1 , 2 , 3 ) ;
589+ encoder . finishItem ( ) ;
590+ const map = createMap ( encoder . encode ( ) , [ ] ) ;
591+
592+ assertEquals ( decode ( map ) , { scopes : [ ] , ranges : [ ] } ) ;
593+ } ) ;
560594} ) ;
0 commit comments