aboutsummaryrefslogtreecommitdiffhomepage
path: root/crates/shirabe/tests/package/complete_package_test.rs
diff options
context:
space:
mode:
authornsfisis <nsfisis@gmail.com>2026-06-21 01:07:32 +0900
committernsfisis <nsfisis@gmail.com>2026-06-21 01:07:32 +0900
commite59a53e31ce8e864853ee4e0fbdda51ca04a9d0b (patch)
treea60ba1945678481402ae49e4d2b95710bd7f38d2 /crates/shirabe/tests/package/complete_package_test.rs
parenta6eec8ceb2f2f400fea28193fb1608b4bc968016 (diff)
downloadphp-shirabe-e59a53e31ce8e864853ee4e0fbdda51ca04a9d0b.tar.gz
php-shirabe-e59a53e31ce8e864853ee4e0fbdda51ca04a9d0b.tar.zst
php-shirabe-e59a53e31ce8e864853ee4e0fbdda51ca04a9d0b.zip
test(package): port CompletePackageTest
All four cases pass: naming/versioning/marshalling semantics across the versioning-scheme provider, and target-dir normalization. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Diffstat (limited to 'crates/shirabe/tests/package/complete_package_test.rs')
-rw-r--r--crates/shirabe/tests/package/complete_package_test.rs78
1 files changed, 78 insertions, 0 deletions
diff --git a/crates/shirabe/tests/package/complete_package_test.rs b/crates/shirabe/tests/package/complete_package_test.rs
index b47a4aa..4414aba 100644
--- a/crates/shirabe/tests/package/complete_package_test.rs
+++ b/crates/shirabe/tests/package/complete_package_test.rs
@@ -1 +1,79 @@
//! ref: composer/tests/Composer/Test/Package/CompletePackageTest.php
+
+use shirabe::package::package::Package;
+use shirabe::package::package_interface::PackageInterface;
+use shirabe_semver::version_parser::VersionParser;
+
+/// Memory package naming, versioning, and marshalling semantics provider
+/// demonstrates several versioning schemes
+fn provider_versioning_schemes() -> Vec<(&'static str, &'static str)> {
+ vec![
+ ("foo", "1-beta"),
+ ("node", "0.5.6"),
+ ("li3", "0.10"),
+ ("mongodb_odm", "1.0.0BETA3"),
+ ("DoctrineCommon", "2.2.0-DEV"),
+ ]
+}
+
+#[test]
+fn test_package_has_expected_naming_semantics() {
+ for (name, version) in provider_versioning_schemes() {
+ let version_parser = VersionParser;
+ let norm_version = version_parser.normalize(version, None).unwrap();
+ let package = Package::new(name.to_string(), norm_version, version.to_string());
+ assert_eq!(name.to_ascii_lowercase(), package.get_name());
+ }
+}
+
+#[test]
+fn test_package_has_expected_versioning_semantics() {
+ for (name, version) in provider_versioning_schemes() {
+ let version_parser = VersionParser;
+ let norm_version = version_parser.normalize(version, None).unwrap();
+ let package = Package::new(name.to_string(), norm_version.clone(), version.to_string());
+ assert_eq!(version, package.get_pretty_version());
+ assert_eq!(norm_version, package.get_version());
+ }
+}
+
+#[test]
+fn test_package_has_expected_marshalling_semantics() {
+ for (name, version) in provider_versioning_schemes() {
+ let version_parser = VersionParser;
+ let norm_version = version_parser.normalize(version, None).unwrap();
+ let package = Package::new(name.to_string(), norm_version.clone(), version.to_string());
+ assert_eq!(
+ format!("{}-{}", name.to_ascii_lowercase(), norm_version),
+ package.to_string()
+ );
+ }
+}
+
+#[test]
+fn test_get_target_dir() {
+ let mut package = Package::new("a".to_string(), "1.0.0.0".to_string(), "1.0".to_string());
+
+ assert_eq!(None, package.get_target_dir());
+
+ package.set_target_dir(Some("./../foo/".to_string()));
+ assert_eq!(Some("foo/".to_string()), package.get_target_dir());
+
+ package.set_target_dir(Some("foo/../../../bar/".to_string()));
+ assert_eq!(Some("foo/bar/".to_string()), package.get_target_dir());
+
+ package.set_target_dir(Some("../..".to_string()));
+ assert_eq!(Some(String::new()), package.get_target_dir());
+
+ package.set_target_dir(Some("..".to_string()));
+ assert_eq!(Some(String::new()), package.get_target_dir());
+
+ package.set_target_dir(Some("/..".to_string()));
+ assert_eq!(Some(String::new()), package.get_target_dir());
+
+ package.set_target_dir(Some("/foo/..".to_string()));
+ assert_eq!(Some("foo/".to_string()), package.get_target_dir());
+
+ package.set_target_dir(Some("/foo/..//bar".to_string()));
+ assert_eq!(Some("foo/bar".to_string()), package.get_target_dir());
+}