@@ -329,3 +329,31 @@ fn test_blanks_ext2() {
329329 . succeeds ( )
330330 . stdout_is ( "\t \t " ) ;
331331}
332+
333+ #[ test]
334+ fn test_extended_tabstop_syntax ( ) {
335+ let test_cases = [
336+ // Standalone /N: tabs at multiples of N
337+ ( "-t /9" , " " , "\t " ) , // 9 spaces -> 1 tab
338+ ( "-t /9" , " " , "\t \t " ) , // 18 spaces -> 2 tabs
339+ // Standalone +N: tabs at multiples of N
340+ ( "-t +6" , " " , "\t " ) , // 6 spaces -> 1 tab
341+ ( "-t +6" , " " , "\t \t " ) , // 12 spaces -> 2 tabs
342+ // 3,/0 and 3,+0 should behave like just 3
343+ ( "-t 3,/0" , " " , "\t \t \t " ) , // 10 spaces -> 3 tabs + 1 space
344+ ( "-t 3,+0" , " " , "\t \t \t " ) , // 10 spaces -> 3 tabs + 1 space
345+ ( "-t 3" , " " , "\t \t \t " ) , // 10 spaces -> 3 tabs + 1 space
346+ // 3,/0 with text
347+ ( "-t 3,/0" , " test" , "\t test" ) , // 3 spaces + text -> 1 tab + text
348+ // 3,+6 means tab stops at 3, 9, 15, 21, ...
349+ ( "-t 3,+6" , " " , "\t \t \t " ) , // 20 spaces -> 3 tabs + 5 spaces
350+ ] ;
351+
352+ for ( args, input, expected) in test_cases {
353+ new_ucmd ! ( )
354+ . args ( & args. split_whitespace ( ) . collect :: < Vec < _ > > ( ) )
355+ . pipe_in ( input)
356+ . succeeds ( )
357+ . stdout_is ( expected) ;
358+ }
359+ }
0 commit comments