@@ -107,7 +107,7 @@ describe("CSSSourceCode", () => {
107107 describe ( "getLocFromIndex()" , ( ) => {
108108 it ( "should convert index to location correctly" , ( ) => {
109109 const file = {
110- body : "a {\n /*test*/\r\n}" ,
110+ body : "a {\n /*test*/\r\n/*test*/\r/*test*/\f/*test*/ }" ,
111111 path : "test.css" ,
112112 } ;
113113 const language = new CSSLanguage ( ) ;
@@ -189,13 +189,33 @@ describe("CSSSourceCode", () => {
189189 line : 3 ,
190190 column : 2 ,
191191 } ) ;
192+ assert . deepStrictEqual ( sourceCode . getLocFromIndex ( 25 ) , {
193+ line : 4 ,
194+ column : 1 ,
195+ } ) ;
196+ assert . deepStrictEqual ( sourceCode . getLocFromIndex ( 26 ) , {
197+ line : 4 ,
198+ column : 2 ,
199+ } ) ;
200+ assert . deepStrictEqual ( sourceCode . getLocFromIndex ( 34 ) , {
201+ line : 5 ,
202+ column : 1 ,
203+ } ) ;
204+ assert . deepStrictEqual ( sourceCode . getLocFromIndex ( 35 ) , {
205+ line : 5 ,
206+ column : 2 ,
207+ } ) ;
208+ assert . deepStrictEqual ( sourceCode . getLocFromIndex ( 43 ) , {
209+ line : 5 ,
210+ column : 10 ,
211+ } ) ;
192212 } ) ;
193213 } ) ;
194214
195215 describe ( "getIndexFromLoc()" , ( ) => {
196216 it ( "should convert location to index correctly" , ( ) => {
197217 const file = {
198- body : "a {\n /*test*/\r\n}" ,
218+ body : "a {\n /*test*/\r\n/*test*/\r/*test*/\f/*test*/ }" ,
199219 path : "test.css" ,
200220 } ;
201221 const language = new CSSLanguage ( ) ;
@@ -331,6 +351,41 @@ describe("CSSSourceCode", () => {
331351 } ) ,
332352 17 ,
333353 ) ;
354+ assert . strictEqual (
355+ sourceCode . getIndexFromLoc ( {
356+ line : 4 ,
357+ column : 1 ,
358+ } ) ,
359+ 25 ,
360+ ) ;
361+ assert . strictEqual (
362+ sourceCode . getIndexFromLoc ( {
363+ line : 4 ,
364+ column : 2 ,
365+ } ) ,
366+ 26 ,
367+ ) ;
368+ assert . strictEqual (
369+ sourceCode . getIndexFromLoc ( {
370+ line : 5 ,
371+ column : 1 ,
372+ } ) ,
373+ 34 ,
374+ ) ;
375+ assert . strictEqual (
376+ sourceCode . getIndexFromLoc ( {
377+ line : 5 ,
378+ column : 2 ,
379+ } ) ,
380+ 35 ,
381+ ) ;
382+ assert . strictEqual (
383+ sourceCode . getIndexFromLoc ( {
384+ line : 5 ,
385+ column : 10 ,
386+ } ) ,
387+ 43 ,
388+ ) ;
334389 } ) ;
335390 } ) ;
336391
@@ -402,7 +457,7 @@ describe("CSSSourceCode", () => {
402457 } ) ;
403458
404459 describe ( "lines" , ( ) => {
405- it ( "should return an array of lines " , ( ) => {
460+ it ( "should split lines on LF line endings " , ( ) => {
406461 const file = { body : "a {\n/*test*/\n}" , path : "test.css" } ;
407462 const language = new CSSLanguage ( ) ;
408463 const parseResult = language . parse ( file ) ;
@@ -413,6 +468,63 @@ describe("CSSSourceCode", () => {
413468
414469 assert . deepStrictEqual ( sourceCode . lines , [ "a {" , "/*test*/" , "}" ] ) ;
415470 } ) ;
471+
472+ it ( "should split lines on CR line endings" , ( ) => {
473+ const file = { body : "a {\r/*test*/\r}" , path : "test.css" } ;
474+ const language = new CSSLanguage ( ) ;
475+ const parseResult = language . parse ( file ) ;
476+ const sourceCode = new CSSSourceCode ( {
477+ text : file . body ,
478+ ast : parseResult . ast ,
479+ } ) ;
480+
481+ assert . deepStrictEqual ( sourceCode . lines , [ "a {" , "/*test*/" , "}" ] ) ;
482+ } ) ;
483+
484+ it ( "should split lines on FF line endings" , ( ) => {
485+ const file = { body : "a {\f/*test*/\f}" , path : "test.css" } ;
486+ const language = new CSSLanguage ( ) ;
487+ const parseResult = language . parse ( file ) ;
488+ const sourceCode = new CSSSourceCode ( {
489+ text : file . body ,
490+ ast : parseResult . ast ,
491+ } ) ;
492+
493+ assert . deepStrictEqual ( sourceCode . lines , [ "a {" , "/*test*/" , "}" ] ) ;
494+ } ) ;
495+
496+ it ( "should split lines on CRLF line endings" , ( ) => {
497+ const file = { body : "a {\r\n/*test*/\r\n}" , path : "test.css" } ;
498+ const language = new CSSLanguage ( ) ;
499+ const parseResult = language . parse ( file ) ;
500+ const sourceCode = new CSSSourceCode ( {
501+ text : file . body ,
502+ ast : parseResult . ast ,
503+ } ) ;
504+
505+ assert . deepStrictEqual ( sourceCode . lines , [ "a {" , "/*test*/" , "}" ] ) ;
506+ } ) ;
507+
508+ it ( "should split lines with mixed line endings (LF, CRLF, CR, FF)" , ( ) => {
509+ const file = {
510+ body : "a {\n/*one*/\r\n/*two*/\r/*three*/\f}" ,
511+ path : "test.css" ,
512+ } ;
513+ const language = new CSSLanguage ( ) ;
514+ const parseResult = language . parse ( file ) ;
515+ const sourceCode = new CSSSourceCode ( {
516+ text : file . body ,
517+ ast : parseResult . ast ,
518+ } ) ;
519+
520+ assert . deepStrictEqual ( sourceCode . lines , [
521+ "a {" ,
522+ "/*one*/" ,
523+ "/*two*/" ,
524+ "/*three*/" ,
525+ "}" ,
526+ ] ) ;
527+ } ) ;
416528 } ) ;
417529
418530 describe ( "getParent()" , ( ) => {
0 commit comments