aboutsummaryrefslogtreecommitdiffhomepage
path: root/crates/shirabe/tests/common/test_case.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/shirabe/tests/common/test_case.rs')
-rw-r--r--crates/shirabe/tests/common/test_case.rs100
1 files changed, 100 insertions, 0 deletions
diff --git a/crates/shirabe/tests/common/test_case.rs b/crates/shirabe/tests/common/test_case.rs
index 9972f32..7365f73 100644
--- a/crates/shirabe/tests/common/test_case.rs
+++ b/crates/shirabe/tests/common/test_case.rs
@@ -4,11 +4,22 @@
//! `#[path = "../common/test_case.rs"] mod test_case;`.
#![allow(dead_code)]
+use indexmap::IndexMap;
+use shirabe::config::Config;
use shirabe::console::application::ApplicationHandle;
+use shirabe::installer::InstallationManager;
+use shirabe::io::IOInterface;
+use shirabe::io::null_io::NullIO;
+use shirabe::json::JsonFile;
+use shirabe::package::Locker;
use shirabe::package::handle::{
CompleteAliasPackageHandle, CompletePackageHandle, PackageInterfaceHandle,
};
+use shirabe::repository::{InstalledFilesystemRepository, WritableRepositoryInterface};
+use shirabe::util::http_downloader::HttpDownloader;
+use shirabe::util::r#loop::Loop;
use shirabe::util::platform::Platform;
+use shirabe::util::process_executor::ProcessExecutor;
use shirabe_external_packages::symfony::console::input::array_input::ArrayInput;
use shirabe_external_packages::symfony::console::input::input_interface::InputInterface;
use shirabe_external_packages::symfony::console::input::streamable_input_interface::StreamableInputInterface;
@@ -30,6 +41,13 @@ pub fn get_package(name: &str, version: &str) -> PackageInterfaceHandle {
CompletePackageHandle::new(name.to_string(), norm_version, version.to_string()).into()
}
+/// ref: TestCase::getPackage but returning the concrete `CompletePackageHandle` so the
+/// `CompletePackage`-only setters (`set_license`, `set_homepage`, ...) are reachable.
+pub fn get_complete_package(name: &str, version: &str) -> CompletePackageHandle {
+ let norm_version = VersionParser.normalize(version, None).unwrap();
+ CompletePackageHandle::new(name.to_string(), norm_version, version.to_string())
+}
+
/// ref: TestCase::getAliasPackage (default class CompleteAliasPackage)
pub fn get_alias_package(
package: &PackageInterfaceHandle,
@@ -152,6 +170,88 @@ pub fn init_temp_composer(
}
}
+fn null_io() -> Rc<RefCell<dyn IOInterface>> {
+ Rc::new(RefCell::new(NullIO::new()))
+}
+
+/// ref: FactoryMock::createInstallationManager (the real installers are never created in tests, so a
+/// bare InstallationManager over a mock HttpDownloader suffices).
+fn installation_manager(io: &Rc<RefCell<dyn IOInterface>>) -> Rc<RefCell<InstallationManager>> {
+ let config = Rc::new(RefCell::new(Config::new(false, None)));
+ let http_downloader = Rc::new(RefCell::new(HttpDownloader::__new_mock(io.clone(), config)));
+ let r#loop = Rc::new(RefCell::new(Loop::new(http_downloader, None)));
+ Rc::new(RefCell::new(InstallationManager::new(
+ r#loop,
+ io.clone(),
+ None,
+ )))
+}
+
+/// ref: TestCase::createInstalledJson
+///
+/// Creates a `vendor/composer/installed.json` in the CWD (which `init_temp_composer` has chdir()'d
+/// into) listing the given packages. `dev_packages` are recorded as the dev-package-name set.
+pub fn create_installed_json(
+ packages: &[PackageInterfaceHandle],
+ dev_packages: &[PackageInterfaceHandle],
+ dev_mode: bool,
+) {
+ std::fs::create_dir_all("vendor/composer").unwrap();
+ let json_file =
+ JsonFile::new("vendor/composer/installed.json".to_string(), None, None).unwrap();
+ let mut repo = InstalledFilesystemRepository::new(json_file, false, None, None).unwrap();
+ repo.set_dev_package_names(
+ dev_packages
+ .iter()
+ .map(|pkg| pkg.get_pretty_name())
+ .collect(),
+ );
+ for pkg in packages.iter().chain(dev_packages.iter()) {
+ repo.add_package(pkg.clone()).unwrap();
+ std::fs::create_dir_all(format!("vendor/{}", pkg.get_name())).unwrap();
+ }
+
+ let io = null_io();
+ let im = installation_manager(&io);
+ repo.write(dev_mode, &mut im.borrow_mut()).unwrap();
+}
+
+/// ref: TestCase::createComposerLock
+///
+/// Creates a `composer.lock` in the CWD (chdir()'d into by `init_temp_composer`) listing the given
+/// packages.
+pub fn create_composer_lock(
+ packages: &[PackageInterfaceHandle],
+ dev_packages: &[PackageInterfaceHandle],
+) {
+ let io = null_io();
+ let json_file = JsonFile::new("./composer.lock".to_string(), None, None).unwrap();
+ let composer_file_contents = std::fs::read_to_string("./composer.json").unwrap_or_default();
+ let process = Rc::new(RefCell::new(ProcessExecutor::new(Some(io.clone()))));
+ let mut locker = Locker::new(
+ io.clone(),
+ json_file,
+ installation_manager(&io),
+ &composer_file_contents,
+ process,
+ );
+ locker
+ .set_lock_data(
+ packages.to_vec(),
+ Some(dev_packages.to_vec()),
+ IndexMap::new(),
+ IndexMap::new(),
+ vec![],
+ "dev",
+ IndexMap::new(),
+ false,
+ false,
+ IndexMap::new(),
+ true,
+ )
+ .unwrap();
+}
+
/// ref: TestCase::getApplicationTester
pub fn get_application_tester() -> ApplicationTester {
let application = ApplicationHandle::new("Composer".to_string(), "".to_string()).unwrap();