Skip to content

Commit b018ac1

Browse files
committed
Fix fast lane delimiter detection
1 parent 2c6d411 commit b018ac1

File tree

2 files changed

+27
-1
lines changed

2 files changed

+27
-1
lines changed

src/fast_lane.rs

+15-1
Original file line numberDiff line numberDiff line change
@@ -162,7 +162,7 @@ impl TryFrom<&Opt> for FastOpt {
162162
type Error = &'static str;
163163

164164
fn try_from(value: &Opt) -> Result<Self, Self::Error> {
165-
if !value.delimiter.as_bytes().len() == 1 {
165+
if value.delimiter.as_bytes().len() != 1 {
166166
return Err("Delimiter must be 1 byte wide for FastOpt");
167167
}
168168

@@ -307,6 +307,20 @@ mod tests {
307307
assert_eq!(output, b"foo\n".as_slice());
308308
}
309309

310+
#[test]
311+
fn fail_to_convert_opt_with_long_delimiter_to_fastopt() {
312+
let opt = Opt {
313+
delimiter: "foo".to_owned(),
314+
..Default::default()
315+
};
316+
317+
assert!(FastOpt::try_from(&opt).is_err());
318+
assert_eq!(
319+
FastOpt::try_from(&opt).unwrap_err(),
320+
"Delimiter must be 1 byte wide for FastOpt"
321+
);
322+
}
323+
310324
fn make_cut_str_buffers() -> (Vec<u8>, Vec<Range<usize>>) {
311325
let output = Vec::new();
312326
let fields = Vec::new();

tests/cli.rs

+12
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,18 @@ fn it_cut_consecutive_delimiters() {
4242
assert.success().stdout("foobar\n");
4343
}
4444

45+
#[test]
46+
fn it_cut_using_multibyte_delimiters() {
47+
let mut cmd = Command::cargo_bin(env!("CARGO_PKG_NAME")).unwrap();
48+
49+
let assert = cmd
50+
.args(["-d", "...", "-f", "2"])
51+
.write_stdin("foo...bar")
52+
.assert();
53+
54+
assert.success().stdout("bar\n");
55+
}
56+
4557
#[test]
4658
fn it_works_on_multiple_lines() {
4759
let mut cmd = Command::cargo_bin(env!("CARGO_PKG_NAME")).unwrap();

0 commit comments

Comments
 (0)