From 8e1ebbcc136d1bb8f120d0db2625b70a37b756f8 Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Thu, 9 Jul 2020 11:47:27 +0200 Subject: [PATCH] Simplify --- crates/expect/src/lib.rs | 49 +++++++++++++---------------------- crates/ra_syntax/src/tests.rs | 3 ++- 2 files changed, 20 insertions(+), 32 deletions(-) diff --git a/crates/expect/src/lib.rs b/crates/expect/src/lib.rs index 408448eedbd..c54e992038e 100644 --- a/crates/expect/src/lib.rs +++ b/crates/expect/src/lib.rs @@ -42,8 +42,8 @@ macro_rules! expect { /// expect_file!["/crates/foo/test_data/bar.html"] #[macro_export] macro_rules! expect_file { - [$path:literal] => {$crate::ExpectFile { - path: $crate::ExpectFilePath::Static($path) + [$path:expr] => {$crate::ExpectFile { + path: std::path::PathBuf::from($path) }}; } @@ -55,13 +55,7 @@ pub struct Expect { #[derive(Debug)] pub struct ExpectFile { - pub path: ExpectFilePath, -} - -#[derive(Debug)] -pub enum ExpectFilePath { - Static(&'static str), - Dynamic(PathBuf), + pub path: PathBuf, } #[derive(Debug)] @@ -120,9 +114,6 @@ fn locate(&self, file: &str) -> Location { } impl ExpectFile { - pub fn new(path: PathBuf) -> ExpectFile { - ExpectFile { path: ExpectFilePath::Dynamic(path) } - } pub fn assert_eq(&self, actual: &str) { let expected = self.read(); if actual == expected { @@ -136,14 +127,8 @@ fn read(&self) -> String { fn write(&self, contents: &str) { fs::write(self.abs_path(), contents).unwrap() } - fn path(&self) -> &Path { - match &self.path { - ExpectFilePath::Static(it) => it.as_ref(), - ExpectFilePath::Dynamic(it) => it.as_path(), - } - } fn abs_path(&self) -> PathBuf { - workspace_root().join(self.path()) + WORKSPACE_ROOT.join(&self.path) } } @@ -171,11 +156,11 @@ fn fail_expect(expect: &Expect, expected: &str, actual: &str) { fn fail_file(expect: &ExpectFile, expected: &str, actual: &str) { let mut rt = RT.lock().unwrap_or_else(|poisoned| poisoned.into_inner()); if update_expect() { - println!("\x1b[1m\x1b[92mupdating\x1b[0m: {}", expect.path().display()); + println!("\x1b[1m\x1b[92mupdating\x1b[0m: {}", expect.path.display()); expect.write(actual); return; } - rt.panic(expect.path().display().to_string(), expected, actual); + rt.panic(expect.path.display().to_string(), expected, actual); } fn panic(&mut self, position: String, expected: &str, actual: &str) { @@ -219,7 +204,7 @@ struct FileRuntime { impl FileRuntime { fn new(expect: &Expect) -> FileRuntime { - let path = workspace_root().join(expect.position.file); + let path = WORKSPACE_ROOT.join(expect.position.file); let original_text = fs::read_to_string(&path).unwrap(); let patchwork = Patchwork::new(original_text.clone()); FileRuntime { path, original_text, patchwork } @@ -307,15 +292,17 @@ fn format_patch(line_indent: usize, patch: &str) -> String { buf } -fn workspace_root() -> PathBuf { - Path::new( - &env::var("CARGO_MANIFEST_DIR").unwrap_or_else(|_| env!("CARGO_MANIFEST_DIR").to_owned()), - ) - .ancestors() - .nth(2) - .unwrap() - .to_path_buf() -} +static WORKSPACE_ROOT: Lazy = Lazy::new(|| { + let my_manifest = + env::var("CARGO_MANIFEST_DIR").unwrap_or_else(|_| env!("CARGO_MANIFEST_DIR").to_owned()); + // Heuristic, see https://github.com/rust-lang/cargo/issues/3946 + Path::new(&my_manifest) + .ancestors() + .filter(|it| it.join("Cargo.toml").exists()) + .last() + .unwrap() + .to_path_buf() +}); #[cfg(test)] mod tests { diff --git a/crates/ra_syntax/src/tests.rs b/crates/ra_syntax/src/tests.rs index a5b6e972e0d..aa78735da67 100644 --- a/crates/ra_syntax/src/tests.rs +++ b/crates/ra_syntax/src/tests.rs @@ -4,6 +4,7 @@ path::{Component, Path, PathBuf}, }; +use expect::expect_file; use test_utils::project_dir; use crate::{fuzz, tokenize, SourceFile, SyntaxError, TextRange, TextSize, Token}; @@ -217,7 +218,7 @@ fn dir_tests(test_data_dir: &Path, paths: &[&str], outfile_extension: &str, f for (path, input_code) in collect_rust_files(test_data_dir, paths) { let actual = f(&input_code, &path); let path = path.with_extension(outfile_extension); - expect::ExpectFile::new(path).assert_eq(&actual) + expect_file![path].assert_eq(&actual) } } -- 2.44.0