//! ref: composer/tests/Composer/Test/Platform/VersionTest.php use shirabe::platform::version::Version; use shirabe_semver::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] 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] 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] 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) ); } }