diff options
Diffstat (limited to 'crates')
| -rw-r--r-- | crates/shirabe/tests/repository/main.rs | 1 | ||||
| -rw-r--r-- | crates/shirabe/tests/repository/repository_factory_test.rs | 70 |
2 files changed, 71 insertions, 0 deletions
diff --git a/crates/shirabe/tests/repository/main.rs b/crates/shirabe/tests/repository/main.rs index 9b5b6d7..98b3c68 100644 --- a/crates/shirabe/tests/repository/main.rs +++ b/crates/shirabe/tests/repository/main.rs @@ -4,4 +4,5 @@ mod test_case; mod array_repository_test; mod composite_repository_test; mod installed_repository_test; +mod repository_factory_test; mod vcs; diff --git a/crates/shirabe/tests/repository/repository_factory_test.rs b/crates/shirabe/tests/repository/repository_factory_test.rs index b878449..8871f91 100644 --- a/crates/shirabe/tests/repository/repository_factory_test.rs +++ b/crates/shirabe/tests/repository/repository_factory_test.rs @@ -1 +1,71 @@ //! ref: composer/tests/Composer/Test/Repository/RepositoryFactoryTest.php + +use indexmap::IndexMap; +use shirabe::repository::RepositoryFactory; +use shirabe_php_shim::PhpMixed; + +#[test] +#[ignore = "mocks IO/Config/HttpDownloader/EventDispatcher and reads the private repositoryClasses via reflection; not portable"] +fn test_manager_with_all_repository_types() { + todo!() +} + +fn generate_repository_name_provider() -> Vec<( + PhpMixed, + Vec<(&'static str, PhpMixed)>, + Vec<&'static str>, + &'static str, +)> { + vec![ + (PhpMixed::Int(0), vec![], vec![], "0"), + (PhpMixed::Int(0), vec![], vec!["0"], "02"), + ( + PhpMixed::Int(0), + vec![("url", PhpMixed::String("https://example.org".to_string()))], + vec![], + "example.org", + ), + ( + PhpMixed::Int(0), + vec![("url", PhpMixed::String("https://example.org".to_string()))], + vec!["example.org"], + "example.org2", + ), + ( + PhpMixed::String("example.org".to_string()), + vec![( + "url", + PhpMixed::String("https://example.org/repository".to_string()), + )], + vec![], + "example.org", + ), + ( + PhpMixed::String("example.org".to_string()), + vec![( + "url", + PhpMixed::String("https://example.org/repository".to_string()), + )], + vec!["example.org"], + "example.org2", + ), + ] +} + +#[test] +#[ignore = "generate_repository_name does not stringify an integer index (PhpMixed::as_string returns None for Int), so a numeric index with no url yields \"\" instead of e.g. \"0\""] +fn test_generate_repository_name() { + for (index, repo_pairs, existing_keys, expected) in generate_repository_name_provider() { + let repo: IndexMap<String, PhpMixed> = repo_pairs + .into_iter() + .map(|(k, v)| (k.to_string(), v)) + .collect(); + let existing_repos: IndexMap<String, ()> = + existing_keys.into_iter().map(|k| (k.to_string(), ())).collect(); + + assert_eq!( + expected, + RepositoryFactory::generate_repository_name(&index, &repo, &existing_repos) + ); + } +} |
