From 103e5c12b0f2a5b9c6950e07aecda9b4c4226a99 Mon Sep 17 00:00:00 2001 From: David Anthoff Date: Sat, 26 Oct 2024 15:20:47 -0700 Subject: [PATCH] Test the channel selection from manifest file --- tests/channel_selection.rs | 201 +++++++++++++++++++++++++++++++++++++ 1 file changed, 201 insertions(+) diff --git a/tests/channel_selection.rs b/tests/channel_selection.rs index ed375c9f..8485f0af 100644 --- a/tests/channel_selection.rs +++ b/tests/channel_selection.rs @@ -165,3 +165,204 @@ fn channel_selection() { .failure() .stderr("ERROR: `pr1` is not installed. Please run `juliaup add pr1` to install pull request channel if available.\n"); } + +#[test] +fn manifest_version_selection() { + let depot_dir = assert_fs::TempDir::new().unwrap(); + + Command::cargo_bin("juliaup") + .unwrap() + .arg("add") + .arg("1.6.2") + .env("JULIA_DEPOT_PATH", depot_dir.path()) + .env("JULIAUP_DEPOT_PATH", depot_dir.path()) + .assert() + .success() + .stdout(""); + + Command::cargo_bin("juliaup") + .unwrap() + .arg("add") + .arg("1.10.1") + .env("JULIA_DEPOT_PATH", depot_dir.path()) + .env("JULIAUP_DEPOT_PATH", depot_dir.path()) + .assert() + .success() + .stdout(""); + + Command::cargo_bin("juliaup") + .unwrap() + .arg("add") + .arg("1.11.1") + .env("JULIA_DEPOT_PATH", depot_dir.path()) + .env("JULIAUP_DEPOT_PATH", depot_dir.path()) + .assert() + .success() + .stdout(""); + + Command::cargo_bin("juliaup") + .unwrap() + .arg("default") + .arg("1.11.1") + .env("JULIA_DEPOT_PATH", depot_dir.path()) + .env("JULIAUP_DEPOT_PATH", depot_dir.path()) + .assert() + .success() + .stdout(""); + + Command::cargo_bin("julia") + .unwrap() + .arg("-e") + .arg("print(VERSION)") + .env("JULIA_DEPOT_PATH", depot_dir.path()) + .env("JULIAUP_DEPOT_PATH", depot_dir.path()) + .assert() + .success() + .stdout("1.11.1"); + + let proj1_dir = assert_fs::TempDir::new().unwrap(); + + // We are adding and then removing a package here to force generation of an actual Project.toml + Command::cargo_bin("julia") + .unwrap() + .arg("+1.10.1") + .arg("-e") + .arg("using Pkg; Pkg.activate(\".\"); Pkg.add(\"StringBuilders\"); Pkg.rm(\"StringBuilders\"); print(VERSION)") + .env("JULIA_DEPOT_PATH", depot_dir.path()) + .env("JULIAUP_DEPOT_PATH", depot_dir.path()) + .current_dir(&proj1_dir) + .assert() + .success() + .stdout("1.10.1"); + + // First we try this with the feature disabled + Command::cargo_bin("julia") + .unwrap() + .arg("--project=.") + .arg("-e") + .arg("print(VERSION)") + .env("JULIA_DEPOT_PATH", depot_dir.path()) + .env("JULIAUP_DEPOT_PATH", depot_dir.path()) + .current_dir(&proj1_dir) + .assert() + .success() + .stdout("1.11.1"); + + // Now we enable the feature + Command::cargo_bin("juliaup") + .unwrap() + .arg("config") + .arg("featuremanifestsupport") + .arg("true") + .env("JULIA_DEPOT_PATH", depot_dir.path()) + .env("JULIAUP_DEPOT_PATH", depot_dir.path()) + .assert() + .success() + .stdout(""); + + Command::cargo_bin("julia") + .unwrap() + .arg("--project=.") + .arg("-e") + .arg("print(VERSION)") + .env("JULIA_DEPOT_PATH", depot_dir.path()) + .env("JULIAUP_DEPOT_PATH", depot_dir.path()) + .current_dir(&proj1_dir) + .assert() + .success() + .stdout("1.10.1"); + + // TODO This currently fails, but it shouldn't + Command::cargo_bin("julia") + .unwrap() + .arg("--project") + .arg("-e") + .arg("print(VERSION)") + .env("JULIA_DEPOT_PATH", depot_dir.path()) + .env("JULIAUP_DEPOT_PATH", depot_dir.path()) + .current_dir(&proj1_dir) + .assert() + .success() + .stdout("1.10.1"); + + Command::cargo_bin("julia") + .unwrap() + .arg("--project=@.") + .arg("-e") + .arg("print(VERSION)") + .env("JULIA_DEPOT_PATH", depot_dir.path()) + .env("JULIAUP_DEPOT_PATH", depot_dir.path()) + .current_dir(&proj1_dir) + .assert() + .success() + .stdout("1.10.1"); + + let sub_dir1 = &proj1_dir.path().join("subdir1"); + std::fs::create_dir(&sub_dir1).unwrap(); + + Command::cargo_bin("julia") + .unwrap() + .arg("--project=.") + .arg("-e") + .arg("print(VERSION)") + .env("JULIA_DEPOT_PATH", depot_dir.path()) + .env("JULIAUP_DEPOT_PATH", depot_dir.path()) + .current_dir(&sub_dir1) + .assert() + .success() + .stdout("1.11.1"); + + // TODO This currently fails, but it shouldn't + Command::cargo_bin("julia") + .unwrap() + .arg("--project") + .arg("-e") + .arg("print(VERSION)") + .env("JULIA_DEPOT_PATH", depot_dir.path()) + .env("JULIAUP_DEPOT_PATH", depot_dir.path()) + .current_dir(&sub_dir1) + .assert() + .success() + .stdout("1.10.1"); + + Command::cargo_bin("julia") + .unwrap() + .arg("--project=@.") + .arg("-e") + .arg("print(VERSION)") + .env("JULIA_DEPOT_PATH", depot_dir.path()) + .env("JULIAUP_DEPOT_PATH", depot_dir.path()) + .current_dir(&sub_dir1) + .assert() + .success() + .stdout("1.10.1"); + + // Now we try with a Julia version that generates schema v1 manifests + let proj2_dir = assert_fs::TempDir::new().unwrap(); + + // We are adding and then removing a package here to force generation of an actual Project.toml + Command::cargo_bin("julia") + .unwrap() + .arg("+1.6.2") + .arg("-e") + .arg("using Pkg; Pkg.activate(\".\"); Pkg.add(\"StringBuilders\"); Pkg.rm(\"StringBuilders\"); print(VERSION)") + .env("JULIA_DEPOT_PATH", depot_dir.path()) + .env("JULIAUP_DEPOT_PATH", depot_dir.path()) + .current_dir(&proj2_dir) + .assert() + .success() + .stdout("1.6.2"); + + // It shouldn't pick up the version from the manifest, as it isn't stored in the manifest + Command::cargo_bin("julia") + .unwrap() + .arg("--project=.") + .arg("-e") + .arg("print(VERSION)") + .env("JULIA_DEPOT_PATH", depot_dir.path()) + .env("JULIAUP_DEPOT_PATH", depot_dir.path()) + .current_dir(&proj2_dir) + .assert() + .success() + .stdout("1.11.1"); +}