mirror of
https://github.com/storytold/photocraft.git
synced 2026-10-19 11:15:24 +02:00
* Add rendering policy with legacy preference migration and safe adapter selection * Add rendering mode preferences and GPU fallback recovery warning * Complete CPU fallback recovery and validate rendering mode UI * Simplify GPU recovery and reuse preference persistence * Rendering modes: rebase onto the preferences merge/retry save path; drop docs screenshots save_preferences now writes through write_prefs (merging other instances' changes) and only marks the revision saved when the write succeeds, so a failed recovery choice is still retried. Removes a leftover diff3 marker in es.tsv, the docs/images/rendering-*.png screenshots and their ATTRIBUTION row (no binary assets in the repo), and regenerates docs/scorecard.md for the new performance.renderingMode preference. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> --------- Co-authored-by: Brandon Thomas <echelon@gmail.com> Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
38 lines
1.6 KiB
Rust
38 lines
1.6 KiB
Rust
//! Rendering policy migration and command validation, without a graphics device.
|
|
use photocraft_engine::prefs::{GpuBackend, Preferences, RenderingMode};
|
|
use serde_json::json;
|
|
|
|
#[test]
|
|
fn old_preferences_preserve_cpu_choices() {
|
|
for old in [json!({"useGpu": false}), json!({"gpuBackend": "cpu"})] {
|
|
let p: Preferences = serde_json::from_value(json!({"performance": old})).unwrap();
|
|
assert_eq!(p.performance.effective_rendering_mode(), RenderingMode::Cpu);
|
|
}
|
|
assert_eq!(Preferences::default().performance.effective_rendering_mode(), RenderingMode::Auto);
|
|
}
|
|
|
|
#[test]
|
|
fn explicit_choices_override_legacy_flags_and_round_trip() {
|
|
let mut p = Preferences::default();
|
|
p.performance.use_gpu = false;
|
|
p.performance.gpu_backend = GpuBackend::Cpu;
|
|
for mode in [RenderingMode::Auto, RenderingMode::Gpu, RenderingMode::Cpu] {
|
|
p.set("performance.renderingMode", json!(mode.name())).unwrap();
|
|
assert_eq!(p.performance.effective_rendering_mode(), mode);
|
|
let restored: Preferences = serde_json::from_value(p.to_json()).unwrap();
|
|
assert_eq!(restored.performance.effective_rendering_mode(), mode);
|
|
}
|
|
}
|
|
|
|
#[test]
|
|
fn malformed_policy_is_rejected_without_changing_preferences() {
|
|
let mut p = Preferences::default();
|
|
let before = p.to_json();
|
|
for invalid in [json!("quantum"), json!(7), json!({}), json!(true)] {
|
|
assert!(p.set("performance.renderingMode", invalid).is_err());
|
|
assert_eq!(p.to_json(), before);
|
|
}
|
|
p.reset(Some("performance.renderingMode")).unwrap();
|
|
assert_eq!(p.performance.rendering_mode, None);
|
|
}
|