aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authornsfisis <nsfisis@gmail.com>2026-06-21 02:54:58 +0900
committernsfisis <nsfisis@gmail.com>2026-06-21 02:54:58 +0900
commitb02da675a0ea1e9c7349be2241bd317eb51c98d4 (patch)
treefa46d459df67e4087bcc92567dda0e68b6cfec40
parent139045e721ff04b2e07e9fdf5bf62ed2ab6b6f4d (diff)
downloadphp-shirabe-b02da675a0ea1e9c7349be2241bd317eb51c98d4.tar.gz
php-shirabe-b02da675a0ea1e9c7349be2241bd317eb51c98d4.tar.zst
php-shirabe-b02da675a0ea1e9c7349be2241bd317eb51c98d4.zip
test(platform): port VersionTest
Version::parse_openssl/parse_libjpeg/parse_zoneinfo_version rely on PCRE patterns that compile_php_pattern in the php-shim cannot yet parse, so the cases are #[ignore] while the test code compiles. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
-rw-r--r--crates/shirabe/tests/platform/main.rs1
-rw-r--r--crates/shirabe/tests/platform/version_test.rs107
2 files changed, 108 insertions, 0 deletions
diff --git a/crates/shirabe/tests/platform/main.rs b/crates/shirabe/tests/platform/main.rs
index a43e54a..ec5caf5 100644
--- a/crates/shirabe/tests/platform/main.rs
+++ b/crates/shirabe/tests/platform/main.rs
@@ -1 +1,2 @@
mod runtime_test;
+mod version_test;
diff --git a/crates/shirabe/tests/platform/version_test.rs b/crates/shirabe/tests/platform/version_test.rs
index fc247f6..aada5f9 100644
--- a/crates/shirabe/tests/platform/version_test.rs
+++ b/crates/shirabe/tests/platform/version_test.rs
@@ -1 +1,108 @@
//! ref: composer/tests/Composer/Test/Platform/VersionTest.php
+
+use shirabe::platform::version::Version;
+use shirabe_semver::version_parser::VersionParser;
+
+fn provide_openssl_versions() -> Vec<(&'static str, &'static str, bool, Option<&'static str>)> {
+ vec![
+ // Generated
+ ("1.2.3", "1.2.3.0", false, None),
+ ("1.2.3-beta3", "1.2.3.0-beta3", false, None),
+ ("1.2.3-beta3-dev", "1.2.3.0-beta3-dev", false, None),
+ ("1.2.3-beta3-fips", "1.2.3.0-beta3", true, None),
+ ("1.2.3-beta3-fips-dev", "1.2.3.0-beta3-dev", true, None),
+ ("1.2.3-dev", "1.2.3.0-dev", false, None),
+ ("1.2.3-fips", "1.2.3.0", true, None),
+ ("1.2.3-fips-beta3", "1.2.3.0-beta3", true, None),
+ ("1.2.3-fips-beta3-dev", "1.2.3.0-beta3-dev", true, None),
+ ("1.2.3-fips-dev", "1.2.3.0-dev", true, None),
+ ("1.2.3-pre2", "1.2.3.0-alpha2", false, None),
+ ("1.2.3-pre2-dev", "1.2.3.0-alpha2-dev", false, None),
+ ("1.2.3-pre2-fips", "1.2.3.0-alpha2", true, None),
+ ("1.2.3-pre2-fips-dev", "1.2.3.0-alpha2-dev", true, None),
+ ("1.2.3a", "1.2.3.1", false, None),
+ ("1.2.3a-beta3", "1.2.3.1-beta3", false, None),
+ ("1.2.3a-beta3-dev", "1.2.3.1-beta3-dev", false, None),
+ ("1.2.3a-dev", "1.2.3.1-dev", false, None),
+ ("1.2.3a-dev-fips", "1.2.3.1-dev", true, None),
+ ("1.2.3a-fips", "1.2.3.1", true, None),
+ ("1.2.3a-fips-beta3", "1.2.3.1-beta3", true, None),
+ ("1.2.3a-fips-dev", "1.2.3.1-dev", true, None),
+ ("1.2.3beta3", "1.2.3.0-beta3", false, None),
+ ("1.2.3beta3-dev", "1.2.3.0-beta3-dev", false, None),
+ ("1.2.3zh", "1.2.3.34", false, None),
+ ("1.2.3zh-dev", "1.2.3.34-dev", false, None),
+ ("1.2.3zh-fips", "1.2.3.34", true, None),
+ ("1.2.3zh-fips-dev", "1.2.3.34-dev", true, None),
+ // Additional cases
+ ("1.2.3zh-fips-rc3", "1.2.3.34-rc3", true, Some("1.2.3.34-RC3")),
+ ("1.2.3zh-alpha10-fips", "1.2.3.34-alpha10", true, None),
+ ("1.1.1l (Schannel)", "1.1.1.12", false, None),
+ // Check that alphabetical patch levels overflow correctly
+ ("1.2.3", "1.2.3.0", false, None),
+ ("1.2.3a", "1.2.3.1", false, None),
+ ("1.2.3z", "1.2.3.26", false, None),
+ ("1.2.3za", "1.2.3.27", false, None),
+ ("1.2.3zy", "1.2.3.51", false, None),
+ ("1.2.3zz", "1.2.3.52", false, None),
+ // 3.x
+ ("3.0.0", "3.0.0", false, Some("3.0.0.0")),
+ ("3.2.4-dev", "3.2.4-dev", false, Some("3.2.4.0-dev")),
+ ]
+}
+
+#[test]
+#[ignore = "compile_php_pattern in the php-shim cannot yet parse Version's PCRE patterns"]
+fn test_parse_openssl_versions() {
+ for (input, parsed_version, fips_expected, normalized_version) in provide_openssl_versions() {
+ let mut is_fips = false;
+ assert_eq!(
+ Some(parsed_version.to_string()),
+ Version::parse_openssl(input, &mut is_fips)
+ );
+ assert_eq!(fips_expected, is_fips);
+
+ let normalized_version = normalized_version.unwrap_or(parsed_version);
+ assert_eq!(
+ normalized_version,
+ VersionParser.normalize(parsed_version, None).unwrap()
+ );
+ }
+}
+
+#[test]
+#[ignore = "compile_php_pattern in the php-shim cannot yet parse Version's PCRE patterns"]
+fn test_parse_libjpeg_version() {
+ let cases = [
+ ("9", "9.0"),
+ ("9a", "9.1"),
+ ("9b", "9.2"),
+ // Never seen in the wild, just for overflow correctness
+ ("9za", "9.27"),
+ ];
+
+ for (input, parsed_version) in cases {
+ assert_eq!(
+ Some(parsed_version.to_string()),
+ Version::parse_libjpeg(input)
+ );
+ }
+}
+
+#[test]
+#[ignore = "compile_php_pattern in the php-shim cannot yet parse Version's PCRE patterns"]
+fn test_parse_zoneinfo_version() {
+ let cases = [
+ ("2019c", "2019.3"),
+ ("2020a", "2020.1"),
+ // Never happened so far but fixate overflow behavior
+ ("2020za", "2020.27"),
+ ];
+
+ for (input, parsed_version) in cases {
+ assert_eq!(
+ Some(parsed_version.to_string()),
+ Version::parse_zoneinfo_version(input)
+ );
+ }
+}