From 9140c4bd2b617793f5b68a2868f575f08cdac8f1 Mon Sep 17 00:00:00 2001 From: Akosh Farkash Date: Fri, 6 Dec 2024 15:20:10 +0000 Subject: [PATCH 1/3] Add test for folder name --- tooling/nargo_toml/src/git.rs | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/tooling/nargo_toml/src/git.rs b/tooling/nargo_toml/src/git.rs index 80e57247ae6..2f81e787b2f 100644 --- a/tooling/nargo_toml/src/git.rs +++ b/tooling/nargo_toml/src/git.rs @@ -9,10 +9,13 @@ fn resolve_folder_name(base: &url::Url, tag: &str) -> String { folder_name } +/// Path to the `nargo` directory under `$HOME`. fn nargo_crates() -> PathBuf { dirs::home_dir().unwrap().join("nargo") } +/// Target directory to download dependencies into, e.g. +/// `$HOME/nargo/github.com/noir-lang/noir-bignum/v0.1.2` fn git_dep_location(base: &url::Url, tag: &str) -> PathBuf { let folder_name = resolve_folder_name(base, tag); @@ -53,3 +56,18 @@ pub(crate) fn clone_git_repo(url: &str, tag: &str) -> Result { Ok(loc) } + +#[cfg(test)] +mod tests { + use url::Url; + + use super::resolve_folder_name; + + #[test] + fn test_resolve_folder_name() { + let url = "https://github.com/noir-lang/noir-bignum/"; + let tag = "v0.4.2"; + let dir = resolve_folder_name(&Url::parse(url).unwrap(), tag); + assert_eq!(dir, "github.com/noir-lang/noir-bignum/v0.4.2"); + } +} From 45b19c9404e7ec2e1382863a73d7466ede64ba28 Mon Sep 17 00:00:00 2001 From: Akosh Farkash Date: Fri, 6 Dec 2024 16:34:14 +0000 Subject: [PATCH 2/3] Test with and without slash, fix no-slash --- Cargo.lock | 1 + tooling/nargo_toml/Cargo.toml | 1 + tooling/nargo_toml/src/git.rs | 16 +++++++++------- 3 files changed, 11 insertions(+), 7 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 96ceb94fcdd..68d2b72c70b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2882,6 +2882,7 @@ dependencies = [ "noirc_frontend", "semver", "serde", + "test-case", "thiserror", "toml 0.7.8", "url 2.5.3", diff --git a/tooling/nargo_toml/Cargo.toml b/tooling/nargo_toml/Cargo.toml index e4766e44859..2bc24153836 100644 --- a/tooling/nargo_toml/Cargo.toml +++ b/tooling/nargo_toml/Cargo.toml @@ -25,3 +25,4 @@ noirc_driver.workspace = true semver = "1.0.20" [dev-dependencies] +test-case.workspace = true diff --git a/tooling/nargo_toml/src/git.rs b/tooling/nargo_toml/src/git.rs index 2f81e787b2f..288b4be38da 100644 --- a/tooling/nargo_toml/src/git.rs +++ b/tooling/nargo_toml/src/git.rs @@ -3,10 +3,11 @@ use std::path::PathBuf; /// Creates a unique folder name for a GitHub repo /// by using its URL and tag fn resolve_folder_name(base: &url::Url, tag: &str) -> String { - let mut folder_name = base.domain().unwrap().to_owned(); - folder_name.push_str(base.path()); - folder_name.push_str(tag); - folder_name + let mut folder = PathBuf::from(""); + for part in [base.domain().unwrap(), base.path(), tag] { + folder.push(part.trim_start_matches("/")); + } + folder.to_string_lossy().into_owned() } /// Path to the `nargo` directory under `$HOME`. @@ -59,13 +60,14 @@ pub(crate) fn clone_git_repo(url: &str, tag: &str) -> Result { #[cfg(test)] mod tests { + use test_case::test_case; use url::Url; use super::resolve_folder_name; - #[test] - fn test_resolve_folder_name() { - let url = "https://github.com/noir-lang/noir-bignum/"; + #[test_case("https://github.com/noir-lang/noir-bignum/"; "with slash")] + #[test_case("https://github.com/noir-lang/noir-bignum"; "without slash")] + fn test_resolve_folder_name(url: &str) { let tag = "v0.4.2"; let dir = resolve_folder_name(&Url::parse(url).unwrap(), tag); assert_eq!(dir, "github.com/noir-lang/noir-bignum/v0.4.2"); From b7796575d66483d80507913497776592b3090a0c Mon Sep 17 00:00:00 2001 From: Ary Borenszweig Date: Fri, 6 Dec 2024 13:52:47 -0300 Subject: [PATCH 3/3] clippy --- tooling/nargo_toml/src/git.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tooling/nargo_toml/src/git.rs b/tooling/nargo_toml/src/git.rs index 288b4be38da..efaed4fabb9 100644 --- a/tooling/nargo_toml/src/git.rs +++ b/tooling/nargo_toml/src/git.rs @@ -5,7 +5,7 @@ use std::path::PathBuf; fn resolve_folder_name(base: &url::Url, tag: &str) -> String { let mut folder = PathBuf::from(""); for part in [base.domain().unwrap(), base.path(), tag] { - folder.push(part.trim_start_matches("/")); + folder.push(part.trim_start_matches('/')); } folder.to_string_lossy().into_owned() }