aboutsummaryrefslogtreecommitdiffhomepage
path: root/crates/shirabe/tests/dependency_resolver/pool_test.rs
diff options
context:
space:
mode:
authornsfisis <nsfisis@gmail.com>2026-06-21 01:14:02 +0900
committernsfisis <nsfisis@gmail.com>2026-06-21 01:14:02 +0900
commite050356c9ba8e1a2c20d2fc842924e189f3cc89e (patch)
tree3a0a6829379c1469b6922a924be831e3e1d15448 /crates/shirabe/tests/dependency_resolver/pool_test.rs
parentf8e4e41956d0a2c59249a02be6e532939266fb9e (diff)
downloadphp-shirabe-e050356c9ba8e1a2c20d2fc842924e189f3cc89e.tar.gz
php-shirabe-e050356c9ba8e1a2c20d2fc842924e189f3cc89e.tar.zst
php-shirabe-e050356c9ba8e1a2c20d2fc842924e189f3cc89e.zip
test(dependency-resolver): port PoolTest with shared TestCase helpers
Add tests/common/test_case.rs (get_package, get_version_constraint) ported from the PHP TestCase, included into the dependency_resolver binary via #[path]. PoolTest's testPool/testPackageById/testWhatProvidesWhenPackageCannotBeFound pass; testWhatProvidesPackageWithConstraint is #[ignore] (constraint matching reaches a todo!() in the php-shim). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Diffstat (limited to 'crates/shirabe/tests/dependency_resolver/pool_test.rs')
-rw-r--r--crates/shirabe/tests/dependency_resolver/pool_test.rs66
1 files changed, 66 insertions, 0 deletions
diff --git a/crates/shirabe/tests/dependency_resolver/pool_test.rs b/crates/shirabe/tests/dependency_resolver/pool_test.rs
index 3efd85b..ef2cc8d 100644
--- a/crates/shirabe/tests/dependency_resolver/pool_test.rs
+++ b/crates/shirabe/tests/dependency_resolver/pool_test.rs
@@ -1 +1,67 @@
//! ref: composer/tests/Composer/Test/DependencyResolver/PoolTest.php
+
+use indexmap::IndexMap;
+use shirabe::dependency_resolver::pool::Pool;
+use shirabe::package::handle::PackageInterfaceHandle;
+
+use crate::test_case::{get_package, get_version_constraint};
+
+// ref: PoolTest::createPool
+fn create_pool(packages: Vec<PackageInterfaceHandle>) -> Pool {
+ Pool::new(
+ packages,
+ vec![],
+ IndexMap::new(),
+ IndexMap::new(),
+ IndexMap::new(),
+ IndexMap::new(),
+ )
+}
+
+fn same_packages(a: &[PackageInterfaceHandle], b: &[PackageInterfaceHandle]) -> bool {
+ a.len() == b.len() && a.iter().zip(b.iter()).all(|(x, y)| x.ptr_eq(y))
+}
+
+#[test]
+fn test_pool() {
+ let package = get_package("foo", "1");
+
+ let mut pool = create_pool(vec![package.clone()]);
+
+ assert!(same_packages(&[package.clone()], &pool.what_provides("foo", None)));
+ assert!(same_packages(&[package], &pool.what_provides("foo", None)));
+}
+
+#[test]
+#[ignore = "what_provides with a constraint reaches a todo!() in the php-shim"]
+fn test_what_provides_package_with_constraint() {
+ let first_package = get_package("foo", "1");
+ let second_package = get_package("foo", "2");
+
+ let mut pool = create_pool(vec![first_package.clone(), second_package.clone()]);
+
+ assert!(same_packages(
+ &[first_package, second_package.clone()],
+ &pool.what_provides("foo", None)
+ ));
+ assert!(same_packages(
+ &[second_package],
+ &pool.what_provides("foo", Some(&get_version_constraint("==", "2")))
+ ));
+}
+
+#[test]
+fn test_package_by_id() {
+ let package = get_package("foo", "1");
+
+ let pool = create_pool(vec![package.clone()]);
+
+ assert!(package.ptr_eq(&pool.package_by_id(1)));
+}
+
+#[test]
+fn test_what_provides_when_package_cannot_be_found() {
+ let mut pool = create_pool(vec![]);
+
+ assert!(pool.what_provides("foo", None).is_empty());
+}