aboutsummaryrefslogtreecommitdiffhomepage
path: root/crates/shirabe/tests/package/base_package_test.rs
diff options
context:
space:
mode:
authornsfisis <nsfisis@gmail.com>2026-06-21 04:01:26 +0900
committernsfisis <nsfisis@gmail.com>2026-06-21 04:01:26 +0900
commite0c984ebbf674dd67adc396b5b4e9bdafc9ac5bf (patch)
tree6eeb0a536c92f951a73b52eb451a3b57da16ffe1 /crates/shirabe/tests/package/base_package_test.rs
parent7eb8c18097c8bfc01cafcf6110466fb73a4d627e (diff)
downloadphp-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/shirabe/tests/package/base_package_test.rs')
-rw-r--r--crates/shirabe/tests/package/base_package_test.rs53
1 files changed, 53 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);
+}