Skip to content

Commit

Permalink
Skip regression 210 test on APFS
Browse files Browse the repository at this point in the history
APFS does not support creating filenames with invalid UTF-8 byte codes,
thus this test doesn't make sense. Skip it on file systems where this
shouldn't be possible.

Fixes BurntSushi#559
  • Loading branch information
sebnow committed Oct 16, 2017
1 parent a98156e commit dfd60a9
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 9 deletions.
11 changes: 7 additions & 4 deletions tests/tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1015,11 +1015,14 @@ fn regression_210() {

let wd = WorkDir::new("regression_210");
let mut cmd = wd.command();
wd.create(badutf8, "test");
cmd.arg("-H").arg("test").arg(badutf8);
// APFS does not support creating files with invalid UTF-8 bytes.
// https://github.com/BurntSushi/ripgrep/issues/559
if wd.try_create(badutf8, "test").is_ok() {
cmd.arg("-H").arg("test").arg(badutf8);

let out = wd.output(&mut cmd);
assert_eq!(out.stdout, b"foo\xffbar:test\n".to_vec());
let out = wd.output(&mut cmd);
assert_eq!(out.stdout, b"foo\xffbar:test\n".to_vec());
}
}

// See: https://github.com/BurntSushi/ripgrep/issues/228
Expand Down
20 changes: 15 additions & 5 deletions tests/workdir.rs
Original file line number Diff line number Diff line change
Expand Up @@ -41,24 +41,34 @@ impl WorkDir {
}
}

/// Create a new file with the given name and contents in this directory.
/// Create a new file with the given name and contents in this directory, or panic on error.
pub fn create<P: AsRef<Path>>(&self, name: P, contents: &str) {
self.create_bytes(name, contents.as_bytes());
}

/// Try to create a new file with the given name and contents in this directory.
pub fn try_create<P: AsRef<Path>>(&self, name: P, contents: &str) -> io::Result<()> {
self.try_create_bytes(name, contents.as_bytes())
}

/// Create a new file with the given name and size.
pub fn create_size<P: AsRef<Path>>(&self, name: P, filesize: u64) {
let path = self.dir.join(name);
let file = nice_err(&path, File::create(&path));
nice_err(&path, file.set_len(filesize));
}

/// Create a new file with the given name and contents in this directory.
/// Create a new file with the given name and contents in this directory, or panic on error.
pub fn create_bytes<P: AsRef<Path>>(&self, name: P, contents: &[u8]) {
let path = self.dir.join(name);
let mut file = nice_err(&path, File::create(&path));
nice_err(&path, file.write_all(contents));
nice_err(&path, file.flush());
nice_err(&path, self.try_create_bytes(&path, contents));
}

/// Try to create a new file with the given name and contents in this directory.
fn try_create_bytes<P: AsRef<Path>>(&self, path: P, contents: &[u8]) -> io::Result<()> {
let mut file = File::create(&path)?;
file.write_all(contents)?;
file.flush()
}

/// Remove a file with the given name from this directory.
Expand Down

0 comments on commit dfd60a9

Please sign in to comment.