style: clear clippy warnings from the stealth/adaptive work
- snapshot: make collect_fingerprints private (TreeNode is private, so a pub(super) fn leaked a more-private type) - adaptive: if-let instead of single-arm match in attr_score - stealth: move timezone test module to end of file (items-after-test-module) No behavior change. Pre-release cleanup.
This commit is contained in:
@@ -152,15 +152,13 @@ fn attr_score(base: &BTreeMap<String, String>, cand: &BTreeMap<String, String>)
|
|||||||
for name in names {
|
for name in names {
|
||||||
let w = attr_weight(name);
|
let w = attr_weight(name);
|
||||||
total += w;
|
total += w;
|
||||||
match (base.get(name), cand.get(name)) {
|
// present on only one side → no credit
|
||||||
(Some(a), Some(b)) => {
|
if let (Some(a), Some(b)) = (base.get(name), cand.get(name)) {
|
||||||
if name == "class" {
|
if name == "class" {
|
||||||
got += w * token_jaccard(a, b);
|
got += w * token_jaccard(a, b);
|
||||||
} else if a == b {
|
} else if a == b {
|
||||||
got += w;
|
got += w;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
_ => {} // present on only one side → no credit
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if total == 0.0 {
|
if total == 0.0 {
|
||||||
|
|||||||
@@ -226,7 +226,7 @@ fn build_ax_fingerprint(tree_nodes: &[TreeNode], idx: usize) -> ElementFingerpri
|
|||||||
/// Collect AX fingerprints for every node that has a backend node id, used as the
|
/// Collect AX fingerprints for every node that has a backend node id, used as the
|
||||||
/// candidate set when relocating a stale @ref. Reuses the same extraction as the
|
/// candidate set when relocating a stale @ref. Reuses the same extraction as the
|
||||||
/// baseline so the two are scored in the same space.
|
/// baseline so the two are scored in the same space.
|
||||||
pub(super) fn collect_fingerprints(tree_nodes: &[TreeNode]) -> Vec<(i64, ElementFingerprint)> {
|
fn collect_fingerprints(tree_nodes: &[TreeNode]) -> Vec<(i64, ElementFingerprint)> {
|
||||||
tree_nodes
|
tree_nodes
|
||||||
.iter()
|
.iter()
|
||||||
.enumerate()
|
.enumerate()
|
||||||
|
|||||||
+40
-40
@@ -196,46 +196,6 @@ fn resolve_timezone(locale: Option<&str>) -> Option<String> {
|
|||||||
/// Best-effort IANA timezone for a locale. Used only for
|
/// Best-effort IANA timezone for a locale. Used only for
|
||||||
/// `AGENT_BROWSER_TIMEZONE=auto`; unknown locales return `None` so the real
|
/// `AGENT_BROWSER_TIMEZONE=auto`; unknown locales return `None` so the real
|
||||||
/// timezone is left untouched rather than guessing a wrong one.
|
/// timezone is left untouched rather than guessing a wrong one.
|
||||||
#[cfg(test)]
|
|
||||||
mod timezone_tests {
|
|
||||||
use super::{locale_default_timezone, resolve_timezone};
|
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn maps_common_locales_case_insensitively() {
|
|
||||||
assert_eq!(locale_default_timezone("en-US"), Some("America/New_York"));
|
|
||||||
assert_eq!(locale_default_timezone("ja-JP"), Some("Asia/Tokyo"));
|
|
||||||
assert_eq!(locale_default_timezone("zh-CN"), Some("Asia/Shanghai"));
|
|
||||||
assert_eq!(locale_default_timezone("ZH-TW"), Some("Asia/Taipei"));
|
|
||||||
assert_eq!(locale_default_timezone("ja"), Some("Asia/Tokyo"));
|
|
||||||
}
|
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn unknown_locale_returns_none() {
|
|
||||||
assert_eq!(locale_default_timezone("xx-YY"), None);
|
|
||||||
assert_eq!(locale_default_timezone(""), None);
|
|
||||||
}
|
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn resolve_timezone_honors_env() {
|
|
||||||
// Serialized via a single test to avoid cross-test env races on this key.
|
|
||||||
std::env::remove_var("AGENT_BROWSER_TIMEZONE");
|
|
||||||
assert_eq!(resolve_timezone(Some("en-US")), None);
|
|
||||||
|
|
||||||
std::env::set_var("AGENT_BROWSER_TIMEZONE", "Europe/Berlin");
|
|
||||||
assert_eq!(resolve_timezone(None), Some("Europe/Berlin".to_string()));
|
|
||||||
|
|
||||||
std::env::set_var("AGENT_BROWSER_TIMEZONE", " ");
|
|
||||||
assert_eq!(resolve_timezone(Some("en-US")), None);
|
|
||||||
|
|
||||||
std::env::set_var("AGENT_BROWSER_TIMEZONE", "auto");
|
|
||||||
assert_eq!(resolve_timezone(Some("ja-JP")), Some("Asia/Tokyo".to_string()));
|
|
||||||
assert_eq!(resolve_timezone(Some("xx-YY")), None);
|
|
||||||
assert_eq!(resolve_timezone(None), None);
|
|
||||||
|
|
||||||
std::env::remove_var("AGENT_BROWSER_TIMEZONE");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fn locale_default_timezone(locale: &str) -> Option<&'static str> {
|
fn locale_default_timezone(locale: &str) -> Option<&'static str> {
|
||||||
let tz = match locale.to_ascii_lowercase().as_str() {
|
let tz = match locale.to_ascii_lowercase().as_str() {
|
||||||
"en-us" => "America/New_York",
|
"en-us" => "America/New_York",
|
||||||
@@ -372,3 +332,43 @@ fn build_ua_metadata(ua: &str, locale: Option<&str>) -> serde_json::Value {
|
|||||||
"wow64": false,
|
"wow64": false,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
mod timezone_tests {
|
||||||
|
use super::{locale_default_timezone, resolve_timezone};
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn maps_common_locales_case_insensitively() {
|
||||||
|
assert_eq!(locale_default_timezone("en-US"), Some("America/New_York"));
|
||||||
|
assert_eq!(locale_default_timezone("ja-JP"), Some("Asia/Tokyo"));
|
||||||
|
assert_eq!(locale_default_timezone("zh-CN"), Some("Asia/Shanghai"));
|
||||||
|
assert_eq!(locale_default_timezone("ZH-TW"), Some("Asia/Taipei"));
|
||||||
|
assert_eq!(locale_default_timezone("ja"), Some("Asia/Tokyo"));
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn unknown_locale_returns_none() {
|
||||||
|
assert_eq!(locale_default_timezone("xx-YY"), None);
|
||||||
|
assert_eq!(locale_default_timezone(""), None);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn resolve_timezone_honors_env() {
|
||||||
|
// Serialized via a single test to avoid cross-test env races on this key.
|
||||||
|
std::env::remove_var("AGENT_BROWSER_TIMEZONE");
|
||||||
|
assert_eq!(resolve_timezone(Some("en-US")), None);
|
||||||
|
|
||||||
|
std::env::set_var("AGENT_BROWSER_TIMEZONE", "Europe/Berlin");
|
||||||
|
assert_eq!(resolve_timezone(None), Some("Europe/Berlin".to_string()));
|
||||||
|
|
||||||
|
std::env::set_var("AGENT_BROWSER_TIMEZONE", " ");
|
||||||
|
assert_eq!(resolve_timezone(Some("en-US")), None);
|
||||||
|
|
||||||
|
std::env::set_var("AGENT_BROWSER_TIMEZONE", "auto");
|
||||||
|
assert_eq!(resolve_timezone(Some("ja-JP")), Some("Asia/Tokyo".to_string()));
|
||||||
|
assert_eq!(resolve_timezone(Some("xx-YY")), None);
|
||||||
|
assert_eq!(resolve_timezone(None), None);
|
||||||
|
|
||||||
|
std::env::remove_var("AGENT_BROWSER_TIMEZONE");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user