diff --git a/src/parse_test_code.rs b/src/parse_test_code.rs index 0373fb0..5cf39c5 100644 --- a/src/parse_test_code.rs +++ b/src/parse_test_code.rs @@ -3,11 +3,21 @@ use std::collections::HashMap; pub fn parse_file(test_file: &str) -> HashMap { let mut name_to_code = HashMap::new(); let mut lines = test_file.lines(); + let mut module = None; while let Some(line) = lines.by_ref().next() { if line.contains("#[test]") { - let (name, code) = parse_function(&mut lines); + let (mut name, code) = parse_function(&mut lines); + if let Some(m) = module { + name = format!("{m}::{name}"); + } name_to_code.insert(name, code); } + if let Some(rest) = line.strip_prefix("mod ") { + module = Some(rest.split(' ').next().unwrap_or_default()) + } + if module.is_some() && line.starts_with('}') { + module = None; + } } name_to_code } diff --git a/tests/example-doctests/expected_results.json b/tests/example-doctests/expected_results.json index cc95348..5fa988f 100644 --- a/tests/example-doctests/expected_results.json +++ b/tests/example-doctests/expected_results.json @@ -77,13 +77,13 @@ }, { "name": "Test::macro out of scope", - "test_code": "It looks like the test runner failed to retrieve the code for this test. Please consider reporting this on the forum so we can try to fix it. Thanks!\n\nhttps://forum.exercism.org/c/exercism/bugs-and-features/126", + "test_code": "let _empty: ::std::collections::HashMap<(), ()> = macros::hashmap!();\nlet _without_comma = macros::hashmap!(23=> 623, 34 => 21);\nlet _with_trailing = macros::hashmap!(23 => 623, 34 => 21,);", "status": "pass", "message": null }, { "name": "Test::type not in scope", - "test_code": "It looks like the test runner failed to retrieve the code for this test. Please consider reporting this on the forum so we can try to fix it. Thanks!\n\nhttps://forum.exercism.org/c/exercism/bugs-and-features/126", + "test_code": "use macros::hashmap;\n\nlet _empty: ::std::collections::HashMap<(), ()> = hashmap!();\nlet _without_comma = hashmap!(23=> 623, 34 => 21);\nlet _with_trailing = hashmap!(23 => 623, 34 => 21,);", "status": "pass", "message": null },