aboutsummaryrefslogtreecommitdiffhomepage
path: root/crates
diff options
context:
space:
mode:
authornsfisis <nsfisis@gmail.com>2026-06-21 04:48:21 +0900
committernsfisis <nsfisis@gmail.com>2026-06-21 04:48:21 +0900
commitfa0585e9d54f77cc2bea0329cee81b71201fd3b7 (patch)
tree5ab01dd7ed348c75b6ced81d8d11c910018b6ccc /crates
parentb55b030fb6a9c0b31a2ba16f708358e37949a323 (diff)
downloadphp-shirabe-fa0585e9d54f77cc2bea0329cee81b71201fd3b7.tar.gz
php-shirabe-fa0585e9d54f77cc2bea0329cee81b71201fd3b7.tar.zst
php-shirabe-fa0585e9d54f77cc2bea0329cee81b71201fd3b7.zip
test(package): port ArrayDumperTest
requiredInformation/rootPackage/dumpAbandoned(+replacement) pass; testKeys drives ~25 dynamic set<Property> calls over heterogeneous types and is stubbed. Wires up the package/dumper test submodule. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Diffstat (limited to 'crates')
-rw-r--r--crates/shirabe/tests/package/dumper/array_dumper_test.rs77
-rw-r--r--crates/shirabe/tests/package/dumper/mod.rs1
-rw-r--r--crates/shirabe/tests/package/main.rs1
3 files changed, 79 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!()
+}
diff --git a/crates/shirabe/tests/package/dumper/mod.rs b/crates/shirabe/tests/package/dumper/mod.rs
new file mode 100644
index 0000000..76e1f35
--- /dev/null
+++ b/crates/shirabe/tests/package/dumper/mod.rs
@@ -0,0 +1 @@
+mod array_dumper_test;
diff --git a/crates/shirabe/tests/package/main.rs b/crates/shirabe/tests/package/main.rs
index 951983f..d3e91ab 100644
--- a/crates/shirabe/tests/package/main.rs
+++ b/crates/shirabe/tests/package/main.rs
@@ -4,6 +4,7 @@ mod test_case;
mod archiver;
mod base_package_test;
mod complete_package_test;
+mod dumper;
mod loader;
mod root_alias_package_test;
mod version;