Skip to content

Commit

Permalink
fix trailing sep edge case
Browse files Browse the repository at this point in the history
  • Loading branch information
danielpclark committed Mar 14, 2018
1 parent 5b5316d commit 590b0a8
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 3 deletions.
2 changes: 1 addition & 1 deletion benches/basename_bench.rs
Expand Up @@ -87,7 +87,7 @@ pub fn basename_version2<'a>(path: &'a str, ext: &str) -> &'a str {
range = find_last_word(bytes);
} else {
let extension = ext.as_bytes();
let mut end = bytes.len();
let mut end = find_last_non_sep_pos(&bytes).map(|v| v+1).unwrap_or(bytes.len());

if extension == b".*" {
let e = extname(&path[..end]);
Expand Down
12 changes: 10 additions & 2 deletions src/basename.rs
@@ -1,4 +1,4 @@
use path_parsing::{find_last_sep_pos, find_last_word};
use path_parsing::{find_last_sep_pos, find_last_non_sep_pos, find_last_word};
use std::ops::Range;
use extname::extname;
use memrnchr::memrnchr;
Expand All @@ -12,7 +12,7 @@ pub fn basename<'a>(path: &'a str, ext: &str) -> &'a str {
range = find_last_word(bytes);
} else {
let extension = ext.as_bytes();
let mut end = bytes.len();
let mut end = find_last_non_sep_pos(&bytes).map(|v| v+1).unwrap_or(bytes.len());

if extension == b".*" {
let e = extname(&path[..end]);
Expand Down Expand Up @@ -83,6 +83,14 @@ fn dots() {
assert_eq!("..", basename("..", "..."));
}

#[test]
fn some_ruby_spec_trailing_sep_cases() {
assert_eq!("base", basename("dir//base.c/", ".c"));
assert_eq!("foo", basename("foo.rb/", ".rb"));
assert_eq!("base", basename("dir//base.c/", ".*"));
assert_eq!("bar", basename("bar.rb///", ".*"));
}

#[test]
fn absolute() {
assert_eq!(basename("/a/b///c", ""), "c");
Expand Down

0 comments on commit 590b0a8

Please sign in to comment.