@@ -326,4 +326,88 @@ describe('preparse hook test', () => {
326326 ] ) ;
327327 } ) ;
328328 } ) ;
329+
330+ describe ( 'comment filtering' , ( ) => {
331+ it ( 'should filter full-line comments starting with #' , async ( ) => {
332+ const argv = [ ...baseArgs ] ;
333+ const flags = {
334+ ...baseFlags ,
335+ str : Flags . string ( ) ,
336+ } ;
337+ makeStubs ( [ { name : 'str' , content : '# This is a comment\nactual-value\n# Another comment' } ] ) ;
338+ const results = await config . runHook ( 'preparse' , { argv, options : { flags } } ) ;
339+ expect ( results . successes [ 0 ] ) . to . be . ok ;
340+ expect ( results . successes [ 0 ] . result ) . to . deep . equal ( [ ...baseArgs , '--str' , 'actual-value' ] ) ;
341+ } ) ;
342+
343+ it ( 'should filter full-line comments starting with //' , async ( ) => {
344+ const argv = [ ...baseArgs ] ;
345+ const flags = {
346+ ...baseFlags ,
347+ str : Flags . string ( ) ,
348+ } ;
349+ makeStubs ( [ { name : 'str' , content : '// This is a comment\nactual-value\n// Another comment' } ] ) ;
350+ const results = await config . runHook ( 'preparse' , { argv, options : { flags } } ) ;
351+ expect ( results . successes [ 0 ] ) . to . be . ok ;
352+ expect ( results . successes [ 0 ] . result ) . to . deep . equal ( [ ...baseArgs , '--str' , 'actual-value' ] ) ;
353+ } ) ;
354+
355+ it ( 'should filter comments with leading whitespace' , async ( ) => {
356+ const argv = [ ...baseArgs ] ;
357+ const flags = {
358+ ...baseFlags ,
359+ str : Flags . string ( ) ,
360+ } ;
361+ makeStubs ( [ { name : 'str' , content : ' # Indented hash comment\nactual-value\n\t// Tab-indented slash comment' } ] ) ;
362+ const results = await config . runHook ( 'preparse' , { argv, options : { flags } } ) ;
363+ expect ( results . successes [ 0 ] ) . to . be . ok ;
364+ expect ( results . successes [ 0 ] . result ) . to . deep . equal ( [ ...baseArgs , '--str' , 'actual-value' ] ) ;
365+ } ) ;
366+
367+ it ( 'should preserve lines that contain comments but are not full-line comments' , async ( ) => {
368+ const argv = [ ...baseArgs ] ;
369+ const flags = {
370+ ...baseFlags ,
371+ str : Flags . string ( ) ,
372+ } ;
373+ makeStubs ( [ { name : 'str' , content : 'value-with#hash\nvalue-with//slashes' } ] ) ;
374+ const results = await config . runHook ( 'preparse' , { argv, options : { flags } } ) ;
375+ expect ( results . successes [ 0 ] ) . to . be . ok ;
376+ expect ( results . successes [ 0 ] . result ) . to . deep . equal ( [
377+ ...baseArgs ,
378+ '--str' ,
379+ 'value-with#hash' ,
380+ '--str' ,
381+ 'value-with//slashes' ,
382+ ] ) ;
383+ } ) ;
384+
385+ it ( 'should not filter comments in .json files' , async ( ) => {
386+ const argv = [ ...baseArgs ] ;
387+ const flags = {
388+ ...baseFlags ,
389+ str : Flags . string ( ) ,
390+ } ;
391+ const jsonContent = {
392+ comment : '# This should not be filtered' ,
393+ slashes : '// This should not be filtered either' ,
394+ } ;
395+ makeStubs ( [ { name : 'str.json' , content : JSON . stringify ( jsonContent , null , 2 ) } ] ) ;
396+ const results = await config . runHook ( 'preparse' , { argv, options : { flags } } ) ;
397+ expect ( results . successes [ 0 ] ) . to . be . ok ;
398+ expect ( results . successes [ 0 ] . result ) . to . deep . equal ( [ ...baseArgs , '--str' , JSON . stringify ( jsonContent ) ] ) ;
399+ } ) ;
400+
401+ it ( 'should preserve whitespace in non-comment lines' , async ( ) => {
402+ const argv = [ ...baseArgs ] ;
403+ const flags = {
404+ ...baseFlags ,
405+ str : Flags . string ( ) ,
406+ } ;
407+ makeStubs ( [ { name : 'str' , content : '# Comment\n value with spaces \n// Another comment' } ] ) ;
408+ const results = await config . runHook ( 'preparse' , { argv, options : { flags } } ) ;
409+ expect ( results . successes [ 0 ] ) . to . be . ok ;
410+ expect ( results . successes [ 0 ] . result ) . to . deep . equal ( [ ...baseArgs , '--str' , ' value with spaces ' ] ) ;
411+ } ) ;
412+ } ) ;
329413} ) ;
0 commit comments