diff --git a/crates/design/src/color/state.rs b/crates/design/src/color/state.rs index 8130105..3791046 100644 --- a/crates/design/src/color/state.rs +++ b/crates/design/src/color/state.rs @@ -127,4 +127,33 @@ mod tests { assert!(ratio > 1.5, "禁用态对比度过低:{ratio}"); assert!(ratio < 4.5, "禁用态不该和正文一样醒目:{ratio}"); } + + /// 两族 α 的**令牌层钉值**(M86):期望值硬编码,不从被测常量取——否则改坏常量也照样绿。 + /// + /// 出处(AAR `material3-android-1.4.0` 的 ``): + /// `*ButtonTokens.DisabledContainerOpacity = 0.1f`(按钮族)与 + /// `AssistChipTokens.FlatDisabledOutlineOpacity` / `SliderTokens.DisabledInactiveTrackOpacity` / + /// `SwitchTokens.DisabledTrackOpacity = 0.12f`(面状控件族)。 + #[test] + fn disabled_alpha_classes_are_pinned_at_the_token_layer() { + const EXPECTED_BUTTON: f32 = 0.10; + const EXPECTED_SURFACE: f32 = 0.12; + const EXPECTED_CONTENT: f32 = 0.38; + let button = DISABLED_CONTAINER_ALPHA; + let surface = DISABLED_SURFACE_ALPHA; + let content = DISABLED_CONTENT_ALPHA; + assert_eq!( + button, EXPECTED_BUTTON, + "按钮族禁用容器 α 必须是官方 0.1f(*ButtonTokens.DisabledContainerOpacity)" + ); + assert_eq!( + surface, EXPECTED_SURFACE, + "面状控件族 α 必须是官方 0.12f(chip 描边 / slider 轨道 / switch 轨道)" + ); + assert_eq!(content, EXPECTED_CONTENT, "禁用内容 0.38f"); + assert!( + surface > button, + "两族必须可区分({surface} > {button});合成一个数就是 M86 要防的回归" + ); + } }