@@ -547,6 +547,144 @@ describe('MagicString', () => {
547547 assert . equal ( loc . column , 12 ) ;
548548 } ) ;
549549
550+ it ( 'generates segments per chunk with hires "experimental-range"' , ( ) => {
551+ const s = new MagicString ( 'function foo(){ console.log("bar") }' ) ;
552+
553+ // rename bar to hello
554+ s . overwrite ( 29 , 32 , 'hello' ) ;
555+
556+ const map = s . generateMap ( {
557+ file : 'output.js' ,
558+ source : 'input.js' ,
559+ includeContent : true ,
560+ hires : 'experimental-range' ,
561+ } ) ;
562+
563+ assert . equal (
564+ map . mappings ,
565+ 'AAAA,4BAA4B,CAAC,KAAG,GAAG' ,
566+ ) ;
567+ assert . equal (
568+ map . rangeMappings ,
569+ 'BD' ,
570+ ) ;
571+
572+ const smc = new SourceMapConsumer ( map ) ;
573+ let loc ;
574+
575+ // FIXME: the consumer library doesn't support range mappings yet
576+ //loc = smc.originalPositionFor({ line: 1, column: 15 });
577+ //assert.equal(loc.line, 1);
578+ //assert.equal(loc.column, 15);
579+
580+ loc = smc . originalPositionFor ( { line : 1 , column : 28 } ) ;
581+ assert . equal ( loc . line , 1 ) ;
582+ assert . equal ( loc . column , 28 ) ;
583+
584+ loc = smc . originalPositionFor ( { line : 1 , column : 29 } ) ;
585+ assert . equal ( loc . line , 1 ) ;
586+ assert . equal ( loc . column , 29 ) ;
587+
588+ loc = smc . originalPositionFor ( { line : 1 , column : 34 } ) ;
589+ assert . equal ( loc . line , 1 ) ;
590+ assert . equal ( loc . column , 32 ) ;
591+
592+ // FIXME: see above
593+ //loc = smc.originalPositionFor({ line: 1, column: 35 });
594+ //assert.equal(loc.line, 1);
595+ //assert.equal(loc.column, 33);
596+ } ) ;
597+
598+ it ( 'generates segments per chunk with hires "experimental-range" (multiple ranges on a line)' , ( ) => {
599+ const s = new MagicString ( 'function foo(){ console.log("bar") }' ) ;
600+
601+ // rename foo to baz, bar to hello
602+ s . overwrite ( 9 , 12 , 'baz' ) ;
603+ s . overwrite ( 29 , 32 , 'hello' ) ;
604+
605+ const map = s . generateMap ( {
606+ file : 'output.js' ,
607+ source : 'input.js' ,
608+ includeContent : true ,
609+ hires : 'experimental-range' ,
610+ } ) ;
611+
612+ assert . equal (
613+ map . mappings ,
614+ 'AAAA,QAAQ,CAAC,GAAG,gBAAgB,CAAC,KAAG,GAAG' ,
615+ ) ;
616+ assert . equal (
617+ map . rangeMappings ,
618+ 'BDD' ,
619+ ) ;
620+
621+ const smc = new SourceMapConsumer ( map ) ;
622+ let loc ;
623+
624+ // FIXME: the consumer library doesn't support range mappings yet
625+ //loc = smc.originalPositionFor({ line: 1, column: 15 });
626+ //assert.equal(loc.line, 1);
627+ //assert.equal(loc.column, 15);
628+
629+ loc = smc . originalPositionFor ( { line : 1 , column : 28 } ) ;
630+ assert . equal ( loc . line , 1 ) ;
631+ assert . equal ( loc . column , 28 ) ;
632+
633+ loc = smc . originalPositionFor ( { line : 1 , column : 29 } ) ;
634+ assert . equal ( loc . line , 1 ) ;
635+ assert . equal ( loc . column , 29 ) ;
636+
637+ loc = smc . originalPositionFor ( { line : 1 , column : 34 } ) ;
638+ assert . equal ( loc . line , 1 ) ;
639+ assert . equal ( loc . column , 32 ) ;
640+
641+ // FIXME: see above
642+ //loc = smc.originalPositionFor({ line: 1, column: 35 });
643+ //assert.equal(loc.line, 1);
644+ //assert.equal(loc.column, 33);
645+ } ) ;
646+
647+ it ( 'generates segments per chunk with hires "experimental-range" in the next line' , ( ) => {
648+ const s = new MagicString ( '// foo\nconsole.log("bar")' ) ;
649+
650+ // rename bar to hello
651+ s . overwrite ( 20 , 23 , 'hello' ) ;
652+
653+ const map = s . generateMap ( {
654+ file : 'output.js' ,
655+ source : 'input.js' ,
656+ includeContent : true ,
657+ hires : 'experimental-range' ,
658+ } ) ;
659+
660+ assert . equal ( map . mappings , 'AAAA;YACY,CAAC,KAAG,CAAC' ) ;
661+ assert . equal ( map . rangeMappings , 'B;D' ) ;
662+
663+ const smc = new SourceMapConsumer ( map ) ;
664+ let loc ;
665+
666+ // FIXME: the consumer library doesn't support range mappings yet
667+ //loc = smc.originalPositionFor({ line: 1, column: 2 });
668+ //assert.equal(loc.line, 1);
669+ //assert.equal(loc.column, 2);
670+
671+ //loc = smc.originalPositionFor({ line: 2, column: 2 });
672+ //assert.equal(loc.line, 2);
673+ //assert.equal(loc.column, 2);
674+
675+ loc = smc . originalPositionFor ( { line : 2 , column : 12 } ) ;
676+ assert . equal ( loc . line , 2 ) ;
677+ assert . equal ( loc . column , 12 ) ;
678+
679+ loc = smc . originalPositionFor ( { line : 2 , column : 18 } ) ;
680+ assert . equal ( loc . line , 2 ) ;
681+ assert . equal ( loc . column , 16 ) ;
682+
683+ loc = smc . originalPositionFor ( { line : 2 , column : 19 } ) ;
684+ assert . equal ( loc . line , 2 ) ;
685+ assert . equal ( loc . column , 17 ) ;
686+ } ) ;
687+
550688 it ( 'generates a correct source map with update using a content containing a new line' , ( ) => {
551689 const s = new MagicString ( 'foobar' ) ;
552690 s . update ( 3 , 4 , '\nbb' ) ;
0 commit comments