1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
|
//! Shirabe-specific integration tests for the alias package proxy stubs. Upstream Composer has
//! no test for this (its plugins run in-process), so the fixture `fixtures/alias-v1` is
//! Shirabe-owned.
use crate::async_runtime::run;
use crate::plugin_installer_test::{lock_php_worker, new_installer, php_runtime_available, set_up};
use shirabe::installer::InstallerInterface;
use shirabe::package::loader::{ArrayLoader, JsonLoader, JsonLoaderInput};
use shirabe::package::{
CompleteAliasPackageHandle, CompletePackageHandle, PackageInterfaceHandle, RootPackageHandle,
};
use shirabe_php_shim::PhpMixed;
fn alias_fixture_package() -> PackageInterfaceHandle {
let loader = JsonLoader::new(Box::new(ArrayLoader::new(None, false)));
let path = std::path::Path::new(env!("CARGO_MANIFEST_DIR"))
.join("tests/plugin/fixtures/alias-v1/composer.json");
loader
.load(JsonLoaderInput::String(
path.canonicalize().unwrap().to_str().unwrap().to_string(),
))
.unwrap()
}
#[test]
fn test_alias_packages_cross_the_plugin_boundary() {
if !php_runtime_available() {
return;
}
let _worker = lock_php_worker();
let set_up = set_up();
let aliased = CompletePackageHandle::new(
"vendor/aliased".to_string(),
"1.0.0.0".to_string(),
"1.0.0".to_string(),
);
aliased.set_description("an aliased package".to_string());
let alias = CompleteAliasPackageHandle::new(
aliased.clone(),
"2.0.0.0".to_string(),
"2.0.0".to_string(),
);
set_up
.repository
.borrow_mut()
.add_package(alias.clone().into())
.unwrap();
let real_root = RootPackageHandle::new(
"dummy/root".to_string(),
"1.0.0.0".to_string(),
"1.0.0".to_string(),
);
let root_alias = shirabe::package::RootAliasPackageHandle::new(
real_root.clone(),
"1.1.0.0".to_string(),
"1.1.0".to_string(),
);
set_up.composer.borrow_mut().set_package(root_alias.into());
let installer = new_installer(&set_up);
set_up.pm.borrow_mut().load_installed_plugins().unwrap();
run(installer.install(&set_up.repository, alias_fixture_package())).unwrap();
assert_eq!(
"alias: Composer\\Package\\CompleteAliasPackage vendor/aliased 2.0.0 of Composer\\Package\\CompletePackage 1.0.0\n\
alias description: an aliased package\n\
alias self-version: no\n\
alias root-flag: no\n\
alias root-flag: yes\n\
root: Composer\\Package\\RootAliasPackage dummy/root 1.1.0 of Composer\\Package\\RootPackage 1.0.0\n\
root aliasOf identity: same\n\
root minimum stability: stable\n\
built: Composer\\Package\\CompleteAliasPackage vendor/aliased 9.9.9 of Composer\\Package\\CompletePackage 1.0.0\n",
set_up.io.borrow().get_output()
);
// The flag the plugin set landed on the Rust-side entity, not on a child-side copy.
let alias: shirabe::package::AliasPackageHandle = alias.into();
assert!(alias.is_root_package_alias());
// `RootAliasPackage`'s setters write through to the package it aliases.
assert_eq!("dev", real_root.get_minimum_stability());
assert_eq!(
Some(&PhpMixed::String("alias-v1".to_string())),
real_root.get_extra().get("seen-by")
);
}
|