diff options
| author | nsfisis <nsfisis@gmail.com> | 2026-06-21 04:01:26 +0900 |
|---|---|---|
| committer | nsfisis <nsfisis@gmail.com> | 2026-06-21 04:01:26 +0900 |
| commit | e0c984ebbf674dd67adc396b5b4e9bdafc9ac5bf (patch) | |
| tree | 6eeb0a536c92f951a73b52eb451a3b57da16ffe1 /crates | |
| parent | 7eb8c18097c8bfc01cafcf6110466fb73a4d627e (diff) | |
| download | php-shirabe-e0c984ebbf674dd67adc396b5b4e9bdafc9ac5bf.tar.gz php-shirabe-e0c984ebbf674dd67adc396b5b4e9bdafc9ac5bf.tar.zst php-shirabe-e0c984ebbf674dd67adc396b5b4e9bdafc9ac5bf.zip | |
test(package): port BasePackageTest
setRepository (same/another) and packageNamesToRegexp pass; the dev-version
formatting case mocks abstract BasePackage getters and is stubbed. Adds the
test_case helper to the package test target.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Diffstat (limited to 'crates')
| -rw-r--r-- | crates/shirabe/tests/package/base_package_test.rs | 53 | ||||
| -rw-r--r-- | crates/shirabe/tests/package/main.rs | 4 |
2 files changed, 57 insertions, 0 deletions
diff --git a/crates/shirabe/tests/package/base_package_test.rs b/crates/shirabe/tests/package/base_package_test.rs index d6b9a0e..0d77f49 100644 --- a/crates/shirabe/tests/package/base_package_test.rs +++ b/crates/shirabe/tests/package/base_package_test.rs @@ -1 +1,54 @@ //! ref: composer/tests/Composer/Test/Package/BasePackageTest.php + +use shirabe::package::base_package::package_names_to_regexp; +use shirabe::repository::{ArrayRepository, RepositoryInterfaceHandle}; + +use crate::test_case::get_package; + +fn empty_repository() -> RepositoryInterfaceHandle { + RepositoryInterfaceHandle::new(ArrayRepository::new(vec![]).unwrap()) +} + +#[test] +fn test_set_same_repository() { + let package = get_package("foo", "1.0.0"); + let repository = empty_repository(); + + package.set_repository(repository.clone()).unwrap(); + // Set against the same repository is allowed. + package.set_repository(repository.clone()).unwrap(); +} + +#[test] +fn test_set_another_repository() { + let package = get_package("foo", "1.0.0"); + let repository1 = empty_repository(); + let repository2 = empty_repository(); + + // The package stores the repository as a weak ref, so keep both strong handles + // alive for the "already in another repository" check to fire. + package.set_repository(repository1.clone()).unwrap(); + assert!(package.set_repository(repository2.clone()).is_err()); +} + +// In PHP this mocks isDev()/getSourceType()/getPrettyVersion()/getSourceReference() +// on an abstract BasePackage to drive getFullPrettyVersion(). Reproducing those exact +// getter values requires mocking; a real package cannot carry the pretty version +// "PrettyVersion" together with isDev() == true. +#[test] +#[ignore = "mocks isDev/getSourceType/getPrettyVersion/getSourceReference on an abstract BasePackage; not reproducible with a real package"] +fn test_format_version_for_dev_package() { + todo!() +} + +#[test] +fn test_package_names_to_regexp() { + // The PHP data provider yields a single row whose extra elements are ignored, + // so only the first (packageNames, wrap, expected) triple is exercised. + let regexp = package_names_to_regexp( + &["ext-*".to_string(), "monolog/monolog".to_string()], + "{^%s$}i", + ); + + assert_eq!("{^ext\\-.*|monolog/monolog$}i", regexp); +} diff --git a/crates/shirabe/tests/package/main.rs b/crates/shirabe/tests/package/main.rs index 5758faf..35df831 100644 --- a/crates/shirabe/tests/package/main.rs +++ b/crates/shirabe/tests/package/main.rs @@ -1,3 +1,7 @@ +#[path = "../common/test_case.rs"] +mod test_case; + mod archiver; +mod base_package_test; mod complete_package_test; mod version; |
