aboutsummaryrefslogtreecommitdiffhomepage
path: root/crates/shirabe/tests
diff options
context:
space:
mode:
authornsfisis <nsfisis@gmail.com>2026-06-27 08:44:57 +0900
committernsfisis <nsfisis@gmail.com>2026-06-27 08:44:57 +0900
commit901878ee3f2bee6605b02d321cc4c92bc32fd5b0 (patch)
tree83d8c8c9a24cb95c0656866d328b87c2d4c5127f /crates/shirabe/tests
parent5c2c72223cb6b4d77a332eeeeff7ee4e82e3f239 (diff)
downloadphp-shirabe-901878ee3f2bee6605b02d321cc4c92bc32fd5b0.tar.gz
php-shirabe-901878ee3f2bee6605b02d321cc4c92bc32fd5b0.tar.zst
php-shirabe-901878ee3f2bee6605b02d321cc4c92bc32fd5b0.zip
refactor(composer): hold managers behind *Interface traits
Composer/PartialComposer exposed its RepositoryManager, InstallationManager, EventDispatcher, Locker, DownloadManager, AutoloadGenerator and ArchiveManager as concrete types, but Composer's public setters (setDownloadManager() etc.) let plugins swap in subclasses. Introduce a *Interface trait per manager and store each as Rc<RefCell<dyn ...Interface>> so a replacement is honored. Only Composer's slots and the sinks fed from its accessors become trait objects; managers injected concretely at construction keep their concrete references, matching PHP semantics. Fluent setters on the affected classes now return () and Locker::update_hash is de-generified to a boxed FnOnce so the traits stay object-safe. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Diffstat (limited to 'crates/shirabe/tests')
-rw-r--r--crates/shirabe/tests/composer_test.rs22
1 files changed, 11 insertions, 11 deletions
diff --git a/crates/shirabe/tests/composer_test.rs b/crates/shirabe/tests/composer_test.rs
index 908e813..bffe4ce 100644
--- a/crates/shirabe/tests/composer_test.rs
+++ b/crates/shirabe/tests/composer_test.rs
@@ -7,12 +7,15 @@ use indexmap::IndexMap;
use shirabe::composer::Composer;
use shirabe::config::Config;
use shirabe::downloader::DownloadManager;
+use shirabe::downloader::DownloadManagerInterface;
use shirabe::installer::InstallationManager;
+use shirabe::installer::InstallationManagerInterface;
use shirabe::io::IOInterface;
use shirabe::io::null_io::NullIO;
use shirabe::json::JsonFile;
-use shirabe::package::{Locker, RootPackageHandle, RootPackageInterfaceHandle};
+use shirabe::package::{Locker, LockerInterface, RootPackageHandle, RootPackageInterfaceHandle};
use shirabe::repository::RepositoryManager;
+use shirabe::repository::RepositoryManagerInterface;
use shirabe::util::http_downloader::HttpDownloader;
use shirabe::util::r#loop::Loop;
use shirabe::util::process_executor::ProcessExecutor;
@@ -60,7 +63,7 @@ fn test_set_get_locker() {
let io = null_io();
let json_file = JsonFile::new("composer.lock".to_string(), None, None).unwrap();
let process = Rc::new(RefCell::new(ProcessExecutor::new(Some(io.clone()))));
- let locker = Rc::new(RefCell::new(Locker::new(
+ let locker: Rc<RefCell<dyn LockerInterface>> = Rc::new(RefCell::new(Locker::new(
io.clone(),
json_file,
installation_manager(&io),
@@ -77,13 +80,9 @@ fn test_set_get_repository_manager() {
let mut composer = Composer::new();
let io = null_io();
let config = Rc::new(RefCell::new(Config::new(false, None)));
- let manager = Rc::new(RefCell::new(RepositoryManager::new(
- io.clone(),
- config,
- http_downloader(&io),
- None,
- None,
- )));
+ let manager: Rc<RefCell<dyn RepositoryManagerInterface>> = Rc::new(RefCell::new(
+ RepositoryManager::new(io.clone(), config, http_downloader(&io), None, None),
+ ));
composer.set_repository_manager(manager.clone());
assert!(Rc::ptr_eq(&composer.get_repository_manager(), &manager));
@@ -92,7 +91,8 @@ fn test_set_get_repository_manager() {
#[test]
fn test_set_get_download_manager() {
let mut composer = Composer::new();
- let manager = Rc::new(RefCell::new(DownloadManager::new(null_io(), false, None)));
+ let manager: Rc<RefCell<dyn DownloadManagerInterface>> =
+ Rc::new(RefCell::new(DownloadManager::new(null_io(), false, None)));
composer.set_download_manager(manager.clone());
assert!(Rc::ptr_eq(&composer.get_download_manager(), &manager));
@@ -102,7 +102,7 @@ fn test_set_get_download_manager() {
fn test_set_get_installation_manager() {
let mut composer = Composer::new();
let io = null_io();
- let manager = installation_manager(&io);
+ let manager: Rc<RefCell<dyn InstallationManagerInterface>> = installation_manager(&io);
composer.set_installation_manager(manager.clone());
assert!(Rc::ptr_eq(&composer.get_installation_manager(), &manager));