aboutsummaryrefslogtreecommitdiffhomepage
path: root/crates/mozart-test-harness/src/parser.rs
diff options
context:
space:
mode:
authornsfisis <nsfisis@gmail.com>2026-05-04 10:35:58 +0900
committernsfisis <nsfisis@gmail.com>2026-05-04 10:35:58 +0900
commit1427c101f98c72e551fcc72671ab3cde0991bb6d (patch)
treeb83fe05cc22a38813243d86890fde34721b7985a /crates/mozart-test-harness/src/parser.rs
parentbc72b70daea7db03456508540f96ab6f019ef5e3 (diff)
downloadphp-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.rs14
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() {