From 0d0ebafaf8ea9141c362f45b25624038ec19764b Mon Sep 17 00:00:00 2001 From: Remo Senekowitsch Date: Sat, 9 Sep 2023 22:19:38 +0200 Subject: [PATCH] generate tests according to .meta/tests.toml --- rust-tooling/src/exercise_config.rs | 21 +++++++++++++++++++++ rust-tooling/src/exercise_generation.rs | 12 ++++++++---- 2 files changed, 29 insertions(+), 4 deletions(-) diff --git a/rust-tooling/src/exercise_config.rs b/rust-tooling/src/exercise_config.rs index 753b306aa..29e33df2e 100644 --- a/rust-tooling/src/exercise_config.rs +++ b/rust-tooling/src/exercise_config.rs @@ -99,3 +99,24 @@ fn test_deserialize_all() { .expect("should deserialize practice exercise config"); } } + +/// Returns the uuids of the tests excluded in .meta/tests.toml +pub fn get_excluded_tests(slug: &str) -> Vec { + crate::fs_utils::cd_into_repo_root(); + let path = std::path::PathBuf::from("exercises/practice") + .join(slug) + .join(".meta/tests.toml"); + let contents = std::fs::read_to_string(&path).unwrap(); + + let mut excluded_tests = Vec::new(); + + // shitty toml parser + for case in contents.split("\n[").skip(1) { + let (uuid, rest) = case.split_once(']').unwrap(); + if rest.contains("include = false") { + excluded_tests.push(uuid.to_string()); + } + } + + excluded_tests +} diff --git a/rust-tooling/src/exercise_generation.rs b/rust-tooling/src/exercise_generation.rs index da00c246d..9bb917ed9 100644 --- a/rust-tooling/src/exercise_generation.rs +++ b/rust-tooling/src/exercise_generation.rs @@ -1,6 +1,6 @@ use convert_case::{Case, Casing}; -use crate::problem_spec::{get_canonical_data, SingleTestCase, TestCase}; +use crate::{problem_spec::{get_canonical_data, SingleTestCase, TestCase}, exercise_config::get_excluded_tests}; pub struct GeneratedExercise { pub gitignore: String, @@ -13,14 +13,14 @@ pub struct GeneratedExercise { pub fn new(slug: &str) -> GeneratedExercise { let crate_name = slug.replace('-', "_"); - let canonical_data = get_canonical_data(slug); + GeneratedExercise { gitignore: GITIGNORE.into(), manifest: generate_manifest(&crate_name), lib_rs: generate_lib_rs(&crate_name), example: EXAMPLE_RS.into(), test_header: generate_test_header(&crate_name), - test_cases: generate_tests(canonical_data.cases), + test_cases: generate_tests(slug), } } @@ -105,9 +105,13 @@ fn generate_single_test_case(case: SingleTestCase, is_first: bool) -> String { ) } -fn generate_tests(cases: Vec) -> String { +fn generate_tests(slug: &str) -> String { + let cases = get_canonical_data(slug).cases; + let excluded_tests = get_excluded_tests(slug); + let mut single_cases = Vec::new(); extend_single_cases(&mut single_cases, cases); + single_cases.retain(|case| !excluded_tests.contains(&case.uuid)); let mut buffer = String::new();