]> git.lizzy.rs Git - rust.git/commitdiff
Print one character per test instead of one line
authorOli Scherer <git-spam-no-reply9815368754983@oli-obk.de>
Mon, 18 Jul 2022 09:19:20 +0000 (09:19 +0000)
committerOli Scherer <git-spam-no-reply9815368754983@oli-obk.de>
Thu, 21 Jul 2022 07:35:49 +0000 (07:35 +0000)
tests/compiletest.rs
ui_test/src/lib.rs
ui_test/src/tests.rs

index 37b9de7327a296d7f9d0642c8534fb5f914cea8f..72aa140d66a2b98ed6e8bea54d55b14f0cb99d83 100644 (file)
@@ -48,8 +48,17 @@ fn run_tests(mode: Mode, path: &str, target: Option<String>) -> Result<()> {
         (true, true) => panic!("cannot use MIRI_BLESS and MIRI_SKIP_UI_CHECKS at the same time"),
     };
 
-    // Pass on all arguments as filters.
-    let path_filter = std::env::args().skip(1);
+    // Pass on all unknown arguments as filters.
+    let mut quiet = false;
+    let path_filter = std::env::args().skip(1).filter(|arg| {
+        match &**arg {
+            "--quiet" => {
+                quiet = true;
+                false
+            }
+            _ => true,
+        }
+    });
 
     let use_std = env::var_os("MIRI_NO_STD").is_none();
 
@@ -76,6 +85,7 @@ fn run_tests(mode: Mode, path: &str, target: Option<String>) -> Result<()> {
             ],
             envs: vec![],
         }),
+        quiet,
     };
     ui_test::run_tests(config)
 }
index ee20920e54ffd4323bdc3232e2e49962adcffea9..f33f8cd83f3383bd762c2e2a6252aac148ff7d17 100644 (file)
@@ -46,6 +46,8 @@ pub struct Config {
     /// Can be used to override what command to run instead of `cargo` to build the
     /// dependencies in `manifest_path`
     pub dependency_builder: Option<DependencyBuilder>,
+    /// Print one character per test instead of one line
+    pub quiet: bool,
 }
 
 #[derive(Debug)]
@@ -125,10 +127,38 @@ pub fn run_tests(mut config: Config) -> Result<()> {
 
         // A channel for the messages emitted by the individual test threads.
         let (finish_file, finished_files) = crossbeam::channel::unbounded();
+        enum TestResult {
+            Ok,
+            Failed,
+            Ignored,
+        }
 
         s.spawn(|_| {
-            for msg in finished_files {
-                eprintln!("{msg}");
+            if config.quiet {
+                for (i, (_, result)) in finished_files.into_iter().enumerate() {
+                    // Humans start counting at 1
+                    let i = i + 1;
+                    match result {
+                        TestResult::Ok => eprint!("{}", ".".green()),
+                        TestResult::Failed => eprint!("{}", "F".red().bold()),
+                        TestResult::Ignored => eprint!("{}", "i".yellow()),
+                    }
+                    if i % 100 == 0 {
+                        eprintln!(" {i}");
+                    }
+                }
+            } else {
+                for (msg, result) in finished_files {
+                    eprint!("{msg} ... ");
+                    eprintln!(
+                        "{}",
+                        match result {
+                            TestResult::Ok => "ok".green(),
+                            TestResult::Failed => "FAILED".red().bold(),
+                            TestResult::Ignored => "ignored (in-test comment)".yellow(),
+                        }
+                    );
+                }
             }
         });
 
@@ -151,12 +181,7 @@ pub fn run_tests(mut config: Config) -> Result<()> {
                     // Ignore file if only/ignore rules do (not) apply
                     if !test_file_conditions(&comments, &target, &config) {
                         ignored.fetch_add(1, Ordering::Relaxed);
-                        let msg = format!(
-                            "{} ... {}",
-                            path.display(),
-                            "ignored (in-test comment)".yellow()
-                        );
-                        finish_file.send(msg)?;
+                        finish_file.send((path.display().to_string(), TestResult::Ignored))?;
                         continue;
                     }
                     // Run the test for all revisions
@@ -171,12 +196,11 @@ pub fn run_tests(mut config: Config) -> Result<()> {
                         if !revision.is_empty() {
                             write!(msg, "(revision `{revision}`) ").unwrap();
                         }
-                        write!(msg, "... ").unwrap();
                         if errors.is_empty() {
-                            write!(msg, "{}", "ok".green()).unwrap();
+                            finish_file.send((msg, TestResult::Ok))?;
                             succeeded.fetch_add(1, Ordering::Relaxed);
                         } else {
-                            write!(msg, "{}", "FAILED".red().bold()).unwrap();
+                            finish_file.send((msg, TestResult::Failed))?;
                             failures.lock().unwrap().push((
                                 path.clone(),
                                 m,
@@ -185,7 +209,6 @@ pub fn run_tests(mut config: Config) -> Result<()> {
                                 stderr,
                             ));
                         }
-                        finish_file.send(msg)?;
                     }
                 }
                 Ok(())
index 8b0bd517a10544bdeef2264978c6fb821c009372..2032988ed384dcd8daee4b2ddf12dd1b04346dba 100644 (file)
@@ -18,6 +18,7 @@ fn config() -> Config {
         output_conflict_handling: OutputConflictHandling::Error,
         dependencies_crate_manifest_path: None,
         dependency_builder: None,
+        quiet: false,
     }
 }