diff options
author | 2025-03-21 07:53:39 -0700 | |
---|---|---|
committer | 2025-03-21 07:53:39 -0700 | |
commit | 888136f2c1a18d5a53ec7baae51e540264121caf (patch) | |
tree | 74770fc511d8afa1488bbdf344c39aa72ed0ef0a /tools | |
parent | c6ca9f5f9c64589254afa8e8aa7c3f9f20b4656f (diff) | |
parent | 32233fa09f3076cd986ef5f090538310671f78ce (diff) |
Merge "aconfig: Parse string to full sdk version" into main am: 32233fa09f
Original change: https://android-review.googlesource.com/c/platform/build/+/3547820
Change-Id: Icc979256c02496e71d1379510b2a02f8636e3aa7
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
Diffstat (limited to 'tools')
-rw-r--r-- | tools/aconfig/convert_finalized_flags/src/lib.rs | 99 |
1 files changed, 99 insertions, 0 deletions
diff --git a/tools/aconfig/convert_finalized_flags/src/lib.rs b/tools/aconfig/convert_finalized_flags/src/lib.rs index d79c509e8f..335a31b046 100644 --- a/tools/aconfig/convert_finalized_flags/src/lib.rs +++ b/tools/aconfig/convert_finalized_flags/src/lib.rs @@ -26,6 +26,8 @@ use std::collections::{HashMap, HashSet}; use std::fs; use std::io::{self, BufRead}; +const SDK_INT_MULTIPLIER: u32 = 100_000; + /// Just the fully qualified flag name (package_name.flag_name). #[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq, Hash)] pub struct FinalizedFlag { @@ -81,6 +83,24 @@ impl FinalizedFlagMap { } } +#[allow(dead_code)] // TODO: b/378936061: Use with SDK_INT_FULL check. +fn parse_full_version(version: String) -> Result<u32> { + let (major, minor) = if let Some(decimal_index) = version.find('.') { + (version[..decimal_index].parse::<u32>()?, version[decimal_index + 1..].parse::<u32>()?) + } else { + (version.parse::<u32>()?, 0) + }; + + if major >= 21474 { + return Err(anyhow!("Major version too large, must be less than 21474.")); + } + if minor >= SDK_INT_MULTIPLIER { + return Err(anyhow!("Minor version too large, must be less than {}.", SDK_INT_MULTIPLIER)); + } + + Ok(major * SDK_INT_MULTIPLIER + minor) +} + const EXTENDED_FLAGS_LIST_35: &str = "extended_flags_list_35.txt"; /// Converts a string to an int. Will parse to int even if the string is "X.0". @@ -461,4 +481,83 @@ mod tests { "Provided incorrect file, must be extended_flags_list_35.txt" ); } + + #[test] + fn test_parse_full_version_correct_input_major_dot_minor() { + let version = parse_full_version("12.34".to_string()); + + assert!(version.is_ok()); + assert_eq!(version.unwrap(), 1_200_034); + } + + #[test] + fn test_parse_full_version_correct_input_omit_dot_minor() { + let version = parse_full_version("1234".to_string()); + + assert!(version.is_ok()); + assert_eq!(version.unwrap(), 123_400_000); + } + + #[test] + fn test_parse_full_version_incorrect_input_empty_string() { + let version = parse_full_version("".to_string()); + + assert!(version.is_err()); + } + + #[test] + fn test_parse_full_version_incorrect_input_no_numbers_in_string() { + let version = parse_full_version("hello".to_string()); + + assert!(version.is_err()); + } + + #[test] + fn test_parse_full_version_incorrect_input_unexpected_patch_version() { + let version = parse_full_version("1.2.3".to_string()); + + assert!(version.is_err()); + } + + #[test] + fn test_parse_full_version_incorrect_input_leading_dot_missing_major_version() { + let version = parse_full_version(".1234".to_string()); + + assert!(version.is_err()); + } + + #[test] + fn test_parse_full_version_incorrect_input_trailing_dot_missing_minor_version() { + let version = parse_full_version("1234.".to_string()); + + assert!(version.is_err()); + } + + #[test] + fn test_parse_full_version_incorrect_input_negative_major_version() { + let version = parse_full_version("-12.34".to_string()); + + assert!(version.is_err()); + } + + #[test] + fn test_parse_full_version_incorrect_input_negative_minor_version() { + let version = parse_full_version("12.-34".to_string()); + + assert!(version.is_err()); + } + + #[test] + fn test_parse_full_version_incorrect_input_major_version_too_large() { + let version = parse_full_version("40000.1".to_string()); + + assert!(version.is_err()); + } + + #[test] + fn test_parse_full_version_incorrect_input_minor_version_too_large() { + let version = parse_full_version("3.99999999".to_string()); + + assert!(version.is_err()); + } } |