@@ -800,3 +800,104 @@ fn test_file_with_non_utf8_content() {
800800 String :: from_utf8_lossy( invalid_utf8)
801801 ) ) ;
802802}
803+
804+ // Regression tests for issue #9132: repeated flags should use last value
805+ #[ test]
806+ fn test_repeated_body_numbering_flag ( ) {
807+ // -ba -bt should use -bt (t=nonempty)
808+ new_ucmd ! ( )
809+ . args ( & [ "-ba" , "-bt" ] )
810+ . pipe_in ( "a\n \n b\n \n c" )
811+ . succeeds ( )
812+ . stdout_is ( " 1\t a\n \n 2\t b\n \n 3\t c\n " ) ;
813+ }
814+
815+ #[ test]
816+ fn test_repeated_header_numbering_flag ( ) {
817+ // -ha -ht should use -ht (t=nonempty in header)
818+ new_ucmd ! ( )
819+ . args ( & [ "-ha" , "-ht" ] )
820+ . pipe_in ( r"\:::\na\nb\nc" )
821+ . succeeds ( )
822+ . stdout_contains ( " 1\t \\ :::" ) ;
823+ }
824+
825+ #[ test]
826+ fn test_repeated_footer_numbering_flag ( ) {
827+ // -fa -ft should use -ft (t=nonempty in footer)
828+ new_ucmd ! ( )
829+ . args ( & [ "-fa" , "-ft" ] )
830+ . pipe_in ( r"\:\na\nb\nc" )
831+ . succeeds ( )
832+ . stdout_contains ( r" 1 \:" ) ;
833+ }
834+
835+ #[ test]
836+ fn test_repeated_number_format_flag ( ) {
837+ // -n ln -n rn should use -n rn (rn=right aligned)
838+ new_ucmd ! ( )
839+ . args ( & [ "-n" , "ln" , "-n" , "rn" ] )
840+ . pipe_in ( "a\n b\n c" )
841+ . succeeds ( )
842+ . stdout_is ( " 1\t a\n 2\t b\n 3\t c\n " ) ;
843+ }
844+
845+ #[ test]
846+ fn test_repeated_number_separator_flag ( ) {
847+ // -s ':' -s '|' should use -s '|'
848+ new_ucmd ! ( )
849+ . args ( & [ "-s" , ":" , "-s" , "|" ] )
850+ . pipe_in ( "a\n b\n c" )
851+ . succeeds ( )
852+ . stdout_is ( " 1|a\n 2|b\n 3|c\n " ) ;
853+ }
854+
855+ #[ test]
856+ fn test_repeated_number_width_flag ( ) {
857+ // -w 3 -w 8 should use -w 8
858+ new_ucmd ! ( )
859+ . args ( & [ "-w" , "3" , "-w" , "8" ] )
860+ . pipe_in ( "a\n b\n c" )
861+ . succeeds ( )
862+ . stdout_is ( " 1\t a\n 2\t b\n 3\t c\n " ) ;
863+ }
864+
865+ #[ test]
866+ fn test_repeated_line_increment_flag ( ) {
867+ // -i 1 -i 5 should use -i 5
868+ new_ucmd ! ( )
869+ . args ( & [ "-i" , "1" , "-i" , "5" ] )
870+ . pipe_in ( "a\n b\n c" )
871+ . succeeds ( )
872+ . stdout_is ( " 1\t a\n 6\t b\n 11\t c\n " ) ;
873+ }
874+
875+ #[ test]
876+ fn test_repeated_starting_line_number_flag ( ) {
877+ // -v 1 -v 10 should use -v 10
878+ new_ucmd ! ( )
879+ . args ( & [ "-v" , "1" , "-v" , "10" ] )
880+ . pipe_in ( "a\n b\n c" )
881+ . succeeds ( )
882+ . stdout_is ( " 10\t a\n 11\t b\n 12\t c\n " ) ;
883+ }
884+
885+ #[ test]
886+ fn test_repeated_join_blank_lines_flag ( ) {
887+ // -l 1 -l 2 should use -l 2
888+ new_ucmd ! ( )
889+ . args ( & [ "-l" , "1" , "-l" , "2" ] )
890+ . pipe_in ( "a\n \n \n b" )
891+ . succeeds ( )
892+ . stdout_is ( " 1\t a\n \n \n 2\t b\n " ) ;
893+ }
894+
895+ #[ test]
896+ fn test_repeated_section_delimiter_flag ( ) {
897+ // -d ':' -d '|' should use -d '|'
898+ new_ucmd ! ( )
899+ . args ( & [ "-d" , ":" , "-d" , "|" ] )
900+ . pipe_in ( "a\n b\n c" )
901+ . succeeds ( )
902+ . stdout_is ( " 1\t a\n 2\t b\n 3\t c\n " ) ;
903+ }
0 commit comments