diff options
Diffstat (limited to 'crates/shirabe/tests/package/dumper/array_dumper_test.rs')
| -rw-r--r-- | crates/shirabe/tests/package/dumper/array_dumper_test.rs | 77 |
1 files changed, 77 insertions, 0 deletions
diff --git a/crates/shirabe/tests/package/dumper/array_dumper_test.rs b/crates/shirabe/tests/package/dumper/array_dumper_test.rs index a6647c1..ae13679 100644 --- a/crates/shirabe/tests/package/dumper/array_dumper_test.rs +++ b/crates/shirabe/tests/package/dumper/array_dumper_test.rs @@ -1 +1,78 @@ //! ref: composer/tests/Composer/Test/Package/Dumper/ArrayDumperTest.php + +use indexmap::IndexMap; +use shirabe::package::ArrayDumper; +use shirabe::package::handle::{CompletePackageHandle, RootPackageHandle}; +use shirabe_php_shim::PhpMixed; +use shirabe_semver::version_parser::VersionParser; + +fn complete_package() -> CompletePackageHandle { + let norm = VersionParser.normalize("1.0.0", None).unwrap(); + CompletePackageHandle::new("dummy/pkg".to_string(), norm, "1.0.0".to_string()) +} + +fn root_package() -> RootPackageHandle { + let norm = VersionParser.normalize("1.0.0", None).unwrap(); + RootPackageHandle::new("dummy/pkg".to_string(), norm, "1.0.0".to_string()) +} + +#[test] +fn test_required_information() { + let config = ArrayDumper::new().dump(complete_package().into()); + + let mut expected: IndexMap<String, PhpMixed> = IndexMap::new(); + expected.insert("name".to_string(), PhpMixed::String("dummy/pkg".to_string())); + expected.insert("version".to_string(), PhpMixed::String("1.0.0".to_string())); + expected.insert( + "version_normalized".to_string(), + PhpMixed::String("1.0.0.0".to_string()), + ); + expected.insert("type".to_string(), PhpMixed::String("library".to_string())); + + assert_eq!(expected, config); +} + +#[test] +fn test_root_package() { + let package = root_package(); + package.set_minimum_stability("dev".to_string()); + + let config = ArrayDumper::new().dump(package.into()); + + assert_eq!( + Some(&PhpMixed::String("dev".to_string())), + config.get("minimum-stability") + ); +} + +#[test] +fn test_dump_abandoned() { + let package = complete_package(); + package.set_abandoned(PhpMixed::Bool(true)); + + let config = ArrayDumper::new().dump(package.into()); + + assert_eq!(Some(&PhpMixed::Bool(true)), config.get("abandoned")); +} + +#[test] +fn test_dump_abandoned_replacement() { + let package = complete_package(); + package.set_abandoned(PhpMixed::String("foo/bar".to_string())); + + let config = ArrayDumper::new().dump(package.into()); + + assert_eq!( + Some(&PhpMixed::String("foo/bar".to_string())), + config.get("abandoned") + ); +} + +// PHP drives ~25 heterogeneous setters dynamically (set{ucfirst(method)}) across strings, +// arrays, a DateTime and Link maps, then checks the corresponding dumped key. Reproducing +// that dynamic dispatch faithfully would require per-case wiring for every property type. +#[test] +#[ignore = "exercises ~25 dynamic set<Property> calls over heterogeneous value types; not reproduced here"] +fn test_keys() { + todo!() +} |
