From 410a3ae6e847b59f9930ce4d6bf9f3c5f1d72167 Mon Sep 17 00:00:00 2001 From: Bernardo Date: Fri, 25 Jan 2019 22:13:55 +0100 Subject: use entry file_type, improve test --- crates/ra_vfs/src/io/watcher.rs | 6 +++--- crates/ra_vfs/src/lib.rs | 3 ++- crates/ra_vfs/tests/vfs.rs | 18 +++++++++++------- 3 files changed, 16 insertions(+), 11 deletions(-) diff --git a/crates/ra_vfs/src/io/watcher.rs b/crates/ra_vfs/src/io/watcher.rs index 1d7ce2136..ff6775f59 100644 --- a/crates/ra_vfs/src/io/watcher.rs +++ b/crates/ra_vfs/src/io/watcher.rs @@ -65,7 +65,7 @@ impl Watcher { { match res { Ok(entry) => { - if entry.path().is_dir() { + if entry.file_type().is_dir() { watch_one(self.watcher.as_ref(), entry.path()); } } @@ -172,11 +172,11 @@ impl WatcherWorker { let filter = &self.roots[root]; for res in WalkDir::new(dir) .into_iter() - .filter_entry(|entry| filter.can_contain(entry.path()).is_some()) + .filter_entry(filter.entry_filter()) { match res { Ok(entry) => { - if entry.path().is_dir() { + if entry.file_type().is_dir() { watch_one(self.watcher.as_ref(), entry.path()); } else { // emit only for files otherwise we will cause watch_recursive to be called again with a dir that we are already watching diff --git a/crates/ra_vfs/src/lib.rs b/crates/ra_vfs/src/lib.rs index 661892f8a..d1b0222e7 100644 --- a/crates/ra_vfs/src/lib.rs +++ b/crates/ra_vfs/src/lib.rs @@ -62,7 +62,8 @@ impl RootFilter { pub(crate) fn entry_filter<'a>(&'a self) -> impl FnMut(&DirEntry) -> bool + 'a { move |entry: &DirEntry| { - if entry.path().is_dir() && self.excluded_dirs.iter().any(|it| it == entry.path()) { + if entry.file_type().is_dir() && self.excluded_dirs.iter().any(|it| it == entry.path()) + { // do not walk nested roots false } else { diff --git a/crates/ra_vfs/tests/vfs.rs b/crates/ra_vfs/tests/vfs.rs index 8562c56b9..357e1c775 100644 --- a/crates/ra_vfs/tests/vfs.rs +++ b/crates/ra_vfs/tests/vfs.rs @@ -1,12 +1,16 @@ -use std::{collections::HashSet, fs}; +use std::{collections::HashSet, fs, time::Duration}; -use flexi_logger::Logger; +// use flexi_logger::Logger; +use crossbeam_channel::RecvTimeoutError; use ra_vfs::{Vfs, VfsChange}; use tempfile::tempdir; fn process_tasks(vfs: &mut Vfs, num_tasks: u32) { for _ in 0..num_tasks { - let task = vfs.task_receiver().recv().unwrap(); + let task = vfs + .task_receiver() + .recv_timeout(Duration::from_secs(3)) + .unwrap(); log::debug!("{:?}", task); vfs.handle_task(task); } @@ -14,7 +18,7 @@ fn process_tasks(vfs: &mut Vfs, num_tasks: u32) { macro_rules! assert_match { ($x:expr, $pat:pat) => { - assert_match!($x, $pat, assert!(true)) + assert_match!($x, $pat, ()) }; ($x:expr, $pat:pat, $assert:expr) => { match $x { @@ -26,7 +30,7 @@ macro_rules! assert_match { #[test] fn test_vfs_works() -> std::io::Result<()> { - Logger::with_str("vfs=debug,ra_vfs=debug").start().unwrap(); + // Logger::with_str("vfs=debug,ra_vfs=debug").start().unwrap(); let files = [ ("a/foo.rs", "hello"), @@ -166,8 +170,8 @@ fn test_vfs_works() -> std::io::Result<()> { fs::write(&dir.path().join("a/target/new.rs"), "ignore me").unwrap(); assert_match!( - vfs.task_receiver().try_recv(), - Err(crossbeam_channel::TryRecvError::Empty) + vfs.task_receiver().recv_timeout(Duration::from_millis(300)), // slightly more than watcher debounce delay + Err(RecvTimeoutError::Timeout) ); vfs.shutdown().unwrap(); -- cgit v1.2.3