mirror of
https://github.com/RGBCube/uutils-coreutils
synced 2025-07-28 03:27:44 +00:00
nl: fix output of numbering styles
This commit is contained in:
parent
9be4a89260
commit
271606ddfa
2 changed files with 208 additions and 137 deletions
|
@ -52,15 +52,15 @@ fn test_sections_and_styles() {
|
|||
for (fixture, output) in [
|
||||
(
|
||||
"section.txt",
|
||||
"\nHEADER1\nHEADER2\n\n1 |BODY1\n2 \
|
||||
|BODY2\n\nFOOTER1\nFOOTER2\n\nNEXTHEADER1\nNEXTHEADER2\n\n1 \
|
||||
|NEXTBODY1\n2 |NEXTBODY2\n\nNEXTFOOTER1\nNEXTFOOTER2\n",
|
||||
"\n HEADER1\n HEADER2\n\n1 |BODY1\n2 \
|
||||
|BODY2\n\n FOOTER1\n FOOTER2\n\n NEXTHEADER1\n NEXTHEADER2\n\n1 \
|
||||
|NEXTBODY1\n2 |NEXTBODY2\n\n NEXTFOOTER1\n NEXTFOOTER2\n",
|
||||
),
|
||||
(
|
||||
"joinblanklines.txt",
|
||||
"1 |Nonempty\n2 |Nonempty\n3 |Followed by 10x empty\n\n\n\n\n4 \
|
||||
|\n\n\n\n\n5 |\n6 |Followed by 5x empty\n\n\n\n\n7 |\n8 \
|
||||
|Followed by 4x empty\n\n\n\n\n9 |Nonempty\n10 |Nonempty\n11 \
|
||||
"1 |Nonempty\n2 |Nonempty\n3 |Followed by 10x empty\n \n \n \n \n4 \
|
||||
|\n \n \n \n \n5 |\n6 |Followed by 5x empty\n \n \n \n \n7 |\n8 \
|
||||
|Followed by 4x empty\n \n \n \n \n9 |Nonempty\n10 |Nonempty\n11 \
|
||||
|Nonempty.\n",
|
||||
),
|
||||
] {
|
||||
|
@ -257,6 +257,25 @@ fn test_invalid_line_increment() {
|
|||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_join_blank_lines() {
|
||||
for arg in ["-l3", "--join-blank-lines=3"] {
|
||||
new_ucmd!()
|
||||
.arg(arg)
|
||||
.arg("--body-numbering=a")
|
||||
.pipe_in("\n\n\n\n\n\n")
|
||||
.succeeds()
|
||||
.stdout_is(concat!(
|
||||
" \n",
|
||||
" \n",
|
||||
" 1\t\n",
|
||||
" \n",
|
||||
" \n",
|
||||
" 2\t\n",
|
||||
));
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_join_blank_lines_zero() {
|
||||
for arg in ["-l0", "--join-blank-lines=0"] {
|
||||
|
@ -275,3 +294,131 @@ fn test_invalid_join_blank_lines() {
|
|||
.stderr_contains("invalid value 'invalid'");
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_default_body_numbering() {
|
||||
new_ucmd!()
|
||||
.pipe_in("a\n\nb")
|
||||
.succeeds()
|
||||
.stdout_is(" 1\ta\n \n 2\tb\n");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_body_numbering_all_lines_without_delimiter() {
|
||||
for arg in ["-ba", "--body-numbering=a"] {
|
||||
new_ucmd!()
|
||||
.arg(arg)
|
||||
.pipe_in("a\n\nb")
|
||||
.succeeds()
|
||||
.stdout_is(" 1\ta\n 2\t\n 3\tb\n");
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_body_numbering_no_lines_without_delimiter() {
|
||||
for arg in ["-bn", "--body-numbering=n"] {
|
||||
new_ucmd!()
|
||||
.arg(arg)
|
||||
.pipe_in("a\n\nb")
|
||||
.succeeds()
|
||||
.stdout_is(" a\n \n b\n");
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_body_numbering_non_empty_lines_without_delimiter() {
|
||||
for arg in ["-bt", "--body-numbering=t"] {
|
||||
new_ucmd!()
|
||||
.arg(arg)
|
||||
.pipe_in("a\n\nb")
|
||||
.succeeds()
|
||||
.stdout_is(" 1\ta\n \n 2\tb\n");
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_body_numbering_matched_lines_without_delimiter() {
|
||||
for arg in ["-bp^[ac]", "--body-numbering=p^[ac]"] {
|
||||
new_ucmd!()
|
||||
.arg(arg)
|
||||
.pipe_in("a\nb\nc")
|
||||
.succeeds()
|
||||
.stdout_is(" 1\ta\n b\n 2\tc\n");
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_numbering_all_lines() {
|
||||
let delimiters_and_args = [
|
||||
("\\:\\:\\:\n", ["-ha", "--header-numbering=a"]),
|
||||
("\\:\\:\n", ["-ba", "--body-numbering=a"]),
|
||||
("\\:\n", ["-fa", "--footer-numbering=a"]),
|
||||
];
|
||||
|
||||
for (delimiter, args) in delimiters_and_args {
|
||||
for arg in args {
|
||||
new_ucmd!()
|
||||
.arg(arg)
|
||||
.pipe_in(format!("{delimiter}a\n\nb"))
|
||||
.succeeds()
|
||||
.stdout_is("\n 1\ta\n 2\t\n 3\tb\n");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_numbering_no_lines() {
|
||||
let delimiters_and_args = [
|
||||
("\\:\\:\\:\n", ["-hn", "--header-numbering=n"]),
|
||||
("\\:\\:\n", ["-bn", "--body-numbering=n"]),
|
||||
("\\:\n", ["-fn", "--footer-numbering=n"]),
|
||||
];
|
||||
|
||||
for (delimiter, args) in delimiters_and_args {
|
||||
for arg in args {
|
||||
new_ucmd!()
|
||||
.arg(arg)
|
||||
.pipe_in(format!("{delimiter}a\n\nb"))
|
||||
.succeeds()
|
||||
.stdout_is("\n a\n \n b\n");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_numbering_non_empty_lines() {
|
||||
let delimiters_and_args = [
|
||||
("\\:\\:\\:\n", ["-ht", "--header-numbering=t"]),
|
||||
("\\:\\:\n", ["-bt", "--body-numbering=t"]),
|
||||
("\\:\n", ["-ft", "--footer-numbering=t"]),
|
||||
];
|
||||
|
||||
for (delimiter, args) in delimiters_and_args {
|
||||
for arg in args {
|
||||
new_ucmd!()
|
||||
.arg(arg)
|
||||
.pipe_in(format!("{delimiter}a\n\nb"))
|
||||
.succeeds()
|
||||
.stdout_is("\n 1\ta\n \n 2\tb\n");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_numbering_matched_lines() {
|
||||
let delimiters_and_args = [
|
||||
("\\:\\:\\:\n", ["-hp^[ac]", "--header-numbering=p^[ac]"]),
|
||||
("\\:\\:\n", ["-bp^[ac]", "--body-numbering=p^[ac]"]),
|
||||
("\\:\n", ["-fp^[ac]", "--footer-numbering=p^[ac]"]),
|
||||
];
|
||||
|
||||
for (delimiter, args) in delimiters_and_args {
|
||||
for arg in args {
|
||||
new_ucmd!()
|
||||
.arg(arg)
|
||||
.pipe_in(format!("{delimiter}a\nb\nc"))
|
||||
.succeeds()
|
||||
.stdout_is("\n 1\ta\n b\n 2\tc\n");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue