**p1-1**:新增 `resolved_image_scheme_keeps_tinting_from_the_seed`——走产品公开入口
`resolve_source(Some(ImageInput::pixels(..)), None, Some(CardKey::Sky/Teal), Light)`,断言
`provenance.level == Level::BackgroundImage`、`surface == #FFF8F7`(暖白,跟着图走)、色相
≈22°(远离固定的 239.51°)、两张卡下主色与底色都相同、且与天蓝卡的 surface 不同。
上一版只有 `image_scheme_ignores_the_preset_neutral_hue`,它测的是 `Seed::scheme` 生成器层:
把 `resolve::try_level` 的取色分支改成固定中性时 8 条测试全绿(复审已实证)。那条保留并补了
⚠️ 注明「不覆盖接线」,避免下次又把生成器层当成接线守护。
**小修 1**:`every_card_scheme_meets_wcag_aa_under_the_fixed_neutral` 的 on-surface/surface
量级断言按 `flavor` 分开(原来 `(16.30..=16.40) || (14.28..=14.36)`,浅/深两值互换也能过)。
**小修 2**:测试文件拆分以守住 ≤400 行——`tests/card_neutral.rs`(crate 根,400 行)+
`tests/card_neutral/common.rs`(改前路径复原 / 模式列表 / 色相环距离,27 行)+
`tests/card_neutral/dump.rs`(出图数据导出 + 改前/改后实测表,68 行,无断言)。crate 根的子模块
默认在 `tests/` 下找,所以用 `#[path]` 指明目录。
`cargo test -p unlucky-design --test card_neutral` → 9 passed(8 + 新 1 条)。
28 lines
1.1 KiB
Rust
28 lines
1.1 KiB
Rust
//! `card_neutral` 测试组共用的帮手:改前路径的复原、模式列表、色相环距离。
|
|
//!
|
|
//! 拆成子模块是为了单文件 ≤400 行的纪律(`card_neutral.rs` 是 crate 根,`common` / `dump`
|
|
//! 只是它的子模块;cargo 只把 `tests/card_neutral.rs` 当一个 test target)。
|
|
|
|
use unlucky_design::color::{Palettes, Scheme, SchemeFlavor};
|
|
use unlucky_design::palette::Card;
|
|
|
|
/// 改前的路径(M87 及之前):中性调色板跟着种子染色(官方 TonalSpot)。
|
|
///
|
|
/// 产品代码已经不用它了,但公开 API 仍在(取色路径就靠它逐色染色),所以这里能原样复现「改前」。
|
|
pub fn before_d43(card: Card, flavor: SchemeFlavor) -> Scheme {
|
|
Scheme::from_palettes(
|
|
&Palettes::from_seed_with_neutral_chroma(card.seed, card.neutral_chroma),
|
|
flavor,
|
|
)
|
|
}
|
|
|
|
pub fn flavors() -> [SchemeFlavor; 2] {
|
|
[SchemeFlavor::Light, SchemeFlavor::Dark]
|
|
}
|
|
|
|
/// 色相环上的最短距离(度)。
|
|
pub fn hue_gap(a: f64, b: f64) -> f64 {
|
|
let raw = (a - b).abs();
|
|
raw.min(360.0 - raw)
|
|
}
|