use proptest::prelude::*;
use proptest_semver::*;
mod common;
use common::subcommands::*;
use crate::common::common_cmd;
#[test]
fn cli_explain_invalid_input() {
let assert = common_cmd().arg(COMMAND_EXPLAIN).arg("a.b.c").assert();
assert
.append_context(COMMAND_EXPLAIN, "1 bad semver args")
.failure();
}
#[test]
fn cli_explain_basic_cases() {
let assert = common_cmd()
.arg(COMMAND_EXPLAIN)
.arg("0.1.2-rc.0.a.1.b+a.0.b.1")
.assert();
assert.append_context(COMMAND_EXPLAIN, "help").success();
}
proptest! {
#![proptest_config(ProptestConfig {
fork: true,
cases: 256,
.. ProptestConfig::default()
})]
#[test]
fn prop_explain(v in arb_version()) {
let assert = common_cmd().arg(COMMAND_EXPLAIN).arg(v.to_string()).assert();
assert.append_context(COMMAND_EXPLAIN, "property test").success();
}
#[test]
fn prop_explain_output_contains_core_version(v in arb_version()) {
let assert = common_cmd()
.arg("-o")
.arg("text")
.arg(COMMAND_EXPLAIN)
.arg(v.to_string())
.assert();
let stdout = String::from_utf8_lossy(&assert.get_output().stdout).into_owned();
assert.append_context(COMMAND_EXPLAIN, "property test text output").success();
assert!(stdout.contains(&format!("Major: {}", v.major)));
assert!(stdout.contains(&format!("Minor: {}", v.minor)));
assert!(stdout.contains(&format!("Patch: {}", v.patch)));
}
}