diff options
| author | nsfisis <nsfisis@gmail.com> | 2026-06-21 01:01:41 +0900 |
|---|---|---|
| committer | nsfisis <nsfisis@gmail.com> | 2026-06-21 01:01:41 +0900 |
| commit | d74a67a17e05277e912caa534c74d34d9f9fc30d (patch) | |
| tree | a83ce8d0e5c83aaf5e4cd2a0deeede8cb4edf2f0 /crates/shirabe | |
| parent | 2f45a943d17c80e2ee3808d34440b0ad3002615c (diff) | |
| download | php-shirabe-d74a67a17e05277e912caa534c74d34d9f9fc30d.tar.gz php-shirabe-d74a67a17e05277e912caa534c74d34d9f9fc30d.tar.zst php-shirabe-d74a67a17e05277e912caa534c74d34d9f9fc30d.zip | |
test(util): port UrlTest
Both testUpdateDistReference and testSanitize are marked #[ignore] because
the underlying regex patterns cannot be compiled by the regex crate.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Diffstat (limited to 'crates/shirabe')
| -rw-r--r-- | crates/shirabe/tests/util/main.rs | 1 | ||||
| -rw-r--r-- | crates/shirabe/tests/util/url_test.rs | 90 |
2 files changed, 91 insertions, 0 deletions
diff --git a/crates/shirabe/tests/util/main.rs b/crates/shirabe/tests/util/main.rs index 05e6f9a..e2a91b7 100644 --- a/crates/shirabe/tests/util/main.rs +++ b/crates/shirabe/tests/util/main.rs @@ -3,3 +3,4 @@ mod http; mod platform_test; mod silencer_test; mod tar_test; +mod url_test; diff --git a/crates/shirabe/tests/util/url_test.rs b/crates/shirabe/tests/util/url_test.rs index d900457..025c7ee 100644 --- a/crates/shirabe/tests/util/url_test.rs +++ b/crates/shirabe/tests/util/url_test.rs @@ -1 +1,91 @@ //! ref: composer/tests/Composer/Test/Util/UrlTest.php + +use indexmap::IndexMap; +use shirabe::config::Config; +use shirabe::util::url::Url; +use shirabe_php_shim::PhpMixed; + +fn conf(entries: &[(&str, &[&str])]) -> IndexMap<String, PhpMixed> { + entries + .iter() + .map(|(k, vals)| { + ( + k.to_string(), + PhpMixed::List(vals.iter().map(|v| PhpMixed::String(v.to_string())).collect()), + ) + }) + .collect() +} + +#[test] +#[ignore = "update_dist_reference uses a regex pattern the regex crate cannot compile"] +fn test_update_dist_reference() { + for (url, expected_url, c, r#ref) in dist_refs_provider() { + let mut config = Config::new(true, None); + let mut merged: IndexMap<String, PhpMixed> = IndexMap::new(); + merged.insert("config".to_string(), PhpMixed::Array(c)); + config.merge(&merged, Config::SOURCE_UNKNOWN); + + assert_eq!( + expected_url, + Url::update_dist_reference(&config, url.to_string(), r#ref) + ); + } +} + +fn dist_refs_provider() -> Vec<(&'static str, &'static str, IndexMap<String, PhpMixed>, &'static str)> +{ + vec![ + // github + ("https://github.com/foo/bar/zipball/abcd", "https://api.github.com/repos/foo/bar/zipball/newref", conf(&[]), "newref"), + ("https://www.github.com/foo/bar/zipball/abcd", "https://api.github.com/repos/foo/bar/zipball/newref", conf(&[]), "newref"), + ("https://github.com/foo/bar/archive/abcd.zip", "https://api.github.com/repos/foo/bar/zipball/newref", conf(&[]), "newref"), + ("https://github.com/foo/bar/archive/abcd.tar.gz", "https://api.github.com/repos/foo/bar/tarball/newref", conf(&[]), "newref"), + ("https://api.github.com/repos/foo/bar/tarball", "https://api.github.com/repos/foo/bar/tarball/newref", conf(&[]), "newref"), + ("https://api.github.com/repos/foo/bar/tarball/abcd", "https://api.github.com/repos/foo/bar/tarball/newref", conf(&[]), "newref"), + // github enterprise + ("https://mygithub.com/api/v3/repos/foo/bar/tarball/abcd", "https://mygithub.com/api/v3/repos/foo/bar/tarball/newref", conf(&[("github-domains", &["mygithub.com"])]), "newref"), + // bitbucket + ("https://bitbucket.org/foo/bar/get/abcd.zip", "https://bitbucket.org/foo/bar/get/newref.zip", conf(&[]), "newref"), + ("https://www.bitbucket.org/foo/bar/get/abcd.tar.bz2", "https://bitbucket.org/foo/bar/get/newref.tar.bz2", conf(&[]), "newref"), + // gitlab + ("https://gitlab.com/api/v4/projects/foo%2Fbar/repository/archive.zip?sha=abcd", "https://gitlab.com/api/v4/projects/foo%2Fbar/repository/archive.zip?sha=newref", conf(&[]), "newref"), + ("https://www.gitlab.com/api/v4/projects/foo%2Fbar/repository/archive.zip?sha=abcd", "https://gitlab.com/api/v4/projects/foo%2Fbar/repository/archive.zip?sha=newref", conf(&[]), "newref"), + ("https://gitlab.com/api/v3/projects/foo%2Fbar/repository/archive.tar.gz?sha=abcd", "https://gitlab.com/api/v4/projects/foo%2Fbar/repository/archive.tar.gz?sha=newref", conf(&[]), "newref"), + // gitlab enterprise + ("https://mygitlab.com/api/v4/projects/foo%2Fbar/repository/archive.tar.gz?sha=abcd", "https://mygitlab.com/api/v4/projects/foo%2Fbar/repository/archive.tar.gz?sha=newref", conf(&[("gitlab-domains", &["mygitlab.com"])]), "newref"), + ("https://mygitlab.com/api/v3/projects/foo%2Fbar/repository/archive.tar.bz2?sha=abcd", "https://mygitlab.com/api/v3/projects/foo%2Fbar/repository/archive.tar.bz2?sha=newref", conf(&[("gitlab-domains", &["mygitlab.com"])]), "newref"), + ("https://mygitlab.com/api/v3/projects/foo%2Fbar/repository/archive.tar.bz2?sha=abcd", "https://mygitlab.com/api/v3/projects/foo%2Fbar/repository/archive.tar.bz2?sha=65", conf(&[("gitlab-domains", &["mygitlab.com"])]), "65"), + ] +} + +#[test] +#[ignore = "Url::sanitize uses a regex pattern the regex crate cannot compile"] +fn test_sanitize() { + for (expected, url) in sanitize_provider() { + assert_eq!(expected, Url::sanitize(url.to_string())); + } +} + +fn sanitize_provider() -> Vec<(&'static str, &'static str)> { + vec![ + // with scheme + ("https://foo:***@example.org/", "https://foo:bar@example.org/"), + ("https://foo@example.org/", "https://foo@example.org/"), + ("https://example.org/", "https://example.org/"), + ("http://***:***@example.org", "http://10a8f08e8d7b7b9:foo@example.org"), + ("https://foo:***@example.org:123/", "https://foo:bar@example.org:123/"), + ("https://example.org/foo/bar?access_token=***", "https://example.org/foo/bar?access_token=abcdef"), + ("https://example.org/foo/bar?foo=bar&access_token=***", "https://example.org/foo/bar?foo=bar&access_token=abcdef"), + ("https://***:***@github.com/acme/repo", "https://ghp_1234567890abcdefghijklmnopqrstuvwxyzAB:x-oauth-basic@github.com/acme/repo"), + ("https://***:***@github.com/acme/repo", "https://github_pat_1234567890abcdefghijkl_1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVW:x-oauth-basic@github.com/acme/repo"), + // without scheme + ("foo:***@example.org/", "foo:bar@example.org/"), + ("foo@example.org/", "foo@example.org/"), + ("example.org/", "example.org/"), + ("***:***@example.org", "10a8f08e8d7b7b9:foo@example.org"), + ("foo:***@example.org:123/", "foo:bar@example.org:123/"), + ("example.org/foo/bar?access_token=***", "example.org/foo/bar?access_token=abcdef"), + ("example.org/foo/bar?foo=bar&access_token=***", "example.org/foo/bar?foo=bar&access_token=abcdef"), + ] +} |
