diff options
| -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) + ); + } +} |
