use proptest::prelude::*;
use proptest_semver::*;
mod common;
use common::subcommands::*;
use crate::common::common_cmd;
#[test]
fn cli_compare_invalid_input() {
let assert = common_cmd().arg(COMMAND_COMPARE).arg("a.b.c").assert();
assert
.append_context(COMMAND_COMPARE, "1 bad semver args")
.failure();
let assert = common_cmd()
.arg(COMMAND_COMPARE)
.arg("a.b.c")
.arg("x.y.z")
.assert();
assert
.append_context(COMMAND_COMPARE, "2 bad semver args")
.failure();
}
#[test]
fn cli_compare_basic_cases() {
let assert = common_cmd()
.arg(COMMAND_COMPARE)
.arg("1.2.3")
.arg("4.5.6")
.assert();
assert
.append_context(COMMAND_COMPARE, "no exit code reporting")
.success();
let assert = common_cmd()
.arg(COMMAND_COMPARE)
.arg("-e")
.arg("1.2.3")
.arg("1.2.3")
.assert();
assert
.append_context(COMMAND_COMPARE, "exit code reporting")
.success();
let assert = common_cmd()
.arg(COMMAND_COMPARE)
.arg("-e")
.arg("1.2.3")
.arg("4.5.6")
.assert();
assert
.append_context(COMMAND_COMPARE, "exit code reporting")
.code(100);
let assert = common_cmd()
.arg(COMMAND_COMPARE)
.arg("-e")
.arg("4.5.6")
.arg("1.2.3")
.assert();
assert
.append_context(COMMAND_COMPARE, "exit code reporting")
.code(122);
let assert = common_cmd()
.arg(COMMAND_COMPARE)
.arg("-e")
.arg("1.2.3+1")
.arg("1.2.3+0")
.assert();
assert
.append_context(COMMAND_COMPARE, "exit code reporting")
.code(112);
let assert = common_cmd()
.arg(COMMAND_COMPARE)
.arg("-e")
.arg("1.2.3+0")
.arg("1.2.3+1")
.assert();
assert
.append_context(COMMAND_COMPARE, "exit code reporting")
.code(110);
let assert = common_cmd()
.arg(COMMAND_COMPARE)
.arg("-e")
.arg("-s")
.arg("1.2.3+0")
.arg("1.2.3+1")
.assert();
assert
.append_context(
COMMAND_COMPARE,
"exit code reporting + semantic equivalence passing",
)
.success();
let assert = common_cmd()
.arg(COMMAND_COMPARE)
.arg("-e")
.arg("-s")
.arg("1.2.2")
.arg("1.2.3+1")
.assert();
assert
.append_context(
COMMAND_COMPARE,
"exit code reporting + semantic equivalence passing",
)
.code(100);
let assert = common_cmd()
.arg(COMMAND_COMPARE)
.arg("-s")
.arg("1.2.4+0")
.arg("1.2.3+1")
.assert();
assert
.append_context(
COMMAND_COMPARE,
"semantic equivalence passing without complex exit code reporting",
)
.success();
}
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 filter_test_semantic_equal(a in arb_version(), b in arb_version()) {
let assert = common_cmd().arg(COMMAND_COMPARE).arg("-s").arg(a.to_string()).arg(b.to_string()).assert();
assert.append_context(COMMAND_COMPARE, "property test: -s").success();
}
#[test]
fn filter_test_compare_no_opts(version_a in arb_version(), version_b in arb_version()) {
let assert = common_cmd().arg(COMMAND_COMPARE).arg("-s").arg(version_a.to_string()).arg(version_b.to_string()).assert();
assert.append_context(COMMAND_COMPARE, "property test").success();
}
}