use proptest::prelude::*;
use proptest_semver::*;
#[cfg(not(windows))]
use semver::Version;
mod common;
use common::subcommands::*;
use crate::common::common_cmd;
#[test]
fn cli_validate_invalid_input() {
let assert = common_cmd().arg(COMMAND_VALIDATE).arg("a.b.c").assert();
assert
.append_context(COMMAND_VALIDATE, "1 bad semver args")
.failure();
}
#[test]
fn cli_validate_basic_cases() {
let assert = common_cmd()
.arg(COMMAND_VALIDATE)
.arg("0.1.2-rc.0.a.1.b+a.0.b.1")
.assert();
assert
.append_context(COMMAND_VALIDATE, "1 valid semver arg")
.success();
let assert = common_cmd().arg(COMMAND_VALIDATE).arg("0.0.0a").assert();
assert
.append_context(
COMMAND_VALIDATE,
"regression of: https://github.com/canardleteer/sem-tool/issues/50",
)
.failure();
}
proptest! {
#![proptest_config(ProptestConfig {
// Setting both fork and timeout is redundant since timeout implies
// fork, but both are shown for clarity.
fork: true,
// timeout: 10000,
cases: 256,
.. ProptestConfig::default()
})]
#[test]
fn prop_validate_small(v in arb_version()) {
let assert = common_cmd().arg(COMMAND_VALIDATE).arg("-s").arg(v.to_string()).assert();
assert.append_context(COMMAND_VALIDATE, "property testing").success();
}
#[test]
fn prop_validate_regex(v in arb_semver()) {
let assert = common_cmd().arg(COMMAND_VALIDATE).arg(v).assert();
assert.append_context(COMMAND_VALIDATE, "property testing").success();
}
#[cfg(not(windows))]
#[test]
fn prop_validate_rejects_invalid_strings(s in "\\PC{1,32}") {
prop_assume!(Version::parse(&s).is_err());
let assert = common_cmd().arg(COMMAND_VALIDATE).arg(&s).assert();
assert.append_context(COMMAND_VALIDATE, "invalid default").failure();
let assert = common_cmd().arg(COMMAND_VALIDATE).arg("-s").arg(&s).assert();
assert.append_context(COMMAND_VALIDATE, "invalid -s").failure();
}
}