diff options
| author | nsfisis <nsfisis@gmail.com> | 2026-05-04 10:35:58 +0900 |
|---|---|---|
| committer | nsfisis <nsfisis@gmail.com> | 2026-05-04 10:35:58 +0900 |
| commit | 1427c101f98c72e551fcc72671ab3cde0991bb6d (patch) | |
| tree | b83fe05cc22a38813243d86890fde34721b7985a /crates/mozart-test-harness/src/parser.rs | |
| parent | bc72b70daea7db03456508540f96ab6f019ef5e3 (diff) | |
| download | php-mozart-1427c101f98c72e551fcc72671ab3cde0991bb6d.tar.gz php-mozart-1427c101f98c72e551fcc72671ab3cde0991bb6d.tar.zst php-mozart-1427c101f98c72e551fcc72671ab3cde0991bb6d.zip | |
test(resolver): scaffold PoolBuilder fixture suite from Composer
Port the 31 .test fixtures under
composer/tests/Composer/Test/DependencyResolver/Fixtures/poolbuilder/
as #[ignore]'d cases in mozart-registry/tests/poolbuilder.rs. Each
fixture is parsed eagerly so format-level regressions surface
immediately, while the runner itself is unimplemented\!() — removing
#[ignore] from a case will force the missing pool-build entry point
into existence rather than silently mis-run. Generalize
mozart-test-harness's split_sections to take a per-format valid-section
list and add a poolbuilder parser alongside the installer one.
Diffstat (limited to 'crates/mozart-test-harness/src/parser.rs')
| -rw-r--r-- | crates/mozart-test-harness/src/parser.rs | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/crates/mozart-test-harness/src/parser.rs b/crates/mozart-test-harness/src/parser.rs index 827272b..ecefb37 100644 --- a/crates/mozart-test-harness/src/parser.rs +++ b/crates/mozart-test-harness/src/parser.rs @@ -45,7 +45,7 @@ pub fn parse_test_file(path: &Path) -> Result<ParsedTest> { } pub fn parse_test_str(content: &str) -> Result<ParsedTest> { - let mut sections = split_sections(content)?; + let mut sections = split_sections(content, VALID_SECTIONS)?; for required in REQUIRED_SECTIONS { if !sections.contains_key(*required) { @@ -86,7 +86,15 @@ pub fn parse_test_str(content: &str) -> Result<ParsedTest> { }) } -fn split_sections(content: &str) -> Result<IndexMap<String, String>> { +/// Split a `.test` fixture into its `--SECTION--` blocks. +/// +/// Shared helper for both [`parse_test_str`] and the sibling pool-builder +/// parser; each caller passes its own allowed-section list so unknown +/// headers still surface as parse errors rather than silently ignored. +pub(crate) fn split_sections( + content: &str, + valid_sections: &[&str], +) -> Result<IndexMap<String, String>> { let header_re = regex::Regex::new(r"^--([A-Z][A-Z-]*)--$").unwrap(); let mut sections: IndexMap<String, String> = IndexMap::new(); @@ -97,7 +105,7 @@ fn split_sections(content: &str) -> Result<IndexMap<String, String>> { let trimmed = line.trim_end_matches('\n').trim_end_matches('\r'); if let Some(caps) = header_re.captures(trimmed) { let name = caps[1].to_string(); - if !VALID_SECTIONS.contains(&name.as_str()) { + if !valid_sections.contains(&name.as_str()) { bail!("unknown section: --{name}--"); } if let Some(prev) = current_section.take() { |
