From ed873514e5630e113a22aeb4b2c058bdc860bac6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?H=C3=A9ctor=20Ram=C3=B3n=20Jim=C3=A9nez?= Date: Wed, 27 Aug 2025 06:12:38 +0200 Subject: [PATCH] Parse and validate all tests first in `iced_test::run` --- test/src/lib.rs | 75 +++++++++++++++++++++++++------------------------ 1 file changed, 39 insertions(+), 36 deletions(-) diff --git a/test/src/lib.rs b/test/src/lib.rs index 8680f885..cc74509a 100644 --- a/test/src/lib.rs +++ b/test/src/lib.rs @@ -118,53 +118,56 @@ pub fn run( use std::ffi::OsStr; use std::fs; - let tests = fs::read_dir(tests_dir)?; + let files = fs::read_dir(tests_dir)?; + let mut tests = Vec::new(); - // TODO: Concurrent runtimes - for file in tests { + for file in files { let file = file?; if file.path().extension().and_then(OsStr::to_str) != Some("ice") { continue; } - let ice = { - let content = fs::read_to_string(file.path())?; + let content = fs::read_to_string(file.path())?; - match Ice::parse(&content) { - Ok(ice) => ice, - Err(error) => { - return Err(Error::IceParsingFailed { - file: file.path().to_path_buf(), - error, - }); - } - } - }; - - let (sender, mut receiver) = mpsc::channel(1); - - let preset = if let Some(preset) = ice.preset { - let Some(preset) = program - .presets() - .iter() - .find(|candidate| candidate.name() == preset) - else { - return Err(Error::PresetNotFound { - name: preset.to_owned(), - available: program + match Ice::parse(&content) { + Ok(ice) => { + let preset = if let Some(preset) = &ice.preset { + let Some(preset) = program .presets() .iter() - .map(program::Preset::name) - .map(str::to_owned) - .collect(), - }); - }; + .find(|candidate| candidate.name() == preset) + else { + return Err(Error::PresetNotFound { + name: preset.to_owned(), + available: program + .presets() + .iter() + .map(program::Preset::name) + .map(str::to_owned) + .collect(), + }); + }; - Some(preset) - } else { - None - }; + Some(preset) + } else { + None + }; + + tests.push((file, ice, preset)); + } + Err(error) => { + return Err(Error::IceParsingFailed { + file: file.path().to_path_buf(), + error, + }); + } + } + } + + // TODO: Concurrent runtimes + for (file, ice, preset) in tests { + let (sender, mut receiver) = mpsc::channel(1); let mut emulator = Emulator::with_preset( sender,