mirror of
https://github.com/RGBCube/uutils-coreutils
synced 2025-07-28 03:27:44 +00:00
split: edge case for obs lines within combined shorts + test
This commit is contained in:
parent
15c7170d20
commit
7f905a3b8d
2 changed files with 25 additions and 5 deletions
|
@ -88,13 +88,20 @@ fn handle_obsolete(args: &[String]) -> (Vec<String>, Option<String>) {
|
||||||
// that can have obsolete lines option value in it
|
// that can have obsolete lines option value in it
|
||||||
// extract numeric part and filter it out
|
// extract numeric part and filter it out
|
||||||
let mut obs_lines_extracted: Vec<char> = vec![];
|
let mut obs_lines_extracted: Vec<char> = vec![];
|
||||||
|
let mut obs_lines_end_reached = false;
|
||||||
let filtered_slice: Vec<char> = slice
|
let filtered_slice: Vec<char> = slice
|
||||||
.chars()
|
.chars()
|
||||||
.filter(|c| {
|
.filter(|c| {
|
||||||
if c.is_ascii_digit() {
|
// To correctly process scenario like '-x200a4'
|
||||||
|
// we need to stop extracting digits once alphabetic character is encountered
|
||||||
|
// after we already have something in obs_lines_extracted
|
||||||
|
if c.is_ascii_digit() && !obs_lines_end_reached {
|
||||||
obs_lines_extracted.push(*c);
|
obs_lines_extracted.push(*c);
|
||||||
false
|
false
|
||||||
} else {
|
} else {
|
||||||
|
if !obs_lines_extracted.is_empty() {
|
||||||
|
obs_lines_end_reached = true;
|
||||||
|
}
|
||||||
true
|
true
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
|
@ -170,7 +170,7 @@ fn test_split_str_prefixed_chunks_by_bytes() {
|
||||||
assert_eq!(glob.collate(), at.read_bytes(name));
|
assert_eq!(glob.collate(), at.read_bytes(name));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Test short bytes option concatenated with value
|
/// Test short bytes option concatenated with value
|
||||||
#[test]
|
#[test]
|
||||||
fn test_split_by_bytes_short_concatenated_with_value() {
|
fn test_split_by_bytes_short_concatenated_with_value() {
|
||||||
let (at, mut ucmd) = at_and_ucmd!();
|
let (at, mut ucmd) = at_and_ucmd!();
|
||||||
|
@ -342,7 +342,7 @@ fn test_split_lines_number() {
|
||||||
.stderr_only("split: invalid number of lines: 'file'\n");
|
.stderr_only("split: invalid number of lines: 'file'\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
// Test short lines option with value concatenated
|
/// Test short lines option with value concatenated
|
||||||
#[test]
|
#[test]
|
||||||
fn test_split_lines_short_concatenated_with_value() {
|
fn test_split_lines_short_concatenated_with_value() {
|
||||||
let (at, mut ucmd) = at_and_ucmd!();
|
let (at, mut ucmd) = at_and_ucmd!();
|
||||||
|
@ -401,6 +401,19 @@ fn test_split_obs_lines_within_combined_shorts() {
|
||||||
assert_eq!(glob.collate(), at.read_bytes(name))
|
assert_eq!(glob.collate(), at.read_bytes(name))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Test for obsolete lines option as part of combined short options with tailing suffix length with value
|
||||||
|
#[test]
|
||||||
|
fn test_split_obs_lines_within_combined_shorts_tailing_suffix_length() {
|
||||||
|
let (at, mut ucmd) = at_and_ucmd!();
|
||||||
|
let name = "obs-lines-combined-shorts-tailing-suffix-length";
|
||||||
|
RandomFile::new(&at, name).add_lines(1000);
|
||||||
|
ucmd.args(&["-d200a4", name]).succeeds();
|
||||||
|
|
||||||
|
let glob = Glob::new(&at, ".", r"x\d\d\d\d$");
|
||||||
|
assert_eq!(glob.count(), 5);
|
||||||
|
assert_eq!(glob.collate(), at.read_bytes(name));
|
||||||
|
}
|
||||||
|
|
||||||
/// Test for obsolete lines option starts as part of combined short options
|
/// Test for obsolete lines option starts as part of combined short options
|
||||||
#[test]
|
#[test]
|
||||||
fn test_split_obs_lines_starts_combined_shorts() {
|
fn test_split_obs_lines_starts_combined_shorts() {
|
||||||
|
@ -721,7 +734,7 @@ fn test_invalid_suffix_length() {
|
||||||
.stderr_contains("invalid suffix length: 'xyz'");
|
.stderr_contains("invalid suffix length: 'xyz'");
|
||||||
}
|
}
|
||||||
|
|
||||||
// Test short suffix length option with value concatenated
|
/// Test short suffix length option with value concatenated
|
||||||
#[test]
|
#[test]
|
||||||
fn test_split_suffix_length_short_concatenated_with_value() {
|
fn test_split_suffix_length_short_concatenated_with_value() {
|
||||||
let (at, mut ucmd) = at_and_ucmd!();
|
let (at, mut ucmd) = at_and_ucmd!();
|
||||||
|
@ -752,7 +765,7 @@ fn test_include_newlines() {
|
||||||
assert_eq!(s, "5\n");
|
assert_eq!(s, "5\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
// Test short number of chunks option concatenated with value
|
/// Test short number of chunks option concatenated with value
|
||||||
#[test]
|
#[test]
|
||||||
fn test_split_number_chunks_short_concatenated_with_value() {
|
fn test_split_number_chunks_short_concatenated_with_value() {
|
||||||
let (at, mut ucmd) = at_and_ucmd!();
|
let (at, mut ucmd) = at_and_ucmd!();
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue