diff options
| author | John Turner <jturner.usa@gmail.com> | 2025-11-17 19:01:39 +0000 |
|---|---|---|
| committer | John Turner <jturner.usa@gmail.com> | 2025-11-17 19:01:39 +0000 |
| commit | 0cc3ac8e8478ecbf829cf8dbfe7dcd5d2c40da42 (patch) | |
| tree | da32d6aa44386939b92f82fdebf3dd2387b7646e /src | |
| parent | 803f727082979544e6401fb52f528879490e517b (diff) | |
| download | gentoo-utils-0cc3ac8e8478ecbf829cf8dbfe7dcd5d2c40da42.tar.gz | |
verify that slot exprs have either a primary slot name or operator
Diffstat (limited to 'src')
| -rw-r--r-- | src/atom/parsers.rs | 17 |
1 files changed, 15 insertions, 2 deletions
diff --git a/src/atom/parsers.rs b/src/atom/parsers.rs index 8da8203..c609a1c 100644 --- a/src/atom/parsers.rs +++ b/src/atom/parsers.rs @@ -185,6 +185,12 @@ impl<'a> Parseable<'a, &'a str> for Slot { sub, operator, }) + .verify_output(|slot| { + matches!( + (&slot.primary(), &slot.operator()), + (Some(_) | None, Some(_)) | (Some(_), None) + ) + }) } } @@ -420,9 +426,9 @@ mod test { #[test] fn test_empty_slot() { - let it = InputIter::new("foo/bar:="); + let it = InputIter::new("=dev-ml/uucp-17*:"); - Atom::parser().check_finished(it).unwrap(); + assert!(Atom::parser().check_finished(it).is_err()); } #[test] @@ -494,4 +500,11 @@ mod test { assert!(Cpv::parser().parse_finished(it).is_err()); } + + #[test] + fn test_empty_slot_with_operator() { + let it = InputIter::new("foo/bar:="); + + Atom::parser().check_finished(it).unwrap(); + } } |
