diff options
| author | nsfisis <nsfisis@gmail.com> | 2026-06-21 02:54:58 +0900 |
|---|---|---|
| committer | nsfisis <nsfisis@gmail.com> | 2026-06-21 02:54:58 +0900 |
| commit | b02da675a0ea1e9c7349be2241bd317eb51c98d4 (patch) | |
| tree | fa46d459df67e4087bcc92567dda0e68b6cfec40 /crates/shirabe/tests | |
| parent | 139045e721ff04b2e07e9fdf5bf62ed2ab6b6f4d (diff) | |
| download | php-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>
Diffstat (limited to 'crates/shirabe/tests')
| -rw-r--r-- | crates/shirabe/tests/platform/main.rs | 1 | ||||
| -rw-r--r-- | crates/shirabe/tests/platform/version_test.rs | 107 |
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) + ); + } +} |
