use crate::integration::common::Sq;
#[test]
fn version() {
let sq = Sq::new();
let version = format!(
"{}.{}.{}",
env!("CARGO_PKG_VERSION_MAJOR"),
env!("CARGO_PKG_VERSION_MINOR"),
env!("CARGO_PKG_VERSION_PATCH"));
let cmd = sq.command_args(&[
"--cli-version", &version,
"version"
][..]);
sq.run(cmd, true);
let cmd = sq.command_args(&[
"--cli-version", "0.0.0",
"version"
]);
sq.run(cmd, false);
let cmd = sq.command_args(&[
"version",
"--cli-version", &version
]);
sq.run(cmd, false);
let cmd = sq.command_args(&[
"--cli-version", &version[1..],
"version"
]);
sq.run(cmd, false);
}
#[test]
fn check_compatibility() {
let sq = Sq::new();
let mut die = 0;
let mut check = |major, minor, patch, success: bool| {
let version = &format!("{}.{}.{}", major, minor, patch);
eprintln!("Checking {}", version);
let cmd = sq.command_args(&["--cli-version", version, "version"][..]);
let output = sq.run(cmd, None);
match (output.status.success(), success) {
(true, true) => {
eprintln!("PASSED: Version correctly considered compatible.");
}
(false, false) => {
eprintln!("PASSED: Version correctly considered incompatible.");
}
(true, false) => {
eprintln!("FAILED: Version incorrectly considered compatible.");
die += 1;
}
(false, true) => {
eprintln!("FAILED: Version incorrectly considered incompatible.");
die += 1;
}
}
};
let major: u32 = env!("CARGO_PKG_VERSION_MAJOR").parse().unwrap();
let minor: u32 = env!("CARGO_PKG_VERSION_MINOR").parse().unwrap();
let patch: u32 = env!("CARGO_PKG_VERSION_PATCH").parse().unwrap();
check(major, minor, patch, true);
if major > 0 {
check(major - 1, minor, patch, false);
check(major - 1, 0, 0, false);
check(major - 1, 999, 999, false);
}
check(major + 1, minor, patch, false);
check(major + 1, 0, 0, false);
check(major + 1, 999, 999, false);
if minor > 0 {
check(major, minor - 1, patch, true);
check(major, minor - 1, 0, true);
check(major, minor - 1, 999, true);
}
check(major, minor + 1, patch, false);
check(major, minor + 1, 0, false);
check(major, minor + 1, 999, false);
if patch > 0 {
check(major, minor, patch - 1, true);
}
check(major, minor, patch + 1, false);
if die > 0 {
panic!("{} checks failed", die);
}
}