Complete the end-to-end CLI parity audit
This commit is contained in:
@@ -4,6 +4,8 @@ mod support;
|
||||
|
||||
use std::collections::{BTreeMap, BTreeSet};
|
||||
|
||||
use ironstorage::command::parse_from;
|
||||
|
||||
use support::compatibility::{
|
||||
FixtureSet, TestResult, decrypt_entry_with_passphrase, validate_entry_record,
|
||||
validate_key_record, validate_recipient_signature, validate_repository,
|
||||
@@ -154,6 +156,37 @@ fn behavior_catalog_covers_the_milestone_contract() -> TestResult {
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn every_compatibility_case_reaches_the_typed_command_contract() -> TestResult {
|
||||
let fixture = FixtureSet::load()?;
|
||||
for case in &fixture.behavior.cases {
|
||||
let arguments = std::iter::once("ironstorage").chain(case.argv.iter().map(String::as_str));
|
||||
let parsed = parse_from(arguments);
|
||||
let parser_rejection = case.outcome.contains("usage-error")
|
||||
|| case.outcome.contains("unsupported-option")
|
||||
|| matches!(
|
||||
case.id.as_str(),
|
||||
"generate-zero" | "git-unsupported-passthrough"
|
||||
);
|
||||
assert_eq!(
|
||||
parsed.is_err(),
|
||||
parser_rejection,
|
||||
"unexpected command-contract result for {}: {:?}",
|
||||
case.id,
|
||||
parsed
|
||||
);
|
||||
if let Err(error) = parsed {
|
||||
assert_eq!(
|
||||
error.exit_code(),
|
||||
case.status as u8,
|
||||
"status for {}",
|
||||
case.id
|
||||
);
|
||||
}
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn generated_openpgp_fixtures_are_self_consistent() -> TestResult {
|
||||
let fixture = FixtureSet::load()?;
|
||||
|
||||
Reference in New Issue
Block a user