use predicates::prelude::*;
mod utils;
use utils::TestEnv;
#[test]
fn command_link_binary() {
let env = TestEnv::new();
env.juliaup().arg("add").arg("1.10.10").assert().success();
env.juliaup()
.arg("link")
.arg("custom")
.arg("/usr/bin/false") .assert()
.success();
env.juliaup()
.arg("status")
.assert()
.success()
.stdout(predicate::str::contains("custom").and(predicate::str::contains("Linked to")));
}
#[test]
fn command_link_alias() {
let env = TestEnv::new();
env.juliaup().arg("add").arg("1.10.10").assert().success();
env.juliaup()
.arg("link")
.arg("stable")
.arg("+1.10.10")
.assert()
.success()
.stderr(predicate::str::contains(
"Channel alias `stable` created, pointing to `1.10.10`.",
));
env.juliaup().arg("status").assert().success().stdout(
predicate::str::contains("stable").and(predicate::str::contains("Alias to `1.10.10`")),
);
}
#[test]
fn command_link_alias_to_system_channel() {
let env = TestEnv::new();
env.juliaup()
.arg("link")
.arg("r")
.arg("+release")
.assert()
.success()
.stderr(predicate::str::contains(
"Channel alias `r` created, pointing to `release`.",
));
env.juliaup()
.arg("status")
.assert()
.success()
.stdout(predicate::str::contains("r").and(predicate::str::contains("Alias to `release`")));
}
#[test]
fn command_link_alias_invalid_target() {
let env = TestEnv::new();
env.juliaup()
.arg("link")
.arg("broken")
.arg("+nonexistent")
.assert()
.failure()
.stderr(predicate::str::contains(
"Target channel `nonexistent` is not installed",
));
}
#[test]
fn command_link_alias_with_args_works() {
let env = TestEnv::new();
env.juliaup()
.arg("link")
.arg("alias_with_args")
.arg("+release")
.arg("--")
.arg("--some-arg")
.assert()
.success()
.stderr(predicate::str::contains("args: [\"--some-arg\"]"));
}
#[test]
fn alias_with_args_passes_through() {
let env = TestEnv::new();
env.juliaup().arg("add").arg("1.10.10").assert().success();
env.juliaup()
.arg("link")
.arg("julia_with_threads")
.arg("+1.10.10")
.arg("--")
.arg("--threads=4")
.arg("--startup-file=no")
.assert()
.success()
.stderr(predicate::str::contains(
"args: [\"--threads=4\", \"--startup-file=no\"]",
));
env.julia()
.arg("+julia_with_threads")
.arg("-e")
.arg("println(Threads.nthreads())")
.assert()
.success()
.stdout("4\n");
}
#[test]
fn command_link_duplicate_channel() {
let env = TestEnv::new();
env.juliaup().arg("add").arg("1.10.10").assert().success();
env.juliaup()
.arg("link")
.arg("1.10.10")
.arg("+release")
.assert()
.failure()
.stderr(predicate::str::contains(
"Channel name `1.10.10` is already used",
));
}
#[test]
fn command_remove_alias() {
let env = TestEnv::new();
env.juliaup()
.arg("link")
.arg("r")
.arg("+release")
.assert()
.success();
env.juliaup()
.arg("remove")
.arg("r")
.assert()
.success()
.stderr(predicate::str::contains(
"Julia alias (pointing to 'release') 'r' successfully removed.",
));
env.juliaup()
.arg("status")
.assert()
.success()
.stdout(predicate::str::contains("Alias to").not());
}
#[test]
fn command_remove_non_existent() {
let env = TestEnv::new();
env.juliaup()
.arg("remove")
.arg("nonexistent")
.assert()
.failure()
.stderr(predicate::str::contains("'nonexistent' cannot be removed because it is not currently installed. Please run `juliaup list` to see available channels."));
}
#[test]
fn alias_resolution_julia_launcher() {
let env = TestEnv::new();
env.juliaup().arg("add").arg("1.10.10").assert().success();
env.juliaup()
.arg("link")
.arg("stable")
.arg("+1.10.10")
.assert()
.success();
env.julia()
.arg("+stable")
.arg("-e")
.arg("print(VERSION)")
.assert()
.success()
.stdout("1.10.10");
}
#[test]
fn alias_as_default() {
let env = TestEnv::new();
env.juliaup().arg("add").arg("1.10.10").assert().success();
env.juliaup()
.arg("link")
.arg("stable")
.arg("+1.10.10")
.assert()
.success();
env.juliaup()
.arg("default")
.arg("stable")
.assert()
.success();
env.julia()
.arg("-e")
.arg("print(VERSION)")
.assert()
.success()
.stdout("1.10.10");
}
#[test]
fn alias_to_alias_prevented() {
let env = TestEnv::new();
env.juliaup().arg("add").arg("1.10.10").assert().success();
env.juliaup()
.arg("link")
.arg("stable")
.arg("+1.10.10")
.assert()
.success();
env.juliaup()
.arg("link")
.arg("prod")
.arg("+stable")
.assert()
.failure()
.stderr(predicate::str::contains(
"Cannot create an alias to another alias `stable`",
));
}
#[test]
fn alias_update_resolves_target() {
let env = TestEnv::new();
env.juliaup().arg("add").arg("1.10.10").assert().success();
env.juliaup()
.arg("link")
.arg("r")
.arg("+1.10.10")
.assert()
.success();
env.juliaup()
.arg("update")
.arg("r")
.assert()
.success()
.stderr(predicate::str::contains("Checking for new Julia versions"));
}