aboutsummaryrefslogtreecommitdiffhomepage
path: root/crates/shirabe/tests
diff options
context:
space:
mode:
authornsfisis <nsfisis@gmail.com>2026-06-27 21:12:20 +0900
committernsfisis <nsfisis@gmail.com>2026-06-27 21:12:20 +0900
commit0020a39197a53a14c130ee12759e8cb9002636ef (patch)
treefc4419caf8c24d8ab22a4999faaf255005515d4a /crates/shirabe/tests
parent9759168c0c9b8120980b06734c0c029712bc7861 (diff)
downloadphp-shirabe-0020a39197a53a14c130ee12759e8cb9002636ef.tar.gz
php-shirabe-0020a39197a53a14c130ee12759e8cb9002636ef.tar.zst
php-shirabe-0020a39197a53a14c130ee12759e8cb9002636ef.zip
feat(installer): register default installers after Composer Rc is built
LibraryInstaller and PluginInstaller upgrade the Composer back-reference in their constructors, so they could not be built inside Rc::new_cyclic where the weak handle is not yet upgradeable. Defer create_default_ installers until after the cyclic Rc is established, where the weak handle resolves, and implement it to register Library -> Plugin -> Metapackage with a single shared BinaryInstaller. To share one BinaryInstaller (as Composer does), LibraryInstaller's binary_installer becomes Rc<RefCell<dyn BinaryInstallerInterface>> instead of an owned Box; PluginInstaller and the __set_binary_installer test seam follow. This clears "Unknown installer type: metapackage". Un-ignores the six remove tests that now pass; the remaining install/remove tests are re-labeled for the next blocker (InstallationManager::execute_batch still leaves the install/cleanup/repo.write promise chain as a todo!() stub, so package operations do not actually execute). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Diffstat (limited to 'crates/shirabe/tests')
-rw-r--r--crates/shirabe/tests/command/install_command_test.rs6
-rw-r--r--crates/shirabe/tests/command/remove_command_test.rs14
-rw-r--r--crates/shirabe/tests/installer/library_installer_test.rs8
3 files changed, 12 insertions, 16 deletions
diff --git a/crates/shirabe/tests/command/install_command_test.rs b/crates/shirabe/tests/command/install_command_test.rs
index c495b12..0fababa 100644
--- a/crates/shirabe/tests/command/install_command_test.rs
+++ b/crates/shirabe/tests/command/install_command_test.rs
@@ -87,7 +87,7 @@ fn test_install_command_errors() {
#[test]
#[serial]
-#[ignore = "Factory::create_default_installers is a Phase-C stub that registers no installers (pending the composer construction-ordering / shared-ownership rework), so the install step fails with \"Unknown installer type: metapackage\""]
+#[ignore = "InstallationManager::execute_batch only awaits prepare(); the install/update/uninstall + cleanup + repo.write promise chain is still a todo!() stub, so package operations do not actually execute"]
fn test_install_from_empty_vendor() {
let composer_json = serde_json::json!({
"require": { "root/req": "1.*" },
@@ -128,7 +128,7 @@ Generating autoload files",
#[test]
#[serial]
-#[ignore = "Factory::create_default_installers is a Phase-C stub that registers no installers (pending the composer construction-ordering / shared-ownership rework), so the install step fails with \"Unknown installer type: metapackage\""]
+#[ignore = "InstallationManager::execute_batch only awaits prepare(); the install/update/uninstall + cleanup + repo.write promise chain is still a todo!() stub, so package operations do not actually execute"]
fn test_install_from_empty_vendor_no_dev() {
let composer_json = serde_json::json!({
"require": { "root/req": "1.*" },
@@ -169,7 +169,7 @@ Generating autoload files",
#[test]
#[serial]
-#[ignore = "Factory::create_default_installers is a Phase-C stub that registers no installers (pending the composer construction-ordering / shared-ownership rework), so the install step fails with \"Unknown installer type: metapackage\""]
+#[ignore = "InstallationManager::execute_batch only awaits prepare(); the install/update/uninstall + cleanup + repo.write promise chain is still a todo!() stub, so package operations do not actually execute"]
fn test_install_new_packages_with_existing_partial_vendor() {
let composer_json = serde_json::json!({
"require": {
diff --git a/crates/shirabe/tests/command/remove_command_test.rs b/crates/shirabe/tests/command/remove_command_test.rs
index a27976a..8d76b64 100644
--- a/crates/shirabe/tests/command/remove_command_test.rs
+++ b/crates/shirabe/tests/command/remove_command_test.rs
@@ -84,7 +84,6 @@ fn test_exception_when_running_unused_without_lock_file() {
drop(tear_down);
}
-#[ignore = "remove runs the post-remove Installer, which fails with 'Unknown installer type: metapackage': Factory::create_default_installers (factory.rs:1234-1256) registers no installers yet, blocked on the composer construction-ordering / shared-ownership rework (installers need the composer weak handle, available only after the Rc is established)"]
#[test]
#[serial]
fn test_warning_when_removing_non_existent_package() {
@@ -257,7 +256,6 @@ fn test_message_output_when_no_unused_packages_to_remove() {
drop(tear_down);
}
-#[ignore = "remove runs the post-remove Installer, which fails with 'Unknown installer type: metapackage': Factory::create_default_installers (factory.rs:1234-1256) registers no installers yet, blocked on the composer construction-ordering / shared-ownership rework (installers need the composer weak handle, available only after the Rc is established)"]
#[test]
#[serial]
fn test_remove_unused_package() {
@@ -323,7 +321,7 @@ fn test_remove_unused_package() {
drop(tear_down);
}
-#[ignore = "remove runs the post-remove Installer, which fails with 'Unknown installer type: metapackage': Factory::create_default_installers (factory.rs:1234-1256) registers no installers yet, blocked on the composer construction-ordering / shared-ownership rework (installers need the composer weak handle, available only after the Rc is established)"]
+#[ignore = "InstallationManager::execute_batch only awaits prepare(); the install/update/uninstall + cleanup + repo.write promise chain is still a todo!() stub, so package operations do not actually execute"]
#[test]
#[serial]
fn test_remove_package_by_name() {
@@ -408,7 +406,6 @@ fn test_remove_package_by_name() {
drop(tear_down);
}
-#[ignore = "remove runs the post-remove Installer, which fails with 'Unknown installer type: metapackage': Factory::create_default_installers (factory.rs:1234-1256) registers no installers yet, blocked on the composer construction-ordering / shared-ownership rework (installers need the composer weak handle, available only after the Rc is established)"]
#[test]
#[serial]
fn test_remove_package_by_name_with_dry_run() {
@@ -495,7 +492,7 @@ fn test_remove_package_by_name_with_dry_run() {
drop(tear_down);
}
-#[ignore = "remove runs the post-remove Installer, which fails with 'Unknown installer type: metapackage': Factory::create_default_installers (factory.rs:1234-1256) registers no installers yet, blocked on the composer construction-ordering / shared-ownership rework (installers need the composer weak handle, available only after the Rc is established)"]
+#[ignore = "InstallationManager::execute_batch only awaits prepare(); the install/update/uninstall + cleanup + repo.write promise chain is still a todo!() stub, so package operations do not actually execute"]
#[test]
#[serial]
fn test_remove_allowed_plugin_package_with_no_other_allowed_plugins() {
@@ -553,7 +550,6 @@ fn test_remove_allowed_plugin_package_with_no_other_allowed_plugins() {
drop(tear_down);
}
-#[ignore = "remove runs the post-remove Installer, which fails with 'Unknown installer type: metapackage': Factory::create_default_installers (factory.rs:1234-1256) registers no installers yet, blocked on the composer construction-ordering / shared-ownership rework (installers need the composer weak handle, available only after the Rc is established)"]
#[test]
#[serial]
fn test_remove_allowed_plugin_package_with_other_allowed_plugins() {
@@ -605,7 +601,6 @@ fn test_remove_allowed_plugin_package_with_other_allowed_plugins() {
drop(tear_down);
}
-#[ignore = "remove runs the post-remove Installer, which fails with 'Unknown installer type: metapackage': Factory::create_default_installers (factory.rs:1234-1256) registers no installers yet, blocked on the composer construction-ordering / shared-ownership rework (installers need the composer weak handle, available only after the Rc is established)"]
#[test]
#[serial]
fn test_remove_packages_by_vendor() {
@@ -689,7 +684,6 @@ fn test_remove_packages_by_vendor() {
drop(tear_down);
}
-#[ignore = "remove runs the post-remove Installer, which fails with 'Unknown installer type: metapackage': Factory::create_default_installers (factory.rs:1234-1256) registers no installers yet, blocked on the composer construction-ordering / shared-ownership rework (installers need the composer weak handle, available only after the Rc is established)"]
#[test]
#[serial]
fn test_remove_packages_by_vendor_with_dry_run() {
@@ -811,7 +805,7 @@ fn test_warning_when_removing_packages_by_vendor_from_wrong_type() {
drop(tear_down);
}
-#[ignore = "remove runs the post-remove Installer, which fails with 'Unknown installer type: metapackage': Factory::create_default_installers (factory.rs:1234-1256) registers no installers yet, blocked on the composer construction-ordering / shared-ownership rework (installers need the composer weak handle, available only after the Rc is established)"]
+#[ignore = "InstallationManager::execute_batch only awaits prepare(); the install/update/uninstall + cleanup + repo.write promise chain is still a todo!() stub, so package operations do not actually execute"]
#[test]
#[serial]
fn test_package_still_present_error_when_no_install_flag_used() {
@@ -968,7 +962,7 @@ fn run_update_inherited_dependencies_flag_case(
drop(tear_down);
}
-#[ignore = "remove runs the post-remove Installer, which fails with 'Unknown installer type: metapackage': Factory::create_default_installers (factory.rs:1234-1256) registers no installers yet, blocked on the composer construction-ordering / shared-ownership rework (installers need the composer weak handle, available only after the Rc is established)"]
+#[ignore = "InstallationManager::execute_batch only awaits prepare(); the install/update/uninstall + cleanup + repo.write promise chain is still a todo!() stub, so package operations do not actually execute"]
#[test]
#[serial]
fn test_update_inherited_dependencies_flag_is_passed_to_post_remove_installer() {
diff --git a/crates/shirabe/tests/installer/library_installer_test.rs b/crates/shirabe/tests/installer/library_installer_test.rs
index 42730fe..f519764 100644
--- a/crates/shirabe/tests/installer/library_installer_test.rs
+++ b/crates/shirabe/tests/installer/library_installer_test.rs
@@ -366,9 +366,11 @@ fn test_ensure_binaries_installed() {
None,
None,
);
- library.__set_binary_installer(Box::new(RecordingBinaryInstaller {
- calls: calls.clone(),
- }));
+ library.__set_binary_installer(std::rc::Rc::new(std::cell::RefCell::new(
+ RecordingBinaryInstaller {
+ calls: calls.clone(),
+ },
+ )));
let package = get_package("foo/bar", "1.0.0");
let expected_path = library.get_install_path(package.clone()).unwrap();