From b660681a6becdcd33d4ed8cbb167c2a3dc170990 Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Thu, 9 Jul 2020 10:58:56 +0200 Subject: Unify tests --- crates/expect/src/lib.rs | 27 ++++++++++++++++++++++----- crates/ra_syntax/Cargo.toml | 1 + crates/ra_syntax/src/tests.rs | 36 ++---------------------------------- 3 files changed, 25 insertions(+), 39 deletions(-) (limited to 'crates') diff --git a/crates/expect/src/lib.rs b/crates/expect/src/lib.rs index 7579a5027..408448eed 100644 --- a/crates/expect/src/lib.rs +++ b/crates/expect/src/lib.rs @@ -42,7 +42,9 @@ macro_rules! expect { /// expect_file!["/crates/foo/test_data/bar.html"] #[macro_export] macro_rules! expect_file { - [$path:literal] => {$crate::ExpectFile { path: $path }}; + [$path:literal] => {$crate::ExpectFile { + path: $crate::ExpectFilePath::Static($path) + }}; } #[derive(Debug)] @@ -53,7 +55,13 @@ pub struct Expect { #[derive(Debug)] pub struct ExpectFile { - pub path: &'static str, + pub path: ExpectFilePath, +} + +#[derive(Debug)] +pub enum ExpectFilePath { + Static(&'static str), + Dynamic(PathBuf), } #[derive(Debug)] @@ -112,6 +120,9 @@ impl Expect { } 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 { @@ -125,8 +136,14 @@ impl ExpectFile { 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()) } } @@ -154,11 +171,11 @@ impl Runtime { 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); + println!("\x1b[1m\x1b[92mupdating\x1b[0m: {}", expect.path().display()); expect.write(actual); return; } - rt.panic(expect.path.to_string(), expected, actual); + rt.panic(expect.path().display().to_string(), expected, actual); } fn panic(&mut self, position: String, expected: &str, actual: &str) { diff --git a/crates/ra_syntax/Cargo.toml b/crates/ra_syntax/Cargo.toml index 49696ce75..cb21b8053 100644 --- a/crates/ra_syntax/Cargo.toml +++ b/crates/ra_syntax/Cargo.toml @@ -31,4 +31,5 @@ serde = { version = "1.0.106", features = ["derive"] } [dev-dependencies] test_utils = { path = "../test_utils" } +expect = { path = "../expect" } walkdir = "2.3.1" diff --git a/crates/ra_syntax/src/tests.rs b/crates/ra_syntax/src/tests.rs index 7b4232497..a5b6e972e 100644 --- a/crates/ra_syntax/src/tests.rs +++ b/crates/ra_syntax/src/tests.rs @@ -1,11 +1,10 @@ use std::{ - env, fmt::Write, fs, path::{Component, Path, PathBuf}, }; -use test_utils::{assert_eq_text, project_dir}; +use test_utils::project_dir; use crate::{fuzz, tokenize, SourceFile, SyntaxError, TextRange, TextSize, Token}; @@ -218,15 +217,7 @@ where 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); - if !path.exists() { - println!("\nfile: {}", path.display()); - println!("No .txt file with expected result, creating...\n"); - println!("{}\n{}", input_code, actual); - fs::write(&path, &actual).unwrap(); - panic!("No expected result"); - } - let expected = read_text(&path); - assert_equal_text(&expected, &actual, &path); + expect::ExpectFile::new(path).assert_eq(&actual) } } @@ -259,29 +250,6 @@ fn rust_files_in_dir(dir: &Path) -> Vec { acc } -/// Asserts that `expected` and `actual` strings are equal. If they differ only -/// in trailing or leading whitespace the test won't fail and -/// the contents of `actual` will be written to the file located at `path`. -fn assert_equal_text(expected: &str, actual: &str, path: &Path) { - if expected == actual { - return; - } - let dir = project_dir(); - let pretty_path = path.strip_prefix(&dir).unwrap_or_else(|_| path); - if expected.trim() == actual.trim() { - println!("whitespace difference, rewriting"); - println!("file: {}\n", pretty_path.display()); - fs::write(path, actual).unwrap(); - return; - } - if env::var("UPDATE_EXPECT").is_ok() { - println!("rewriting {}", pretty_path.display()); - fs::write(path, actual).unwrap(); - return; - } - assert_eq_text!(expected, actual, "file: {}", pretty_path.display()); -} - /// Read file and normalize newlines. /// /// `rustc` seems to always normalize `\r\n` newlines to `\n`: -- cgit v1.2.3 From 2aa27d612ebdcf1eb34fd22fde5f180a48c3a571 Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Thu, 9 Jul 2020 10:59:41 +0200 Subject: expect should be a dev dep --- crates/ra_ide/Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'crates') diff --git a/crates/ra_ide/Cargo.toml b/crates/ra_ide/Cargo.toml index 8e8892309..5c51828ea 100644 --- a/crates/ra_ide/Cargo.toml +++ b/crates/ra_ide/Cargo.toml @@ -28,7 +28,6 @@ ra_cfg = { path = "../ra_cfg" } ra_fmt = { path = "../ra_fmt" } ra_prof = { path = "../ra_prof" } test_utils = { path = "../test_utils" } -expect = { path = "../expect" } ra_assists = { path = "../ra_assists" } ra_ssr = { path = "../ra_ssr" } @@ -38,3 +37,4 @@ hir = { path = "../ra_hir", package = "ra_hir" } [dev-dependencies] insta = "0.16.0" +expect = { path = "../expect" } -- cgit v1.2.3